diff --git a/Images/Roles.png b/Images/Roles.png index 3b28b80f0..728954cee 100644 Binary files a/Images/Roles.png and b/Images/Roles.png differ diff --git a/README.md b/README.md index 1784b3ac0..06605f602 100644 --- a/README.md +++ b/README.md @@ -11,18 +11,20 @@ Join our [Discord](https://discord.gg/ugyc4EVUYZ) if you have any problems or wa |:----------------------------:|:---------------------------------:|:--------------------------------:|:----------------------------:| | [Blackmailer](#blackmailer) | [Altruist](#altruist) | [Amnesiac](#amnesiac) | [Aftermath](#aftermath) | | [Bomber](#bomber) | [Aurial](#aurial) | [Arsonist](#arsonist) | [Bait](#bait) | -| [Escapist](#escapist) | [Detective](#detective) | [Doomsayer](#doomsayer) | [Button Barry](#button-barry)| -| [Grenadier](#grenadier) | [Engineer](#engineer) | [Executioner](#executioner) | [Diseased](#diseased) | -| [Hypnotist](#hypnotist) | [Haunter](#haunter) | [Guardian Angel](#guardian-angel)| [Disperser](#disperser) | -| [Janitor](#janitor) | [Hunter](#hunter) | [Jester](#jester) | [Double Shot](#double-shot) | -| [Miner](#miner) | [Imitator](#imitator) | [Juggernaut](#juggernaut) | [Flash](#flash) | -| [Morphling](#morphling) | [Investigator](#investigator) | [Phantom](#phantom) | [Frosty](#frosty) | -| [Swooper](#swooper) | [Jailor](#jailor) | [Plaguebearer](#plaguebearer) | [Giant](#giant) | -| [Traitor](#traitor) | [Medic](#medic) | [Soul Collector](#soul-collector)| [Lovers](#lovers) | -| [Undertaker](#undertaker) | [Medium](#medium) | [Survivor](#survivor) | [Multitasker](#multitasker) | -| [Venerer](#venerer) | [Mystic](#mystic) | [The Glitch](#the-glitch) | [Radar](#radar) | -| [Warlock](#warlock) | [Oracle](#oracle) | [Vampire](#vampire) | [Shy](#shy) | -| | [Politician](#politician) | [Werewolf](#werewolf) | [Sixth Sense](#sixth-sense) | +| [Escapist](#escapist) | [Deputy](#deputy) | [Doomsayer](#doomsayer) | [Button Barry](#button-barry)| +| [Grenadier](#grenadier) | [Detective](#detective) | [Executioner](#executioner) | [Diseased](#diseased) | +| [Hypnotist](#hypnotist) | [Engineer](#engineer) | [Guardian Angel](#guardian-angel)| [Disperser](#disperser) | +| [Janitor](#janitor) | [Haunter](#haunter) | [Jester](#jester) | [Double Shot](#double-shot) | +| [Miner](#miner) | [Hunter](#hunter) | [Juggernaut](#juggernaut) | [Flash](#flash) | +| [Morphling](#morphling) | [Imitator](#imitator) | [Phantom](#phantom) | [Frosty](#frosty) | +| [Scavenger](#scavenger) | [Investigator](#investigator) | [Plaguebearer](#plaguebearer) | [Giant](#giant) | +| [Swooper](#swooper) | [Jailor](#jailor) | [Soul Collector](#soul-collector)| [Lovers](#lovers) | +| [Traitor](#traitor) | [Lookout](#lookout) | [Survivor](#survivor) | [Mini](#mini) | +| [Undertaker](#undertaker) | [Medic](#medic) | [The Glitch](#the-glitch) | [Multitasker](#multitasker) | +| [Venerer](#venerer) | [Medium](#medium) | [Vampire](#vampire) | [Radar](#radar) | +| [Warlock](#warlock) | [Mystic](#mystic) | [Werewolf](#werewolf) | [Saboteur](#saboteur) | +| | [Oracle](#oracle) | | [Shy](#shy) | +| | [Politician](#politician) | | [Sixth Sense](#sixth-sense) | | | [Prosecutor](#prosecutor) | | [Sleuth](#sleuth) | | | [Seer](#seer) | | [Tiebreaker](#tiebreaker) | | | [Sheriff](#sheriff) | | [Torch](#torch) | @@ -39,6 +41,7 @@ Join our [Discord](https://discord.gg/ugyc4EVUYZ) if you have any problems or wa # Releases | Among Us - Version| Mod Version | Link | |----------|-------------|-----------------| +| 2024.10.29s & 2024.10.29e | v5.2.0 | [Download](https://github.com/eDonnes124/Town-Of-Us/releases/download/v5.2.0/ToU.v5.2.0.zip) | | 2024.10.29s & 2024.10.29e | v5.1.2 | [Download](https://github.com/eDonnes124/Town-Of-Us/releases/download/v5.1.2/ToU.v5.1.2.zip) | | 2024.9.4s & 2024.9.4e | v5.1.1 | [Download](https://github.com/eDonnes124/Town-Of-Us/releases/download/v5.1.1/ToU.v5.1.1.zip) | | 2024.9.4s & 2024.9.4e | v5.1.0 | [Download](https://github.com/eDonnes124/Town-Of-Us/releases/download/v5.1.0/ToU.v5.1.0.zip) | @@ -106,6 +109,35 @@ Join our [Discord](https://discord.gg/ugyc4EVUYZ) if you have any problems or wa
Changelog
+ v5.2.0 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
v5.1.2 @@ -878,6 +910,20 @@ Every footprint disappears after a set amount of time. | Anonymous Footprint | When enabled, all footprints are grey instead of the player's colors | Toggle | False | | Footprint Vent Visible | Whether footprints near vents are shown | Toggle | False | +----------------------- +## Lookout +### **Team: Crewmates** + +The Lookout is a Crewmate that can watch other players during rounds.\ +During meetings they will see all roles who interact with each watched player. +### Game Options +| Name | Description | Type | Default | +|----------|:-------------:|:------:|:------:| +| Lookout | The percentage probability of the Lookout appearing | Percentage | 0% | +| Watch Cooldown | The cooldown on the Lookout's Watch button | Time | 25s | +| Lookout Watches Reset After Each Round | Whether Lookout Watches are removed after each meeting | Toggle | True | +| Maximum Number Of Players That Can Be Watched | The number of people they can watch | Number | 5 | + ----------------------- ## Mystic ### **Team: Crewmates** @@ -964,7 +1010,7 @@ Once they track someone, an arrow is continuously pointing to them, which update | Arrow Update Interval | The time it takes for the arrow to update to the new location of the tracked player | Time | 5s | | Track Cooldown | The cooldown on the Tracker's track button | Time | 25s | | Tracker Arrows Reset Each Round | Whether Tracker Arrows are removed after each meeting | Toggle | True | -| Maximum Number of Tracks | The number of new people they can track | Number | 3 | +| Maximum Number of Tracks | The number of people they can track | Number | 5 | ----------------------- ## Trapper @@ -985,6 +1031,19 @@ However, this is done so in a random order, not stating who entered the trap, no | Trap Size | The size of each trap | Factor | 0.25x | | Minimum Number of Roles required to Trigger Trap | The number of players that must enter the trap for it to be triggered | Number | 3 | +----------------------- +## Deputy +### **Team: Crewmates** +The Deputy is a Crewmate that can camp other players.\ +Camped players will alert the Deputy when they are killed.\ +The following meeting the Deputy then can attempt to shoot their killer.\ +If they successfully shoot the killer, they die, otherwise nothing happens. + +### Game Options +| Name | Description | Type | Default | +|----------|:-------------:|:------:|:------:| +| Deputy | The percentage probability of the Deputy appearing | Percentage | 0% | + ----------------------- ## Hunter ### **Team: Crewmates** @@ -1066,8 +1125,8 @@ During meetings, the Vigilante can choose to kill someone by guessing their role | Vigilante Guess Neutral Benign | Whether the Vigilante can Guess Neutral Benign roles | Toggle | False | | Vigilante Guess Neutral Evil | Whether the Vigilante can Guess Neutral Evil roles | Toggle | False | | Vigilante Guess Neutral Killing | Whether the Vigilante can Guess Neutral Killing roles | Toggle | False | +| Vigilante Guess Impostor Modifiers | Whether the Vigilante can Guess Impostor modifiers | Toggle | False | | Vigilante Guess Lovers | Whether the Vigilante can Guess Lovers | Toggle | False | -| Vigilante Guess After Voting | Whether the Vigilante can Guess after they have voted | Toggle | False | ----------------------- ## Altruist @@ -1139,6 +1198,20 @@ A report can contain the name of the killer or the color type (Darker/Lighter) | Who gets murder attempt indicator | Who will receive an indicator when someone tries to Kill them | Medic / Shielded / Everyone / Nobody | Medic | | Shield breaks on murder attempt | Whether the Shield breaks when someone attempts to Kill them | Toggle | False | +----------------------- +## Warden +### **Team: Crewmates** +The Warden is a Crewmate that can fortify other players.\ +Fortified players cannot be interacted with and cannot be assassinated.\ +If someone tries to interact with or assassinate a fortified player,\ +Both the Warden and the interactor or assassin receive an alert.\ +Fortify does not stop direct kills. + +### Game Options +| Name | Description | Type | Default | +|----------|:-------------:|:------:|:------:| +| Warden | The percentage probability of the Warden appearing | Percentage | 0% | + ----------------------- ## Engineer ### **Team: Crewmates** @@ -1156,13 +1229,13 @@ They can use vents to get across the map easily. ### **Team: Crewmates** The Imitator is a Crewmate that can mimic dead crewamtes.\ During meetings the Imitator can select who they are going to imitate the following round from the dead.\ -They can choose to use each dead players as many times as they wish.\ -It should be noted the Imitator can not imitate all crew roles. +They can choose to use each dead players as many times as they wish. ### Game Options | Name | Description | Type | Default | |----------|:-------------:|:------:|:------:| | Imitator | The percentage probability of the Imitator appearing | Percentage | 0% | +| Imitator Can Become Mayor | Whether the Imitator can permanently become the Mayor | Toggle | True | ----------------------- ## Medium @@ -1232,21 +1305,6 @@ Players who have been transported are alerted with a blue flash on their screen. | Max Uses | The amount of times the Transport ability can be used | Number | 5 | | Transporter can use Vitals | Whether the Transporter has the ability to use Vitals | Toggle | False | ------------------------ -## Warden -### **Team: Crewmates** -The Warden is a Crewmate that can fortify other players.\ -Fortified players cannot be interacted with and cannot be assassinated.\ -If someone tries to interact with or assassinate a fortified player,\ -Both the Warden and the interactor or assassin receive an alert.\ -Fortify does not stop direct kills. - -### Game Options -| Name | Description | Type | Default | -|----------|:-------------:|:------:|:------:| -| Warden | The percentage probability of the Warden appearing | Percentage | 0% | -| Fortify Cooldown | The cooldown of the Warden's Fortify button | Time | 10s | - ----------------------- # Neutral Roles ## Amnesiac @@ -1315,7 +1373,6 @@ They have an additional observe ability that hints towards certain player's role | Doomsayer Guess Neutral Evil | Whether the Doomsayer can Guess Neutral Evil roles | Toggle | False | | Doomsayer Guess Neutral Killing | Whether the Doomsayer can Guess Neutral Killing roles | Toggle | False | | Doomsayer Guess Impostors | Whether the Doomsayer can Guess Impostor roles | Toggle | False | -| Doomsayer Can Guess After Voting | Whether the Doomsayer can Guess after voting | Toggle | False | | (Experienced) Doomsayer Can't Observe | The Doomsayer doesn't have the observe feature | Toggle | False | ----------------------- @@ -1404,6 +1461,7 @@ The Juggernaut needs to be the last killer alive to win the game. ### Game Options | Name | Description | Type | Default | |----------|:-------------:|:------:|:------:| +| Juggernaut | The percentage probability of the Juggernaut appearing | Percentage | 0% | | Juggernaut Kill Cooldown | The initial cooldown of the Juggernaut's Kill button | Time | 25s | | Reduced Kill Cooldown Per Kill | The amount of time removed from the Juggernaut's Kill Cooldown Per Kill | Time | 5s | | Juggernaut can Vent | Whether the Juggernaut can Vent | Toggle | False | @@ -1473,7 +1531,7 @@ Else they will kill the bitten player. ### **Team: Neutral** The Werewolf is a Neutral role with its own win condition.\ -Although the Werwolf has a kill button, they can't use it unless they are Rampaged.\ +Although the Werewolf has a kill button, they can't use it unless they are Rampaged.\ Once the Werewolf rampages they gain Impostor vision and the ability to kill.\ However, unlike most killers their kill cooldown is really short.\ The Werewolf needs to be the last killer alive to win the game. @@ -1566,6 +1624,7 @@ All abilities are activated by the one button and have the same duration. | Ability Duration | How long the Venerer's ability lasts for | Time | 10s | | Sprint Speed | How fast the speed increase of the Venerer is when sprinting | Multiplier | 1.25x | | Freeze Speed | How slow the speed decrease of other players is when the Venerer's ability is active | Multiplier | 0.75x | + ----------------------- ## Bomber ### **Team: Impostors** @@ -1584,6 +1643,23 @@ Once the bomb detonates it will kill all crewmates (and Impostors!) inside the r | Bomber can Vent | Whether the Bomber can Vent | Toggle | False | | All Imps See Bomb | Whether all the Impostors see the Bomber's bombs | Toggle | False | +----------------------- +## Scavenger +### **Team: Impostors** + +The Scavenger is an Impostor who hunts down prey.\ +With each successful hunt the Scavenger has a shortened kill cooldown.\ +On an incorrect kill the Scavenger has a significantly increased kill cooldown. + +### Game Options +| Name | Description | Type | Default | +|----------|:-------------:|:------:|:------:| +| Scavenger | The percentage probability of the Scavenger appearing | Percentage | 0% | +| Scavenge Duration | How long the Scavenger's scavenge lasts for | Time | 25s | +| Scavenge Duration Increase Per Kill | How much time the Scavenge duration increases on a correct kill | Time | 10s | +| Scavenge Kill Cooldown On Correct Kill | The kill cooldown the Scavenger has on a correct kill | Time | 10s | +| Kill Cooldown Multiplier On Incorrect Kill | The increased time the kill cooldown has on an incorrect kill | Multiplier | 3x | + ----------------------- ## Traitor ### **Team: Impostors** @@ -1596,7 +1672,7 @@ Once this player has turned into the Traitor their alliance sits with the Impost | Name | Description | Type | Default | |----------|:-------------:|:------:|:------:| | Traitor | The percentage probability of the Traitor appearing | Percentage | 0% | -| Latest Spawn | The minimum number of people alive when a Traitor can spawn | Number | 5 | +| Minimum People Alive When Traitor Can Spawn | The minimum number of people alive when a Traitor can spawn | Number | 5 | | Traitor Won't Spawn if Neutral Killing are Alive | Whether the Traitor won't spawn if any Neutral Killing roles are alive | Toggle | False | ----------------------- @@ -1619,14 +1695,15 @@ However, they do not need to fully charge their kill button to use it. ### **Team: Impostors** The Blackmailer is an Impostor that can silence people in meetings.\ During each round, the Blackmailer can go up to someone and blackmail them.\ -This prevents the blackmailed person from speaking during the next meeting. +This prevents the blackmailed person from speaking and possibly voting during the next meeting. ### Game Options | Name | Description | Type | Default | |----------|:-------------:|:------:|:------:| | Blackmailer | The percentage probability of the Blackmailer appearing | Percentage | 0% | | Initial Blackmail Cooldown | The initial cooldown of the Blackmailer's Blackmail button | Time | 10s | -| Only Target Sees Blackmail | If enabled, only the blackmailed player (and the Blackmailer) will see that the player can't speak. | Toggle | False | +| Only Target Sees Blackmail | If enabled, only the blackmailed player (and the Blackmailer) will see that the player can't speak | Toggle | False | +| Maximum People Alive Where Blackmailed Can Vote | The maximum number of players alive to allow the blackmailed player to vote | Number | 5 | ----------------------- ## Hypnotist @@ -1792,6 +1869,15 @@ However, they can also win with their respective team, hence why the Lovers do n | Neutral Roles Can Be Lovers | Whether a Lover can be a Neutral Role | Toggle | True | | Impostor Lover Can Kill Teammate | Whether an Impostor Lover can kill another Impostor | Toggle | False | +----------------------- +## Mini +### **Applied to: All** +The Mini is a tiny Crewmate. +### Game Options +| Name | Description | Type | Default | +|----------|:-------------:|:------:|:------:| +| Mini | The percentage probability of the Mini appearing | Percentage | 0% | + ----------------------- ## Radar ### **Applied to: All** @@ -1865,51 +1951,77 @@ and can no longer guess the person who they guessed wrong for the remainder of t | Double Shot| The percentage probability of Double Shot appearing | Percentage | 0% | ----------------------- -## Underdog +## Saboteur ### **Applied to: Impostors** -The Underdog is an Impostor with a prolonged kill cooldown.\ -When they are the only remaining Impostor, they will have their kill cooldown shortened. +The Saboteur is an Impostor with a passive sabotage cooldown reduction. ### Game Options | Name | Description | Type | Default | |----------|:-------------:|:------:|:------:| -| Underdog | The percentage probability of the Underdog appearing | Percentage | 0% | -| Kill Cooldown Bonus | The amount of time added or removed from the Underdog's Kill Cooldown | Time | 5s | -| Increased Kill Cooldown | Whether the Underdog's Kill Cooldown is Increased when 2+ Imps are alive | Toggle | True | +| Saboteur | The percentage probability of the Saboteur appearing | Percentage | 0% | +| Reduced Sabotage Bonus | The amount of time removed from the Saboteur's sabotage cooldowns | Time | 10s | ----------------------- -# Game Mode Settings -| Name | Description | Type | Default | -|----------|:-------------:|:------:|:------:| -| Game Mode | What game mode the next game will be | Classic / All Any / Killing Only | Classic | +## Underdog +### **Applied to: Impostors** ------------------------ -# Classic Game Mode Settings -| Name | Description | Type | Default | -|----------|:-------------:|:------:|:------:| -| Min Neutral Benign Roles | The minimum number of Neutral Benign roles a game can have | Number | 1 | -| Max Neutral Benign Roles | The maximum number of Neutral Benign roles a game can have | Number | 1 | -| Min Neutral Evil Roles | The minimum number of Neutral Evil roles a game can have | Number | 1 | -| Max Neutral Evil Roles | The maximum number of Neutral Evil roles a game can have | Number | 1 | -| Min Neutral Killing Roles | The minimum number of Neutral Killing roles a game can have | Number | 1 | -| Max Neutral Killing Roles | The maximum number of Neutral Killing roles a game can have | Number | 1 | +The Underdog is an Impostor with a prolonged kill cooldown.\ +When they are the only remaining Impostor, they will have their kill cooldown shortened. ------------------------ -# All Any Settings +### Game Options | Name | Description | Type | Default | |----------|:-------------:|:------:|:------:| -| Random Number of Impostors | Whether there are a random number of Impostors | Toggle | True | +| Underdog | The percentage probability of the Underdog appearing | Percentage | 0% | +| Kill Cooldown Bonus | The amount of time added or removed from the Underdog's Kill Cooldown | Time | 5s | +| Increased Kill Cooldown | Whether the Underdog's Kill Cooldown is Increased when 2+ Imps are alive | Toggle | True | ----------------------- -# Killing Only Settings -| Name | Description | Type | Default | -|----------|:-------------:|:------:|:------:| -| Neutral Roles | How many neutrals roles will spawn | Number | 1 | -| Veteran Count | How many Veterans will spawn | Number | 1 | -| Vigilante Count | How many Vigilantes will spawn | Number | 1 | -| Add Arsonist | Whether Arsonist will be added to the role list | Toggle | True | -| Add Plaguebearer | Whether Plaguebearer will be added to the role list | Toggle | True | +# Role List Settings +The Role List dictates what roles will spawn in game.\ +However many players there are in a game, will dictate the last slot used,\ +for example, if there are 9 players, only the first 9 slots will be used.\ +Common buckets, only take in roles which are not a killing role in that faction.\ +Auto adjustments will be made if there are not enough crewmates or impostors to make a more balanced game. +### Buckets +- Crewmate Investigative +- Crewmate Killing +- Crewmate Protective +- Crewmate Support +- Common Crewmate +- Random Crewmate +- Neutral Benign +- Neutral Evil +- Neutral Killing +- Common Neutral +- Random Neutral +- Impostor Concealing +- Impostor Killing +- Impostor Support +- Common Impostor +- Random Impostor +- Non-Impostor +- Any + +### Game Options +| Name | Description | Type | Default | +|----------|:-------------:|:------:|:------:| +| Unique Roles | Whether all roles can appear a maximum of 1 time | Toggle | True | +| Slot 1 | What role type can appear in Slot 1 | See Above for Buckets | Non-Imp | +| Slot 2 | What role type can appear in Slot 2 | See Above for Buckets | Non-Imp | +| Slot 3 | What role type can appear in Slot 3 | See Above for Buckets | Non-Imp | +| Slot 4 | What role type can appear in Slot 4 | See Above for Buckets | Random Impostor | +| Slot 5 | What role type can appear in Slot 5 | See Above for Buckets | Non-Imp | +| Slot 6 | What role type can appear in Slot 6 | See Above for Buckets | Non-Imp | +| Slot 7 | What role type can appear in Slot 7 | See Above for Buckets | Non-Imp | +| Slot 8 | What role type can appear in Slot 8 | See Above for Buckets | Non-Imp | +| Slot 9 | What role type can appear in Slot 9 | See Above for Buckets | Random Impostor | +| Slot 10 | What role type can appear in Slot 10 | See Above for Buckets | Non-Imp | +| Slot 11 | What role type can appear in Slot 11 | See Above for Buckets | Non-Imp | +| Slot 12 | What role type can appear in Slot 12 | See Above for Buckets | Non-Imp | +| Slot 13 | What role type can appear in Slot 13 | See Above for Buckets | Non-Imp | +| Slot 14 | What role type can appear in Slot 14 | See Above for Buckets | Random Impostor | +| Slot 15 | What role type can appear in Slot 15 | See Above for Buckets | Non-Imp | ----------------------- # Map Settings @@ -1950,7 +2062,6 @@ When they are the only remaining Impostor, they will have their kill cooldown sh | Game Start Cooldowns | The cooldown for all roles at the start of the game | Time | 10s | | Parallel Medbay Scans | Whether players have to wait for others to scan | Toggle | False | | Disable Meeting Skip Button | Whether the meeting button is disabled | No / Emergency / Always | No | -| Enable Hidden Roles | Whether hidden roles are added to the role selections | Toggle | True | | First Death Shield Next Game | Whether the first player to die gets a shield for the first round next game | Toggle | False | | Neutral Evils Win Ends Game | Whether a Neutral Evil role winning ends the game | Toggle | True | | Crew Killers Continue Game | Whether the game will continue if crewmates can fight back | Toggle | False | @@ -1988,7 +2099,6 @@ If they guess wrong, they die instead. | Assassin Guess Impostors | Whether the Assassin can Guess Impostor roles | Toggle | False | | Assassin Guess Crewmate Modifiers | Whether the Assassin can Guess Crewmate Modifiers | Toggle | False | | Assassin Can Guess Lovers | Whether the Assassin can Guess Lovers | Toggle | False | -| Assassin Can Guess After Voting | Whether the Assassin can Guess after voting | Toggle | False | ----------------------- # Extras diff --git a/source/Extensions/AmongUsExtensions.cs b/source/Extensions/AmongUsExtensions.cs index bc9ff3fd5..a2c63511f 100644 --- a/source/Extensions/AmongUsExtensions.cs +++ b/source/Extensions/AmongUsExtensions.cs @@ -3,6 +3,8 @@ using TownOfUs.Roles.Modifiers; using UnityEngine; using System; +using Il2CppInterop.Runtime.InteropTypes; +using System.Linq.Expressions; namespace TownOfUs.Extensions { @@ -103,6 +105,30 @@ public static Texture2D CreateEmptyTexture(int width = 0, int height = 0) return new Texture2D(width, height, TextureFormat.RGBA32, Texture.GenerateAllMips, false, IntPtr.Zero); } + private static class CastExtension where T : Il2CppObjectBase + { + public static Func Cast; + static CastExtension() + { + var constructor = typeof(T).GetConstructor(new[] { typeof(IntPtr) }); + var ptr = Expression.Parameter(typeof(IntPtr)); + var create = Expression.New(constructor!, ptr); + var lambda = Expression.Lambda>(create, ptr); + Cast = lambda.Compile(); + } + } + + public static T Caster(this Il2CppObjectBase obj) where T : Il2CppObjectBase + { + if (obj is T casted) return casted; + return obj.Pointer.Caster(); + } + + public static T Caster(this IntPtr ptr) where T : Il2CppObjectBase + { + return CastExtension.Cast(ptr); + } + public static TMPro.TextMeshPro nameText(this PlayerControl p) => p?.cosmetics?.nameText; public static TMPro.TextMeshPro NameText(this PoolablePlayer p) => p.cosmetics.nameText; diff --git a/source/Patches/ChatCommands.cs b/source/Patches/ChatCommands.cs new file mode 100644 index 000000000..880846fde --- /dev/null +++ b/source/Patches/ChatCommands.cs @@ -0,0 +1,679 @@ +using HarmonyLib; +using TownOfUs.Roles; +using TownOfUs.Roles.Modifiers; + +namespace TownOfUs.Patches +{ + [HarmonyPatch] + public static class ChatCommands + { + public static bool JailorMessage = false; + + [HarmonyPatch(typeof(ChatController), nameof(ChatController.AddChat))] + public static class PrivateJaileeChat + { + public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] ref PlayerControl sourcePlayer, ref string chatText) + { + if (sourcePlayer == PlayerControl.LocalPlayer) + { + if (chatText.ToLower().StartsWith("/crew") || chatText.ToLower().StartsWith("/ crew")) + { + AddRoleMessage(RoleEnum.Crewmate); + return false; + } + else if (chatText.ToLower().StartsWith("/imp") || chatText.ToLower().StartsWith("/ imp")) + { + AddRoleMessage(RoleEnum.Impostor); + return false; + } + else if (chatText.ToLower().StartsWith("/alt") || chatText.ToLower().StartsWith("/ alt")) + { + AddRoleMessage(RoleEnum.Altruist); + return false; + } + else if (chatText.ToLower().StartsWith("/engi") || chatText.ToLower().StartsWith("/ engi")) + { + AddRoleMessage(RoleEnum.Engineer); + return false; + } + else if (chatText.ToLower().StartsWith("/invest") || chatText.ToLower().StartsWith("/ invest")) + { + AddRoleMessage(RoleEnum.Investigator); + return false; + } + else if (chatText.ToLower().StartsWith("/mayor") || chatText.ToLower().StartsWith("/ mayor")) + { + AddRoleMessage(RoleEnum.Mayor); + return false; + } + else if (chatText.ToLower().StartsWith("/medic") || chatText.ToLower().StartsWith("/ medic")) + { + AddRoleMessage(RoleEnum.Medic); + return false; + } + else if (chatText.ToLower().StartsWith("/sher") || chatText.ToLower().StartsWith("/ sher")) + { + AddRoleMessage(RoleEnum.Sheriff); + return false; + } + else if (chatText.ToLower().StartsWith("/swap") || chatText.ToLower().StartsWith("/ swap")) + { + AddRoleMessage(RoleEnum.Swapper); + return false; + } + else if (chatText.ToLower().StartsWith("/seer") || chatText.ToLower().StartsWith("/ seer")) + { + AddRoleMessage(RoleEnum.Seer); + return false; + } + else if (chatText.ToLower().StartsWith("/sni") || chatText.ToLower().StartsWith("/ sni")) + { + AddRoleMessage(RoleEnum.Snitch); + return false; + } + else if (chatText.ToLower().StartsWith("/spy") || chatText.ToLower().StartsWith("/ spy")) + { + AddRoleMessage(RoleEnum.Spy); + return false; + } + else if (chatText.ToLower().StartsWith("/vig") || chatText.ToLower().StartsWith("/ vig")) + { + AddRoleMessage(RoleEnum.Vigilante); + return false; + } + else if (chatText.ToLower().StartsWith("/hunt") || chatText.ToLower().StartsWith("/ hunt")) + { + AddRoleMessage(RoleEnum.Hunter); + return false; + } + else if (chatText.ToLower().StartsWith("/arso") || chatText.ToLower().StartsWith("/ arso")) + { + AddRoleMessage(RoleEnum.Arsonist); + return false; + } + else if (chatText.ToLower().StartsWith("/exe") || chatText.ToLower().StartsWith("/ exe")) + { + AddRoleMessage(RoleEnum.Executioner); + return false; + } + else if (chatText.ToLower().StartsWith("/glitch") || chatText.ToLower().StartsWith("/ glitch") || + chatText.ToLower().StartsWith("/theglitch") || chatText.ToLower().StartsWith("/ theglitch") || + chatText.ToLower().StartsWith("/the glitch") || chatText.ToLower().StartsWith("/ the glitch")) + { + AddRoleMessage(RoleEnum.Glitch); + return false; + } + else if (chatText.ToLower().StartsWith("/jest") || chatText.ToLower().StartsWith("/ jest")) + { + AddRoleMessage(RoleEnum.Jester); + return false; + } + else if (chatText.ToLower().StartsWith("/phan") || chatText.ToLower().StartsWith("/ phan")) + { + AddRoleMessage(RoleEnum.Phantom); + return false; + } + else if (chatText.ToLower().StartsWith("/gren") || chatText.ToLower().StartsWith("/ gren")) + { + AddRoleMessage(RoleEnum.Grenadier); + return false; + } + else if (chatText.ToLower().StartsWith("/jan") || chatText.ToLower().StartsWith("/ jan")) + { + AddRoleMessage(RoleEnum.Janitor); + return false; + } + else if (chatText.ToLower().StartsWith("/mini") || chatText.ToLower().StartsWith("/ mini")) + { + AddModifierMessage(ModifierEnum.Mini); + return false; + } + else if (chatText.ToLower().StartsWith("/miner") || chatText.ToLower().StartsWith("/ miner")) + { + AddRoleMessage(RoleEnum.Miner); + return false; + } + else if (chatText.ToLower().StartsWith("/morph") || chatText.ToLower().StartsWith("/ morph")) + { + AddRoleMessage(RoleEnum.Morphling); + return false; + } + else if (chatText.ToLower().StartsWith("/swoop") || chatText.ToLower().StartsWith("/ swoop")) + { + AddRoleMessage(RoleEnum.Swooper); + return false; + } + else if (chatText.ToLower().StartsWith("/utaker") || chatText.ToLower().StartsWith("/ utaker") || + chatText.ToLower().StartsWith("/undertaker") || chatText.ToLower().StartsWith("/ undertaker")) + { + AddRoleMessage(RoleEnum.Undertaker); + return false; + } + else if (chatText.ToLower().StartsWith("/haunt") || chatText.ToLower().StartsWith("/ haunt")) + { + AddRoleMessage(RoleEnum.Haunter); + return false; + } + else if (chatText.ToLower().StartsWith("/vet") || chatText.ToLower().StartsWith("/ vet")) + { + AddRoleMessage(RoleEnum.Veteran); + return false; + } + else if (chatText.ToLower().StartsWith("/amne") || chatText.ToLower().StartsWith("/ amne")) + { + AddRoleMessage(RoleEnum.Amnesiac); + return false; + } + else if (chatText.ToLower().StartsWith("/jugg") || chatText.ToLower().StartsWith("/ jugg")) + { + AddRoleMessage(RoleEnum.Juggernaut); + return false; + } + else if (chatText.ToLower().StartsWith("/track") || chatText.ToLower().StartsWith("/ track")) + { + AddRoleMessage(RoleEnum.Tracker); + return false; + } + else if (chatText.ToLower().StartsWith("/trans") || chatText.ToLower().StartsWith("/ trans")) + { + AddRoleMessage(RoleEnum.Transporter); + return false; + } + else if (chatText.ToLower().StartsWith("/trait") || chatText.ToLower().StartsWith("/ trait")) + { + AddRoleMessage(RoleEnum.Traitor); + return false; + } + else if (chatText.ToLower().StartsWith("/med") || chatText.ToLower().StartsWith("/ med")) + { + AddRoleMessage(RoleEnum.Medium); + return false; + } + else if (chatText.ToLower().StartsWith("/trap") || chatText.ToLower().StartsWith("/ trap")) + { + AddRoleMessage(RoleEnum.Trapper); + return false; + } + else if (chatText.ToLower().StartsWith("/surv") || chatText.ToLower().StartsWith("/ surv")) + { + AddRoleMessage(RoleEnum.Survivor); + return false; + } + else if (chatText.ToLower().StartsWith("/ga") || chatText.ToLower().StartsWith("/ ga") || + chatText.ToLower().StartsWith("/guardian") || chatText.ToLower().StartsWith("/ guardian")) + { + AddRoleMessage(RoleEnum.GuardianAngel); + return false; + } + else if (chatText.ToLower().StartsWith("/myst") || chatText.ToLower().StartsWith("/ myst")) + { + AddRoleMessage(RoleEnum.Mystic); + return false; + } + else if (chatText.ToLower().StartsWith("/bmer") || chatText.ToLower().StartsWith("/ bmer") || + chatText.ToLower().StartsWith("/black") || chatText.ToLower().StartsWith("/ black")) + { + AddRoleMessage(RoleEnum.Blackmailer); + return false; + } + else if (chatText.ToLower().StartsWith("/pb") || chatText.ToLower().StartsWith("/ pb") || + chatText.ToLower().StartsWith("/plague") || chatText.ToLower().StartsWith("/ plague")) + { + AddRoleMessage(RoleEnum.Plaguebearer); + return false; + } + else if (chatText.ToLower().StartsWith("/pest") || chatText.ToLower().StartsWith("/ pest")) + { + AddRoleMessage(RoleEnum.Pestilence); + return false; + } + else if (chatText.ToLower().StartsWith("/ww") || chatText.ToLower().StartsWith("/ ww") || + chatText.ToLower().StartsWith("/were") || chatText.ToLower().StartsWith("/ were")) + { + AddRoleMessage(RoleEnum.Werewolf); + return false; + } + else if (chatText.ToLower().StartsWith("/detec") || chatText.ToLower().StartsWith("/ detec")) + { + AddRoleMessage(RoleEnum.Detective); + return false; + } + else if (chatText.ToLower().StartsWith("/escap") || chatText.ToLower().StartsWith("/ escap")) + { + AddRoleMessage(RoleEnum.Escapist); + return false; + } + else if (chatText.ToLower().StartsWith("/imitat") || chatText.ToLower().StartsWith("/ imitat")) + { + AddRoleMessage(RoleEnum.Imitator); + return false; + } + else if (chatText.ToLower().StartsWith("/bomb") || chatText.ToLower().StartsWith("/ bomb")) + { + AddRoleMessage(RoleEnum.Bomber); + return false; + } + else if (chatText.ToLower().StartsWith("/doom") || chatText.ToLower().StartsWith("/ doom")) + { + AddRoleMessage(RoleEnum.Doomsayer); + return false; + } + else if (chatText.ToLower().StartsWith("/vamp") || chatText.ToLower().StartsWith("/ vamp")) + { + AddRoleMessage(RoleEnum.Vampire); + return false; + } + else if (chatText.ToLower().StartsWith("/pros") || chatText.ToLower().StartsWith("/ pros")) + { + AddRoleMessage(RoleEnum.Prosecutor); + return false; + } + else if (chatText.ToLower().StartsWith("/war") || chatText.ToLower().StartsWith("/ war")) + { + AddRoleMessage(RoleEnum.Warlock); + return false; + } + else if (chatText.ToLower().StartsWith("/ora") || chatText.ToLower().StartsWith("/ ora")) + { + AddRoleMessage(RoleEnum.Oracle); + return false; + } + else if (chatText.ToLower().StartsWith("/ven") || chatText.ToLower().StartsWith("/ ven")) + { + AddRoleMessage(RoleEnum.Venerer); + return false; + } + else if (chatText.ToLower().StartsWith("/aur") || chatText.ToLower().StartsWith("/ aur")) + { + AddRoleMessage(RoleEnum.Aurial); + return false; + } + else if (chatText.ToLower().StartsWith("/poli") || chatText.ToLower().StartsWith("/ poli")) + { + AddRoleMessage(RoleEnum.Politician); + return false; + } + else if (chatText.ToLower().StartsWith("/ward") || chatText.ToLower().StartsWith("/ ward")) + { + AddRoleMessage(RoleEnum.Warden); + return false; + } + else if (chatText.ToLower().StartsWith("/hypno") || chatText.ToLower().StartsWith("/ hypno")) + { + AddRoleMessage(RoleEnum.Hypnotist); + return false; + } + else if (chatText.ToLower().StartsWith("/jailor") || chatText.ToLower().StartsWith("/ jailor")) + { + AddRoleMessage(RoleEnum.Jailor); + return false; + } + else if (chatText.ToLower().StartsWith("/scav") || chatText.ToLower().StartsWith("/ scav")) + { + AddRoleMessage(RoleEnum.Scavenger); + return false; + } + else if (chatText.ToLower().StartsWith("/sc") || chatText.ToLower().StartsWith("/ sc") || + chatText.ToLower().StartsWith("/soul") || chatText.ToLower().StartsWith("/ soul")) + { + AddRoleMessage(RoleEnum.SoulCollector); + return false; + } + else if (chatText.ToLower().StartsWith("/dep") || chatText.ToLower().StartsWith("/ dep")) + { + AddRoleMessage(RoleEnum.Deputy); + return false; + } + else if (chatText.ToLower().StartsWith("/lover") || chatText.ToLower().StartsWith("/ lover")) + { + AddModifierMessage(ModifierEnum.Lover); + return false; + } + else if (chatText.ToLower().StartsWith("/lo") || chatText.ToLower().StartsWith("/ lo")) + { + AddRoleMessage(RoleEnum.Lookout); + return false; + } + else if (chatText.ToLower().StartsWith("/giant") || chatText.ToLower().StartsWith("/ giant")) + { + AddModifierMessage(ModifierEnum.Giant); + return false; + } + else if (chatText.ToLower().StartsWith("/button") || chatText.ToLower().StartsWith("/ button")) + { + AddModifierMessage(ModifierEnum.ButtonBarry); + return false; + } + else if (chatText.ToLower().StartsWith("/after") || chatText.ToLower().StartsWith("/ after")) + { + AddModifierMessage(ModifierEnum.Aftermath); + return false; + } + else if (chatText.ToLower().StartsWith("/bait") || chatText.ToLower().StartsWith("/ bait")) + { + AddModifierMessage(ModifierEnum.Bait); + return false; + } + else if (chatText.ToLower().StartsWith("/dis") || chatText.ToLower().StartsWith("/ dis")) + { + AddModifierMessage(ModifierEnum.Diseased); + return false; + } + else if (chatText.ToLower().StartsWith("/flash") || chatText.ToLower().StartsWith("/ flash")) + { + AddModifierMessage(ModifierEnum.Flash); + return false; + } + else if (chatText.ToLower().StartsWith("/tie") || chatText.ToLower().StartsWith("/ tie")) + { + AddModifierMessage(ModifierEnum.Tiebreaker); + return false; + } + else if (chatText.ToLower().StartsWith("/torch") || chatText.ToLower().StartsWith("/ torch")) + { + AddModifierMessage(ModifierEnum.Torch); + return false; + } + else if (chatText.ToLower().StartsWith("/sleuth") || chatText.ToLower().StartsWith("/ sleuth")) + { + AddModifierMessage(ModifierEnum.Sleuth); + return false; + } + else if (chatText.ToLower().StartsWith("/radar") || chatText.ToLower().StartsWith("/ radar")) + { + AddModifierMessage(ModifierEnum.Radar); + return false; + } + else if (chatText.ToLower().StartsWith("/dis") || chatText.ToLower().StartsWith("/ dis")) + { + AddModifierMessage(ModifierEnum.Disperser); + return false; + } + else if (chatText.ToLower().StartsWith("/multi") || chatText.ToLower().StartsWith("/ multi")) + { + AddModifierMessage(ModifierEnum.Multitasker); + return false; + } + else if (chatText.ToLower().StartsWith("/double") || chatText.ToLower().StartsWith("/ double")) + { + AddModifierMessage(ModifierEnum.DoubleShot); + return false; + } + else if (chatText.ToLower().StartsWith("/udog") || chatText.ToLower().StartsWith("/ udog") || + chatText.ToLower().StartsWith("/underdog") || chatText.ToLower().StartsWith("/ underdog")) + { + AddModifierMessage(ModifierEnum.Underdog); + return false; + } + else if (chatText.ToLower().StartsWith("/frost") || chatText.ToLower().StartsWith("/ frost")) + { + AddModifierMessage(ModifierEnum.Frosty); + return false; + } + else if (chatText.ToLower().StartsWith("/sense") || chatText.ToLower().StartsWith("/ sense") || + chatText.ToLower().StartsWith("/sixth") || chatText.ToLower().StartsWith("/ sixth")) + { + AddModifierMessage(ModifierEnum.SixthSense); + return false; + } + else if (chatText.ToLower().StartsWith("/shy") || chatText.ToLower().StartsWith("/ shy")) + { + AddModifierMessage(ModifierEnum.Shy); + return false; + } + else if (chatText.ToLower().StartsWith("/sab") || chatText.ToLower().StartsWith("/ sab")) + { + AddModifierMessage(ModifierEnum.Saboteur); + return false; + } + else if (chatText.ToLower().StartsWith("/ass") || chatText.ToLower().StartsWith("/ ass")) + { + DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Assassin is an ability which is given to killers to guess other player's roles during mettings. If they guess correctly they kill the other player, if not, they die instead."); + return false; + } + else if (chatText.ToLower().StartsWith("/r") || chatText.ToLower().StartsWith("/ r") || chatText.ToLower().StartsWith("/role") || chatText.ToLower().StartsWith("/ role")) + { + var role = Role.GetRole(PlayerControl.LocalPlayer); + if (role != null) AddRoleMessage(role.RoleType); + else if (AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "You do not have a role."); + else DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "Invalid Command."); + return false; + } + else if (chatText.ToLower().StartsWith("/m") || chatText.ToLower().StartsWith("/ m") || chatText.ToLower().StartsWith("/modifier") || chatText.ToLower().StartsWith("/ modifier")) + { + var modifier = Modifier.GetModifier(PlayerControl.LocalPlayer); + if (modifier != null) AddModifierMessage(modifier.ModifierType); + else if (AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "You do not have a modifier."); + else DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "Invalid Command."); + return false; + } + } + if ((chatText.ToLower().StartsWith("/jail") || chatText.ToLower().StartsWith("/ jail")) && sourcePlayer.Is(RoleEnum.Jailor) && MeetingHud.Instance) + { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor) || PlayerControl.LocalPlayer.IsJailed()) + { + if (chatText.ToLower().StartsWith("/jail")) chatText = chatText[5..]; + else if (chatText.ToLower().StartsWith("/jail ")) chatText = chatText[6..]; + else if (chatText.ToLower().StartsWith("/ jail")) chatText = chatText[6..]; + else if (chatText.ToLower().StartsWith("/ jail ")) chatText = chatText[7..]; + JailorMessage = true; + if (sourcePlayer != PlayerControl.LocalPlayer && PlayerControl.LocalPlayer.IsJailed() && !sourcePlayer.Data.IsDead) sourcePlayer = PlayerControl.LocalPlayer; + return true; + } + else return false; + } + if (chatText.ToLower().StartsWith("/")) + { + if (sourcePlayer == PlayerControl.LocalPlayer) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "Invalid Command."); + return false; + } + if (sourcePlayer.IsJailed() && MeetingHud.Instance) + { + if (PlayerControl.LocalPlayer == sourcePlayer || PlayerControl.LocalPlayer.Is(RoleEnum.Jailor)) return true; + else return false; + } + if (PlayerControl.LocalPlayer.IsJailed() && MeetingHud.Instance) return false; + return true; + } + + public static void AddRoleMessage(RoleEnum role) + { + if (role == RoleEnum.Crewmate) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "The Crewmate is a vanilla Crewmate."); + if (role == RoleEnum.Impostor) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "The Impostor a vanilla Impostor."); + if (role == RoleEnum.Altruist) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Altruist is a crewmate with the ability to sacrifice themselves to revive another player."); + if (role == RoleEnum.Engineer) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Engineer is a crewmate with the ability to vent and fix sabotages."); + if (role == RoleEnum.Investigator) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Investigator is a crewmate with the ability to see other player's footsteps for a limited time."); + if (role == RoleEnum.Mayor) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Mayor is a crewmate with 3 votes and their role is revealed to everyone."); + if (role == RoleEnum.Medic) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Medic is a crewmate who can place a shield on another player."); + if (role == RoleEnum.Sheriff) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Sheriff is a crewmate who can kill other players. If the other player is good, they will self-kill instead."); + if (role == RoleEnum.Swapper) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Swapper is a crewmate who can swap the votes of 2 players during meetings."); + if (role == RoleEnum.Seer) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Seer is a crewmate who can reveal the alliance of other players."); + if (role == RoleEnum.Snitch) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Snitch is a crewmate who can see who the Impostors are once they complete all their tasks."); + if (role == RoleEnum.Spy) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Spy is a crewmate who can see the colours of players on the admin table."); + if (role == RoleEnum.Vigilante) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Vigilante is a crewmate who can guess other people's roles during meetings. If they guess correctly they kill the other player, if not, they die instead."); + if (role == RoleEnum.Hunter) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Hunter is a crewmate who can stalk other players. If the stalked player uses an ability, the Hunter will then be permitted to kill them. The Hunter has no punishment for killing incorrectly."); + if (role == RoleEnum.Arsonist) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Arsonist is a neutral killer with the goal to kill everyone. To do so they must douse players and once enough people are doused they can ignite, killing all doused players immediately."); + if (role == RoleEnum.Executioner) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Executioner is a neutral evil role with the goal to vote out a specific player."); + if (role == RoleEnum.Glitch) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Glitch is a neutral killer with the goal to kill everyone. In addition to killing, they can also hack players, disabling abilities and mimic players, changing their appearance to look like others."); + if (role == RoleEnum.Jester) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Jester is a neutral evil role with the goal to be voted out."); + if (role == RoleEnum.Phantom) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Phantom is a neutral evil role with the goal to complete all their tasks without being clicked."); + if (role == RoleEnum.Grenadier) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Grenadier is an impostor who can use smoke grenades to blind other players."); + if (role == RoleEnum.Janitor) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Janitor is an impostor who can remove bodies from the map."); + if (role == RoleEnum.Miner) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Miner is an impostor who can place new vents to create a new vent network."); + if (role == RoleEnum.Morphling) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Morphling is an impostor who can morph into other players."); + if (role == RoleEnum.Swooper) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Swooper is an impostor who can turn invisible."); + if (role == RoleEnum.Undertaker) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Undertaker is an impostor who can drag bodies to different locations."); + if (role == RoleEnum.Haunter) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Haunter is a crewmate who can reveal all Impostors on completion of their tasks."); + if (role == RoleEnum.Veteran) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Veteran is a crewmate who can alert to kill anyone who interacts with them."); + if (role == RoleEnum.Amnesiac) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Amnesiac is a neutral benign role that needs to find a body in order to remember a new role."); + if (role == RoleEnum.Juggernaut) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Juggernaut is a neutral killer with the goal to kill everyone. Every kill they make reduces their kill cooldown."); + if (role == RoleEnum.Tracker) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Tracker is a crewmate who can track multiple other players."); + if (role == RoleEnum.Transporter) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Transporter is a crewmate who can swap the locations of 2 other players."); + if (role == RoleEnum.Traitor) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Traitor is an impostor who was originally a Crewmate but switched sides."); + if (role == RoleEnum.Medium) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Medium is a crewmate who can see dead players the round that they die."); + if (role == RoleEnum.Trapper) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Trapper is a crewmate who can place traps around the map. All players who stand in these traps will reveal their role to the Trapper as long as enough players trigger the trap."); + if (role == RoleEnum.Survivor) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Survivor is a neutral benign role that needs to live to win."); + if (role == RoleEnum.GuardianAngel) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Guardian Angel is a neutral benign role that needs their target to win to win themselves."); + if (role == RoleEnum.Mystic) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Mystic is a crewmate who gets an alert when a player dies."); + if (role == RoleEnum.Blackmailer) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Blackmailer is an impostor who can silence other players."); + if (role == RoleEnum.Plaguebearer) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Plaguebearer is a neutral killer with the goal to kill everyone. To do this they must infect everyone to turn into Pestilence."); + if (role == RoleEnum.Pestilence) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Pestilence is a neutral killer with the goal to kill everyone. In addition to being able to kill, they are invincible and anyone who interacts with them will die."); + if (role == RoleEnum.Werewolf) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Werewolf is a neutral killer with the goal to kill everyone. In order to kill, they must rampage which gives them a short kill cooldown to kill people in bursts."); + if (role == RoleEnum.Detective) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Detective is a crewmate that can inspect crime scenes. Any player who has walked over this crime scene is suspicious. They can then examine players to see who has been at the crime scene."); + if (role == RoleEnum.Escapist) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Escapist is an impostor who can mark a location and recall to it later."); + if (role == RoleEnum.Imitator) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Imitator is a crewmate who can select dead crew roles to use during meetings. The following round they become this new role."); + if (role == RoleEnum.Bomber) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Bomber is an impostor who can place bombs, these kill anyone in the area a short duration later."); + if (role == RoleEnum.Doomsayer) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Doomsayer is a neutral evil role with the goal to guess 3 other player's roles simultaneously."); + if (role == RoleEnum.Vampire) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Vampire is a neutral killer with the goal to kill everyone. The first crewmate the original Vampire bites will turn into a Vampire, the rest will die."); + if (role == RoleEnum.Prosecutor) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Prosecutor is a crewmate who can exile a player of their choosing in a meeting."); + if (role == RoleEnum.Warlock) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Warlock is an impostor who can charge their kill button to kill multiple people at once."); + if (role == RoleEnum.Oracle) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Oracle is a crewmate who can make a player confess. This makes it so each meeting the Oracle learns that at least 1 of 3 players is evil, this other player is protected from being voted out and if the Oracle were to die that their potential faction would be revealed."); + if (role == RoleEnum.Venerer) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Venerer is an impostor who improves their ability with each kill. First kill is camouflage, second is speed and third is global slow."); + if (role == RoleEnum.Aurial) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Aurial is a crewmate who can sense ability uses nearby."); + if (role == RoleEnum.Politician) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Politician is a crewmate who can campaign in order to become the Mayor. During meetings they can attempt to reveal as the Mayor, if they have campaigned over half the crewmates they will be successful, if not they are unable to campaign the following round."); + if (role == RoleEnum.Warden) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Warden is a crewmate who can fortify other players. Fortified players cannot be interacted with."); + if (role == RoleEnum.Hypnotist) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Hypnotist is an impostor who can hypnotise other players. During meetings they can then release mass hysteria which makes all hypnotised players see everyone else as either morphed as themself, camouflaged or invisible."); + if (role == RoleEnum.Jailor) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Jailor is a crewmate who can jail other players. Jailed players cannot have meeting abilities used on them and cannot use meeting abilities themself. The Jailor and jailee may also privately talk to each other and the Jailor may also execute their jailee. If they execute a crewmate they lose the ability to jail players."); + if (role == RoleEnum.SoulCollector) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Soul Collector is a neutral evil role with the goal to collect souls. In order to obtain them they must reap players, once those players die they can pick their soul up off the ground."); + if (role == RoleEnum.Lookout) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Lookout is a crewmate who can watch other players. They will see all players who interact with each player they watch."); + if (role == RoleEnum.Scavenger) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Scavenger is an impostor who must hunt down prey. Once their kill cooldown is up they are given a target to kill and being their scavenge. If they kill that target they get a reduced kill cooldown and regenerate their scavenge duration. If they don't kill their target they are given an increased kill cooldown."); + if (role == RoleEnum.Deputy) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Deputy is a crewmate who can camp other players. If the player is killed they will receive an alert notifying them of their death. During the following meeting they may then shoot anyone. If they shoot the killer, they die unless fortified or invincible, if they are wrong nothing happens."); + } + + public static void AddModifierMessage(ModifierEnum modifier) + { + if (modifier == ModifierEnum.Giant) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Giant is a global modifier that increases the size of a player."); + if (modifier == ModifierEnum.Mini) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Mini is a global modifier that decreases the size of a player."); + if (modifier == ModifierEnum.ButtonBarry) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Button Barry is a global modifier that allows the player to button from anywhere on the map."); + if (modifier == ModifierEnum.Aftermath) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Aftermath is a crewmate modifier that forces their killer to instantly use their ability."); + if (modifier == ModifierEnum.Bait) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Bait is a crewmate modifier that forces their killer to report their body."); + if (modifier == ModifierEnum.Diseased) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Diseased is a crewmate modifier that increases their killer's kill cooldown."); + if (modifier == ModifierEnum.Flash) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Flash is a global modifier that increases the speed of a player."); + if (modifier == ModifierEnum.Tiebreaker) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Tiebreaker is a global modifier that allows a player's vote to break ties in meetings."); + if (modifier == ModifierEnum.Torch) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Torch is a crewmate modifier that allows them to see when lights are off."); + if (modifier == ModifierEnum.Lover) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Lover is a global modifier that life links 2 players. They also gain an extra win condition of surviving until final 3 together."); + if (modifier == ModifierEnum.Sleuth) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Sleuth is a global modifier that allows a player to see roles of dead bodies that they report."); + if (modifier == ModifierEnum.Radar) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Radar is a global modifier that shows an arrow pointing to the closest player."); + if (modifier == ModifierEnum.Disperser) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, + "The Disperser is an impostor modifier that gives an extra ability to Impostors. This being once per game sending every player to a random vent on the map."); + if (modifier == ModifierEnum.Multitasker) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Multitasker is a crewmate modifier that makes their tasks slightly transparent."); + if (modifier == ModifierEnum.DoubleShot) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Double Shot is an impostor modifier that gives Assassins an extra life when assassinating."); + if (modifier == ModifierEnum.Underdog) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Underdog is an impostor modifier that grants Impostors a reduced kill cooldown when alone."); + if (modifier == ModifierEnum.Frosty) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Frosty is a crewmate modifier that reduces the speed of their killer temporarily."); + if (modifier == ModifierEnum.SixthSense) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Sixth Sense is a global modifier that alerts players to when someone interacts with them."); + if (modifier == ModifierEnum.Shy) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Shy is a global modifier that makes the player slightly transparent when they stand still."); + if (modifier == ModifierEnum.Saboteur) DestroyableSingleton.Instance.Chat.AddChat( + PlayerControl.LocalPlayer, "The Saboteur is an impostor modifier that passively reduces non-door sabotage cooldowns."); + } + } + + [HarmonyPatch(typeof(ChatBubble), nameof(ChatBubble.SetName))] + public static class SetName + { + public static void Postfix(ChatBubble __instance, [HarmonyArgument(0)] string playerName) + { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor) && MeetingHud.Instance) + { + var jailor = Role.GetRole(PlayerControl.LocalPlayer); + if (jailor.Jailed != null && jailor.Jailed.Data.PlayerName == playerName) + { + __instance.NameText.color = jailor.Color; + __instance.NameText.text = playerName + " (Jailed)"; + } + else if (JailorMessage) + { + __instance.NameText.color = jailor.Color; + __instance.NameText.text = "Jailor"; + JailorMessage = false; + } + } + if (PlayerControl.LocalPlayer.IsJailed() && MeetingHud.Instance) + { + if (JailorMessage) + { + __instance.NameText.color = Colors.Jailor; + __instance.NameText.text = "Jailor"; + JailorMessage = false; + } + } + } + } + } +} \ No newline at end of file diff --git a/source/Patches/Colors.cs b/source/Patches/Colors.cs index 6686c3441..ad976c2c7 100644 --- a/source/Patches/Colors.cs +++ b/source/Patches/Colors.cs @@ -33,6 +33,8 @@ class Colors { public readonly static Color Politician = new Color(0.4f, 0f, 0.6f, 1f); public readonly static Color Warden = new Color(0.6f, 0f, 1f, 1f); public readonly static Color Jailor = new Color(0.65f, 0.65f, 0.65f, 1f); + public readonly static Color Lookout = new Color(0.2f, 1f, 0.4f, 1f); + public readonly static Color Deputy = new Color(1f, 0.8f, 0f, 1f); // Neutral Colors public readonly static Color Jester = new Color(1f, 0.75f, 0.8f, 1f); @@ -55,7 +57,7 @@ class Colors { public readonly static Color Impostor = Palette.ImpostorRed; //Modifiers - public readonly static Color Bait = new Color(0f, 0.7f, 0.7f, 1f); + public readonly static Color Bait = new Color(0.2f, 0.7f, 0.7f, 1f); public readonly static Color Aftermath = new Color(0.65f, 1f, 0.65f, 1f); public readonly static Color Diseased = Color.grey; public readonly static Color Torch = new Color(1f, 1f, 0.6f, 1f); @@ -70,6 +72,7 @@ class Colors { public readonly static Color Frosty = new Color(0.6f, 1f, 1f, 1f); public readonly static Color SixthSense = new Color(0.85f, 1f, 0.55f, 1f); public readonly static Color Shy = new Color(1f, 0.7f, 0.8f, 1f); + public readonly static Color Mini = new Color(0.8f, 1f, 0.9f, 1f); } } diff --git a/source/Patches/CrewmateRoles/AltruistMod/Coroutine.cs b/source/Patches/CrewmateRoles/AltruistMod/Coroutine.cs index 9bdbf23ba..1f409e4b7 100644 --- a/source/Patches/CrewmateRoles/AltruistMod/Coroutine.cs +++ b/source/Patches/CrewmateRoles/AltruistMod/Coroutine.cs @@ -21,6 +21,15 @@ public class Coroutine public static IEnumerator AltruistRevive(DeadBody target, Altruist role) { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(target.ParentId)) + { + if (!lookout.Watching[target.ParentId].Contains(RoleEnum.Altruist)) lookout.Watching[target.ParentId].Add(RoleEnum.Altruist); + } + } + var parent = Utils.PlayerById(target.ParentId); var position = target.TruePosition; var altruist = role.Player; diff --git a/source/Patches/CrewmateRoles/DeputyMod/AddButton.cs b/source/Patches/CrewmateRoles/DeputyMod/AddButton.cs new file mode 100644 index 000000000..6a930ede6 --- /dev/null +++ b/source/Patches/CrewmateRoles/DeputyMod/AddButton.cs @@ -0,0 +1,377 @@ +using System; +using System.Linq; +using HarmonyLib; +using Il2CppInterop.Runtime.InteropTypes.Arrays; +using Reactor.Utilities.Extensions; +using TownOfUs.CrewmateRoles.ImitatorMod; +using TownOfUs.CrewmateRoles.MedicMod; +using TownOfUs.CrewmateRoles.SwapperMod; +using TownOfUs.CrewmateRoles.VigilanteMod; +using TownOfUs.Extensions; +using TownOfUs.ImpostorRoles.BlackmailerMod; +using TownOfUs.Modifiers.AssassinMod; +using TownOfUs.NeutralRoles.DoomsayerMod; +using TownOfUs.Patches; +using TownOfUs.Roles; +using TownOfUs.Roles.Modifiers; +using UnityEngine; +using UnityEngine.UI; +using Object = UnityEngine.Object; + +namespace TownOfUs.CrewmateRoles.DeputyMod +{ + [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Start))] + public class AddButtonDeputy + { + private static Sprite ShootSprite => TownOfUs.ShootSprite; + + private static bool IsExempt(PlayerVoteArea voteArea) + { + if (voteArea.AmDead) return true; + var player = Utils.PlayerById(voteArea.TargetPlayerId); + if (player.IsJailed()) return true; + if (PlayerControl.LocalPlayer == player) return true; + if (PlayerControl.LocalPlayer.IsLover()) + { + var lover = Modifier.GetModifier(PlayerControl.LocalPlayer); + if (lover.OtherLover.Player == player) return true; + } + if ( + player == null || + player.Data.IsDead || + player.Data.Disconnected + ) return true; + return false; + } + + public static void GenButton(Deputy role, PlayerVoteArea voteArea) + { + var targetId = voteArea.TargetPlayerId; + if (IsExempt(voteArea)) + { + role.Buttons[targetId] = null; + return; + } + + var confirmButton = voteArea.Buttons.transform.GetChild(0).gameObject; + + var newButton = Object.Instantiate(confirmButton, voteArea.transform); + var renderer = newButton.GetComponent(); + var passive = newButton.GetComponent(); + + renderer.sprite = ShootSprite; + newButton.transform.position = confirmButton.transform.position - new Vector3(0.75f, 0f, 0f); + newButton.transform.localScale *= 0.8f; + newButton.layer = 5; + newButton.transform.parent = confirmButton.transform.parent.parent; + + passive.OnClick = new Button.ButtonClickedEvent(); + passive.OnClick.AddListener(Shoot(role, voteArea)); + role.Buttons[targetId] = newButton; + } + + + private static Action Shoot(Deputy role, PlayerVoteArea voteArea) + { + void Listener() + { + var target = Utils.PlayerById(voteArea.TargetPlayerId); + if (target == role.Killer && !target.Is(RoleEnum.Pestilence)) + { + Shoot(role, target); + if (target.Is(Faction.Crewmates)) role.IncorrectKills += 1; + else role.CorrectKills += 1; + } + else DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, "You missed your shot! They are either not the killer or are invincible (Pestilence)."); + Utils.Rpc(CustomRPC.Camp, role.Player.PlayerId, (byte)2, target.PlayerId); + role.Killer = null; + RemoveButtons.HideButtons(role); + } + + return Listener; + } + + public static void Shoot(Deputy deputy, PlayerControl player, bool checkLover = true) + { + PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( + x => x.TargetPlayerId == player.PlayerId + ); + + var hudManager = DestroyableSingleton.Instance; + if (checkLover) + { + SoundManager.Instance.PlaySound(player.KillSfx, false, 0.8f); + hudManager.KillOverlay.ShowKillAnimation(player.Data, player.Data); + } + var amOwner = player.AmOwner; + if (amOwner) + { + Utils.ShowDeadBodies = true; + hudManager.ShadowQuad.gameObject.SetActive(false); + player.nameText().GetComponent().material.SetInt("_Mask", 0); + player.RpcSetScanner(false); + ImportantTextTask importantTextTask = new GameObject("_Player").AddComponent(); + importantTextTask.transform.SetParent(AmongUsClient.Instance.transform, false); + if (!GameOptionsManager.Instance.currentNormalGameOptions.GhostsDoTasks) + { + for (int i = 0; i < player.myTasks.Count; i++) + { + PlayerTask playerTask = player.myTasks.ToArray()[i]; + playerTask.OnRemove(); + Object.Destroy(playerTask.gameObject); + } + + player.myTasks.Clear(); + importantTextTask.Text = DestroyableSingleton.Instance.GetString( + StringNames.GhostIgnoreTasks, + new Il2CppReferenceArray(0) + ); + } + else + { + importantTextTask.Text = DestroyableSingleton.Instance.GetString( + StringNames.GhostDoTasks, + new Il2CppReferenceArray(0)); + } + + player.myTasks.Insert(0, importantTextTask); + + if (player.Is(RoleEnum.Swapper)) + { + var swapper = Role.GetRole(PlayerControl.LocalPlayer); + var buttons = Role.GetRole(player).Buttons; + foreach (var button in buttons) + { + if (button != null) + { + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + swapper.ListOfActives.Clear(); + swapper.Buttons.Clear(); + SwapVotes.Swap1 = null; + SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + + if (player.Is(RoleEnum.Imitator)) + { + var imitator = Role.GetRole(PlayerControl.LocalPlayer); + var buttons = Role.GetRole(player).Buttons; + foreach (var button in buttons) + { + if (button != null) + { + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + imitator.ListOfActives.Clear(); + imitator.Buttons.Clear(); + SetImitate.Imitate = null; + } + + if (player.Is(RoleEnum.Vigilante)) + { + var retributionist = Role.GetRole(PlayerControl.LocalPlayer); + ShowHideButtonsVigi.HideButtonsVigi(retributionist); + } + + if (player.Is(AbilityEnum.Assassin)) + { + var assassin = Ability.GetAbility(PlayerControl.LocalPlayer); + ShowHideButtons.HideButtons(assassin); + } + + if (player.Is(RoleEnum.Doomsayer)) + { + var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); + ShowHideButtonsDoom.HideButtonsDoom(doomsayer); + ShowHideButtonsDoom.HideTextDoom(doomsayer); + } + + if (player.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + RemoveButtons.HideButtons(dep); + } + + if (player.Is(RoleEnum.Politician)) + { + var politician = Role.GetRole(PlayerControl.LocalPlayer); + politician.RevealButton.Destroy(); + } + + if (player.Is(RoleEnum.Mayor)) + { + var mayor = Role.GetRole(PlayerControl.LocalPlayer); + mayor.RevealButton.Destroy(); + } + + if (player.Is(RoleEnum.Jailor)) + { + var jailor = Role.GetRole(PlayerControl.LocalPlayer); + jailor.ExecuteButton.Destroy(); + jailor.UsesText.Destroy(); + } + + if (player.Is(RoleEnum.Hypnotist)) + { + var hypnotist = Role.GetRole(PlayerControl.LocalPlayer); + hypnotist.HysteriaButton.Destroy(); + } + } + player.Die(DeathReason.Kill, false); + if (checkLover && player.IsLover() && CustomGameOptions.BothLoversDie) + { + var otherLover = Modifier.GetModifier(player).OtherLover.Player; + if (!otherLover.Is(RoleEnum.Pestilence)) Shoot(deputy, otherLover, false); + } + + var deadPlayer = new DeadPlayer + { + PlayerId = player.PlayerId, + KillerId = player.PlayerId, + KillTime = System.DateTime.UtcNow, + }; + + Murder.KilledPlayers.Add(deadPlayer); + if (voteArea == null) return; + if (voteArea.DidVote) voteArea.UnsetVote(); + voteArea.AmDead = true; + voteArea.Overlay.gameObject.SetActive(true); + voteArea.Overlay.color = Color.white; + voteArea.XMark.gameObject.SetActive(true); + voteArea.XMark.transform.localScale = Vector3.one; + + var meetingHud = MeetingHud.Instance; + if (amOwner) + { + meetingHud.SetForegroundForDead(); + } + + var blackmailers = Role.AllRoles.Where(x => x.RoleType == RoleEnum.Blackmailer && x.Player != null).Cast(); + foreach (var role in blackmailers) + { + if (role.Blackmailed != null && voteArea.TargetPlayerId == role.Blackmailed.PlayerId) + { + if (BlackmailMeetingUpdate.PrevXMark != null && BlackmailMeetingUpdate.PrevOverlay != null) + { + voteArea.XMark.sprite = BlackmailMeetingUpdate.PrevXMark; + voteArea.Overlay.sprite = BlackmailMeetingUpdate.PrevOverlay; + voteArea.XMark.transform.localPosition = new Vector3( + voteArea.XMark.transform.localPosition.x - BlackmailMeetingUpdate.LetterXOffset, + voteArea.XMark.transform.localPosition.y - BlackmailMeetingUpdate.LetterYOffset, + voteArea.XMark.transform.localPosition.z); + } + } + } + + if (PlayerControl.LocalPlayer.Is(RoleEnum.Vigilante) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var vigi = Role.GetRole(PlayerControl.LocalPlayer); + ShowHideButtonsVigi.HideTarget(vigi, voteArea.TargetPlayerId); + } + + if (PlayerControl.LocalPlayer.Is(AbilityEnum.Assassin) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var assassin = Ability.GetAbility(PlayerControl.LocalPlayer); + ShowHideButtons.HideTarget(assassin, voteArea.TargetPlayerId); + } + + if (PlayerControl.LocalPlayer.Is(RoleEnum.Doomsayer) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var doom = Role.GetRole(PlayerControl.LocalPlayer); + ShowHideButtonsDoom.HideTarget(doom, voteArea.TargetPlayerId); + } + + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + if (dep.Buttons.Count > 0 && dep.Buttons[voteArea.TargetPlayerId] != null) + { + dep.Buttons[voteArea.TargetPlayerId].SetActive(false); + dep.Buttons[voteArea.TargetPlayerId].GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + + if (PlayerControl.LocalPlayer.Is(RoleEnum.Swapper) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var swapper = Role.GetRole(PlayerControl.LocalPlayer); + var index = int.MaxValue; + for (var i = 0; i < swapper.ListOfActives.Count; i++) + { + if (swapper.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) + { + var button = swapper.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + { + swapper.ListOfActives[index] = (swapper.ListOfActives[index].Item1, false); + if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; + if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + swapper.Buttons[index] = null; + } + } + } + + foreach (var playerVoteArea in meetingHud.playerStates) + { + if (playerVoteArea.VotedFor != player.PlayerId) continue; + playerVoteArea.UnsetVote(); + var voteAreaPlayer = Utils.PlayerById(playerVoteArea.TargetPlayerId); + if (voteAreaPlayer.Is(RoleEnum.Prosecutor)) + { + var pros = Role.GetRole(voteAreaPlayer); + pros.ProsecuteThisMeeting = false; + } + if (!voteAreaPlayer.AmOwner) continue; + meetingHud.ClearVote(); + } + + if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); + if (MeetingHud.Instance.state != MeetingHud.VoteStates.Results && MeetingHud.Instance.state != MeetingHud.VoteStates.Proceeding) + { + AddButtonImitator.GenButton(imitatorRole, voteArea, true); + } + } + + if (AmongUsClient.Instance.AmHost) meetingHud.CheckForEndVoting(); + + AddHauntPatch.AssassinatedPlayers.Add(player); + } + + public static void Postfix(MeetingHud __instance) + { + foreach (var role in Role.GetRoles(RoleEnum.Deputy)) + { + var deputy = (Deputy)role; + deputy.Buttons.Clear(); + } + + if (PlayerControl.LocalPlayer.Data.IsDead) return; + if (!PlayerControl.LocalPlayer.Is(RoleEnum.Deputy)) return; + if (PlayerControl.LocalPlayer.IsJailed()) return; + var deputyrole = Role.GetRole(PlayerControl.LocalPlayer); + if (deputyrole.Killer == null) return; + foreach (var voteArea in __instance.playerStates) + { + GenButton(deputyrole, voteArea); + } + } + } +} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/DeputyMod/HudCamp.cs b/source/Patches/CrewmateRoles/DeputyMod/HudCamp.cs new file mode 100644 index 000000000..a01af7f39 --- /dev/null +++ b/source/Patches/CrewmateRoles/DeputyMod/HudCamp.cs @@ -0,0 +1,29 @@ +using HarmonyLib; +using TownOfUs.Roles; + +namespace TownOfUs.CrewmateRoles.DeputyMod +{ + [HarmonyPatch(typeof(HudManager))] + public class HudCamp + { + [HarmonyPatch(nameof(HudManager.Update))] + public static void Postfix(HudManager __instance) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (!PlayerControl.LocalPlayer.Is(RoleEnum.Deputy)) return; + var campButton = __instance.KillButton; + + var role = Role.GetRole(PlayerControl.LocalPlayer); + + campButton.gameObject.SetActive((__instance.UseButton.isActiveAndEnabled || __instance.PetButton.isActiveAndEnabled) + && !MeetingHud.Instance && !PlayerControl.LocalPlayer.Data.IsDead + && AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started); + campButton.SetCoolDown(role.StartTimer(), 10f); + + if (role.Camping == null && role.CampedThisRound == false) Utils.SetTarget(ref role.ClosestPlayer, campButton, float.NaN); + else campButton.SetTarget(null); + } + } +} diff --git a/source/Patches/CrewmateRoles/DeputyMod/NotVote.cs b/source/Patches/CrewmateRoles/DeputyMod/NotVote.cs new file mode 100644 index 000000000..e431c664d --- /dev/null +++ b/source/Patches/CrewmateRoles/DeputyMod/NotVote.cs @@ -0,0 +1,30 @@ +using HarmonyLib; +using TownOfUs.Roles; +using UnityEngine.UI; + +namespace TownOfUs.CrewmateRoles.DeputyMod +{ + [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.VotingComplete))] + public static class RemoveButtons + { + public static void Postfix(MeetingHud __instance) + { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + HideButtons(dep); + } + } + + public static void HideButtons(Deputy role) + { + foreach (var (_, button) in role.Buttons) + { + if (button == null) continue; + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + role.Buttons.Clear(); + } + } +} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/DeputyMod/PerformKill.cs b/source/Patches/CrewmateRoles/DeputyMod/PerformKill.cs new file mode 100644 index 000000000..35f8dc63b --- /dev/null +++ b/source/Patches/CrewmateRoles/DeputyMod/PerformKill.cs @@ -0,0 +1,32 @@ +using HarmonyLib; +using TownOfUs.Roles; + +namespace TownOfUs.CrewmateRoles.DeputyMod +{ + [HarmonyPatch(typeof(KillButton), nameof(KillButton.DoClick))] + public class PerformKill + { + public static bool Prefix(KillButton __instance) + { + if (__instance != DestroyableSingleton.Instance.KillButton) return true; + var flag = PlayerControl.LocalPlayer.Is(RoleEnum.Deputy); + if (!flag) return true; + var role = Role.GetRole(PlayerControl.LocalPlayer); + if (!PlayerControl.LocalPlayer.CanMove) return false; + if (PlayerControl.LocalPlayer.Data.IsDead) return false; + if (!__instance.enabled) return false; + if (role.ClosestPlayer == null || role.Camping != null) return false; + if (role.StartTimer() > 0 || role.CampedThisRound) return false; + + var interact = Utils.Interact(PlayerControl.LocalPlayer, role.ClosestPlayer); + if (interact[4] == true) + { + role.Camping = role.ClosestPlayer; + role.CampedThisRound = true; + Utils.Rpc(CustomRPC.Camp, PlayerControl.LocalPlayer.PlayerId, (byte)0, role.Camping.PlayerId); + return false; + } + return false; + } + } +} diff --git a/source/Patches/CrewmateRoles/ImitatorMod/AddButton.cs b/source/Patches/CrewmateRoles/ImitatorMod/AddButton.cs index e40307314..2774b03a6 100644 --- a/source/Patches/CrewmateRoles/ImitatorMod/AddButton.cs +++ b/source/Patches/CrewmateRoles/ImitatorMod/AddButton.cs @@ -15,19 +15,33 @@ public class AddButtonImitator private static Sprite ActiveSprite => TownOfUs.ImitateSelectSprite; public static Sprite DisabledSprite => TownOfUs.ImitateDeselectSprite; + private static bool IsExempt(PlayerVoteArea voteArea) + { + var player = Utils.PlayerById(voteArea.TargetPlayerId); + if ( + player == null || + !player.Data.IsDead || + player.Data.Disconnected + ) return true; + return !player.Is(Faction.Crewmates); + } + - public static void GenButton(Imitator role, int index, bool isUseable, bool replace = false) + public static void GenButton(Imitator role, PlayerVoteArea voteArea, bool replace = false) { - if (!isUseable) + if (PlayerControl.LocalPlayer.IsJailed()) return; + var targetId = voteArea.TargetPlayerId; + if (IsExempt(voteArea)) { + if (replace) return; role.Buttons.Add(null); - role.ListOfActives.Add(false); + role.ListOfActives.Add((targetId, false)); return; } - var confirmButton = MeetingHud.Instance.playerStates[index].Buttons.transform.GetChild(0).gameObject; + var confirmButton = voteArea.Buttons.transform.GetChild(0).gameObject; - var newButton = Object.Instantiate(confirmButton, MeetingHud.Instance.playerStates[index].transform); + var newButton = Object.Instantiate(confirmButton, voteArea.transform); var renderer = newButton.GetComponent(); var passive = newButton.GetComponent(); @@ -38,43 +52,62 @@ public static void GenButton(Imitator role, int index, bool isUseable, bool repl newButton.transform.parent = confirmButton.transform.parent.parent; passive.OnClick = new Button.ButtonClickedEvent(); - passive.OnClick.AddListener(SetActive(role, index)); - if (replace) role.Buttons[index] = newButton; + passive.OnClick.AddListener(SetActive(role, targetId)); + if (replace) + { + for (var i = 0; i < role.Buttons.Count; i++) + { + if (role.ListOfActives[i].Item1 == targetId) + { + role.Buttons[i] = newButton; + } + } + } else { role.Buttons.Add(newButton); - role.ListOfActives.Add(false); + role.ListOfActives.Add((targetId, false)); } } - private static Action SetActive(Imitator role, int index) + private static Action SetActive(Imitator role, int targetId) { void Listener() { - if (role.ListOfActives.Count(x => x) == 1 && + int index = int.MaxValue; + for (var i = 0; i < role.ListOfActives.Count; i++) + { + if (role.ListOfActives[i].Item1 == targetId) + { + index = i; + break; + } + } + if (index == int.MaxValue) return; + if (role.ListOfActives.Count(x => x.Item2) == 1 && role.Buttons[index].GetComponent().sprite == DisabledSprite) { int active = 0; - for (var i = 0; i < role.ListOfActives.Count; i++) if (role.ListOfActives[i]) active = i; + for (var i = 0; i < role.ListOfActives.Count; i++) if (role.ListOfActives[i].Item2) active = i; role.Buttons[active].GetComponent().sprite = - role.ListOfActives[active] ? DisabledSprite : ActiveSprite; + role.ListOfActives[active].Item2 ? DisabledSprite : ActiveSprite; - role.ListOfActives[active] = !role.ListOfActives[active]; + role.ListOfActives[active] = (role.ListOfActives[active].Item1, !role.ListOfActives[active].Item2); } role.Buttons[index].GetComponent().sprite = - role.ListOfActives[index] ? DisabledSprite : ActiveSprite; + role.ListOfActives[index].Item2 ? DisabledSprite : ActiveSprite; - role.ListOfActives[index] = !role.ListOfActives[index]; + role.ListOfActives[index] = (role.ListOfActives[index].Item1, !role.ListOfActives[index].Item2); _mostRecentId = index; SetImitate.Imitate = null; for (var i = 0; i < role.ListOfActives.Count; i++) { - if (!role.ListOfActives[i]) continue; + if (!role.ListOfActives[i].Item2) continue; SetImitate.Imitate = MeetingHud.Instance.playerStates[i]; } } @@ -95,23 +128,9 @@ public static void Postfix(MeetingHud __instance) if (!PlayerControl.LocalPlayer.Is(RoleEnum.Imitator)) return; if (PlayerControl.LocalPlayer.IsJailed()) return; var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); - for (var i = 0; i < __instance.playerStates.Length; i++) + foreach (var voteArea in __instance.playerStates) { - foreach (var player in PlayerControl.AllPlayerControls) - { - if (player.PlayerId == __instance.playerStates[i].TargetPlayerId) - { - var imitatable = false; - var imitatedRole = Role.GetRole(player).RoleType; - if (imitatedRole == RoleEnum.Haunter) - { - var haunter = Role.GetRole(player); - imitatedRole = haunter.formerRole; - } - if (player.Data.IsDead && !player.Data.Disconnected && imitatorRole.ImitatableRoles.Contains(imitatedRole)) imitatable = true; - GenButton(imitatorRole, i, imitatable); - } - } + GenButton(imitatorRole, voteArea); } } } diff --git a/source/Patches/CrewmateRoles/ImitatorMod/MeetingStart.cs b/source/Patches/CrewmateRoles/ImitatorMod/MeetingStart.cs index cded736fa..430df6997 100644 --- a/source/Patches/CrewmateRoles/ImitatorMod/MeetingStart.cs +++ b/source/Patches/CrewmateRoles/ImitatorMod/MeetingStart.cs @@ -31,7 +31,7 @@ public static void Postfix(MeetingHud __instance) { message += $" {role},"; } - message.Remove(message.Length - 1, 1); + message = message.Remove(message.Length - 1, 1); if (DestroyableSingleton.Instance) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, message); } @@ -43,6 +43,29 @@ public static void Postfix(MeetingHud __instance) if (!string.IsNullOrWhiteSpace(playerResults)) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, playerResults); } + else if (imitatorRole.watchedPlayers != null) + { + foreach (var (key, value) in imitatorRole.watchedPlayers) + { + var name = Utils.PlayerById(key).Data.PlayerName; + if (value.Count == 0) + { + if (DestroyableSingleton.Instance) + DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"No players interacted with {name}"); + } + else + { + string message = $"Roles seen interacting with {name}:\n"; + foreach (RoleEnum role in value.OrderBy(x => Guid.NewGuid())) + { + message += $" {role},"; + } + message = message.Remove(message.Length - 1, 1); + if (DestroyableSingleton.Instance) + DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, message); + } + } + } } } } diff --git a/source/Patches/CrewmateRoles/ImitatorMod/SetImitate.cs b/source/Patches/CrewmateRoles/ImitatorMod/SetImitate.cs index b240e7bc0..0106ce937 100644 --- a/source/Patches/CrewmateRoles/ImitatorMod/SetImitate.cs +++ b/source/Patches/CrewmateRoles/ImitatorMod/SetImitate.cs @@ -14,18 +14,19 @@ public static class VotingComplete { public static void Postfix(MeetingHud __instance) { - if (Imitate == null) return; - if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator)) { var imitator = Role.GetRole(PlayerControl.LocalPlayer); foreach (var button in imitator.Buttons.Where(button => button != null)) button.SetActive(false); - foreach (var player in PlayerControl.AllPlayerControls) + if (Imitate != null) { - if (player.PlayerId == Imitate.TargetPlayerId) - { - imitator.ImitatePlayer = player; + foreach (var player in PlayerControl.AllPlayerControls) + { + if (player.PlayerId == Imitate.TargetPlayerId) + { + imitator.ImitatePlayer = player; + } } } diff --git a/source/Patches/CrewmateRoles/ImitatorMod/ShowHideButtons.cs b/source/Patches/CrewmateRoles/ImitatorMod/ShowHideButtons.cs deleted file mode 100644 index 56299c3b9..000000000 --- a/source/Patches/CrewmateRoles/ImitatorMod/ShowHideButtons.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Linq; -using HarmonyLib; -using TownOfUs.Roles; -using UnityEngine; -using UnityEngine.UI; - -namespace TownOfUs.CrewmateRoles.ImitatorMod -{ - public class ShowHideButtonsImitator - { - [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Confirm))] - public static class Confirm - { - public static bool Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Imitator)) return true; - var imitator = Role.GetRole(PlayerControl.LocalPlayer); - foreach (var button in imitator.Buttons.Where(button => button != null)) - { - if (button.GetComponent().sprite == AddButtonImitator.DisabledSprite) - button.SetActive(false); - - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - } - - if (imitator.ListOfActives.Count(x => x) == 1) - { - for (var i = 0; i < imitator.ListOfActives.Count; i++) - { - if (!imitator.ListOfActives[i]) continue; - SetImitate.Imitate = __instance.playerStates[i]; - } - } - - return true; - } - } - } -} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/ImitatorMod/StartImitate.cs b/source/Patches/CrewmateRoles/ImitatorMod/StartImitate.cs index cce989f58..9629db770 100644 --- a/source/Patches/CrewmateRoles/ImitatorMod/StartImitate.cs +++ b/source/Patches/CrewmateRoles/ImitatorMod/StartImitate.cs @@ -4,6 +4,8 @@ using UnityEngine; using Object = UnityEngine.Object; using TownOfUs.Patches; +using System.Linq; +using TownOfUs.Extensions; namespace TownOfUs.CrewmateRoles.ImitatorMod { @@ -41,6 +43,8 @@ public static void Prefix(GameObject obj) if (obj.name?.Contains("ExileCutscene") == true) ExileControllerPostfix(ExileControllerPatch.lastExiled); } + public static Sprite Sprite => TownOfUs.Arrow; + public static void Imitate(Imitator imitator) { if (imitator.ImitatePlayer == null) return; @@ -51,36 +55,97 @@ public static void Imitate(Imitator imitator) var haunter = Role.GetRole(imitator.ImitatePlayer); imitatorRole = haunter.formerRole; } - if (imitatorRole == RoleEnum.Crewmate) return; var role = Role.GetRole(ImitatingPlayer); var killsList = (role.Kills, role.CorrectKills, role.IncorrectKills, role.CorrectAssassinKills, role.IncorrectAssassinKills); Role.RoleDictionary.Remove(ImitatingPlayer.PlayerId); - if (imitatorRole == RoleEnum.Aurial) new Aurial(ImitatingPlayer); - if (imitatorRole == RoleEnum.Detective) new Detective(ImitatingPlayer); - if (imitatorRole == RoleEnum.Investigator) new Investigator(ImitatingPlayer); - if (imitatorRole == RoleEnum.Mystic) new Mystic(ImitatingPlayer); - if (imitatorRole == RoleEnum.Seer) new Seer(ImitatingPlayer); - if (imitatorRole == RoleEnum.Spy) new Spy(ImitatingPlayer); - if (imitatorRole == RoleEnum.Tracker) new Tracker(ImitatingPlayer); - if (imitatorRole == RoleEnum.Sheriff) new Sheriff(ImitatingPlayer); - if (imitatorRole == RoleEnum.Veteran) new Veteran(ImitatingPlayer); - if (imitatorRole == RoleEnum.Altruist) new Altruist(ImitatingPlayer); - if (imitatorRole == RoleEnum.Engineer) new Engineer(ImitatingPlayer); - if (imitatorRole == RoleEnum.Medium) new Medium(ImitatingPlayer); - if (imitatorRole == RoleEnum.Transporter) new Transporter(ImitatingPlayer); - if (imitatorRole == RoleEnum.Trapper) new Trapper(ImitatingPlayer); - if (imitatorRole == RoleEnum.Oracle) new Oracle(ImitatingPlayer); - if (imitatorRole == RoleEnum.Hunter) new Hunter(ImitatingPlayer); - if (imitatorRole == RoleEnum.Warden) new Warden(ImitatingPlayer); - if (imitatorRole == RoleEnum.Medic) + if (imitatorRole == RoleEnum.Crewmate) new Crewmate(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Aurial) new Aurial(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Detective) new Detective(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Investigator) new Investigator(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Lookout) new Lookout(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Mystic) new Mystic(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Oracle) new Oracle(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Seer) new Seer(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Snitch) + { + var snitch = new Snitch(ImitatingPlayer); + var taskinfos = ImitatingPlayer.Data.Tasks.ToArray(); + var tasksLeft = taskinfos.Count(x => !x.Complete); + if (tasksLeft <= CustomGameOptions.SnitchTasksRemaining && ((PlayerControl.LocalPlayer.Data.IsImpostor() && (!PlayerControl.LocalPlayer.Is(RoleEnum.Traitor) || CustomGameOptions.SnitchSeesTraitor)) + || (PlayerControl.LocalPlayer.Is(Faction.NeutralKilling) && CustomGameOptions.SnitchSeesNeutrals))) + { + var gameObj = new GameObject(); + var arrow = gameObj.AddComponent(); + gameObj.transform.parent = PlayerControl.LocalPlayer.gameObject.transform; + var renderer = gameObj.AddComponent(); + renderer.sprite = Sprite; + arrow.image = renderer; + gameObj.layer = 5; + snitch.ImpArrows.Add(arrow); + } + else if (tasksLeft == 0 && PlayerControl.LocalPlayer == ImitatingPlayer) + { + var impostors = PlayerControl.AllPlayerControls.ToArray().Where(x => x.Data.IsImpostor()); + foreach (var imp in impostors) + { + if (!imp.Is(RoleEnum.Traitor) || CustomGameOptions.SnitchSeesTraitor) + { + var gameObj = new GameObject(); + var arrow = gameObj.AddComponent(); + gameObj.transform.parent = PlayerControl.LocalPlayer.gameObject.transform; + var renderer = gameObj.AddComponent(); + renderer.sprite = Sprite; + arrow.image = renderer; + gameObj.layer = 5; + snitch.SnitchArrows.Add(imp.PlayerId, arrow); + } + } + } + } + else if (imitatorRole == RoleEnum.Spy) new Spy(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Tracker) new Tracker(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Trapper) new Trapper(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Deputy) + { + var deputy = new Deputy(ImitatingPlayer); + deputy.StartingCooldown = deputy.StartingCooldown.AddSeconds(-10f); + } + else if (imitatorRole == RoleEnum.Hunter) new Hunter(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Jailor) new Jailor(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Sheriff) new Sheriff(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Veteran) new Veteran(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Vigilante) new Vigilante(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Altruist) new Altruist(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Medic) { var medic = new Medic(ImitatingPlayer); medic.UsedAbility = true; medic.StartingCooldown = medic.StartingCooldown.AddSeconds(-10f); } + else if (imitatorRole == RoleEnum.Warden) + { + var warden = new Warden(ImitatingPlayer); + warden.StartingCooldown = warden.StartingCooldown.AddSeconds(-10f); + } + else if (imitatorRole == RoleEnum.Engineer) new Engineer(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Mayor) + { + var mayor = new Mayor(ImitatingPlayer); + if (CustomGameOptions.ImitatorCanBecomeMayor) + { + mayor.Revealed = true; + if (PlayerControl.LocalPlayer == ImitatingPlayer) mayor.RegenTask(); + } + } + else if (imitatorRole == RoleEnum.Medium) new Medium(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Politician) new Politician(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Prosecutor) new Prosecutor(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Swapper) new Swapper(ImitatingPlayer); + else if (imitatorRole == RoleEnum.Transporter) new Transporter(ImitatingPlayer); var newRole = Role.GetRole(ImitatingPlayer); - newRole.RemoveFromRoleHistory(newRole.RoleType); + if (imitatorRole != RoleEnum.Mayor || !CustomGameOptions.ImitatorCanBecomeMayor) newRole.RemoveFromRoleHistory(newRole.RoleType); + else ImitatingPlayer = null; newRole.Kills = killsList.Kills; newRole.CorrectKills = killsList.CorrectKills; newRole.IncorrectKills = killsList.IncorrectKills; diff --git a/source/Patches/CrewmateRoles/ImitatorMod/StopImitate.cs b/source/Patches/CrewmateRoles/ImitatorMod/StopImitate.cs index ef61527b3..209da2f40 100644 --- a/source/Patches/CrewmateRoles/ImitatorMod/StopImitate.cs +++ b/source/Patches/CrewmateRoles/ImitatorMod/StopImitate.cs @@ -4,6 +4,7 @@ using TownOfUs.CrewmateRoles.InvestigatorMod; using TownOfUs.CrewmateRoles.TrapperMod; using System.Collections.Generic; +using System.Linq; namespace TownOfUs.CrewmateRoles.ImitatorMod { @@ -20,7 +21,9 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] Network if (StartImitate.ImitatingPlayer != null && !StartImitate.ImitatingPlayer.Is(RoleEnum.Traitor)) { List trappedPlayers = null; + Dictionary> seenPlayers = null; PlayerControl confessingPlayer = null; + PlayerControl jailedPlayer = null; if (PlayerControl.LocalPlayer == StartImitate.ImitatingPlayer) { @@ -40,6 +43,13 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] Network Object.Destroy(trackerRole.UsesText); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var loRole = Role.GetRole(PlayerControl.LocalPlayer); + Object.Destroy(loRole.UsesText); + seenPlayers = loRole.Watching; + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Aurial)) { var aurialRole = Role.GetRole(PlayerControl.LocalPlayer); @@ -87,6 +97,12 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] Network wardenRole.ClosestPlayer = null; } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy)) + { + var deputyRole = Role.GetRole(PlayerControl.LocalPlayer); + deputyRole.ClosestPlayer = null; + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Detective)) { var detecRole = Role.GetRole(PlayerControl.LocalPlayer); @@ -108,8 +124,23 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] Network hunterRole.StalkButton.gameObject.SetActive(false); } - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Investigator) && !PlayerControl.LocalPlayer.Is(RoleEnum.Mystic) - && !PlayerControl.LocalPlayer.Is(RoleEnum.Spy)) DestroyableSingleton.Instance.KillButton.gameObject.SetActive(false); + if (PlayerControl.LocalPlayer.Is(RoleEnum.Politician)) + { + var politicianRole = Role.GetRole(PlayerControl.LocalPlayer); + politicianRole.ClosestPlayer = null; + } + + if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor)) + { + var jailorRole = Role.GetRole(PlayerControl.LocalPlayer); + jailorRole.ClosestPlayer = null; + } + + try + { + DestroyableSingleton.Instance.KillButton.gameObject.SetActive(false); + } + catch { } } if (StartImitate.ImitatingPlayer.Is(RoleEnum.Medium)) @@ -119,12 +150,29 @@ public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] Network medRole.MediatedPlayers.Clear(); } + if (StartImitate.ImitatingPlayer.Is(RoleEnum.Snitch)) + { + var snitchRole = Role.GetRole(StartImitate.ImitatingPlayer); + snitchRole.SnitchArrows.Values.DestroyAll(); + snitchRole.SnitchArrows.Clear(); + snitchRole.ImpArrows.DestroyAll(); + snitchRole.ImpArrows.Clear(); + } + + if (StartImitate.ImitatingPlayer.Is(RoleEnum.Jailor)) + { + var jailorRole = Role.GetRole(StartImitate.ImitatingPlayer); + jailedPlayer = jailorRole.Jailed; + } + var role = Role.GetRole(StartImitate.ImitatingPlayer); var killsList = (role.Kills, role.CorrectKills, role.IncorrectKills, role.CorrectAssassinKills, role.IncorrectAssassinKills); Role.RoleDictionary.Remove(StartImitate.ImitatingPlayer.PlayerId); var imitator = new Imitator(StartImitate.ImitatingPlayer); imitator.trappedPlayers = trappedPlayers; imitator.confessingPlayer = confessingPlayer; + imitator.watchedPlayers = seenPlayers; + imitator.jailedPlayer = jailedPlayer; var newRole = Role.GetRole(StartImitate.ImitatingPlayer); newRole.RemoveFromRoleHistory(newRole.RoleType); newRole.Kills = killsList.Kills; diff --git a/source/Patches/CrewmateRoles/ImitatorMod/TempJail.cs b/source/Patches/CrewmateRoles/ImitatorMod/TempJail.cs new file mode 100644 index 000000000..e857bd750 --- /dev/null +++ b/source/Patches/CrewmateRoles/ImitatorMod/TempJail.cs @@ -0,0 +1,49 @@ +using HarmonyLib; +using Reactor.Utilities.Extensions; +using TownOfUs.Roles; +using UnityEngine; +using UnityEngine.UI; +using Object = UnityEngine.Object; + +namespace TownOfUs.CrewmateRoles.ImitatorMod +{ + [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Start))] + public class TempJail + { + public static Sprite CellSprite => TownOfUs.InJailSprite; + + public static void GenCell(Imitator role, PlayerVoteArea voteArea) + { + var confirmButton = voteArea.Buttons.transform.GetChild(0).gameObject; + var parent = confirmButton.transform.parent.parent; + + var jailCell = Object.Instantiate(confirmButton, voteArea.transform); + var cellRenderer = jailCell.GetComponent(); + var passive = jailCell.GetComponent(); + cellRenderer.sprite = CellSprite; + jailCell.transform.localPosition = new Vector3(-0.95f, 0f, -2f); + jailCell.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f); + jailCell.layer = 5; + jailCell.transform.parent = parent; + jailCell.transform.GetChild(0).gameObject.Destroy(); + + passive.OnClick = new Button.ButtonClickedEvent(); + } + + public static void Postfix(MeetingHud __instance) + { + foreach (var role in Role.GetRoles(RoleEnum.Imitator)) + { + var imitator = (Imitator)role; + if (imitator.jailedPlayer == null) return; + if (imitator.Player.Data.IsDead || imitator.Player.Data.Disconnected) return; + if (imitator.jailedPlayer.Data.IsDead || imitator.jailedPlayer.Data.Disconnected) return; + foreach (var voteArea in __instance.playerStates) + if (imitator.jailedPlayer.PlayerId == voteArea.TargetPlayerId) + { + GenCell(imitator, voteArea); + } + } + } + } +} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/InvestigatorMod/AddPrints.cs b/source/Patches/CrewmateRoles/InvestigatorMod/AddPrints.cs index f7d138665..d9697660c 100644 --- a/source/Patches/CrewmateRoles/InvestigatorMod/AddPrints.cs +++ b/source/Patches/CrewmateRoles/InvestigatorMod/AddPrints.cs @@ -41,6 +41,7 @@ public static void Postfix(HudManager __instance) { if (player == null || player.Data.IsDead || player.PlayerId == PlayerControl.LocalPlayer.PlayerId) continue; + if ((player.Is(RoleEnum.Swooper) && Role.GetRole(player).IsSwooped) || PlayerControl.LocalPlayer.IsHypnotised()) continue; var canPlace = !investigator.AllPrints.Any(print => Vector3.Distance(print.Position, Position(player)) < 0.5f && print.Color.a > 0.5 && diff --git a/source/Patches/CrewmateRoles/InvestigatorMod/Footprint.cs b/source/Patches/CrewmateRoles/InvestigatorMod/Footprint.cs index 1c7cc988f..2bbcb9682 100644 --- a/source/Patches/CrewmateRoles/InvestigatorMod/Footprint.cs +++ b/source/Patches/CrewmateRoles/InvestigatorMod/Footprint.cs @@ -16,6 +16,7 @@ public class Footprint public Color Color; public Vector3 Position; public Investigator Role; + public bool IsRainbow = false; public Footprint(PlayerControl player, Investigator role) { @@ -25,7 +26,33 @@ public Footprint(PlayerControl player, Investigator role) Player = player; _time = (int) Time.time; - Color = Color.black; + Color = Palette.PlayerColors[player.GetDefaultOutfit().ColorId]; + if (RainbowUtils.IsRainbow(player.GetDefaultOutfit().ColorId)) IsRainbow = true; + if (Grey || (player.Is(RoleEnum.Venerer) && Roles.Role.GetRole(player).IsCamouflaged)) + { + Color = new Color(0.2f, 0.2f, 0.2f, 1f); + IsRainbow = false; + } + if (player.Is(RoleEnum.Morphling)) + { + var morphling = Roles.Role.GetRole(player); + if (morphling.Morphed) + { + Color = Palette.PlayerColors[morphling.MorphedPlayer.GetDefaultOutfit().ColorId]; + if (RainbowUtils.IsRainbow(morphling.MorphedPlayer.GetDefaultOutfit().ColorId)) IsRainbow = true; + else IsRainbow = false; + } + } + if (player.Is(RoleEnum.Glitch)) + { + var glitch = Roles.Role.GetRole(player); + if (glitch.IsUsingMimic) + { + Color = Palette.PlayerColors[glitch.MimicTarget.GetDefaultOutfit().ColorId]; + if (RainbowUtils.IsRainbow(glitch.MimicTarget.GetDefaultOutfit().ColorId)) IsRainbow = true; + else IsRainbow = false; + } + } Start(); role.AllPrints.Add(this); @@ -71,13 +98,8 @@ public bool Update() if (alpha < 0 || alpha > 1) alpha = 0; - - if (RainbowUtils.IsRainbow(Player.GetDefaultOutfit().ColorId) & !Grey) - Color = RainbowUtils.Rainbow; - else if (Grey) - Color = new Color(0.2f, 0.2f, 0.2f, 1f); - else - Color = Palette.PlayerColors[Player.GetDefaultOutfit().ColorId]; + + if (IsRainbow) Color = RainbowUtils.Rainbow; Color = new Color(Color.r, Color.g, Color.b, alpha); _spriteRenderer.color = Color; diff --git a/source/Patches/CrewmateRoles/JailorMod/AddButton.cs b/source/Patches/CrewmateRoles/JailorMod/AddButton.cs index 08b23d487..0537b870f 100644 --- a/source/Patches/CrewmateRoles/JailorMod/AddButton.cs +++ b/source/Patches/CrewmateRoles/JailorMod/AddButton.cs @@ -18,6 +18,7 @@ using TownOfUs.CrewmateRoles.VigilanteMod; using TownOfUs.Modifiers.AssassinMod; using TownOfUs.NeutralRoles.DoomsayerMod; +using TownOfUs.CrewmateRoles.DeputyMod; namespace TownOfUs.CrewmateRoles.JailorMod { @@ -77,6 +78,7 @@ private static Action Execute(Jailor role) { void Listener() { + if (PlayerControl.LocalPlayer.Data.IsDead) return; role.ExecuteButton.Destroy(); role.UsesText.Destroy(); role.JailCell.Destroy(); @@ -204,6 +206,13 @@ public static void ExecuteKill (Jailor jailor, PlayerControl player, bool checkL { var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); ShowHideButtonsDoom.HideButtonsDoom(doomsayer); + ShowHideButtonsDoom.HideTextDoom(doomsayer); + } + + if (player.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + RemoveButtons.HideButtons(dep); } if (player.Is(RoleEnum.Politician)) @@ -298,20 +307,45 @@ public static void ExecuteKill (Jailor jailor, PlayerControl player, bool checkL ShowHideButtonsDoom.HideTarget(doom, voteArea.TargetPlayerId); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + if (dep.Buttons.Count > 0 && dep.Buttons[voteArea.TargetPlayerId] != null) + { + dep.Buttons[voteArea.TargetPlayerId].SetActive(false); + dep.Buttons[voteArea.TargetPlayerId].GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Swapper) && !PlayerControl.LocalPlayer.Data.IsDead) { var swapper = Role.GetRole(PlayerControl.LocalPlayer); - var button = swapper.Buttons[voteArea.TargetPlayerId]; - if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + var index = int.MaxValue; + for (var i = 0; i < swapper.ListOfActives.Count; i++) { - swapper.ListOfActives[voteArea.TargetPlayerId] = false; - if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; - if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; - Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + if (swapper.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) + { + var button = swapper.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + { + swapper.ListOfActives[index] = (swapper.ListOfActives[index].Item1, false); + if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; + if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + swapper.Buttons[index] = null; + } } - button.SetActive(false); - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - swapper.Buttons[voteArea.TargetPlayerId] = null; } } @@ -332,11 +366,9 @@ public static void ExecuteKill (Jailor jailor, PlayerControl player, bool checkL if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator) && !PlayerControl.LocalPlayer.Data.IsDead) { var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); - if (!meetingHud.playerStates[PlayerControl.LocalPlayer.PlayerId].DidVote) + if (MeetingHud.Instance.state != MeetingHud.VoteStates.Results && MeetingHud.Instance.state != MeetingHud.VoteStates.Proceeding) { - RoleEnum imitatedRole = Role.GetRole(player).RoleType; - var imitatable = imitatorRole.ImitatableRoles.Contains(imitatedRole); - AddButtonImitator.GenButton(imitatorRole, player.PlayerId, imitatable, true); + AddButtonImitator.GenButton(imitatorRole, voteArea, true); } } diff --git a/source/Patches/CrewmateRoles/JailorMod/JailChat.cs b/source/Patches/CrewmateRoles/JailorMod/JailChat.cs deleted file mode 100644 index 806ad3979..000000000 --- a/source/Patches/CrewmateRoles/JailorMod/JailChat.cs +++ /dev/null @@ -1,74 +0,0 @@ -using HarmonyLib; -using TownOfUs.Patches; -using TownOfUs.Roles; - -namespace TownOfUs.CrewmateRoles.JailorMod -{ - [HarmonyPatch] - public static class JailChat - { - public static bool JailorMessage = false; - - [HarmonyPatch(typeof(ChatController), nameof(ChatController.AddChat))] - public static class PrivateJaileeChat - { - public static bool Prefix(ChatController __instance, [HarmonyArgument(0)] ref PlayerControl sourcePlayer, ref string chatText) - { - if ((chatText.ToLower().StartsWith("/jail") || chatText.ToLower().StartsWith("/ jail")) && sourcePlayer.Is(RoleEnum.Jailor) && MeetingHud.Instance) - { - if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor) || PlayerControl.LocalPlayer.IsJailed()) - { - if (chatText.ToLower().StartsWith("/jail")) chatText = chatText[5..]; - else if (chatText.ToLower().StartsWith("/jail ")) chatText = chatText[6..]; - else if (chatText.ToLower().StartsWith("/ jail")) chatText = chatText[6..]; - else if (chatText.ToLower().StartsWith("/ jail ")) chatText = chatText[7..]; - JailorMessage = true; - if (sourcePlayer != PlayerControl.LocalPlayer && PlayerControl.LocalPlayer.IsJailed() && !sourcePlayer.Data.IsDead) sourcePlayer = PlayerControl.LocalPlayer; - return true; - } - else return false; - } - if (chatText.ToLower().StartsWith("/")) return false; - if (sourcePlayer.IsJailed() && MeetingHud.Instance) - { - if (PlayerControl.LocalPlayer == sourcePlayer || PlayerControl.LocalPlayer.Is(RoleEnum.Jailor)) return true; - else return false; - } - if (PlayerControl.LocalPlayer.IsJailed() && MeetingHud.Instance) return false; - return true; - } - } - - [HarmonyPatch(typeof(ChatBubble), nameof(ChatBubble.SetName))] - public static class SetName - { - public static void Postfix(ChatBubble __instance, [HarmonyArgument(0)] string playerName) - { - if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor) && MeetingHud.Instance) - { - var jailor = Role.GetRole(PlayerControl.LocalPlayer); - if (jailor.Jailed != null && jailor.Jailed.Data.PlayerName == playerName) - { - __instance.NameText.color = jailor.Color; - __instance.NameText.text = playerName + " (Jailed)"; - } - else if (JailorMessage) - { - __instance.NameText.color = jailor.Color; - __instance.NameText.text = "Jailor"; - JailorMessage = false; - } - } - if (PlayerControl.LocalPlayer.IsJailed() && MeetingHud.Instance) - { - if (JailorMessage) - { - __instance.NameText.color = Colors.Jailor; - __instance.NameText.text = "Jailor"; - JailorMessage = false; - } - } - } - } - } -} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/LookoutMod/HudWatch.cs b/source/Patches/CrewmateRoles/LookoutMod/HudWatch.cs new file mode 100644 index 000000000..8bdaa0039 --- /dev/null +++ b/source/Patches/CrewmateRoles/LookoutMod/HudWatch.cs @@ -0,0 +1,74 @@ +using System.Linq; +using HarmonyLib; +using TownOfUs.Roles; +using UnityEngine; + +namespace TownOfUs.CrewmateRoles.LookoutMod +{ + [HarmonyPatch(typeof(HudManager))] + public class HudTrack + { + [HarmonyPatch(nameof(HudManager.Update))] + public static void Postfix(HudManager __instance) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (!PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) return; + var data = PlayerControl.LocalPlayer.Data; + var isDead = data.IsDead; + var watchButton = __instance.KillButton; + + var role = Role.GetRole(PlayerControl.LocalPlayer); + + if (role.UsesText == null && role.UsesLeft > 0) + { + role.UsesText = Object.Instantiate(watchButton.cooldownTimerText, watchButton.transform); + role.UsesText.gameObject.SetActive(false); + role.UsesText.transform.localPosition = new Vector3( + role.UsesText.transform.localPosition.x + 0.26f, + role.UsesText.transform.localPosition.y + 0.29f, + role.UsesText.transform.localPosition.z); + role.UsesText.transform.localScale = role.UsesText.transform.localScale * 0.65f; + role.UsesText.alignment = TMPro.TextAlignmentOptions.Right; + role.UsesText.fontStyle = TMPro.FontStyles.Bold; + } + if (role.UsesText != null) + { + role.UsesText.text = role.UsesLeft + ""; + } + watchButton.gameObject.SetActive((__instance.UseButton.isActiveAndEnabled || __instance.PetButton.isActiveAndEnabled) + && !MeetingHud.Instance && !PlayerControl.LocalPlayer.Data.IsDead + && AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started); + role.UsesText.gameObject.SetActive((__instance.UseButton.isActiveAndEnabled || __instance.PetButton.isActiveAndEnabled) + && !MeetingHud.Instance && !PlayerControl.LocalPlayer.Data.IsDead + && AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started); + if (role.ButtonUsable) watchButton.SetCoolDown(role.WatchTimer(), CustomGameOptions.WatchCooldown); + else watchButton.SetCoolDown(0f, CustomGameOptions.WatchCooldown); + if (role.UsesLeft == 0) return; + + var notWatching = PlayerControl.AllPlayerControls + .ToArray() + .Where(x => !role.Watching.ContainsKey(x.PlayerId)) + .ToList(); + + Utils.SetTarget(ref role.ClosestPlayer, watchButton, float.NaN, notWatching); + + var renderer = watchButton.graphic; + if (role.ClosestPlayer != null && role.ButtonUsable && PlayerControl.LocalPlayer.moveable) + { + renderer.color = Palette.EnabledColor; + renderer.material.SetFloat("_Desat", 0f); + role.UsesText.color = Palette.EnabledColor; + role.UsesText.material.SetFloat("_Desat", 0f); + } + else + { + renderer.color = Palette.DisabledClear; + renderer.material.SetFloat("_Desat", 1f); + role.UsesText.color = Palette.DisabledClear; + role.UsesText.material.SetFloat("_Desat", 1f); + } + } + } +} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/LookoutMod/MeetingStart.cs b/source/Patches/CrewmateRoles/LookoutMod/MeetingStart.cs new file mode 100644 index 000000000..4bf7f1acc --- /dev/null +++ b/source/Patches/CrewmateRoles/LookoutMod/MeetingStart.cs @@ -0,0 +1,38 @@ +using HarmonyLib; +using System; +using System.Linq; +using TownOfUs.Roles; + +namespace TownOfUs.CrewmateRoles.LookoutMod +{ + [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Start))] + public class MeetingStart + { + public static void Postfix(MeetingHud __instance) + { + if (PlayerControl.LocalPlayer.Data.IsDead) return; + if (!PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) return; + var loRole = Role.GetRole(PlayerControl.LocalPlayer); + foreach (var (key, value) in loRole.Watching) + { + var name = Utils.PlayerById(key).Data.PlayerName; + if (value.Count == 0) + { + if (DestroyableSingleton.Instance) + DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"No players interacted with {name}"); + } + else + { + string message = $"Roles seen interacting with {name}:\n"; + foreach (RoleEnum role in value.OrderBy(x => Guid.NewGuid())) + { + message += $" {role},"; + } + message = message.Remove(message.Length - 1, 1); + if (DestroyableSingleton.Instance) + DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, message); + } + } + } + } +} diff --git a/source/Patches/CrewmateRoles/LookoutMod/PerformKill.cs b/source/Patches/CrewmateRoles/LookoutMod/PerformKill.cs new file mode 100644 index 000000000..7de33a20e --- /dev/null +++ b/source/Patches/CrewmateRoles/LookoutMod/PerformKill.cs @@ -0,0 +1,51 @@ +using System; +using HarmonyLib; +using TownOfUs.Roles; +using UnityEngine; +using AmongUs.GameOptions; +using System.Collections.Generic; + +namespace TownOfUs.CrewmateRoles.LookoutMod +{ + [HarmonyPatch(typeof(KillButton), nameof(KillButton.DoClick))] + public class PerformKill + { + public static Sprite Sprite => TownOfUs.Arrow; + public static bool Prefix(KillButton __instance) + { + if (__instance != DestroyableSingleton.Instance.KillButton) return true; + if (!PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) return true; + var role = Role.GetRole(PlayerControl.LocalPlayer); + if (!PlayerControl.LocalPlayer.CanMove || role.ClosestPlayer == null) return false; + var flag2 = role.WatchTimer() == 0f; + if (!flag2) return false; + if (!__instance.enabled) return false; + var maxDistance = GameOptionsData.KillDistances[GameOptionsManager.Instance.currentNormalGameOptions.KillDistance]; + if (Vector2.Distance(role.ClosestPlayer.GetTruePosition(), + PlayerControl.LocalPlayer.GetTruePosition()) > maxDistance) return false; + if (role.ClosestPlayer == null) return false; + var target = role.ClosestPlayer; + if (!role.ButtonUsable) return false; + + var interact = Utils.Interact(PlayerControl.LocalPlayer, role.ClosestPlayer); + if (interact[4] == true) + { + role.Watching.Add(role.ClosestPlayer.PlayerId, new List()); + role.UsesLeft--; + } + if (interact[0] == true) + { + role.LastWatched = DateTime.UtcNow; + return false; + } + else if (interact[1] == true) + { + role.LastWatched = DateTime.UtcNow; + role.LastWatched = role.LastWatched.AddSeconds(CustomGameOptions.ProtectKCReset - CustomGameOptions.WatchCooldown); + return false; + } + else if (interact[3] == true) return false; + return false; + } + } +} diff --git a/source/Patches/CrewmateRoles/MayorMod/AddButton.cs b/source/Patches/CrewmateRoles/MayorMod/AddButton.cs index ea772496a..89a2ade6c 100644 --- a/source/Patches/CrewmateRoles/MayorMod/AddButton.cs +++ b/source/Patches/CrewmateRoles/MayorMod/AddButton.cs @@ -3,11 +3,13 @@ using HarmonyLib; using Reactor.Utilities.Extensions; using TownOfUs.Modifiers.AssassinMod; +using TownOfUs.CrewmateRoles.VigilanteMod; using TownOfUs.Roles; using TownOfUs.Roles.Modifiers; using UnityEngine; using UnityEngine.UI; using Object = UnityEngine.Object; +using TownOfUs.NeutralRoles.DoomsayerMod; namespace TownOfUs.CrewmateRoles.MayorMod { @@ -52,53 +54,30 @@ public static void RemoveAssassin(Mayor mayor) { PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( x => x.TargetPlayerId == mayor.Player.PlayerId); + if (PlayerControl.LocalPlayer.Is(AbilityEnum.Assassin)) { var assassin = Ability.GetAbility(PlayerControl.LocalPlayer); ShowHideButtons.HideTarget(assassin, voteArea.TargetPlayerId); - voteArea.NameText.transform.localPosition += new Vector3(-0.2f, -0.1f, 0f); + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); } else if (PlayerControl.LocalPlayer.Is(RoleEnum.Doomsayer)) { var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); - var roleText = doomsayer.RoleGuess[voteArea.TargetPlayerId]; - if (roleText != null) + ShowHideButtonsDoom.HideTarget(doomsayer, voteArea.TargetPlayerId); + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); + foreach (var (targetId, guessText) in doomsayer.RoleGuess) { - roleText.gameObject.SetActive(false); - voteArea.NameText.transform.localPosition += new Vector3(-0.2f, -0.1f, 0f); + if (!guessText.isActiveAndEnabled || voteArea.TargetPlayerId != targetId) continue; + guessText.gameObject.SetActive(false); } - var (cycleBack, cycleForward, guess, guessText) = doomsayer.Buttons[voteArea.TargetPlayerId]; - if (cycleBack == null || cycleForward == null) return; - cycleBack.SetActive(false); - cycleForward.SetActive(false); - guess.SetActive(false); - guessText.gameObject.SetActive(false); - - cycleBack.GetComponent().OnClick = new Button.ButtonClickedEvent(); - cycleForward.GetComponent().OnClick = new Button.ButtonClickedEvent(); - guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); - doomsayer.Buttons[voteArea.TargetPlayerId] = (null, null, null, null); - doomsayer.Guesses.Remove(voteArea.TargetPlayerId); - voteArea.NameText.transform.localPosition += new Vector3(-0.2f, -0.1f, 0f); } else if (PlayerControl.LocalPlayer.Is(RoleEnum.Vigilante)) { var vigilante = Role.GetRole(PlayerControl.LocalPlayer); - var (cycleBack, cycleForward, guess, guessText) = vigilante.Buttons[voteArea.TargetPlayerId]; - if (cycleBack == null || cycleForward == null) return; - cycleBack.SetActive(false); - cycleForward.SetActive(false); - guess.SetActive(false); - guessText.gameObject.SetActive(false); - - cycleBack.GetComponent().OnClick = new Button.ButtonClickedEvent(); - cycleForward.GetComponent().OnClick = new Button.ButtonClickedEvent(); - guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); - vigilante.Buttons[voteArea.TargetPlayerId] = (null, null, null, null); - vigilante.Guesses.Remove(voteArea.TargetPlayerId); - voteArea.NameText.transform.localPosition += new Vector3(-0.2f, -0.1f, 0f); + ShowHideButtonsVigi.HideTarget(vigilante, voteArea.TargetPlayerId); + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); } - return; } public static void Postfix(MeetingHud __instance) diff --git a/source/Patches/CrewmateRoles/MayorMod/ShowHideButtons.cs b/source/Patches/CrewmateRoles/MayorMod/ShowHideButtons.cs deleted file mode 100644 index 0230512a0..000000000 --- a/source/Patches/CrewmateRoles/MayorMod/ShowHideButtons.cs +++ /dev/null @@ -1,21 +0,0 @@ -using HarmonyLib; -using TownOfUs.Roles; -using Reactor.Utilities.Extensions; - -namespace TownOfUs.CrewmateRoles.MayorMod -{ - public class ShowHideButtonsMayor - { - [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Confirm))] - public static class Confirm - { - public static bool Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Mayor)) return true; - var mayor = Role.GetRole(PlayerControl.LocalPlayer); - if (!mayor.Revealed) mayor.RevealButton.Destroy(); - return true; - } - } - } -} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/PoliticianMod/AddButton.cs b/source/Patches/CrewmateRoles/PoliticianMod/AddButton.cs index ebac1096c..72b3bc3a9 100644 --- a/source/Patches/CrewmateRoles/PoliticianMod/AddButton.cs +++ b/source/Patches/CrewmateRoles/PoliticianMod/AddButton.cs @@ -48,6 +48,7 @@ void Listener() Role.RoleDictionary.Remove(role.Player.PlayerId); var mayorRole = new Mayor(role.Player); mayorRole.Revealed = true; + mayorRole.RegenTask(); Utils.Rpc(CustomRPC.Elect, role.Player.PlayerId); } else role.CanCampaign = false; diff --git a/source/Patches/CrewmateRoles/PoliticianMod/ShowHideButtons.cs b/source/Patches/CrewmateRoles/PoliticianMod/ShowHideButtons.cs deleted file mode 100644 index 7071a8766..000000000 --- a/source/Patches/CrewmateRoles/PoliticianMod/ShowHideButtons.cs +++ /dev/null @@ -1,21 +0,0 @@ -using HarmonyLib; -using TownOfUs.Roles; -using Reactor.Utilities.Extensions; - -namespace TownOfUs.CrewmateRoles.PoliticianMod -{ - public class ShowHideButtonsPolitician - { - [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Confirm))] - public static class Confirm - { - public static bool Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Politician)) return true; - var politician = Role.GetRole(PlayerControl.LocalPlayer); - politician.RevealButton.Destroy(); - return true; - } - } - } -} \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/SnitchMod/CompleteTask.cs b/source/Patches/CrewmateRoles/SnitchMod/CompleteTask.cs index 2ec6dc83f..eee972a8a 100644 --- a/source/Patches/CrewmateRoles/SnitchMod/CompleteTask.cs +++ b/source/Patches/CrewmateRoles/SnitchMod/CompleteTask.cs @@ -36,7 +36,7 @@ public static void Postfix(PlayerControl __instance) Coroutines.Start(Utils.FlashCoroutine(role.Color)); } else if ((PlayerControl.LocalPlayer.Data.IsImpostor() && (!PlayerControl.LocalPlayer.Is(RoleEnum.Traitor) || CustomGameOptions.SnitchSeesTraitor)) - || ((PlayerControl.LocalPlayer.Is(Faction.NeutralKilling)) && CustomGameOptions.SnitchSeesNeutrals)) + || (PlayerControl.LocalPlayer.Is(Faction.NeutralKilling) && CustomGameOptions.SnitchSeesNeutrals)) { Coroutines.Start(Utils.FlashCoroutine(role.Color)); var gameObj = new GameObject(); @@ -57,7 +57,6 @@ public static void Postfix(PlayerControl __instance) { Coroutines.Start(Utils.FlashCoroutine(Color.green)); var impostors = PlayerControl.AllPlayerControls.ToArray().Where(x => x.Data.IsImpostor()); - var traitor = PlayerControl.AllPlayerControls.ToArray().Where(x => x.Is(RoleEnum.Traitor)); foreach (var imp in impostors) { if (!imp.Is(RoleEnum.Traitor) || CustomGameOptions.SnitchSeesTraitor) diff --git a/source/Patches/CrewmateRoles/SwapperMod/AddButton.cs b/source/Patches/CrewmateRoles/SwapperMod/AddButton.cs index e3da6e6bc..66b8fb13e 100644 --- a/source/Patches/CrewmateRoles/SwapperMod/AddButton.cs +++ b/source/Patches/CrewmateRoles/SwapperMod/AddButton.cs @@ -15,18 +15,32 @@ public class AddButton private static Sprite ActiveSprite => TownOfUs.SwapperSwitch; public static Sprite DisabledSprite => TownOfUs.SwapperSwitchDisabled; - public static void GenButton(Swapper role, int index, bool isDead) + private static bool IsExempt(PlayerVoteArea voteArea) { - if (isDead) + if (voteArea.AmDead) return true; + var player = Utils.PlayerById(voteArea.TargetPlayerId); + if (player.IsJailed()) return true; + if ( + player == null || + player.Data.IsDead || + player.Data.Disconnected + ) return true; + return false; + } + + public static void GenButton(Swapper role, PlayerVoteArea voteArea) + { + var targetId = voteArea.TargetPlayerId; + if (IsExempt(voteArea)) { role.Buttons.Add(null); - role.ListOfActives.Add(false); + role.ListOfActives.Add((targetId, false)); return; } - var confirmButton = MeetingHud.Instance.playerStates[index].Buttons.transform.GetChild(0).gameObject; + var confirmButton = voteArea.Buttons.transform.GetChild(0).gameObject; - var newButton = Object.Instantiate(confirmButton, MeetingHud.Instance.playerStates[index].transform); + var newButton = Object.Instantiate(confirmButton, voteArea.transform); var renderer = newButton.GetComponent(); var passive = newButton.GetComponent(); @@ -37,23 +51,34 @@ public static void GenButton(Swapper role, int index, bool isDead) newButton.transform.parent = confirmButton.transform.parent.parent; passive.OnClick = new Button.ButtonClickedEvent(); - passive.OnClick.AddListener(SetActive(role, index)); + passive.OnClick.AddListener(SetActive(role, targetId)); role.Buttons.Add(newButton); - role.ListOfActives.Add(false); + role.ListOfActives.Add((targetId, false)); } - private static Action SetActive(Swapper role, int index) + private static Action SetActive(Swapper role, int targetId) { void Listener() { - if (role.ListOfActives.Count(x => x) == 2 && + + int index = int.MaxValue; + for (var i = 0; i < role.ListOfActives.Count; i++) + { + if (role.ListOfActives[i].Item1 == targetId) + { + index = i; + break; + } + } + if (index == int.MaxValue) return; + if (role.ListOfActives.Count(x => x.Item2) == 2 && role.Buttons[index].GetComponent().sprite == DisabledSprite) return; role.Buttons[index].GetComponent().sprite = - role.ListOfActives[index] ? DisabledSprite : ActiveSprite; + role.ListOfActives[index].Item2 ? DisabledSprite : ActiveSprite; - role.ListOfActives[index] = !role.ListOfActives[index]; + role.ListOfActives[index] = (role.ListOfActives[index].Item1, !role.ListOfActives[index].Item2); _mostRecentId = index; @@ -62,7 +87,7 @@ void Listener() var toSet1 = true; for (var i = 0; i < role.ListOfActives.Count; i++) { - if (!role.ListOfActives[i]) continue; + if (!role.ListOfActives[i].Item2) continue; if (toSet1) { @@ -100,8 +125,10 @@ public static void Postfix(MeetingHud __instance) if (!PlayerControl.LocalPlayer.Is(RoleEnum.Swapper)) return; if (PlayerControl.LocalPlayer.IsJailed()) return; var swapperrole = Role.GetRole(PlayerControl.LocalPlayer); - for (var i = 0; i < __instance.playerStates.Length; i++) - GenButton(swapperrole, i, __instance.playerStates[i].AmDead || Utils.PlayerById(__instance.playerStates[i].TargetPlayerId).IsJailed()); + foreach (var voteArea in __instance.playerStates) + { + GenButton(swapperrole, voteArea); + } } } } \ No newline at end of file diff --git a/source/Patches/CrewmateRoles/SwapperMod/ShowHideButtons.cs b/source/Patches/CrewmateRoles/SwapperMod/ShowHideButtons.cs index adeb78a9f..c51de252f 100644 --- a/source/Patches/CrewmateRoles/SwapperMod/ShowHideButtons.cs +++ b/source/Patches/CrewmateRoles/SwapperMod/ShowHideButtons.cs @@ -80,12 +80,12 @@ public static bool Prefix(MeetingHud __instance) button.GetComponent().OnClick = new Button.ButtonClickedEvent(); } - if (swapper.ListOfActives.Count(x => x) == 2) + if (swapper.ListOfActives.Count(x => x.Item2) == 2) { var toSet1 = true; for (var i = 0; i < swapper.ListOfActives.Count; i++) { - if (!swapper.ListOfActives[i]) continue; + if (!swapper.ListOfActives[i].Item2) continue; if (toSet1) { diff --git a/source/Patches/CrewmateRoles/TrapperMod/MeetingStart.cs b/source/Patches/CrewmateRoles/TrapperMod/MeetingStart.cs index ad87a6c5a..6d3c6e4a3 100644 --- a/source/Patches/CrewmateRoles/TrapperMod/MeetingStart.cs +++ b/source/Patches/CrewmateRoles/TrapperMod/MeetingStart.cs @@ -28,7 +28,7 @@ public static void Postfix(MeetingHud __instance) { message += $" {role},"; } - message.Remove(message.Length - 1, 1); + message = message.Remove(message.Length - 1, 1); if (DestroyableSingleton.Instance) DestroyableSingleton.Instance.Chat.AddChat(PlayerControl.LocalPlayer, message); } diff --git a/source/Patches/CrewmateRoles/VigilanteMod/ShowHideButtonsVigi.cs b/source/Patches/CrewmateRoles/VigilanteMod/ShowHideButtonsVigi.cs index ca731f14e..ce4cad15e 100644 --- a/source/Patches/CrewmateRoles/VigilanteMod/ShowHideButtonsVigi.cs +++ b/source/Patches/CrewmateRoles/VigilanteMod/ShowHideButtonsVigi.cs @@ -1,6 +1,8 @@ using HarmonyLib; +using System.Linq; using TownOfUs.Roles; using UnityEngine.UI; +using UnityEngine; namespace TownOfUs.CrewmateRoles.VigilanteMod { @@ -22,6 +24,11 @@ public static void HideButtonsVigi(Vigilante role) guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); role.GuessedThisMeeting = true; } + + foreach (var voteArea in MeetingHud.Instance.playerStates) + { + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); + } } public static void HideSingle( @@ -42,7 +49,6 @@ public static void HideTarget( byte targetId ) { - var (cycleBack, cycleForward, guess, guessText) = role.Buttons[targetId]; if (cycleBack == null || cycleForward == null) return; cycleBack.SetActive(false); @@ -55,14 +61,10 @@ byte targetId guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); role.Buttons[targetId] = (null, null, null, null); role.Guesses.Remove(targetId); - } - - public static void Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Vigilante)) return; - var retributionist = Role.GetRole(PlayerControl.LocalPlayer); - if (!CustomGameOptions.VigilanteAfterVoting) HideButtonsVigi(retributionist); + PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( + x => x.TargetPlayerId == targetId); + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); } } } diff --git a/source/Patches/CrewmateRoles/VigilanteMod/VigilanteKill.cs b/source/Patches/CrewmateRoles/VigilanteMod/VigilanteKill.cs index 9086b753f..e7c951c2d 100644 --- a/source/Patches/CrewmateRoles/VigilanteMod/VigilanteKill.cs +++ b/source/Patches/CrewmateRoles/VigilanteMod/VigilanteKill.cs @@ -13,6 +13,7 @@ using TownOfUs.Patches; using Reactor.Utilities.Extensions; using TownOfUs.CrewmateRoles.ImitatorMod; +using TownOfUs.CrewmateRoles.DeputyMod; namespace TownOfUs.CrewmateRoles.VigilanteMod { @@ -142,6 +143,13 @@ public static void MurderPlayer( { var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); ShowHideButtonsDoom.HideButtonsDoom(doomsayer); + ShowHideButtonsDoom.HideTextDoom(doomsayer); + } + + if (player.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + RemoveButtons.HideButtons(dep); } if (player.Is(RoleEnum.Politician)) @@ -233,20 +241,45 @@ public static void MurderPlayer( ShowHideButtonsDoom.HideTarget(doom, voteArea.TargetPlayerId); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + if (dep.Buttons.Count > 0 && dep.Buttons[voteArea.TargetPlayerId] != null) + { + dep.Buttons[voteArea.TargetPlayerId].SetActive(false); + dep.Buttons[voteArea.TargetPlayerId].GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Swapper) && !PlayerControl.LocalPlayer.Data.IsDead) { var swapper = Role.GetRole(PlayerControl.LocalPlayer); - var button = swapper.Buttons[voteArea.TargetPlayerId]; - if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + var index = int.MaxValue; + for (var i = 0; i < swapper.ListOfActives.Count; i++) { - swapper.ListOfActives[voteArea.TargetPlayerId] = false; - if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; - if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; - Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + if (swapper.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) + { + var button = swapper.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + { + swapper.ListOfActives[index] = (swapper.ListOfActives[index].Item1, false); + if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; + if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + swapper.Buttons[index] = null; + } } - button.SetActive(false); - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - swapper.Buttons[voteArea.TargetPlayerId] = null; } foreach (var playerVoteArea in meetingHud.playerStates) @@ -266,11 +299,9 @@ public static void MurderPlayer( if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator) && !PlayerControl.LocalPlayer.Data.IsDead) { var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); - if (!meetingHud.playerStates[PlayerControl.LocalPlayer.PlayerId].DidVote) + if (MeetingHud.Instance.state != MeetingHud.VoteStates.Results && MeetingHud.Instance.state != MeetingHud.VoteStates.Proceeding) { - RoleEnum imitatedRole = Role.GetRole(player).RoleType; - var imitatable = imitatorRole.ImitatableRoles.Contains(imitatedRole); - AddButtonImitator.GenButton(imitatorRole, player.PlayerId, imitatable, true); + AddButtonImitator.GenButton(imitatorRole, voteArea, true); } } diff --git a/source/Patches/CrewmateRoles/WardenMod/HudFortify.cs b/source/Patches/CrewmateRoles/WardenMod/HudFortify.cs index ddacfd6ee..84018a147 100644 --- a/source/Patches/CrewmateRoles/WardenMod/HudFortify.cs +++ b/source/Patches/CrewmateRoles/WardenMod/HudFortify.cs @@ -20,7 +20,7 @@ public static void Postfix(HudManager __instance) fortifyButton.gameObject.SetActive((__instance.UseButton.isActiveAndEnabled || __instance.PetButton.isActiveAndEnabled) && !MeetingHud.Instance && !PlayerControl.LocalPlayer.Data.IsDead && AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started); - fortifyButton.SetCoolDown(role.FortifyTimer(), CustomGameOptions.FortifyCd); + fortifyButton.SetCoolDown(role.StartTimer(), 10f); if (role.Fortified == null) Utils.SetTarget(ref role.ClosestPlayer, fortifyButton, float.NaN); else fortifyButton.SetTarget(null); diff --git a/source/Patches/CrewmateRoles/WardenMod/PerformKill.cs b/source/Patches/CrewmateRoles/WardenMod/PerformKill.cs index cdf9879d9..e76815457 100644 --- a/source/Patches/CrewmateRoles/WardenMod/PerformKill.cs +++ b/source/Patches/CrewmateRoles/WardenMod/PerformKill.cs @@ -1,8 +1,5 @@ -using System; -using HarmonyLib; +using HarmonyLib; using TownOfUs.Roles; -using UnityEngine; -using AmongUs.GameOptions; namespace TownOfUs.CrewmateRoles.WardenMod { @@ -15,14 +12,11 @@ public static bool Prefix(KillButton __instance) var flag = PlayerControl.LocalPlayer.Is(RoleEnum.Warden); if (!flag) return true; var role = Role.GetRole(PlayerControl.LocalPlayer); - if (!PlayerControl.LocalPlayer.CanMove || role.ClosestPlayer == null) return false; - var flag2 = role.FortifyTimer() == 0f; - if (!flag2) return false; + if (!PlayerControl.LocalPlayer.CanMove) return false; + if (PlayerControl.LocalPlayer.Data.IsDead) return false; if (!__instance.enabled) return false; - var maxDistance = GameOptionsData.KillDistances[GameOptionsManager.Instance.currentNormalGameOptions.KillDistance]; - if (Vector2.Distance(role.ClosestPlayer.GetTruePosition(), - PlayerControl.LocalPlayer.GetTruePosition()) > maxDistance) return false; if (role.ClosestPlayer == null || role.Fortified != null) return false; + if (role.StartTimer() > 0) return false; var interact = Utils.Interact(PlayerControl.LocalPlayer, role.ClosestPlayer); if (interact[4] == true) @@ -31,18 +25,6 @@ public static bool Prefix(KillButton __instance) Utils.Rpc(CustomRPC.Fortify, (byte)0, PlayerControl.LocalPlayer.PlayerId, role.Fortified.PlayerId); return false; } - if (interact[0] == true) - { - role.LastFortified = DateTime.UtcNow; - return false; - } - else if (interact[1] == true) - { - role.LastFortified = DateTime.UtcNow; - role.LastFortified = role.LastFortified.AddSeconds(CustomGameOptions.ProtectKCReset - CustomGameOptions.FortifyCd); - return false; - } - else if (interact[3] == true) return false; return false; } } diff --git a/source/Patches/CustomGameOptions.cs b/source/Patches/CustomGameOptions.cs index b17446958..133d11569 100644 --- a/source/Patches/CustomGameOptions.cs +++ b/source/Patches/CustomGameOptions.cs @@ -13,12 +13,6 @@ public enum DisableSkipButtonMeetings Emergency, Always } - public enum GameMode - { - Classic, - AllAny, - KillingOnly - } public enum AdminDeadPlayers { Nobody, @@ -26,6 +20,27 @@ public enum AdminDeadPlayers EveryoneButSpy, Everyone } + public enum RoleOptions + { + CrewInvest, + CrewKilling, + CrewProtective, + CrewSupport, + CrewCommon, + CrewRandom, + NeutBenign, + NeutEvil, + NeutKilling, + NeutCommon, + NeutRandom, + ImpConceal, + ImpKilling, + ImpSupport, + ImpCommon, + ImpRandom, + NonImp, + Any + } public static class CustomGameOptions { public static int PoliticianOn => (int)Generate.PoliticianOn.Get(); @@ -80,6 +95,10 @@ public static class CustomGameOptions public static int HypnotistOn => (int)Generate.HypnotistOn.Get(); public static int JailorOn => (int)Generate.JailorOn.Get(); public static int SoulCollectorOn => (int)Generate.SoulCollectorOn.Get(); + public static int LookoutOn => (int)Generate.LookoutOn.Get(); + public static int ScavengerOn => (int)Generate.ScavengerOn.Get(); + public static int DeputyOn => (int)Generate.DeputyOn.Get(); + public static int JuggernautOn => (int)Generate.JuggernautOn.Get(); public static int TorchOn => (int)Generate.TorchOn.Get(); public static int DiseasedOn => (int)Generate.DiseasedOn.Get(); public static int FlashOn => (int)Generate.FlashOn.Get(); @@ -98,6 +117,8 @@ public static class CustomGameOptions public static int FrostyOn => (int)Generate.FrostyOn.Get(); public static int SixthSenseOn => (int)Generate.SixthSenseOn.Get(); public static int ShyOn => (int)Generate.ShyOn.Get(); + public static int MiniOn => (int)Generate.MiniOn.Get(); + public static int SaboteurOn => (int)Generate.SaboteurOn.Get(); public static float InitialCooldowns => Generate.InitialCooldowns.Get(); public static bool BothLoversDie => Generate.BothLoversDie.Get(); public static bool NeutralLovers => Generate.NeutralLovers.Get(); @@ -158,7 +179,6 @@ public static class CustomGameOptions public static bool SwooperVent => Generate.SwooperVent.Get(); public static bool ImpostorSeeRoles => Generate.ImpostorSeeRoles.Get(); public static bool DeadSeeRoles => Generate.DeadSeeRoles.Get(); - public static bool HiddenRoles => Generate.HiddenRoles.Get(); public static bool FirstDeathShield => Generate.FirstDeathShield.Get(); public static bool NeutralEvilWinEndsGame => Generate.NeutralEvilWinEndsGame.Get(); public static bool SeeTasksDuringRound => Generate.SeeTasksDuringRound.Get(); @@ -168,18 +188,6 @@ public static class CustomGameOptions public static int MaxDoused => (int)Generate.MaxDoused.Get(); public static bool ArsoImpVision => Generate.ArsoImpVision.Get(); public static bool IgniteCdRemoved => Generate.IgniteCdRemoved.Get(); - public static int MinNeutralBenignRoles => (int)Generate.MinNeutralBenignRoles.Get(); - public static int MaxNeutralBenignRoles => (int)Generate.MaxNeutralBenignRoles.Get(); - public static int MinNeutralEvilRoles => (int)Generate.MinNeutralEvilRoles.Get(); - public static int MaxNeutralEvilRoles => (int)Generate.MaxNeutralEvilRoles.Get(); - public static int MinNeutralKillingRoles => (int)Generate.MinNeutralKillingRoles.Get(); - public static int MaxNeutralKillingRoles => (int)Generate.MaxNeutralKillingRoles.Get(); - public static bool RandomNumberImps => Generate.RandomNumberImps.Get(); - public static int NeutralRoles => (int)Generate.NeutralRoles.Get(); - public static int VeteranCount => (int)Generate.VeteranCount.Get(); - public static int VigilanteCount => (int)Generate.VigilanteCount.Get(); - public static bool AddArsonist => Generate.AddArsonist.Get(); - public static bool AddPlaguebearer => Generate.AddPlaguebearer.Get(); public static bool ParallelMedScans => Generate.ParallelMedScans.Get(); public static int MaxFixes => (int)Generate.MaxFixes.Get(); public static float ReviveDuration => Generate.ReviveDuration.Get(); @@ -203,7 +211,6 @@ public static class CustomGameOptions public static bool AmneTurnNeutAssassin => Generate.AmneTurnNeutAssassin.Get(); public static bool TraitorCanAssassin => Generate.TraitorCanAssassin.Get(); public static bool AssassinMultiKill => Generate.AssassinMultiKill.Get(); - public static bool AssassinateAfterVoting => Generate.AssassinateAfterVoting.Get(); public static float UnderdogKillBonus => Generate.UnderdogKillBonus.Get(); public static bool UnderdogIncreasedKC => Generate.UnderdogIncreasedKC.Get(); public static int PhantomTasksRemaining => (int)Generate.PhantomTasksRemaining.Get(); @@ -211,10 +218,10 @@ public static class CustomGameOptions public static bool VigilanteGuessNeutralBenign => Generate.VigilanteGuessNeutralBenign.Get(); public static bool VigilanteGuessNeutralEvil => Generate.VigilanteGuessNeutralEvil.Get(); public static bool VigilanteGuessNeutralKilling => Generate.VigilanteGuessNeutralKilling.Get(); + public static bool VigilanteGuessModifiers => Generate.VigilanteGuessModifiers.Get(); public static bool VigilanteGuessLovers => Generate.VigilanteGuessLovers.Get(); public static int VigilanteKills => (int)Generate.VigilanteKills.Get(); public static bool VigilanteMultiKill => Generate.VigilanteMultiKill.Get(); - public static bool VigilanteAfterVoting => Generate.VigilanteAfterVoting.Get(); public static float CampaignCd => Generate.CampaignCooldown.Get(); public static int HaunterTasksRemainingClicked => (int)Generate.HaunterTasksRemainingClicked.Get(); public static int HaunterTasksRemainingAlert => (int)Generate.HaunterTasksRemainingAlert.Get(); @@ -261,6 +268,7 @@ public static class CustomGameOptions public static float MysticArrowDuration => Generate.MysticArrowDuration.Get(); public static float BlackmailCd => Generate.BlackmailCooldown.Get(); public static bool BlackmailInvisible => Generate.BlackmailInvisible.Get(); + public static int LatestNonVote => (int)Generate.LatestNonVote.Get(); public static float GiantSlow => Generate.GiantSlow.Get(); public static float FlashSpeed => Generate.FlashSpeed.Get(); public static float DiseasedMultiplier => Generate.DiseasedKillMultiplier.Get(); @@ -285,6 +293,7 @@ public static class CustomGameOptions public static float DetectiveFactionDuration => Generate.DetectiveFactionDuration.Get(); public static float EscapeCd => Generate.EscapeCooldown.Get(); public static bool EscapistVent => Generate.EscapistVent.Get(); + public static bool ImitatorCanBecomeMayor => Generate.ImitatorCanBecomeMayor.Get(); public static float DetonateDelay => Generate.DetonateDelay.Get(); public static int MaxKillsInDetonation => (int) Generate.MaxKillsInDetonation.Get(); public static float DetonateRadius => Generate.DetonateRadius.Get(); @@ -295,7 +304,6 @@ public static class CustomGameOptions public static bool DoomsayerGuessNeutralEvil => Generate.DoomsayerGuessNeutralEvil.Get(); public static bool DoomsayerGuessNeutralKilling => Generate.DoomsayerGuessNeutralKilling.Get(); public static bool DoomsayerGuessImpostors => Generate.DoomsayerGuessImpostors.Get(); - public static bool DoomsayerAfterVoting => Generate.DoomsayerAfterVoting.Get(); public static float BiteCd => Generate.BiteCooldown.Get(); public static bool VampImpVision => Generate.VampImpVision.Get(); public static bool VampVent => Generate.VampVent.Get(); @@ -313,7 +321,6 @@ public static class CustomGameOptions public static bool NeutralKillingShowsEvil => Generate.NeutralKillingShowsEvil.Get(); public static float AbilityCd => Generate.AbilityCooldown.Get(); public static float AbilityDuration => Generate.AbilityDuration.Get(); - public static float FortifyCd => Generate.FortifyCooldown.Get(); public static float SprintSpeed => Generate.SprintSpeed.Get(); public static float FreezeSpeed => Generate.FreezeSpeed.Get(); public static float ChillDuration => Generate.ChillDuration.Get(); @@ -341,10 +348,23 @@ public static class CustomGameOptions public static int SmallMapIncreasedLongTasks => (int)Generate.SmallMapIncreasedLongTasks.Get(); public static int LargeMapDecreasedShortTasks => (int)Generate.LargeMapDecreasedShortTasks.Get(); public static int LargeMapDecreasedLongTasks => (int)Generate.LargeMapDecreasedLongTasks.Get(); - public static DisableSkipButtonMeetings SkipButtonDisable => - (DisableSkipButtonMeetings)Generate.SkipButtonDisable.Get(); - public static GameMode GameMode => - (GameMode)Generate.GameMode.Get(); + public static DisableSkipButtonMeetings SkipButtonDisable => (DisableSkipButtonMeetings)Generate.SkipButtonDisable.Get(); + public static bool UniqueRoles => Generate.UniqueRoles.Get(); + public static RoleOptions Slot1 => (RoleOptions)Generate.Slot1.Get(); + public static RoleOptions Slot2 => (RoleOptions)Generate.Slot2.Get(); + public static RoleOptions Slot3 => (RoleOptions)Generate.Slot3.Get(); + public static RoleOptions Slot4 => (RoleOptions)Generate.Slot4.Get(); + public static RoleOptions Slot5 => (RoleOptions)Generate.Slot5.Get(); + public static RoleOptions Slot6 => (RoleOptions)Generate.Slot6.Get(); + public static RoleOptions Slot7 => (RoleOptions)Generate.Slot7.Get(); + public static RoleOptions Slot8 => (RoleOptions)Generate.Slot8.Get(); + public static RoleOptions Slot9 => (RoleOptions)Generate.Slot9.Get(); + public static RoleOptions Slot10 => (RoleOptions)Generate.Slot10.Get(); + public static RoleOptions Slot11 => (RoleOptions)Generate.Slot11.Get(); + public static RoleOptions Slot12 => (RoleOptions)Generate.Slot12.Get(); + public static RoleOptions Slot13 => (RoleOptions)Generate.Slot13.Get(); + public static RoleOptions Slot14 => (RoleOptions)Generate.Slot14.Get(); + public static RoleOptions Slot15 => (RoleOptions)Generate.Slot15.Get(); public static bool CamoCommsKillAnyone => Generate.CamoCommsKillAnyone.Get(); public static bool CrewKillersContinue => Generate.CrewKillersContinue.Get(); public static float HunterKillCd => Generate.HunterKillCd.Get(); @@ -363,5 +383,13 @@ public static class CustomGameOptions public static float InvisDelay => Generate.InvisDelay.Get(); public static float TransformInvisDuration => Generate.TransformInvisDuration.Get(); public static float FinalTransparency => Generate.FinalTransparency.Get(); + public static float WatchCooldown => (float)Generate.WatchCooldown.Get(); + public static bool LoResetOnNewRound => Generate.LoResetOnNewRound.Get(); + public static int MaxWatches => (int)Generate.MaxWatches.Get(); + public static float ScavengeDuration => (float)Generate.ScavengeDuration.Get(); + public static float ScavengeIncreaseDuration => (float)Generate.ScavengeIncreaseDuration.Get(); + public static float ScavengeCorrectKillCooldown => (float)Generate.ScavengeCorrectKillCooldown.Get(); + public static float ScavengeIncorrectKillCooldown => (float)Generate.ScavengeIncorrectKillCooldown.Get(); + public static float ReducedSaboCd => Generate.ReducedSaboCooldown.Get(); } } \ No newline at end of file diff --git a/source/Patches/CustomOption/Generate.cs b/source/Patches/CustomOption/Generate.cs index e75ee3be6..550e5c6bf 100644 --- a/source/Patches/CustomOption/Generate.cs +++ b/source/Patches/CustomOption/Generate.cs @@ -9,6 +9,7 @@ public class Generate public static CustomNumberOption DetectiveOn; public static CustomNumberOption HaunterOn; public static CustomNumberOption InvestigatorOn; + public static CustomNumberOption LookoutOn; public static CustomNumberOption MysticOn; public static CustomNumberOption OracleOn; public static CustomNumberOption SeerOn; @@ -17,18 +18,19 @@ public class Generate public static CustomNumberOption TrackerOn; public static CustomNumberOption TrapperOn; - public static CustomHeaderOption CrewProtectiveRoles; - public static CustomNumberOption AltruistOn; - public static CustomNumberOption MedicOn; - public static CustomNumberOption WardenOn; - public static CustomHeaderOption CrewKillingRoles; + public static CustomNumberOption DeputyOn; public static CustomNumberOption HunterOn; public static CustomNumberOption JailorOn; public static CustomNumberOption SheriffOn; public static CustomNumberOption VeteranOn; public static CustomNumberOption VigilanteOn; + public static CustomHeaderOption CrewProtectiveRoles; + public static CustomNumberOption AltruistOn; + public static CustomNumberOption MedicOn; + public static CustomNumberOption WardenOn; + public static CustomHeaderOption CrewSupportRoles; public static CustomNumberOption EngineerOn; public static CustomNumberOption ImitatorOn; @@ -52,6 +54,7 @@ public class Generate public static CustomHeaderOption NeutralKillingRoles; public static CustomNumberOption ArsonistOn; + public static CustomNumberOption JuggernautOn; public static CustomNumberOption PlaguebearerOn; public static CustomNumberOption GlitchOn; public static CustomNumberOption VampireOn; @@ -59,13 +62,14 @@ public class Generate public static CustomHeaderOption ImpostorConcealingRoles; public static CustomNumberOption EscapistOn; + public static CustomNumberOption GrenadierOn; public static CustomNumberOption MorphlingOn; public static CustomNumberOption SwooperOn; - public static CustomNumberOption GrenadierOn; public static CustomNumberOption VenererOn; public static CustomHeaderOption ImpostorKillingRoles; public static CustomNumberOption BomberOn; + public static CustomNumberOption ScavengerOn; public static CustomNumberOption TraitorOn; public static CustomNumberOption WarlockOn; @@ -89,6 +93,7 @@ public class Generate public static CustomNumberOption FlashOn; public static CustomNumberOption GiantOn; public static CustomNumberOption LoversOn; + public static CustomNumberOption MiniOn; public static CustomNumberOption RadarOn; public static CustomNumberOption ShyOn; public static CustomNumberOption SixthSenseOn; @@ -98,6 +103,7 @@ public class Generate public static CustomHeaderOption ImpostorModifiers; public static CustomNumberOption DisperserOn; public static CustomNumberOption DoubleShotOn; + public static CustomNumberOption SaboteurOn; public static CustomNumberOption UnderdogOn; public static CustomHeaderOption MapSettings; @@ -125,7 +131,6 @@ public class Generate public static CustomNumberOption InitialCooldowns; public static CustomToggleOption ParallelMedScans; public static CustomStringOption SkipButtonDisable; - public static CustomToggleOption HiddenRoles; public static CustomToggleOption FirstDeathShield; public static CustomToggleOption NeutralEvilWinEndsGame; public static CustomToggleOption CrewKillersContinue; @@ -136,26 +141,23 @@ public class Generate public static CustomToggleOption ColdTempDeathValley; public static CustomToggleOption WifiChartCourseSwap; - public static CustomHeaderOption GameModeSettings; - public static CustomStringOption GameMode; - - public static CustomHeaderOption ClassicSettings; - public static CustomNumberOption MinNeutralBenignRoles; - public static CustomNumberOption MaxNeutralBenignRoles; - public static CustomNumberOption MinNeutralEvilRoles; - public static CustomNumberOption MaxNeutralEvilRoles; - public static CustomNumberOption MinNeutralKillingRoles; - public static CustomNumberOption MaxNeutralKillingRoles; - - public static CustomHeaderOption AllAnySettings; - public static CustomToggleOption RandomNumberImps; - - public static CustomHeaderOption KillingOnlySettings; - public static CustomNumberOption NeutralRoles; - public static CustomNumberOption VeteranCount; - public static CustomNumberOption VigilanteCount; - public static CustomToggleOption AddArsonist; - public static CustomToggleOption AddPlaguebearer; + public static CustomHeaderOption RoleListSettings; + public static CustomToggleOption UniqueRoles; + public static CustomStringOption Slot1; + public static CustomStringOption Slot2; + public static CustomStringOption Slot3; + public static CustomStringOption Slot4; + public static CustomStringOption Slot5; + public static CustomStringOption Slot6; + public static CustomStringOption Slot7; + public static CustomStringOption Slot8; + public static CustomStringOption Slot9; + public static CustomStringOption Slot10; + public static CustomStringOption Slot11; + public static CustomStringOption Slot12; + public static CustomStringOption Slot13; + public static CustomStringOption Slot14; + public static CustomStringOption Slot15; public static CustomHeaderOption TaskTrackingSettings; public static CustomToggleOption SeeTasksDuringRound; @@ -293,7 +295,6 @@ public class Generate public static CustomToggleOption AssassinGuessImpostors; public static CustomToggleOption AssassinGuessModifiers; public static CustomToggleOption AssassinGuessLovers; - public static CustomToggleOption AssassinateAfterVoting; public static CustomHeaderOption Underdog; public static CustomNumberOption UnderdogKillBonus; @@ -305,8 +306,8 @@ public class Generate public static CustomToggleOption VigilanteGuessNeutralBenign; public static CustomToggleOption VigilanteGuessNeutralEvil; public static CustomToggleOption VigilanteGuessNeutralKilling; + public static CustomToggleOption VigilanteGuessModifiers; public static CustomToggleOption VigilanteGuessLovers; - public static CustomToggleOption VigilanteAfterVoting; public static CustomHeaderOption Haunter; public static CustomNumberOption HaunterTasksRemainingClicked; @@ -378,6 +379,7 @@ public class Generate public static CustomHeaderOption Blackmailer; public static CustomNumberOption BlackmailCooldown; public static CustomToggleOption BlackmailInvisible; + public static CustomNumberOption LatestNonVote; public static CustomHeaderOption Plaguebearer; public static CustomNumberOption InfectCooldown; @@ -396,6 +398,9 @@ public class Generate public static CustomNumberOption DetectiveRoleDuration; public static CustomNumberOption DetectiveFactionDuration; + public static CustomHeaderOption Imitator; + public static CustomToggleOption ImitatorCanBecomeMayor; + public static CustomHeaderOption Escapist; public static CustomNumberOption EscapeCooldown; public static CustomToggleOption EscapistVent; @@ -413,7 +418,6 @@ public class Generate public static CustomToggleOption DoomsayerGuessNeutralEvil; public static CustomToggleOption DoomsayerGuessNeutralKilling; public static CustomToggleOption DoomsayerGuessImpostors; - public static CustomToggleOption DoomsayerAfterVoting; public static CustomToggleOption DoomsayerCantObserve; public static CustomHeaderOption Vampire; @@ -453,9 +457,6 @@ public class Generate public static CustomHeaderOption Politician; public static CustomNumberOption CampaignCooldown; - public static CustomHeaderOption Warden; - public static CustomNumberOption FortifyCooldown; - public static CustomHeaderOption Hypnotist; public static CustomNumberOption HypnotiseCooldown; @@ -468,6 +469,17 @@ public class Generate public static CustomToggleOption PassiveSoulCollection; public static CustomNumberOption SoulsToWin; + public static CustomHeaderOption Lookout; + public static CustomNumberOption WatchCooldown; + public static CustomToggleOption LoResetOnNewRound; + public static CustomNumberOption MaxWatches; + + public static CustomHeaderOption Scavenger; + public static CustomNumberOption ScavengeDuration; + public static CustomNumberOption ScavengeIncreaseDuration; + public static CustomNumberOption ScavengeCorrectKillCooldown; + public static CustomNumberOption ScavengeIncorrectKillCooldown; + public static CustomHeaderOption Giant; public static CustomNumberOption GiantSlow; @@ -496,6 +508,9 @@ public class Generate public static CustomNumberOption TransformInvisDuration; public static CustomNumberOption FinalTransparency; + public static CustomHeaderOption Saboteur; + public static CustomNumberOption ReducedSaboCooldown; + public static Func PercentFormat { get; } = value => $"{value:0}%"; private static Func CooldownFormat { get; } = value => $"{value:0.0#}s"; private static Func MultiplierFormat { get; } = value => $"{value:0.0#}x"; @@ -514,6 +529,8 @@ public static void GenerateAll() PercentFormat); InvestigatorOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Investigator", 0f, 0f, 100f, 10f, PercentFormat); + LookoutOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Lookout", 0f, 0f, 100f, 10f, + PercentFormat); MysticOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Mystic", 0f, 0f, 100f, 10f, PercentFormat); OracleOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Oracle", 0f, 0f, 100f, 10f, @@ -530,6 +547,8 @@ public static void GenerateAll() PercentFormat); CrewKillingRoles = new CustomHeaderOption(num++, MultiMenu.crewmate, "Crewmate Killing Roles"); + DeputyOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Deputy", 0f, 0f, 100f, 10f, + PercentFormat); HunterOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Hunter", 0f, 0f, 100f, 10f, PercentFormat); JailorOn = new CustomNumberOption(num++, MultiMenu.crewmate, "Jailor", 0f, 0f, 100f, 10f, @@ -589,6 +608,8 @@ public static void GenerateAll() NeutralKillingRoles = new CustomHeaderOption(num++, MultiMenu.neutral, "Neutral Killing Roles"); ArsonistOn = new CustomNumberOption(num++, MultiMenu.neutral, "Arsonist", 0f, 0f, 100f, 10f, PercentFormat); + JuggernautOn = new CustomNumberOption(num++, MultiMenu.neutral, "Juggernaut", 0f, 0f, 100f, 10f, + PercentFormat); PlaguebearerOn = new CustomNumberOption(num++, MultiMenu.neutral, "Plaguebearer", 0f, 0f, 100f, 10f, PercentFormat); GlitchOn = new CustomNumberOption(num++, MultiMenu.neutral, "The Glitch", 0f, 0f, 100f, 10f, @@ -613,6 +634,8 @@ public static void GenerateAll() ImpostorKillingRoles = new CustomHeaderOption(num++, MultiMenu.imposter, "Impostor Killing Roles"); BomberOn = new CustomNumberOption(num++, MultiMenu.imposter, "Bomber", 0f, 0f, 100f, 10f, PercentFormat); + ScavengerOn = new CustomNumberOption(num++, MultiMenu.imposter, "Scavenger", 0f, 0f, 100f, 10f, + PercentFormat); TraitorOn = new CustomNumberOption(num++, MultiMenu.imposter, "Traitor", 0f, 0f, 100f, 10f, PercentFormat); WarlockOn = new CustomNumberOption(num++, MultiMenu.imposter, "Warlock", 0f, 0f, 100f, 10f, @@ -633,7 +656,7 @@ public static void GenerateAll() CrewmateModifiers = new CustomHeaderOption(num++, MultiMenu.modifiers, "Crewmate Modifiers"); AftermathOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Aftermath", 0f, 0f, 100f, 10f, PercentFormat); - BaitOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Bait", 0f, 0f, 100f, 10f, + BaitOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Bait", 0f, 0f, 100f, 10f, PercentFormat); DiseasedOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Diseased", 0f, 0f, 100f, 10f, PercentFormat); @@ -653,6 +676,8 @@ public static void GenerateAll() PercentFormat); LoversOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Lovers", 0f, 0f, 100f, 10f, PercentFormat); + MiniOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Mini", 0f, 0f, 100f, 10f, + PercentFormat); RadarOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Radar", 0f, 0f, 100f, 10f, PercentFormat); ShyOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Shy", 0f, 0f, 100f, 10f, @@ -669,42 +694,119 @@ public static void GenerateAll() PercentFormat); DoubleShotOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Double Shot", 0f, 0f, 100f, 10f, PercentFormat); + SaboteurOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Saboteur", 0f, 0f, 100f, 10f, + PercentFormat); UnderdogOn = new CustomNumberOption(num++, MultiMenu.modifiers, "Underdog", 0f, 0f, 100f, 10f, PercentFormat); - GameModeSettings = - new CustomHeaderOption(num++, MultiMenu.main, "Game Mode Settings"); - GameMode = new CustomStringOption(num++, MultiMenu.main, "Game Mode", new[] {"Classic", "All Any", "Killing Only" }); - - ClassicSettings = - new CustomHeaderOption(num++, MultiMenu.main, "Classic Game Mode Settings"); - MinNeutralBenignRoles = - new CustomNumberOption(num++, MultiMenu.main, "Min Neutral Benign Roles", 1, 0, 3, 1); - MaxNeutralBenignRoles = - new CustomNumberOption(num++, MultiMenu.main, "Max Neutral Benign Roles", 1, 0, 3, 1); - MinNeutralEvilRoles = - new CustomNumberOption(num++, MultiMenu.main, "Min Neutral Evil Roles", 1, 0, 3, 1); - MaxNeutralEvilRoles = - new CustomNumberOption(num++, MultiMenu.main, "Max Neutral Evil Roles", 1, 0, 3, 1); - MinNeutralKillingRoles = - new CustomNumberOption(num++, MultiMenu.main, "Min Neutral Killing Roles", 1, 0, 5, 1); - MaxNeutralKillingRoles = - new CustomNumberOption(num++, MultiMenu.main, "Max Neutral Killing Roles", 1, 0, 5, 1); - - AllAnySettings = - new CustomHeaderOption(num++, MultiMenu.main, "All Any Settings"); - RandomNumberImps = new CustomToggleOption(num++, MultiMenu.main, "Random Number Of Impostors", true); - - KillingOnlySettings = - new CustomHeaderOption(num++, MultiMenu.main, "Killing Only Settings"); - NeutralRoles = - new CustomNumberOption(num++, MultiMenu.main, "Neutral Roles", 1, 0, 5, 1); - VeteranCount = - new CustomNumberOption(num++, MultiMenu.main, "Veteran Count", 1, 0, 5, 1); - VigilanteCount = - new CustomNumberOption(num++, MultiMenu.main, "Vigilante Count", 1, 0, 5, 1); - AddArsonist = new CustomToggleOption(num++, MultiMenu.main, "Add Arsonist", true); - AddPlaguebearer = new CustomToggleOption(num++, MultiMenu.main, "Add Plaguebearer", true); + RoleListSettings = + new CustomHeaderOption(num++, MultiMenu.main, "Role List Settings"); + UniqueRoles = new CustomToggleOption(num++, MultiMenu.main, "All Roles Are Unique", true); + Slot1 = new CustomStringOption(num++, MultiMenu.main, "Slot 1", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot2 = new CustomStringOption(num++, MultiMenu.main, "Slot 2", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot3 = new CustomStringOption(num++, MultiMenu.main, "Slot 3", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot4 = new CustomStringOption(num++, MultiMenu.main, "Slot 4", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 15); + Slot5 = new CustomStringOption(num++, MultiMenu.main, "Slot 5", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot6 = new CustomStringOption(num++, MultiMenu.main, "Slot 6", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot7 = new CustomStringOption(num++, MultiMenu.main, "Slot 7", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot8 = new CustomStringOption(num++, MultiMenu.main, "Slot 8", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot9 = new CustomStringOption(num++, MultiMenu.main, "Slot 9", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 15); + Slot10 = new CustomStringOption(num++, MultiMenu.main, "Slot 10", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot11 = new CustomStringOption(num++, MultiMenu.main, "Slot 11", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot12 = new CustomStringOption(num++, MultiMenu.main, "Slot 12", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot13 = new CustomStringOption(num++, MultiMenu.main, "Slot 13", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); + Slot14 = new CustomStringOption(num++, MultiMenu.main, "Slot 14", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 15); + Slot15 = new CustomStringOption(num++, MultiMenu.main, "Slot 15", new[] { "Crew Investigative", + "Crew Killing", "Crew Protective", "Crew Support", + "Common Crew", "Random Crew", "Neutral Benign", + "Neutral Evil", "Neutral Killing", "Common Neutral", + "Random Neutral", "Imp Concealing", "Imp Killing", + "Imp Support", "Common Imp", "Random Imp", + "Non-Imp", "Any" }, 16); MapSettings = new CustomHeaderOption(num++, MultiMenu.main, "Map Settings"); RandomMapEnabled = new CustomToggleOption(num++, MultiMenu.main, "Choose Random Map", false); @@ -748,7 +850,6 @@ public static void GenerateAll() new CustomNumberOption(num++, MultiMenu.main, "Game Start Cooldowns", 10f, 10f, 30f, 2.5f, CooldownFormat); ParallelMedScans = new CustomToggleOption(num++, MultiMenu.main, "Parallel Medbay Scans", false); SkipButtonDisable = new CustomStringOption(num++, MultiMenu.main, "Disable Meeting Skip Button", new[] { "No", "Emergency", "Always" }); - HiddenRoles = new CustomToggleOption(num++, MultiMenu.main, "Enable Hidden Roles", true); FirstDeathShield = new CustomToggleOption(num++, MultiMenu.main, "First Death Shield Next Game", false); NeutralEvilWinEndsGame = new CustomToggleOption(num++, MultiMenu.main, "Neutral Evil Win Ends Game", true); CrewKillersContinue = new CustomToggleOption(num++, MultiMenu.main, "Crew Killers Continue Game", false); @@ -774,7 +875,6 @@ public static void GenerateAll() AssassinGuessImpostors = new CustomToggleOption(num++, MultiMenu.imposter, "Assassin Can Guess Impostor Roles", false); AssassinGuessModifiers = new CustomToggleOption(num++, MultiMenu.imposter, "Assassin Can Guess Crewmate Modifiers", false); AssassinGuessLovers = new CustomToggleOption(num++, MultiMenu.imposter, "Assassin Can Guess Lovers", false); - AssassinateAfterVoting = new CustomToggleOption(num++, MultiMenu.imposter, "Assassin Can Guess After Voting", false); Aurial = new CustomHeaderOption(num++, MultiMenu.crewmate, "Aurial"); @@ -815,6 +915,13 @@ public static void GenerateAll() AnonymousFootPrint = new CustomToggleOption(num++, MultiMenu.crewmate, "Anonymous Footprint", false); VentFootprintVisible = new CustomToggleOption(num++, MultiMenu.crewmate, "Footprint Vent Visible", false); + Lookout = + new CustomHeaderOption(num++, MultiMenu.crewmate, "Lookout"); + WatchCooldown = + new CustomNumberOption(num++, MultiMenu.crewmate, "Watch Cooldown", 25f, 10f, 60f, 2.5f, CooldownFormat); + LoResetOnNewRound = new CustomToggleOption(num++, MultiMenu.crewmate, "Lookout Watches Reset After Each Round", true); + MaxWatches = new CustomNumberOption(num++, MultiMenu.crewmate, "Maximum Number Of Players That Can Be Watched", 5, 1, 15, 1); + Mystic = new CustomHeaderOption(num++, MultiMenu.crewmate, "Mystic"); MysticArrowDuration = @@ -934,8 +1041,8 @@ public static void GenerateAll() VigilanteGuessNeutralBenign = new CustomToggleOption(num++, MultiMenu.crewmate, "Vigilante Can Guess Neutral Benign Roles", false); VigilanteGuessNeutralEvil = new CustomToggleOption(num++, MultiMenu.crewmate, "Vigilante Can Guess Neutral Evil Roles", false); VigilanteGuessNeutralKilling = new CustomToggleOption(num++, MultiMenu.crewmate, "Vigilante Can Guess Neutral Killing Roles", false); + VigilanteGuessModifiers = new CustomToggleOption(num++, MultiMenu.crewmate, "Vigilante Can Guess Impostor Modifiers", false); VigilanteGuessLovers = new CustomToggleOption(num++, MultiMenu.crewmate, "Vigilante Can Guess Lovers", false); - VigilanteAfterVoting = new CustomToggleOption(num++, MultiMenu.crewmate, "Vigilante Can Guess After Voting", false); Altruist = new CustomHeaderOption(num++, MultiMenu.crewmate, "Altruist"); ReviveDuration = @@ -960,15 +1067,16 @@ public static void GenerateAll() new CustomNumberOption(num++, MultiMenu.crewmate, "Time Where Medic Will Have Color Type", 15f, 0f, 60f, 2.5f, CooldownFormat); - Warden = new CustomHeaderOption(num++, MultiMenu.crewmate, "Warden"); - FortifyCooldown = - new CustomNumberOption(num++, MultiMenu.crewmate, "Fortify Cooldown", 10f, 1f, 15f, 1f, CooldownFormat); - Engineer = new CustomHeaderOption(num++, MultiMenu.crewmate, "Engineer"); MaxFixes = new CustomNumberOption(num++, MultiMenu.crewmate, "Maximum Number Of Fixes", 5, 1, 15, 1); + Imitator = + new CustomHeaderOption(num++, MultiMenu.crewmate, "Imitator"); + ImitatorCanBecomeMayor = + new CustomToggleOption(num++, MultiMenu.crewmate, "Imitator Can Become Mayor", true); + Medium = new CustomHeaderOption(num++, MultiMenu.crewmate, "Medium"); MediateCooldown = @@ -1050,8 +1158,7 @@ public static void GenerateAll() DoomsayerGuessNeutralEvil = new CustomToggleOption(num++, MultiMenu.neutral, "Doomsayer Can Guess Neutral Evil Roles", false); DoomsayerGuessNeutralKilling = new CustomToggleOption(num++, MultiMenu.neutral, "Doomsayer Can Guess Neutral Killing Roles", false); DoomsayerGuessImpostors = new CustomToggleOption(num++, MultiMenu.neutral, "Doomsayer Can Guess Impostor Roles", false); - DoomsayerAfterVoting = new CustomToggleOption(num++, MultiMenu.neutral, "Doomsayer Can Guess After Voting", false); - DoomsayerCantObserve = new CustomToggleOption(num++, MultiMenu.neutral, "(Experienced) Doomsayer can't observe", false); + DoomsayerCantObserve = new CustomToggleOption(num++, MultiMenu.neutral, "Doomsayer Can't Observe", false); Executioner = new CustomHeaderOption(num++, MultiMenu.neutral, "Executioner"); @@ -1211,6 +1318,16 @@ public static void GenerateAll() AllImpsSeeBomb = new CustomToggleOption(num++, MultiMenu.imposter, "All Impostors See Bomb", false); + Scavenger = new CustomHeaderOption(num++, MultiMenu.imposter, "Scavenger"); + ScavengeDuration = + new CustomNumberOption(num++, MultiMenu.imposter, "Scavenge Duration", 25f, 10f, 60f, 2.5f, CooldownFormat); + ScavengeIncreaseDuration = + new CustomNumberOption(num++, MultiMenu.imposter, "Scavenge Duration Increase Per Kill", 10f, 5f, 15f, 0.5f, CooldownFormat); + ScavengeCorrectKillCooldown = + new CustomNumberOption(num++, MultiMenu.imposter, "Scavenge Kill Cooldown On Correct Kill", 10f, 5f, 15f, 0.5f, CooldownFormat); + ScavengeIncorrectKillCooldown = + new CustomNumberOption(num++, MultiMenu.imposter, "Kill Cooldown Multiplier On Incorrect Kill", 3f, 1.25f, 5f, 0.25f, MultiplierFormat); + Traitor = new CustomHeaderOption(num++, MultiMenu.imposter, "Traitor"); LatestSpawn = new CustomNumberOption(num++, MultiMenu.imposter, "Minimum People Alive When Traitor Can Spawn", 5, 3, 15, 1); NeutralKillingStopsTraitor = @@ -1227,6 +1344,7 @@ public static void GenerateAll() new CustomNumberOption(num++, MultiMenu.imposter, "Initial Blackmail Cooldown", 10f, 1f, 15f, 1f, CooldownFormat); BlackmailInvisible = new CustomToggleOption(num++, MultiMenu.imposter, "Only Target Sees Blackmail", false); + LatestNonVote = new CustomNumberOption(num++, MultiMenu.imposter, "Maximum People Alive Where Blackmailed Can Vote", 5, 1, 15, 1); Hypnotist = new CustomHeaderOption(num++, MultiMenu.imposter, "Hypnotist"); HypnotiseCooldown = @@ -1245,7 +1363,7 @@ public static void GenerateAll() UndertakerVentWithBody = new CustomToggleOption(num++, MultiMenu.imposter, "Undertaker Can Vent While Dragging", false); - Bait = new CustomHeaderOption(num++, MultiMenu.modifiers, "Bait"); + Bait = new CustomHeaderOption(num++, MultiMenu.modifiers, "Bait"); BaitMinDelay = new CustomNumberOption(num++, MultiMenu.modifiers, "Minimum Delay for the Bait Report", 0f, 0f, 15f, 0.5f, CooldownFormat); BaitMaxDelay = new CustomNumberOption(num++, MultiMenu.modifiers, "Maximum Delay for the Bait Report", 1f, 0f, 15f, 0.5f, CooldownFormat); @@ -1275,6 +1393,9 @@ public static void GenerateAll() TransformInvisDuration = new CustomNumberOption(num++, MultiMenu.modifiers, "Turn Transparent Duration", 5f, 1f, 15f, 1f, CooldownFormat); FinalTransparency = new CustomNumberOption(num++, MultiMenu.modifiers, "Final Opacity", 20f, 0f, 80f, 10f, PercentFormat); + Saboteur = new CustomHeaderOption(num++, MultiMenu.modifiers, "Saboteur"); + ReducedSaboCooldown = new CustomNumberOption(num++, MultiMenu.modifiers, "Reduced Sabotage Bonus", 10f, 5f, 15f, 1f, CooldownFormat); + Underdog = new CustomHeaderOption(num++, MultiMenu.modifiers, "Underdog"); UnderdogKillBonus = new CustomNumberOption(num++, MultiMenu.modifiers, "Kill Cooldown Bonus", 5f, 2.5f, 10f, 2.5f, CooldownFormat); UnderdogIncreasedKC = new CustomToggleOption(num++, MultiMenu.modifiers, "Increased Kill Cooldown When 2+ Imps", true); diff --git a/source/Patches/CustomOption/Patches.cs b/source/Patches/CustomOption/Patches.cs index d20649110..5ed8d39e2 100644 --- a/source/Patches/CustomOption/Patches.cs +++ b/source/Patches/CustomOption/Patches.cs @@ -15,10 +15,6 @@ namespace TownOfUs.CustomOption { public static class Patches { - public static List<(PassiveButton, TextMeshPro)> Main = new List<(PassiveButton, TextMeshPro)>(); - public static List<(PassiveButton, TextMeshPro)> Import = new List<(PassiveButton, TextMeshPro)>(); - public static List<(PassiveButton, TextMeshPro)> Export = new List<(PassiveButton, TextMeshPro)>(); - [HarmonyPatch(typeof(GameOptionsMenu), nameof(GameOptionsMenu.CreateSettings))] private class MoreTasks { @@ -57,6 +53,25 @@ public static void Postfix(GameSettingMenu __instance, int tabNum, bool previewO { tabNum -= 3; SettingsUpdate.Tabs[tabNum].SetActive(true); + if (tabNum >= 5) + { + var tab = SettingsUpdate.Tabs[tabNum].GetComponent(); + tab.settingsContainer.DestroyChildren(); + var files = Directory.GetFiles(Application.persistentDataPath, "*.txt").Select(x => Path.GetFileNameWithoutExtension(x).Split('/')[^1].Split('\\')[^1]).ToList(); + float num = 1.5f; + if (tabNum == 6) + { + SettingsUpdate.SpawnExternalButton(__instance, tab, ref num, "Save To New File", () => SettingsUpdate.ExportSlot(__instance)); + foreach (var file in files) + SettingsUpdate.SpawnExternalButton(__instance, tab, ref num, file, () => SettingsUpdate.ExportSlot(__instance, file)); + } + else + { + foreach (var file in files) + SettingsUpdate.SpawnExternalButton(__instance, tab, ref num, file, () => SettingsUpdate.ImportSlot(__instance, file)); + } + SettingsUpdate.SpawnExternalButton(__instance, tab, ref num, "Return", () => Coroutines.Start(TabPatches.ChangeTab(__instance, 3))); + } if (tabNum > 4) return; SettingsUpdate.Buttons[tabNum].SelectButton(true); @@ -90,6 +105,17 @@ public static void Postfix(GameSettingMenu __instance, int tabNum, bool previewO else if (option.Type == CustomOptionType.String) { + var playerCount = GameOptionsManager.Instance.currentNormalGameOptions.MaxPlayers; + if (option.Name.StartsWith("Slot ")) + { + try + { + int slotNumber = int.Parse(option.Name[5..]); + if (slotNumber > GameOptionsManager.Instance.currentNormalGameOptions.MaxPlayers) continue; + } + catch { } + } + var str = option.Setting.Cast(); str.TitleText.text = option.Name; if (str.TitleText.text.Length > 20) @@ -125,15 +151,6 @@ public static void Postfix(GameSettingMenu __instance) Tabs.ForEach(x => x?.Destroy()); Buttons = new List(); Tabs = new List(); - Main.ForEach(x => x.Item1?.Destroy()); - Main.ForEach(x => x.Item2?.Destroy()); - Import.ForEach(x => x.Item1?.Destroy()); - Import.ForEach(x => x.Item2?.Destroy()); - Export.ForEach(x => x.Item1?.Destroy()); - Export.ForEach(x => x.Item2?.Destroy()); - Main = new List<(PassiveButton, TextMeshPro)>(); - Import = new List<(PassiveButton, TextMeshPro)>(); - Export = new List<(PassiveButton, TextMeshPro)>(); if (GameOptionsManager.Instance.currentGameOptions.GameMode == GameModes.HideNSeek) return; @@ -151,12 +168,11 @@ public static void Postfix(GameSettingMenu __instance) CreateSettings(__instance, 5, "NeutralSettings", "Neutral Settings", settingsButton, MultiMenu.neutral); CreateSettings(__instance, 6, "ImpSettings", "Impostor Settings", settingsButton, MultiMenu.imposter); CreateSettings(__instance, 7, "ModifierSettings", "Modifier Settings", settingsButton, MultiMenu.modifiers); - - CreateSettingLoader(__instance, 8, "ImportSettings"); - CreateSettingLoader(__instance, 9, "ExportSettings"); + CreateSettings(__instance, 8, "ImportSettings", "Import Settings", settingsButton, MultiMenu.external); + CreateSettings(__instance, 9, "ExportSettings", "Export Settings", settingsButton, MultiMenu.external); } - internal static void SpawnExternalButton(GameSettingMenu __instance, GameOptionsMenu tabOptions, ref float num, string text, string name, int tab) + internal static TextMeshPro SpawnExternalButton(GameSettingMenu __instance, GameOptionsMenu tabOptions, ref float num, string text, Action onClick) { const float scaleX = 7f; var baseButton = __instance.GameSettingsTab.checkboxOrigin.transform.GetChild(1); @@ -166,6 +182,7 @@ internal static void SpawnExternalButton(GameSettingMenu __instance, GameOptions exportButtonGO.name = text; exportButtonGO.transform.localPosition = new Vector3(1f, num, -2f); exportButtonGO.GetComponent().offset = Vector2.zero; + exportButtonGO.name = text.Replace(" ", ""); var prevColliderSize = exportButtonGO.GetComponent().size; prevColliderSize.x *= scaleX; @@ -174,29 +191,8 @@ internal static void SpawnExternalButton(GameSettingMenu __instance, GameOptions exportButtonGO.transform.GetChild(2).gameObject.DestroyImmediate(); var exportButton = exportButtonGO.GetComponent(); exportButton.ClickMask = tabOptions.ButtonClickMask; - exportButton.OnClick.RemoveAllListeners(); - if (text == "Return" || name == "Main") - { - exportButton.OnClick.AddListener((System.Action)(() => - { - Coroutines.Start(TabPatches.ChangeTab(__instance, tab)); - })); - } - else if (name == "ImportSettings") - { - exportButton.OnClick.AddListener((System.Action)(() => - { - ImportSlot(__instance, tab); - })); - } - else if (name == "ExportSettings") - { - exportButton.OnClick.AddListener((System.Action)(() => - { - ExportSlot(__instance, tab); - })); - } + exportButton.OnClick.AddListener(onClick); var exportButtonTextGO = GameObject.Instantiate(baseText, exportButtonGO); exportButtonTextGO.transform.localPosition = new Vector3(0, 0, -3f); @@ -221,18 +217,18 @@ internal static void SpawnExternalButton(GameSettingMenu __instance, GameOptions obj.fontMaterial.SetFloat("_Stencil", 20); } - if (name == "ImportSettings") Import.Add((exportButton, exportButtonText)); - else if (name == "ExportSettings") Export.Add((exportButton, exportButtonText)); - else Main.Add((exportButton, exportButtonText)); - num -= 0.6f; + return exportButtonText; } + public static TextMeshPro ImportText; + public static TextMeshPro ExportText; + public static void CreateSettings(GameSettingMenu __instance, int target, string name, string text, GameObject settingsButton, MultiMenu menu) { var panel = GameObject.Find("LeftPanel"); var button = GameObject.Find(name); - if (button == null) + if (button == null && menu != MultiMenu.external) { button = GameObject.Instantiate(settingsButton, panel.transform); button.transform.localPosition += new Vector3(0f, -0.55f * target + 1.1f, 0f); @@ -258,72 +254,86 @@ public static void CreateSettings(GameSettingMenu __instance, int target, string tabOptions.Children.Clear(); var options = CustomOption.AllOptions.Where(x => x.Menu == menu).ToList(); - float num = 1.5f; - - if (target == 3) + if (target < 8) { - SpawnExternalButton(__instance, tabOptions, ref num, "Load Custom Settings", "Main", 8); - SpawnExternalButton(__instance, tabOptions, ref num, "Save Custom Settings", "Main", 9); - } + float num = 1.5f; - foreach (CustomOption option in options) - { - if (option.Type == CustomOptionType.Header) + if (target == 3) { - CategoryHeaderMasked header = UnityEngine.Object.Instantiate(tabOptions.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); - header.SetHeader(StringNames.ImpostorsCategory, 20); - header.Title.text = option.Name; - header.transform.localScale = Vector3.one * 0.65f; - header.transform.localPosition = new Vector3(-0.9f, num, -2f); - num -= 0.625f; - continue; + ImportText = SpawnExternalButton(__instance, tabOptions, ref num, "Load Custom Settings", () => Coroutines.Start(TabPatches.ChangeTab(__instance, 8))); + ExportText = SpawnExternalButton(__instance, tabOptions, ref num, "Save Custom Settings", () => Coroutines.Start(TabPatches.ChangeTab(__instance, 9))); } - else if (option.Type == CustomOptionType.Number) + foreach (CustomOption option in options) { - OptionBehaviour optionBehaviour = UnityEngine.Object.Instantiate(tabOptions.numberOptionOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); - optionBehaviour.transform.localPosition = new Vector3(0.95f, num, -2f); - optionBehaviour.SetClickMask(tabOptions.ButtonClickMask); - SpriteRenderer[] components = optionBehaviour.GetComponentsInChildren(true); - for (int i = 0; i < components.Length; i++) components[i].material.SetInt(PlayerMaterial.MaskLayer, 20); + if (option.Type == CustomOptionType.Header) + { + CategoryHeaderMasked header = UnityEngine.Object.Instantiate(tabOptions.categoryHeaderOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); + header.SetHeader(StringNames.ImpostorsCategory, 20); + header.Title.text = option.Name; + header.transform.localScale = Vector3.one * 0.65f; + header.transform.localPosition = new Vector3(-0.9f, num, -2f); + num -= 0.625f; + continue; + } - var numberOption = optionBehaviour as NumberOption; - option.Setting = numberOption; + else if (option.Type == CustomOptionType.Number) + { + OptionBehaviour optionBehaviour = UnityEngine.Object.Instantiate(tabOptions.numberOptionOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); + optionBehaviour.transform.localPosition = new Vector3(0.95f, num, -2f); + optionBehaviour.SetClickMask(tabOptions.ButtonClickMask); + SpriteRenderer[] components = optionBehaviour.GetComponentsInChildren(true); + for (int i = 0; i < components.Length; i++) components[i].material.SetInt(PlayerMaterial.MaskLayer, 20); - tabOptions.Children.Add(optionBehaviour); - } + var numberOption = optionBehaviour as NumberOption; + option.Setting = numberOption; - else if (option.Type == CustomOptionType.Toggle) - { - OptionBehaviour optionBehaviour = UnityEngine.Object.Instantiate(tabOptions.checkboxOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); - optionBehaviour.transform.localPosition = new Vector3(0.95f, num, -2f); - optionBehaviour.SetClickMask(tabOptions.ButtonClickMask); - SpriteRenderer[] components = optionBehaviour.GetComponentsInChildren(true); - for (int i = 0; i < components.Length; i++) components[i].material.SetInt(PlayerMaterial.MaskLayer, 20); + tabOptions.Children.Add(optionBehaviour); + } - var toggleOption = optionBehaviour as ToggleOption; - option.Setting = toggleOption; + else if (option.Type == CustomOptionType.Toggle) + { + OptionBehaviour optionBehaviour = UnityEngine.Object.Instantiate(tabOptions.checkboxOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); + optionBehaviour.transform.localPosition = new Vector3(0.95f, num, -2f); + optionBehaviour.SetClickMask(tabOptions.ButtonClickMask); + SpriteRenderer[] components = optionBehaviour.GetComponentsInChildren(true); + for (int i = 0; i < components.Length; i++) components[i].material.SetInt(PlayerMaterial.MaskLayer, 20); - tabOptions.Children.Add(optionBehaviour); - } + var toggleOption = optionBehaviour as ToggleOption; + option.Setting = toggleOption; - else if (option.Type == CustomOptionType.String) - { - OptionBehaviour optionBehaviour = UnityEngine.Object.Instantiate(tabOptions.stringOptionOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); - optionBehaviour.transform.localPosition = new Vector3(0.95f, num, -2f); - optionBehaviour.SetClickMask(tabOptions.ButtonClickMask); - SpriteRenderer[] components = optionBehaviour.GetComponentsInChildren(true); - for (int i = 0; i < components.Length; i++) components[i].material.SetInt(PlayerMaterial.MaskLayer, 20); + tabOptions.Children.Add(optionBehaviour); + } + + else if (option.Type == CustomOptionType.String) + { + var playerCount = GameOptionsManager.Instance.currentNormalGameOptions.MaxPlayers; + if (option.Name.StartsWith("Slot ")) + { + try + { + int slotNumber = int.Parse(option.Name[5..]); + if (slotNumber > GameOptionsManager.Instance.currentNormalGameOptions.MaxPlayers) continue; + } + catch { } + } - var stringOption = optionBehaviour as StringOption; - option.Setting = stringOption; + OptionBehaviour optionBehaviour = UnityEngine.Object.Instantiate(tabOptions.stringOptionOrigin, Vector3.zero, Quaternion.identity, tabOptions.settingsContainer); + optionBehaviour.transform.localPosition = new Vector3(0.95f, num, -2f); + optionBehaviour.SetClickMask(tabOptions.ButtonClickMask); + SpriteRenderer[] components = optionBehaviour.GetComponentsInChildren(true); + for (int i = 0; i < components.Length; i++) components[i].material.SetInt(PlayerMaterial.MaskLayer, 20); - tabOptions.Children.Add(optionBehaviour); - } + var stringOption = optionBehaviour as StringOption; + option.Setting = stringOption; + + tabOptions.Children.Add(optionBehaviour); + } - num -= 0.45f; - tabOptions.scrollBar.SetYBoundsMax(-num - 1.65f); - option.OptionCreated(); + num -= 0.45f; + tabOptions.scrollBar.SetYBoundsMax(-num - 1.65f); + option.OptionCreated(); + } } for (int i = 0; i < tabOptions.Children.Count; i++) @@ -336,47 +346,23 @@ public static void CreateSettings(GameSettingMenu __instance, int target, string tab.SetActive(false); } - public static void CreateSettingLoader(GameSettingMenu __instance, int target, string name) + public static void ImportSlot(GameSettingMenu __instance, string preset) { - var settingsTab = GameObject.Find("GAME SETTINGS TAB"); - Tabs.RemoveAll(x => x == null); - var tab = GameObject.Instantiate(settingsTab, settingsTab.transform.parent); - tab.name = name; - var tabOptions = tab.GetComponent(); - foreach (var child in tabOptions.Children) child.Destroy(); - tabOptions.scrollBar.transform.FindChild("SliderInner").DestroyChildren(); - tabOptions.Children.Clear(); - - float num = 1.5f; - SpawnExternalButton(__instance, tabOptions, ref num, "Slot 1", name, 1); - SpawnExternalButton(__instance, tabOptions, ref num, "Slot 2", name, 2); - SpawnExternalButton(__instance, tabOptions, ref num, "Slot 3", name, 3); - SpawnExternalButton(__instance, tabOptions, ref num, "Slot 4", name, 4); - SpawnExternalButton(__instance, tabOptions, ref num, "Slot 5", name, 5); - SpawnExternalButton(__instance, tabOptions, ref num, "Return", name, 3); - - Tabs.Add(tab); - tab.SetActive(false); - } - - public static void ImportSlot(GameSettingMenu __instance, int slotId) - { - System.Console.WriteLine(slotId); + System.Console.WriteLine(preset); string text; try { - var path = Path.Combine(Application.persistentDataPath, $"GameSettings-Slot{slotId}"); + var path = Path.Combine(Application.persistentDataPath, $"{preset}.txt"); text = File.ReadAllText(path); } catch { - Coroutines.Start(TabPatches.Flash(__instance, "Load Custom Settings", Color.red)); + Coroutines.Start(TabPatches.Flash(__instance, ImportText, Color.red)); return; } - var splitText = text.Split("\n").ToList(); while (splitText.Count > 0) @@ -393,7 +379,6 @@ public static void ImportSlot(GameSettingMenu __instance, int slotId) catch { } - continue; } @@ -415,35 +400,62 @@ public static void ImportSlot(GameSettingMenu __instance, int slotId) Rpc.SendRpc(); - Coroutines.Start(TabPatches.Flash(__instance, "Load Custom Settings", Color.green)); + Coroutines.Start(TabPatches.Flash(__instance, ImportText, Color.green)); } - public static void ExportSlot(GameSettingMenu __instance, int slotId) + public static void ExportSlot(GameSettingMenu __instance) { - System.Console.WriteLine(slotId); - - var dictie = new Dictionary(); + System.Console.WriteLine("Exporting settings"); var builder = new StringBuilder(); foreach (var option in CustomOption.AllOptions) { - if (option.Type == CustomOptionType.Button || option.Type == CustomOptionType.Header) continue; + if (option.Type is CustomOptionType.Button or CustomOptionType.Header) continue; builder.AppendLine(option.Name); builder.AppendLine(option.Value.ToString()); } - var text = Path.Combine(Application.persistentDataPath, $"GameSettings-Slot{slotId}-temp"); + var text = Path.Combine(Application.persistentDataPath, "Saved Settings 1.txt"); + var i = 1; + + while (File.Exists(text)) + { + i++; + text = Path.Combine(Application.persistentDataPath, $"Saved Settings {i}.txt"); + } + try { File.WriteAllText(text, builder.ToString()); - var text2 = Path.Combine(Application.persistentDataPath, $"GameSettings-Slot{slotId}"); - File.Delete(text2); - File.Move(text, text2); - Coroutines.Start(TabPatches.Flash(__instance, "Save Custom Settings", Color.green)); + Coroutines.Start(TabPatches.Flash(__instance, ExportText, Color.green)); + } + catch + { + Coroutines.Start(TabPatches.Flash(__instance, ExportText, Color.red)); + } + } + + public static void ExportSlot(GameSettingMenu __instance, string preset) + { + System.Console.WriteLine($"Exporting settings to {preset}"); + + var builder = new StringBuilder(); + foreach (var option in CustomOption.AllOptions) + { + if (option.Type is CustomOptionType.Button or CustomOptionType.Header) continue; + builder.AppendLine(option.Name); + builder.AppendLine($"{option.Value}"); + } + + try + { + var path = Path.Combine(Application.persistentDataPath, $"{preset}.txt"); + File.WriteAllText(path, builder.ToString()); + Coroutines.Start(TabPatches.Flash(__instance, ExportText, Color.green)); } catch { - Coroutines.Start(TabPatches.Flash(__instance, "Save Custom Settings", Color.red)); + Coroutines.Start(TabPatches.Flash(__instance, ExportText, Color.red)); } } } @@ -452,37 +464,16 @@ class TabPatches { public static IEnumerator ChangeTab(GameSettingMenu __instance, int tab) { - ButtonsInactive(); yield return new WaitForSeconds(0.1f); __instance.ChangeTab(tab, false); - foreach (var button in Main) button.Item1.gameObject.SetActive(true); - foreach (var button in Import) button.Item1.gameObject.SetActive(true); - foreach (var button in Export) button.Item1.gameObject.SetActive(true); } - public static IEnumerator Flash(GameSettingMenu __instance, string load, Color colour) + public static IEnumerator Flash(GameSettingMenu __instance, TextMeshPro buttonText, Color colour) { - ButtonsInactive(); yield return new WaitForSeconds(0.1f); __instance.ChangeTab(3, false); - foreach (var button in Main) - { - button.Item1.gameObject.SetActive(true); - if (button.Item1.name == load) button.Item2.color = colour; - } - foreach (var button in Import) button.Item1.gameObject.SetActive(true); - foreach (var button in Export) button.Item1.gameObject.SetActive(true); + buttonText.color = colour; yield return new WaitForSeconds(0.5f); - foreach (var button in Main) - { - if (button.Item1.name == load) button.Item2.color = Color.white; - } - } - - public static void ButtonsInactive() - { - foreach (var button in Main) button.Item1.gameObject.SetActive(false); - foreach (var button in Import) button.Item1.gameObject.SetActive(false); - foreach (var button in Export) button.Item1.gameObject.SetActive(false); + buttonText.color = Color.white; } } @@ -604,6 +595,17 @@ public static void AddSettings(LobbyViewSettingsPane __instance, MultiMenu menu) else { + var playerCount = GameOptionsManager.Instance.currentNormalGameOptions.MaxPlayers; + if (option.Name.StartsWith("Slot ")) + { + try + { + int slotNumber = int.Parse(option.Name[5..]); + if (slotNumber > GameOptionsManager.Instance.currentNormalGameOptions.MaxPlayers) continue; + } + catch { } + } + ViewSettingsInfoPanel panel = UnityEngine.Object.Instantiate(__instance.infoPanelOrigin); panel.transform.SetParent(__instance.settingsContainer); panel.transform.localScale = Vector3.one; diff --git a/source/Patches/CustomOption/String.cs b/source/Patches/CustomOption/String.cs index 03057d1f2..4556f29aa 100644 --- a/source/Patches/CustomOption/String.cs +++ b/source/Patches/CustomOption/String.cs @@ -4,9 +4,9 @@ namespace TownOfUs.CustomOption { public class CustomStringOption : CustomOption { - protected internal CustomStringOption(int id, MultiMenu menu, string name, string[] values) : base(id, menu, name, + protected internal CustomStringOption(int id, MultiMenu menu, string name, string[] values, int startingId = 0) : base(id, menu, name, CustomOptionType.String, - 0) + startingId) { Values = values; Format = value => Values[(int)value]; diff --git a/source/Patches/CustomRPC.cs b/source/Patches/CustomRPC.cs index 8a253de23..5b5e9e8c7 100644 --- a/source/Patches/CustomRPC.cs +++ b/source/Patches/CustomRPC.cs @@ -77,6 +77,7 @@ public enum CustomRPC Jail, Collect, Retribution, + Camp, BypassKill, BypassMultiKill, diff --git a/source/Patches/DisableAbilities.cs b/source/Patches/DisableAbilities.cs index e72c9c98a..7dcbfb438 100644 --- a/source/Patches/DisableAbilities.cs +++ b/source/Patches/DisableAbilities.cs @@ -108,6 +108,12 @@ public static IEnumerator StopAbility(float duration) engi.UsesText.color = Palette.DisabledClear; engi.UsesText.material.SetFloat("_Desat", 1f); } + else if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lo = Role.GetRole(PlayerControl.LocalPlayer); + lo.UsesText.color = Palette.DisabledClear; + lo.UsesText.material.SetFloat("_Desat", 1f); + } else if (PlayerControl.LocalPlayer.Is(RoleEnum.Tracker)) { var track = Role.GetRole(PlayerControl.LocalPlayer); diff --git a/source/Patches/Disconnect.cs b/source/Patches/Disconnect.cs index 7cb05267b..1f429e23a 100644 --- a/source/Patches/Disconnect.cs +++ b/source/Patches/Disconnect.cs @@ -53,6 +53,11 @@ public static void Prefix([HarmonyArgument(0)] PlayerControl player) var lover = Modifier.GetModifier(player); Modifier.ModifierDictionary.Remove(lover.OtherLover.Player.PlayerId); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Scavenger)) + { + var scav = Role.GetRole(PlayerControl.LocalPlayer); + if (scav.Target == player) scav.Target = scav.GetClosestPlayer(player); + } if (MeetingHud.Instance) { PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First(x => x.TargetPlayerId == player.PlayerId); @@ -85,6 +90,16 @@ public static void Prefix([HarmonyArgument(0)] PlayerControl player) } } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + if (dep.Buttons.Count > 0 && dep.Buttons[voteArea.TargetPlayerId] != null) + { + dep.Buttons[voteArea.TargetPlayerId].SetActive(false); + dep.Buttons[voteArea.TargetPlayerId].GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Vigilante) && !PlayerControl.LocalPlayer.Data.IsDead) { var vigi = Role.GetRole(PlayerControl.LocalPlayer); @@ -106,24 +121,42 @@ public static void Prefix([HarmonyArgument(0)] PlayerControl player) if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor) && !PlayerControl.LocalPlayer.Data.IsDead) { var jailor = Role.GetRole(PlayerControl.LocalPlayer); - jailor.ExecuteButton.Destroy(); - jailor.UsesText.Destroy(); + if (jailor.Jailed == player) + { + jailor.ExecuteButton.Destroy(); + jailor.UsesText.Destroy(); + } } if (PlayerControl.LocalPlayer.Is(RoleEnum.Swapper) && !PlayerControl.LocalPlayer.Data.IsDead) { var swapper = Role.GetRole(PlayerControl.LocalPlayer); - var button = swapper.Buttons[voteArea.TargetPlayerId]; - if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + var index = int.MaxValue; + for (var i = 0; i < swapper.ListOfActives.Count; i++) { - swapper.ListOfActives[voteArea.TargetPlayerId] = false; - if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; - if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; - Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + if (swapper.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) + { + var button = swapper.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + { + swapper.ListOfActives[index] = (swapper.ListOfActives[index].Item1, false); + if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; + if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + swapper.Buttons[index] = null; + } } - button.SetActive(false); - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - swapper.Buttons[voteArea.TargetPlayerId] = null; } foreach (var playerVoteArea in MeetingHud.Instance.playerStates) @@ -143,15 +176,30 @@ public static void Prefix([HarmonyArgument(0)] PlayerControl player) if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator) && !PlayerControl.LocalPlayer.Data.IsDead) { var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); - var button = imitatorRole.Buttons[voteArea.TargetPlayerId]; - if (button.GetComponent().sprite == TownOfUs.ImitateSelectSprite) + var index = int.MaxValue; + for (var i = 0; i < imitatorRole.ListOfActives.Count; i++) + { + if (imitatorRole.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) { - imitatorRole.ListOfActives[voteArea.TargetPlayerId] = false; - if (SetImitate.Imitate == voteArea) SetImitate.Imitate = null; + var button = imitatorRole.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.ImitateSelectSprite) + { + imitatorRole.ListOfActives[index] = (imitatorRole.ListOfActives[index].Item1, false); + if (SetImitate.Imitate == voteArea) SetImitate.Imitate = null; + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + imitatorRole.Buttons[index] = null; + } } - button.SetActive(false); - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - imitatorRole.Buttons[voteArea.TargetPlayerId] = null; } } } diff --git a/source/Patches/EndGamePatch.cs b/source/Patches/EndGamePatch.cs index 7cdb14dac..647dcb13b 100644 --- a/source/Patches/EndGamePatch.cs +++ b/source/Patches/EndGamePatch.cs @@ -105,6 +105,9 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] EndGam else if (role.Value == RoleEnum.Hypnotist) { playerRole += "Hypnotist > "; } else if (role.Value == RoleEnum.Jailor) { playerRole += "Jailor > "; } else if (role.Value == RoleEnum.SoulCollector) { playerRole += "Soul Collector > "; } + else if (role.Value == RoleEnum.Lookout) { playerRole += "Lookout > "; } + else if (role.Value == RoleEnum.Scavenger) { playerRole += "Scavenger > "; } + else if (role.Value == RoleEnum.Deputy) { playerRole += "Deputy > "; } } playerRole = playerRole.Remove(playerRole.Length - 3); @@ -126,6 +129,8 @@ public static void Postfix(AmongUsClient __instance, [HarmonyArgument(0)] EndGam else if (playerControl.Is(ModifierEnum.Frosty)) playerRole += " (Frosty)"; else if (playerControl.Is(ModifierEnum.SixthSense)) playerRole += " (Sixth Sense)"; else if (playerControl.Is(ModifierEnum.Shy)) playerRole += " (Shy)"; + else if (playerControl.Is(ModifierEnum.Mini)) playerRole += " (Mini)"; + else if (playerControl.Is(ModifierEnum.Saboteur)) playerRole += " (Saboteur)"; var player = Role.GetRole(playerControl); if (playerControl.Is(RoleEnum.Phantom) || playerControl.Is(Faction.Crewmates)) diff --git a/source/Patches/ExtraTasks.cs b/source/Patches/ExtraTasks.cs index 7acd2718a..724f47cf0 100644 --- a/source/Patches/ExtraTasks.cs +++ b/source/Patches/ExtraTasks.cs @@ -1,6 +1,8 @@ using AmongUs.GameOptions; using HarmonyLib; using Random = UnityEngine.Random; +using System.Collections.Generic; +using System; namespace TownOfUs.Patches { @@ -34,66 +36,46 @@ public class GetAdjustedImposters public static bool Prefix(IGameOptions __instance, ref int __result) { if (GameOptionsManager.Instance.CurrentGameOptions.GameMode == GameModes.HideNSeek) return true; - if (CustomGameOptions.GameMode == GameMode.AllAny && CustomGameOptions.RandomNumberImps) + + var players = GameData.Instance.PlayerCount; + var impostors = 0; + List impBuckets = [RoleOptions.ImpConceal, RoleOptions.ImpKilling, RoleOptions.ImpSupport, RoleOptions.ImpCommon, RoleOptions.ImpRandom]; + List buckets = [CustomGameOptions.Slot1, CustomGameOptions.Slot2, CustomGameOptions.Slot3, CustomGameOptions.Slot4]; + var anySlots = 0; + + if (players > 4) buckets.Add(CustomGameOptions.Slot5); + if (players > 5) buckets.Add(CustomGameOptions.Slot6); + if (players > 6) buckets.Add(CustomGameOptions.Slot7); + if (players > 7) buckets.Add(CustomGameOptions.Slot8); + if (players > 8) buckets.Add(CustomGameOptions.Slot9); + if (players > 9) buckets.Add(CustomGameOptions.Slot10); + if (players > 10) buckets.Add(CustomGameOptions.Slot11); + if (players > 11) buckets.Add(CustomGameOptions.Slot12); + if (players > 12) buckets.Add(CustomGameOptions.Slot13); + if (players > 13) buckets.Add(CustomGameOptions.Slot14); + if (players > 14) buckets.Add(CustomGameOptions.Slot15); + + foreach (var roleOption in buckets) { - var players = GameData.Instance.PlayerCount; + if (impBuckets.Contains(roleOption)) impostors += 1; + else if (roleOption == RoleOptions.Any) anySlots += 1; + } - var impostors = 1; + int impProbability = (int)Math.Floor((double)players / anySlots * 5 / 3); + for (int i = 0; i < anySlots; i++) + { var random = Random.RandomRangeInt(0, 100); - if (players <= 6) impostors = 1; - else if (players <= 7) - { - if (random < 20) impostors = 2; - else impostors = 1; - } - else if (players <= 8) - { - if (random < 40) impostors = 2; - else impostors = 1; - } - else if (players <= 9) - { - if (random < 50) impostors = 2; - else impostors = 1; - } - else if (players <= 10) - { - if (random < 60) impostors = 2; - else impostors = 1; - } - else if (players <= 11) - { - if (random < 60) impostors = 2; - else if (random < 70) impostors = 3; - else impostors = 1; - } - else if (players <= 12) - { - if (random < 60) impostors = 2; - else if (random < 80) impostors = 3; - else impostors = 1; - } - else if (players <= 13) - { - if (random < 60) impostors = 2; - else if (random < 90) impostors = 3; - else impostors = 1; - } - else if (players <= 14) - { - if (random < 50) impostors = 3; - else impostors = 2; - } - else - { - if (random < 60) impostors = 3; - else if (random < 90) impostors = 2; - else impostors = 4; - } - __result = impostors; - return false; + if (random < impProbability) impostors += 1; + impProbability += 3; } - return true; + + if (players < 7 || impostors == 0) impostors = 1; + else if (players < 10 && impostors > 2) impostors = 2; + else if (players < 14 && impostors > 3) impostors = 3; + else if (players < 19 && impostors > 4) impostors = 4; + else if (impostors > 5) impostors = 5; + __result = impostors; + return false; } } } diff --git a/source/Patches/ImpostorRoles/BlackmailerMod/BlackmailMeetingUpdate.cs b/source/Patches/ImpostorRoles/BlackmailerMod/BlackmailMeetingUpdate.cs index 9cc95038d..3f72c3250 100644 --- a/source/Patches/ImpostorRoles/BlackmailerMod/BlackmailMeetingUpdate.cs +++ b/source/Patches/ImpostorRoles/BlackmailerMod/BlackmailMeetingUpdate.cs @@ -80,16 +80,25 @@ public static void Postfix(MeetingHud __instance) foreach (var role in blackmailers) { - if (role.Blackmailed != null && !role.Blackmailed.Data.IsDead && role.CanSeeBlackmailed(PlayerControl.LocalPlayer.PlayerId)) + if (role.Blackmailed != null && !role.Blackmailed.Data.IsDead) { var playerState = __instance.playerStates.FirstOrDefault(x => x.TargetPlayerId == role.Blackmailed.PlayerId); - playerState.Overlay.gameObject.SetActive(true); - if (PrevOverlay == null) PrevOverlay = playerState.Overlay.sprite; - playerState.Overlay.sprite = Overlay; - if (__instance.state != MeetingHud.VoteStates.Animating && shookAlready == false) + if (__instance.state == MeetingHud.VoteStates.NotVoted && !playerState.DidVote && + PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected).ToList().Count > CustomGameOptions.LatestNonVote) + { + playerState.SetVote((byte)252); + if (role.Blackmailed == PlayerControl.LocalPlayer) __instance.Confirm((byte)252); + } + if (role.CanSeeBlackmailed(PlayerControl.LocalPlayer.PlayerId)) { - shookAlready = true; - (__instance as MonoBehaviour).StartCoroutine(Effects.SwayX(playerState.transform)); + playerState.Overlay.gameObject.SetActive(true); + if (PrevOverlay == null) PrevOverlay = playerState.Overlay.sprite; + playerState.Overlay.sprite = Overlay; + if (__instance.state != MeetingHud.VoteStates.Animating && shookAlready == false) + { + shookAlready = true; + (__instance as MonoBehaviour).StartCoroutine(Effects.SwayX(playerState.transform)); + } } } } diff --git a/source/Patches/ImpostorRoles/GrenadierMod/PerformKill.cs b/source/Patches/ImpostorRoles/GrenadierMod/PerformKill.cs index 85d774205..42b7d3449 100644 --- a/source/Patches/ImpostorRoles/GrenadierMod/PerformKill.cs +++ b/source/Patches/ImpostorRoles/GrenadierMod/PerformKill.cs @@ -1,4 +1,6 @@ using HarmonyLib; +using Hazel; +using Reactor.Utilities; using TownOfUs.Roles; namespace TownOfUs.ImpostorRoles.GrenadierMod @@ -25,9 +27,18 @@ public static bool Prefix(KillButton __instance) var abilityUsed = Utils.AbilityUsed(PlayerControl.LocalPlayer); if (!abilityUsed) return false; - Utils.Rpc(CustomRPC.FlashGrenade, PlayerControl.LocalPlayer.PlayerId); role.TimeRemaining = CustomGameOptions.GrenadeDuration; - role.Flash(); + role.StartFlash(); + + var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, + (byte)CustomRPC.FlashGrenade, SendOption.Reliable, -1); + writer.Write((byte)role.Player.PlayerId); + writer.Write((byte)role.flashedPlayers.Count); + foreach (var player in role.flashedPlayers) + { + writer.Write(player.PlayerId); + } + AmongUsClient.Instance.FinishRpcImmediately(writer); return false; } diff --git a/source/Patches/ImpostorRoles/HypnotistMod/ShowHideButtons.cs b/source/Patches/ImpostorRoles/HypnotistMod/ShowHideButtons.cs deleted file mode 100644 index e8ca25071..000000000 --- a/source/Patches/ImpostorRoles/HypnotistMod/ShowHideButtons.cs +++ /dev/null @@ -1,21 +0,0 @@ -using HarmonyLib; -using TownOfUs.Roles; -using Reactor.Utilities.Extensions; - -namespace TownOfUs.ImpostorRoles.HypnotistMod -{ - public class ShowHideButtonsHypnotist - { - [HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Confirm))] - public static class Confirm - { - public static bool Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Hypnotist)) return true; - var hypnotist = Role.GetRole(PlayerControl.LocalPlayer); - hypnotist.HysteriaButton.Destroy(); - return true; - } - } - } -} \ No newline at end of file diff --git a/source/Patches/ImpostorRoles/JanitorMod/Coroutine.cs b/source/Patches/ImpostorRoles/JanitorMod/Coroutine.cs index 18dfe234a..8d353853b 100644 --- a/source/Patches/ImpostorRoles/JanitorMod/Coroutine.cs +++ b/source/Patches/ImpostorRoles/JanitorMod/Coroutine.cs @@ -11,6 +11,15 @@ public class Coroutine public static IEnumerator CleanCoroutine(DeadBody body, Janitor role) { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(body.ParentId)) + { + if (!lookout.Watching[body.ParentId].Contains(RoleEnum.Janitor)) lookout.Watching[body.ParentId].Add(RoleEnum.Janitor); + } + } + KillButtonTarget.SetTarget(DestroyableSingleton.Instance.KillButton, null, role); role.Player.SetKillTimer(GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown); SpriteRenderer renderer = null; diff --git a/source/Patches/ImpostorRoles/MinerMod/PerformKill.cs b/source/Patches/ImpostorRoles/MinerMod/PerformKill.cs index 3c8c40b93..087371201 100644 --- a/source/Patches/ImpostorRoles/MinerMod/PerformKill.cs +++ b/source/Patches/ImpostorRoles/MinerMod/PerformKill.cs @@ -29,8 +29,8 @@ public static bool Prefix(KillButton __instance) if (!abilityUsed) return false; var position = PlayerControl.LocalPlayer.transform.position; var id = GetAvailableId(); - Utils.Rpc(CustomRPC.Mine, id, PlayerControl.LocalPlayer.PlayerId, position, position.z + 0.001f); - SpawnVent(id, role, position, position.z + 0.001f); + Utils.Rpc(CustomRPC.Mine, id, PlayerControl.LocalPlayer.PlayerId, position, position.z + 0.0004f); + SpawnVent(id, role, position, position.z + 0.0004f); return false; } diff --git a/source/Patches/ImpostorRoles/ScavengerMod/HudManagerUpdate.cs b/source/Patches/ImpostorRoles/ScavengerMod/HudManagerUpdate.cs new file mode 100644 index 000000000..e02e79489 --- /dev/null +++ b/source/Patches/ImpostorRoles/ScavengerMod/HudManagerUpdate.cs @@ -0,0 +1,114 @@ +using HarmonyLib; +using System; +using TownOfUs.Roles; +using UnityEngine; +using TownOfUs.Modifiers.UnderdogMod; +using TownOfUs.Patches; +using TownOfUs.Extensions; +using TownOfUs.Roles.Modifiers; + +namespace TownOfUs.ImpostorRoles.ScavengerMod +{ + [HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))] + public class HudManagerUpdate + { + public static Sprite Sprite => TownOfUs.Arrow; + public static void Postfix(HudManager __instance) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (!PlayerControl.LocalPlayer.Is(RoleEnum.Scavenger)) return; + var role = Role.GetRole(PlayerControl.LocalPlayer); + + if (role.ScavengeCooldown == null) + { + role.ScavengeCooldown = UnityEngine.Object.Instantiate(__instance.KillButton.cooldownTimerText, __instance.KillButton.transform); + role.ScavengeCooldown.gameObject.SetActive(false); + role.ScavengeCooldown.transform.localPosition = new Vector3( + role.ScavengeCooldown.transform.localPosition.x + 0.26f, + role.ScavengeCooldown.transform.localPosition.y + 0.29f, + role.ScavengeCooldown.transform.localPosition.z); + role.ScavengeCooldown.transform.localScale *= 0.65f; + role.ScavengeCooldown.alignment = TMPro.TextAlignmentOptions.Right; + role.ScavengeCooldown.fontStyle = TMPro.FontStyles.Bold; + role.ScavengeCooldown.enableWordWrapping = false; + } + if (role.ScavengeCooldown != null) + { + role.ScavengeCooldown.text = Convert.ToInt32(Math.Round(role.ScavengeTimer())).ToString(); + } + role.ScavengeCooldown.gameObject.SetActive((__instance.UseButton.isActiveAndEnabled || __instance.PetButton.isActiveAndEnabled) + && !MeetingHud.Instance && !PlayerControl.LocalPlayer.Data.IsDead + && AmongUsClient.Instance.GameState == InnerNet.InnerNetClient.GameStates.Started && role.Scavenging); + + if (role.Scavenging && PlayerControl.LocalPlayer.moveable && __instance.KillButton.currentTarget != null) + { + role.ScavengeCooldown.color = Palette.EnabledColor; + role.ScavengeCooldown.material.SetFloat("_Desat", 0f); + } + else + { + role.ScavengeCooldown.color = Palette.DisabledClear; + role.ScavengeCooldown.material.SetFloat("_Desat", 1f); + } + + if ((role.ScavengeTimer() == 0f || MeetingHud.Instance || PlayerControl.LocalPlayer.Data.IsDead) && role.Scavenging) + { + role.StopScavenge(); + + if (role.Player.Is(ModifierEnum.Underdog)) + { + var lowerKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown - CustomGameOptions.UnderdogKillBonus; + var normalKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown; + var upperKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown + CustomGameOptions.UnderdogKillBonus; + role.Player.SetKillTimer(PerformKill.LastImp() ? lowerKC : (PerformKill.IncreasedKC() ? normalKC : upperKC)); + } + else role.Player.SetKillTimer(GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown); + } + + if (!role.GameStarted && PlayerControl.LocalPlayer.killTimer > 0f) role.GameStarted = true; + + if (PlayerControl.LocalPlayer.killTimer == 0f && !role.Scavenging && role.GameStarted && !PlayerControl.LocalPlayer.Data.IsDead) + { + role.Scavenging = true; + role.ScavengeEnd = DateTime.UtcNow.AddSeconds(CustomGameOptions.ScavengeDuration); + role.Target = role.GetClosestPlayer(); + role.RegenTask(); + } + + if (role.Target != null) + { + if (role.PreyArrow == null) + { + var gameObj = new GameObject(); + var arrow = gameObj.AddComponent(); + gameObj.transform.parent = PlayerControl.LocalPlayer.gameObject.transform; + var renderer = gameObj.AddComponent(); + renderer.sprite = Sprite; + renderer.color = Colors.Impostor; + arrow.image = renderer; + gameObj.layer = 5; + arrow.target = role.Target.transform.position; + role.PreyArrow = arrow; + } + role.PreyArrow.target = role.Target.transform.position; + } + + if (!PlayerControl.LocalPlayer.IsHypnotised()) + { + if (role.Target != null && !role.Target.Data.IsDead && !role.Target.Data.Disconnected) + { + if (role.Target.GetCustomOutfitType() != CustomPlayerOutfitType.Camouflage && + role.Target.GetCustomOutfitType() != CustomPlayerOutfitType.Swooper) + { + var colour = new Color(0.45f, 0f, 0f); + if (role.Target.Is(ModifierEnum.Shy)) colour.a = Modifier.GetModifier(role.Target).Opacity; + role.Target.nameText().color = colour; + } + else role.Target.nameText().color = Color.clear; + } + } + } + } +} \ No newline at end of file diff --git a/source/Patches/ImpostorRoles/TraitorMod/SetTraitor.cs b/source/Patches/ImpostorRoles/TraitorMod/SetTraitor.cs index 17bc2bd68..0f398329f 100644 --- a/source/Patches/ImpostorRoles/TraitorMod/SetTraitor.cs +++ b/source/Patches/ImpostorRoles/TraitorMod/SetTraitor.cs @@ -10,6 +10,7 @@ using AmongUs.GameOptions; using TownOfUs.CrewmateRoles.ImitatorMod; using TownOfUs.Roles.Modifiers; +using Il2CppSystem.Linq; namespace TownOfUs.ImpostorRoles.TraitorMod { @@ -94,6 +95,12 @@ public static void ExileControllerPostfix(ExileController __instance) aurialRole.SenseArrows.Clear(); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var loRole = Role.GetRole(PlayerControl.LocalPlayer); + Object.Destroy(loRole.UsesText); + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Transporter)) { var transporterRole = Role.GetRole(PlayerControl.LocalPlayer); diff --git a/source/Patches/Keybinds.cs b/source/Patches/Keybinds.cs index 82ab2266f..16f16aefb 100644 --- a/source/Patches/Keybinds.cs +++ b/source/Patches/Keybinds.cs @@ -84,9 +84,16 @@ public static void Postfix(MeetingHud __instance) { dynamic guesser = role is Vigilante ? Role.GetRole(role.Player) : Ability.GetAbility(role.Player); if (guesser == null) guesser = Role.GetRole(role.Player); + if (role is Vigilante) + { + if (Role.GetRole(role.Player).RemainingKills == 0) return; + } + if (role.Player.Is(AbilityEnum.Assassin)) + { + if (Ability.GetAbility(role.Player).RemainingKills == 0) return; + } var players = __instance.playerStates.Where(x => (guesser as IGuesser).Buttons[x.TargetPlayerId] != (null, null, null, null) - && x.TargetPlayerId != role.Player.PlayerId) - .ToList(); + && x.TargetPlayerId != role.Player.PlayerId).ToList(); if (ReInput.players.GetPlayer(0).GetButtonDown("ToU cycle players")) { diff --git a/source/Patches/KillButtonSprite.cs b/source/Patches/KillButtonSprite.cs index 78143d430..d79f2d162 100644 --- a/source/Patches/KillButtonSprite.cs +++ b/source/Patches/KillButtonSprite.cs @@ -41,6 +41,8 @@ public class KillButtonSprite private static Sprite Fortify => TownOfUs.FortifySprite; private static Sprite Jail => TownOfUs.JailSprite; private static Sprite Collect => TownOfUs.CollectSprite; + private static Sprite Watch => TownOfUs.WatchSprite; + private static Sprite Camp => TownOfUs.CampSprite; private static Sprite Kill; @@ -162,6 +164,16 @@ public static void Postfix(HudManager __instance) __instance.KillButton.graphic.sprite = Collect; flag = true; } + else if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + __instance.KillButton.graphic.sprite = Watch; + flag = true; + } + else if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy)) + { + __instance.KillButton.graphic.sprite = Camp; + flag = true; + } else { __instance.KillButton.graphic.sprite = Kill; diff --git a/source/Patches/Modifiers/GiantMod/LadderFix.cs b/source/Patches/LadderFix.cs similarity index 50% rename from source/Patches/Modifiers/GiantMod/LadderFix.cs rename to source/Patches/LadderFix.cs index b1404d45f..2f7d35a5e 100644 --- a/source/Patches/Modifiers/GiantMod/LadderFix.cs +++ b/source/Patches/LadderFix.cs @@ -1,9 +1,9 @@ using HarmonyLib; using System.Linq; +using TownOfUs.Extensions; using UnityEngine; - -namespace TownOfUs.Modifiers.GiantMod +namespace TownOfUs.Patches { [HarmonyPatch] public static class LadderFix @@ -14,17 +14,21 @@ static bool Prefix(PlayerControl __instance, bool b) { if (__instance != PlayerControl.LocalPlayer) return true; if (!__instance.onLadder) return true; - if (!__instance.Is(ModifierEnum.Giant)) return true; - if (b) return true; // Is start of ladder? - if (GameOptionsManager.Instance?.currentNormalGameOptions?.MapId != 5) return true; // is not fungle? - + if (b) return true; var AllLadders = GameObject.FindObjectsOfType(); var Ladder = AllLadders.OrderBy(x => Vector3.Distance(x.transform.position, __instance.transform.position)).ElementAt(0); + if (__instance.GetAppearance().SizeFactor == new Vector3(1.0f, 1.0f, 1.0f)) + { + if (!Ladder.IsTop) return true; + __instance.NetTransform.RpcSnapTo(__instance.transform.position + new Vector3(0, 0.25f)); + } + else if (__instance.GetAppearance().SizeFactor == new Vector3(0.4f, 0.4f, 1.0f)) + { + if (Ladder.IsTop) return true; - if (!Ladder.IsTop) return true; // Are we at the bottom? - - __instance.NetTransform.RpcSnapTo(__instance.transform.position + new Vector3(0,0.5f)); + __instance.NetTransform.RpcSnapTo(__instance.transform.position + new Vector3(0, -0.25f)); + } return true; } diff --git a/source/Patches/Medbay.cs b/source/Patches/Medbay.cs index c75d792aa..9cd631b90 100644 --- a/source/Patches/Medbay.cs +++ b/source/Patches/Medbay.cs @@ -11,11 +11,14 @@ private static class MedScanMinigamePatch [HarmonyPostfix] private static void BeginPostfix(MedScanMinigame __instance) { - // Update medical details for Giant modifier if (PlayerControl.LocalPlayer.Is(ModifierEnum.Giant)) { __instance.completeString = __instance.completeString.Replace("3' 6\"", "5' 3\"").Replace("92lb", "184lb"); } + else if (PlayerControl.LocalPlayer.Is(ModifierEnum.Mini)) + { + __instance.completeString = __instance.completeString.Replace("3' 6\"", "1' 9\"").Replace("92lb", "46lb"); + } } } } diff --git a/source/Patches/Modifiers/AssassinMod/AssassinKill.cs b/source/Patches/Modifiers/AssassinMod/AssassinKill.cs index d448b107b..57de7c877 100644 --- a/source/Patches/Modifiers/AssassinMod/AssassinKill.cs +++ b/source/Patches/Modifiers/AssassinMod/AssassinKill.cs @@ -13,6 +13,7 @@ using TownOfUs.CrewmateRoles.ImitatorMod; using TownOfUs.Patches; using Reactor.Utilities.Extensions; +using TownOfUs.CrewmateRoles.DeputyMod; namespace TownOfUs.Modifiers.AssassinMod { @@ -142,6 +143,13 @@ public static void MurderPlayer( { var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); ShowHideButtonsDoom.HideButtonsDoom(doomsayer); + ShowHideButtonsDoom.HideTextDoom(doomsayer); + } + + if (player.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + RemoveButtons.HideButtons(dep); } if (player.Is(RoleEnum.Politician)) @@ -233,20 +241,45 @@ public static void MurderPlayer( ShowHideButtonsDoom.HideTarget(doom, voteArea.TargetPlayerId); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + if (dep.Buttons.Count > 0 && dep.Buttons[voteArea.TargetPlayerId] != null) + { + dep.Buttons[voteArea.TargetPlayerId].SetActive(false); + dep.Buttons[voteArea.TargetPlayerId].GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Swapper) && !PlayerControl.LocalPlayer.Data.IsDead) { var swapper = Role.GetRole(PlayerControl.LocalPlayer); - var button = swapper.Buttons[voteArea.TargetPlayerId]; - if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + var index = int.MaxValue; + for (var i = 0; i < swapper.ListOfActives.Count; i++) { - swapper.ListOfActives[voteArea.TargetPlayerId] = false; - if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; - if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; - Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + if (swapper.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) + { + var button = swapper.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + { + swapper.ListOfActives[index] = (swapper.ListOfActives[index].Item1, false); + if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; + if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + swapper.Buttons[index] = null; + } } - button.SetActive(false); - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - swapper.Buttons[voteArea.TargetPlayerId] = null; } foreach (var playerVoteArea in meetingHud.playerStates) @@ -266,11 +299,9 @@ public static void MurderPlayer( if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator) && !PlayerControl.LocalPlayer.Data.IsDead) { var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); - if (!meetingHud.playerStates[PlayerControl.LocalPlayer.PlayerId].DidVote) + if (MeetingHud.Instance.state != MeetingHud.VoteStates.Results && MeetingHud.Instance.state != MeetingHud.VoteStates.Proceeding) { - RoleEnum imitatedRole = Role.GetRole(player).RoleType; - var imitatable = imitatorRole.ImitatableRoles.Contains(imitatedRole); - AddButtonImitator.GenButton(imitatorRole, player.PlayerId, imitatable, true); + AddButtonImitator.GenButton(imitatorRole, voteArea, true); } } diff --git a/source/Patches/Modifiers/AssassinMod/ShowHideButtons.cs b/source/Patches/Modifiers/AssassinMod/ShowHideButtons.cs index 9803e83f0..09bf2596e 100644 --- a/source/Patches/Modifiers/AssassinMod/ShowHideButtons.cs +++ b/source/Patches/Modifiers/AssassinMod/ShowHideButtons.cs @@ -1,6 +1,8 @@ using HarmonyLib; +using System.Linq; using TownOfUs.Roles.Modifiers; using UnityEngine.UI; +using UnityEngine; namespace TownOfUs.Modifiers.AssassinMod { @@ -22,6 +24,11 @@ public static void HideButtons(Assassin role) guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); role.GuessedThisMeeting = true; } + + foreach (var voteArea in MeetingHud.Instance.playerStates) + { + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); + } } public static void HideSingle( @@ -44,7 +51,6 @@ public static void HideTarget( byte targetId ) { - var (cycleBack, cycleForward, guess, guessText) = role.Buttons[targetId]; if (cycleBack == null || cycleForward == null) return; cycleBack.SetActive(false); @@ -57,14 +63,10 @@ byte targetId guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); role.Buttons[targetId] = (null, null, null, null); role.Guesses.Remove(targetId); - } - - public static void Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(AbilityEnum.Assassin)) return; - var assassin = Ability.GetAbility(PlayerControl.LocalPlayer); - if (!CustomGameOptions.AssassinateAfterVoting) HideButtons(assassin); + PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( + x => x.TargetPlayerId == targetId); + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); } } } diff --git a/source/Patches/Modifiers/Diseased.cs b/source/Patches/Modifiers/Diseased.cs deleted file mode 100644 index ee785346e..000000000 --- a/source/Patches/Modifiers/Diseased.cs +++ /dev/null @@ -1,17 +0,0 @@ -using HarmonyLib; - -namespace TownOfUs.Modifiers -{ - public class Diseased - { - [HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.MurderPlayer))] - public class PlayerControl_MurderPlayer - { - public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target) - { - if (target.Is(ModifierEnum.Diseased)) - __instance.SetKillTimer(GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown * CustomGameOptions.DiseasedMultiplier); - } - } - } -} \ No newline at end of file diff --git a/source/Patches/Modifiers/SaboteurMod/HudManagerUpdate.cs b/source/Patches/Modifiers/SaboteurMod/HudManagerUpdate.cs new file mode 100644 index 000000000..872d27e0d --- /dev/null +++ b/source/Patches/Modifiers/SaboteurMod/HudManagerUpdate.cs @@ -0,0 +1,70 @@ +using HarmonyLib; +using TownOfUs.Roles.Modifiers; + +namespace TownOfUs.Modifiers.SaboteurMod +{ + [HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))] + public class HudManagerUpdate + { + public static void Postfix(HudManager __instance) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (!PlayerControl.LocalPlayer.Is(ModifierEnum.Saboteur)) return; + + var sab = Modifier.GetModifier(PlayerControl.LocalPlayer); + + var system = ShipStatus.Instance.Systems[SystemTypes.Sabotage].Cast(); + if (system.AnyActive) system.Timer = 30f; + else if (system.Timer > 30f - CustomGameOptions.ReducedSaboCd) system.Timer = 30f - CustomGameOptions.ReducedSaboCd; + } + } + + [HarmonyPatch(typeof(SabotageSystemType), nameof(SabotageSystemType.UpdateSystem))] + public class SabotageSystemUpdate + { + public static void Prefix(SabotageSystemType __instance, ref PlayerControl player) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (!player.Is(ModifierEnum.Saboteur)) return; + + if (__instance.Timer <= CustomGameOptions.ReducedSaboCd) __instance.Timer = 0f; + } + } + + [HarmonyPatch(typeof(SabotageSystemType), nameof(SabotageSystemType.Deserialize))] + public class SabotageSystemDeserialize + { + public static void Prefix(SabotageSystemType __instance) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (__instance.AnyActive) return; + if (__instance.initialCooldown) return; + + foreach (var modifier in Modifier.GetModifiers(ModifierEnum.Saboteur)) + { + var sab = (Saboteur)modifier; + sab.Timer = __instance.Timer; + } + } + public static void Postfix(SabotageSystemType __instance) + { + if (PlayerControl.AllPlayerControls.Count <= 1) return; + if (PlayerControl.LocalPlayer == null) return; + if (PlayerControl.LocalPlayer.Data == null) return; + if (__instance.AnyActive) return; + if (__instance.initialCooldown) return; + + foreach (var modifier in Modifier.GetModifiers(ModifierEnum.Saboteur)) + { + var sab = (Saboteur)modifier; + __instance.Timer = sab.Timer; + } + } + } +} \ No newline at end of file diff --git a/source/Patches/Modifiers/ShyMod/HudManagerUpdate.cs b/source/Patches/Modifiers/ShyMod/HudManagerUpdate.cs index 4b48fde37..908bd9d92 100644 --- a/source/Patches/Modifiers/ShyMod/HudManagerUpdate.cs +++ b/source/Patches/Modifiers/ShyMod/HudManagerUpdate.cs @@ -25,7 +25,7 @@ public static void Postfix(HudManager __instance) shy.Moving = false; shy.LastMoved = DateTime.UtcNow; } - if (shy.Moving) continue; + if (player.Data.Disconnected || shy.Moving) continue; if (player.GetCustomOutfitType() == CustomPlayerOutfitType.Swooper) { shy.Opacity = 0f; diff --git a/source/Patches/NeutralRoles/AmnesiacMod/PerformKillButton.cs b/source/Patches/NeutralRoles/AmnesiacMod/PerformKillButton.cs index 106413d58..f62c654c2 100644 --- a/source/Patches/NeutralRoles/AmnesiacMod/PerformKillButton.cs +++ b/source/Patches/NeutralRoles/AmnesiacMod/PerformKillButton.cs @@ -57,6 +57,15 @@ public static bool Prefix(KillButton __instance) public static void Remember(Amnesiac amneRole, PlayerControl other) { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(other.PlayerId)) + { + if (!lookout.Watching[other.PlayerId].Contains(RoleEnum.Amnesiac)) lookout.Watching[other.PlayerId].Add(RoleEnum.Amnesiac); + } + } + var role = Utils.GetRole(other); var amnesiac = amneRole.Player; @@ -70,7 +79,14 @@ public static void Remember(Amnesiac amneRole, PlayerControl other) var amnesiacRole = Role.GetRole(amnesiac); amnesiacRole.BodyArrows.Values.DestroyAll(); amnesiacRole.BodyArrows.Clear(); - foreach (var body in amnesiacRole.CurrentTarget.bodyRenderers) body.material.SetFloat("_Outline", 0f); + try + { + foreach (var body in amnesiacRole.CurrentTarget.bodyRenderers) body.material.SetFloat("_Outline", 0f); + } + catch + { + + } } switch (role) @@ -102,6 +118,8 @@ public static void Remember(Amnesiac amneRole, PlayerControl other) case RoleEnum.Politician: case RoleEnum.Warden: case RoleEnum.Jailor: + case RoleEnum.Lookout: + case RoleEnum.Deputy: rememberImp = false; rememberNeut = false; @@ -257,6 +275,7 @@ public static void Remember(Amnesiac amneRole, PlayerControl other) var medicRole = Role.GetRole(amnesiac); if (amnesiac != StartImitate.ImitatingPlayer) medicRole.UsedAbility = false; else medicRole.UsedAbility = true; + medicRole.StartingCooldown = medicRole.StartingCooldown.AddSeconds(-10f); } else if (role == RoleEnum.Mayor) @@ -311,6 +330,14 @@ public static void Remember(Amnesiac amneRole, PlayerControl other) trackerRole.LastTracked = DateTime.UtcNow; } + else if (role == RoleEnum.Lookout) + { + var loRole = Role.GetRole(amnesiac); + loRole.UsesLeft = CustomGameOptions.MaxWatches; + loRole.Watching.Clear(); + loRole.LastWatched = DateTime.UtcNow; + } + else if (role == RoleEnum.Aurial) { var aurialRole = Role.GetRole(amnesiac); @@ -322,8 +349,17 @@ public static void Remember(Amnesiac amneRole, PlayerControl other) else if (role == RoleEnum.Warden) { var wardenRole = Role.GetRole(amnesiac); - wardenRole.LastFortified = DateTime.UtcNow; wardenRole.Fortified = null; + wardenRole.StartingCooldown = wardenRole.StartingCooldown.AddSeconds(-10f); + } + + else if (role == RoleEnum.Deputy) + { + var deputyRole = Role.GetRole(amnesiac); + deputyRole.Camping = null; + deputyRole.Killer = null; + deputyRole.CampedThisRound = false; + deputyRole.StartingCooldown = deputyRole.StartingCooldown.AddSeconds(-10f); } else if (role == RoleEnum.Detective) diff --git a/source/Patches/NeutralRoles/DoomsayerMod/AddButton.cs b/source/Patches/NeutralRoles/DoomsayerMod/AddButton.cs index 3be6a05b6..c6bb4f6e9 100644 --- a/source/Patches/NeutralRoles/DoomsayerMod/AddButton.cs +++ b/source/Patches/NeutralRoles/DoomsayerMod/AddButton.cs @@ -146,19 +146,19 @@ void Listener() if (currentGuess == "None") return; role.NumberOfGuesses++; - var playersAlive = PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected).ToList().Count; + var playersAlive = PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected && !Role.GetRole(x).Criteria() && !x.IsJailed()).ToList().Count; ShowHideButtonsDoom.HideSingle(role, targetId, false); var nameText = Object.Instantiate(voteArea.NameText, voteArea.transform); - voteArea.NameText.transform.localPosition = new Vector3(0.55f, 0.12f, -0.1f); - nameText.transform.localPosition = new Vector3(0.55f, -0.12f, -0.1f); + nameText.transform.localPosition -= new Vector3(0.2f, 0.3f, 0f); + nameText.transform.localScale *= 0.6f; nameText.text = $"{currentGuess}"; role.RoleGuess[targetId] = nameText; var playerRole = Role.GetRole(voteArea); if (currentGuess != playerRole.Name) role.IncorrectGuesses++; - if ((role.NumberOfGuesses < 2 && playersAlive == 3) || (role.NumberOfGuesses != 3 && playersAlive > 3)) return; + if ((role.NumberOfGuesses < 2 && playersAlive < 3) || (role.NumberOfGuesses < 3 && playersAlive > 2)) return; ShowHideButtonsDoom.HideButtonsDoom(role); if (role.IncorrectGuesses > 0) Coroutines.Start(Utils.FlashCoroutine(Color.red)); diff --git a/source/Patches/NeutralRoles/DoomsayerMod/DoomsayerKill.cs b/source/Patches/NeutralRoles/DoomsayerMod/DoomsayerKill.cs index 77df8faf6..cc5d0b47a 100644 --- a/source/Patches/NeutralRoles/DoomsayerMod/DoomsayerKill.cs +++ b/source/Patches/NeutralRoles/DoomsayerMod/DoomsayerKill.cs @@ -13,6 +13,7 @@ using TownOfUs.Patches; using Reactor.Utilities.Extensions; using TownOfUs.CrewmateRoles.ImitatorMod; +using TownOfUs.CrewmateRoles.DeputyMod; namespace TownOfUs.NeutralRoles.DoomsayerMod { @@ -144,6 +145,13 @@ public static void MurderPlayer( { var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); ShowHideButtonsDoom.HideButtonsDoom(doomsayer); + ShowHideButtonsDoom.HideTextDoom(doomsayer); + } + + if (player.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + RemoveButtons.HideButtons(dep); } if (player.Is(RoleEnum.Politician)) @@ -235,20 +243,45 @@ public static void MurderPlayer( ShowHideButtonsDoom.HideTarget(doom, voteArea.TargetPlayerId); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy) && !PlayerControl.LocalPlayer.Data.IsDead) + { + var dep = Role.GetRole(PlayerControl.LocalPlayer); + if (dep.Buttons.Count > 0 && dep.Buttons[voteArea.TargetPlayerId] != null) + { + dep.Buttons[voteArea.TargetPlayerId].SetActive(false); + dep.Buttons[voteArea.TargetPlayerId].GetComponent().OnClick = new Button.ButtonClickedEvent(); + } + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Swapper) && !PlayerControl.LocalPlayer.Data.IsDead) { var swapper = Role.GetRole(PlayerControl.LocalPlayer); - var button = swapper.Buttons[voteArea.TargetPlayerId]; - if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + var index = int.MaxValue; + for (var i = 0; i < swapper.ListOfActives.Count; i++) { - swapper.ListOfActives[voteArea.TargetPlayerId] = false; - if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; - if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; - Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + if (swapper.ListOfActives[i].Item1 == voteArea.TargetPlayerId) + { + index = i; + break; + } + } + if (index != int.MaxValue) + { + var button = swapper.Buttons[index]; + if (button != null) + { + if (button.GetComponent().sprite == TownOfUs.SwapperSwitch) + { + swapper.ListOfActives[index] = (swapper.ListOfActives[index].Item1, false); + if (SwapVotes.Swap1 == voteArea) SwapVotes.Swap1 = null; + if (SwapVotes.Swap2 == voteArea) SwapVotes.Swap2 = null; + Utils.Rpc(CustomRPC.SetSwaps, sbyte.MaxValue, sbyte.MaxValue); + } + button.SetActive(false); + button.GetComponent().OnClick = new Button.ButtonClickedEvent(); + swapper.Buttons[index] = null; + } } - button.SetActive(false); - button.GetComponent().OnClick = new Button.ButtonClickedEvent(); - swapper.Buttons[voteArea.TargetPlayerId] = null; } foreach (var playerVoteArea in meetingHud.playerStates) @@ -268,11 +301,9 @@ public static void MurderPlayer( if (PlayerControl.LocalPlayer.Is(RoleEnum.Imitator) && !PlayerControl.LocalPlayer.Data.IsDead) { var imitatorRole = Role.GetRole(PlayerControl.LocalPlayer); - if (!meetingHud.playerStates[PlayerControl.LocalPlayer.PlayerId].DidVote) + if (MeetingHud.Instance.state != MeetingHud.VoteStates.Results && MeetingHud.Instance.state != MeetingHud.VoteStates.Proceeding) { - RoleEnum imitatedRole = Role.GetRole(player).RoleType; - var imitatable = imitatorRole.ImitatableRoles.Contains(imitatedRole); - AddButtonImitator.GenButton(imitatorRole, player.PlayerId, imitatable, true); + AddButtonImitator.GenButton(imitatorRole, voteArea, true); } } diff --git a/source/Patches/NeutralRoles/DoomsayerMod/MeetingStart.cs b/source/Patches/NeutralRoles/DoomsayerMod/MeetingStart.cs index a9ac3d372..c481c1464 100644 --- a/source/Patches/NeutralRoles/DoomsayerMod/MeetingStart.cs +++ b/source/Patches/NeutralRoles/DoomsayerMod/MeetingStart.cs @@ -35,20 +35,20 @@ public static string PlayerReportFeedback(PlayerControl player) else if (player.Is(RoleEnum.Altruist) || player.Is(RoleEnum.Amnesiac) || player.Is(RoleEnum.Janitor) || player.Is(RoleEnum.Medium) || player.Is(RoleEnum.SoulCollector) || player.Is(RoleEnum.Undertaker) || player.Is(RoleEnum.Vampire)) return $"You observe that {player.GetDefaultOutfit().PlayerName} has an unusual obsession with dead bodies"; - else if (player.Is(RoleEnum.Hunter) || player.Is(RoleEnum.Investigator) || player.Is(RoleEnum.Swooper) - || player.Is(RoleEnum.Tracker) || player.Is(RoleEnum.Venerer) || player.Is(RoleEnum.Werewolf)) + else if (player.Is(RoleEnum.Hunter) || player.Is(RoleEnum.Investigator) || player.Is(RoleEnum.Lookout) || player.Is(RoleEnum.Scavenger) + || player.Is(RoleEnum.Swooper) || player.Is(RoleEnum.Tracker) || player.Is(RoleEnum.Werewolf)) return $"You observe that {player.GetDefaultOutfit().PlayerName} is well trained in hunting down prey"; - else if (player.Is(RoleEnum.Arsonist) || player.Is(RoleEnum.Hypnotist) || player.Is(RoleEnum.Miner) || player.Is(RoleEnum.Plaguebearer) - || player.Is(RoleEnum.Prosecutor) || player.Is(RoleEnum.Seer) || player.Is(RoleEnum.Transporter)) + else if (player.Is(RoleEnum.Arsonist) || player.Is(RoleEnum.Hypnotist) || player.Is(RoleEnum.Miner) || player.Is(RoleEnum.Pestilence) + || player.Is(RoleEnum.Plaguebearer) || player.Is(RoleEnum.Prosecutor) || player.Is(RoleEnum.Seer) || player.Is(RoleEnum.Transporter)) return $"You observe that {player.GetDefaultOutfit().PlayerName} spreads fear amonst the group"; else if (player.Is(RoleEnum.Engineer) || player.Is(RoleEnum.Escapist) || player.Is(RoleEnum.Grenadier) || player.Is(RoleEnum.GuardianAngel) || player.Is(RoleEnum.Medic) || player.Is(RoleEnum.Survivor) || player.Is(RoleEnum.Warden)) return $"You observe that {player.GetDefaultOutfit().PlayerName} hides to guard themself or others"; else if (player.Is(RoleEnum.Executioner) || player.Is(RoleEnum.Jester) || player.Is(RoleEnum.Mayor) || player.Is(RoleEnum.Politician) - || player.Is(RoleEnum.Swapper) || player.Is(RoleEnum.Traitor) || player.Is(RoleEnum.Veteran)) + || player.Is(RoleEnum.Swapper) || player.Is(RoleEnum.Traitor) || player.Is(RoleEnum.Venerer) || player.Is(RoleEnum.Veteran)) return $"You observe that {player.GetDefaultOutfit().PlayerName} has a trick up their sleeve"; - else if (player.Is(RoleEnum.Bomber) || player.Is(RoleEnum.Jailor) || player.Is(RoleEnum.Juggernaut) - || player.Is(RoleEnum.Pestilence) || player.Is(RoleEnum.Sheriff) || player.Is(RoleEnum.Vigilante) || player.Is(RoleEnum.Warlock)) + else if (player.Is(RoleEnum.Bomber) || player.Is(RoleEnum.Deputy) || player.Is(RoleEnum.Jailor) || player.Is(RoleEnum.Juggernaut) + || player.Is(RoleEnum.Sheriff) || player.Is(RoleEnum.Vigilante) || player.Is(RoleEnum.Warlock)) return $"You observe that {player.GetDefaultOutfit().PlayerName} is capable of performing relentless attacks"; else if (player.Is(RoleEnum.Crewmate) || player.Is(RoleEnum.Impostor)) return $"You observe that {player.GetDefaultOutfit().PlayerName} appears to be roleless"; @@ -68,21 +68,21 @@ public static string RoleReportFeedback(PlayerControl player) else if (player.Is(RoleEnum.Altruist) || player.Is(RoleEnum.Amnesiac) || player.Is(RoleEnum.Janitor) || player.Is(RoleEnum.Medium) || player.Is(RoleEnum.SoulCollector) || player.Is(RoleEnum.Undertaker) || player.Is(RoleEnum.Vampire)) return "(Altruist, Amnesiac, Janitor, Medium, Soul Collector, Undertaker or Vampire)"; - else if (player.Is(RoleEnum.Hunter) || player.Is(RoleEnum.Investigator) || player.Is(RoleEnum.Swooper) - || player.Is(RoleEnum.Tracker) || player.Is(RoleEnum.Venerer) || player.Is(RoleEnum.Werewolf)) - return "(Hunter, Investigator, Swooper, Tracker, Venerer, Werewolf)"; - else if (player.Is(RoleEnum.Arsonist) || player.Is(RoleEnum.Hypnotist) || player.Is(RoleEnum.Miner) || player.Is(RoleEnum.Plaguebearer) - || player.Is(RoleEnum.Prosecutor) || player.Is(RoleEnum.Seer) || player.Is(RoleEnum.Transporter)) + else if (player.Is(RoleEnum.Hunter) || player.Is(RoleEnum.Investigator) || player.Is(RoleEnum.Lookout) || player.Is(RoleEnum.Scavenger) + || player.Is(RoleEnum.Swooper) || player.Is(RoleEnum.Tracker) || player.Is(RoleEnum.Werewolf)) + return "(Hunter, Investigator, Lookout, Scavenger, Swooper, Tracker or Werewolf)"; + else if (player.Is(RoleEnum.Arsonist) || player.Is(RoleEnum.Hypnotist) || player.Is(RoleEnum.Miner) || player.Is(RoleEnum.Pestilence) + || player.Is(RoleEnum.Plaguebearer) || player.Is(RoleEnum.Prosecutor) || player.Is(RoleEnum.Seer) || player.Is(RoleEnum.Transporter)) return "(Arsonist, Hypnotist, Miner, Plaguebearer, Prosecutor, Seer or Transporter)"; else if (player.Is(RoleEnum.Engineer) || player.Is(RoleEnum.Escapist) || player.Is(RoleEnum.Grenadier) || player.Is(RoleEnum.GuardianAngel) || player.Is(RoleEnum.Medic) || player.Is(RoleEnum.Survivor) || player.Is(RoleEnum.Warden)) return "(Engineer, Escapist, Grenadier, Guardian Angel, Medic, Survivor or Warden)"; else if (player.Is(RoleEnum.Executioner) || player.Is(RoleEnum.Jester) || player.Is(RoleEnum.Mayor) || player.Is(RoleEnum.Politician) - || player.Is(RoleEnum.Swapper) || player.Is(RoleEnum.Traitor) || player.Is(RoleEnum.Veteran)) - return "(Executioner, Jester, Politician, Swapper, Traitor or Veteran)"; - else if (player.Is(RoleEnum.Bomber) || player.Is(RoleEnum.Jailor) || player.Is(RoleEnum.Juggernaut) - || player.Is(RoleEnum.Pestilence) || player.Is(RoleEnum.Sheriff) || player.Is(RoleEnum.Vigilante) || player.Is(RoleEnum.Warlock)) - return "(Bomber, Jailor, Juggernaut, Pestilence, Sheriff, Vigilante or Warlock)"; + || player.Is(RoleEnum.Swapper) || player.Is(RoleEnum.Traitor) || player.Is(RoleEnum.Venerer) || player.Is(RoleEnum.Veteran)) + return "(Executioner, Jester, Politician, Swapper, Traitor, Venerer or Veteran)"; + else if (player.Is(RoleEnum.Bomber) || player.Is(RoleEnum.Deputy) || player.Is(RoleEnum.Jailor) || player.Is(RoleEnum.Juggernaut) + || player.Is(RoleEnum.Sheriff) || player.Is(RoleEnum.Vigilante) || player.Is(RoleEnum.Warlock)) + return "(Bomber, Deputy, Jailor, Juggernaut, Sheriff, Vigilante or Warlock)"; else if (player.Is(RoleEnum.Crewmate) || player.Is(RoleEnum.Impostor)) return "(Crewmate or Impostor)"; else return "Error"; diff --git a/source/Patches/NeutralRoles/DoomsayerMod/ShowHideButtonsDoom.cs b/source/Patches/NeutralRoles/DoomsayerMod/ShowHideButtonsDoom.cs index c0776b83f..dd759026d 100644 --- a/source/Patches/NeutralRoles/DoomsayerMod/ShowHideButtonsDoom.cs +++ b/source/Patches/NeutralRoles/DoomsayerMod/ShowHideButtonsDoom.cs @@ -1,6 +1,8 @@ using HarmonyLib; using TownOfUs.Roles; using UnityEngine.UI; +using UnityEngine; +using System.Linq; namespace TownOfUs.NeutralRoles.DoomsayerMod { @@ -21,7 +23,13 @@ public static void HideButtonsDoom(Doomsayer role) cycleForward.GetComponent().OnClick = new Button.ButtonClickedEvent(); guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); } + + foreach (var voteArea in MeetingHud.Instance.playerStates) + { + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); + } } + public static void HideTextDoom(Doomsayer role) { foreach (var (_, guessText) in role.RoleGuess) @@ -45,7 +53,6 @@ public static void HideTarget( byte targetId ) { - var (cycleBack, cycleForward, guess, guessText) = role.Buttons[targetId]; if (cycleBack == null || cycleForward == null) return; cycleBack.SetActive(false); @@ -58,18 +65,10 @@ byte targetId guess.GetComponent().OnClick = new Button.ButtonClickedEvent(); role.Buttons[targetId] = (null, null, null, null); role.Guesses.Remove(targetId); - } - - public static void Prefix(MeetingHud __instance) - { - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Doomsayer)) return; - var doomsayer = Role.GetRole(PlayerControl.LocalPlayer); - if (!CustomGameOptions.DoomsayerAfterVoting) - { - HideButtonsDoom(doomsayer); - HideTextDoom(doomsayer); - } + PlayerVoteArea voteArea = MeetingHud.Instance.playerStates.First( + x => x.TargetPlayerId == targetId); + voteArea.NameText.transform.localPosition = new Vector3(0.3384f, 0.0311f, -0.1f); } } } diff --git a/source/Patches/NeutralRoles/VampireMod/PerformKill.cs b/source/Patches/NeutralRoles/VampireMod/PerformKill.cs index 2c4a3dcf7..d15433495 100644 --- a/source/Patches/NeutralRoles/VampireMod/PerformKill.cs +++ b/source/Patches/NeutralRoles/VampireMod/PerformKill.cs @@ -152,6 +152,12 @@ public static void Convert(PlayerControl newVamp) UnityEngine.Object.Destroy(trackerRole.UsesText); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var loRole = Role.GetRole(PlayerControl.LocalPlayer); + UnityEngine.Object.Destroy(loRole.UsesText); + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Aurial)) { var aurialRole = Role.GetRole(PlayerControl.LocalPlayer); diff --git a/source/Patches/RandomMap.cs b/source/Patches/RandomMap.cs index 59516e0e4..dac7d55a4 100644 --- a/source/Patches/RandomMap.cs +++ b/source/Patches/RandomMap.cs @@ -152,6 +152,8 @@ public static void AdjustCooldowns(float change) Generate.HypnotiseCooldown.Set((float)Generate.HypnotiseCooldown.Value + change, false); Generate.JailCooldown.Set((float)Generate.JailCooldown.Value + change, false); Generate.ReapCooldown.Set((float)Generate.ReapCooldown.Value + change, false); + Generate.WatchCooldown.Set((float)Generate.WatchCooldown.Value + change, false); + Generate.ScavengeDuration.Set((float)Generate.ScavengeDuration.Value + change, false); GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown += change; if (change % 5 != 0) { diff --git a/source/Patches/RoleEnum.cs b/source/Patches/RoleEnum.cs index 94487b303..5bfab0587 100644 --- a/source/Patches/RoleEnum.cs +++ b/source/Patches/RoleEnum.cs @@ -44,6 +44,8 @@ public enum RoleEnum Warden, Jailor, SoulCollector, + Lookout, + Deputy, Miner, Swooper, @@ -58,6 +60,7 @@ public enum RoleEnum Warlock, Venerer, Hypnotist, + Scavenger, Crewmate, Impostor, @@ -84,7 +87,9 @@ public enum ModifierEnum Underdog, Frosty, SixthSense, - Shy + Shy, + Mini, + Saboteur } public enum AbilityEnum diff --git a/source/Patches/Roles/Deputy.cs b/source/Patches/Roles/Deputy.cs new file mode 100644 index 000000000..562853625 --- /dev/null +++ b/source/Patches/Roles/Deputy.cs @@ -0,0 +1,49 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using TownOfUs.Extensions; + +namespace TownOfUs.Roles +{ + public class Deputy : Role + { + public PlayerControl ClosestPlayer; + public PlayerControl Camping = null; + public PlayerControl Killer = null; + public bool CampedThisRound = false; + public DateTime StartingCooldown { get; set; } + public Dictionary Buttons { get; set; } = new(); + + public Deputy(PlayerControl player) : base(player) + { + Name = "Deputy"; + ImpostorText = () => "Camp Crewmates To Catch Their Killer"; + TaskText = () => "Camp crewmates then shoot their killer"; + Color = Patches.Colors.Deputy; + StartingCooldown = DateTime.UtcNow; + RoleType = RoleEnum.Deputy; + AddToRoleHistory(RoleType); + } + + public float StartTimer() + { + var utcNow = DateTime.UtcNow; + var timeSpan = utcNow - StartingCooldown; + var num = 10000f; + var flag2 = num - (float)timeSpan.TotalMilliseconds < 0f; + if (flag2) return 0; + return (num - (float)timeSpan.TotalMilliseconds) / 1000f; + } + + internal override bool GameEnd(LogicGameFlowNormal __instance) + { + if (Player.Data.IsDead || Player.Data.Disconnected || !CustomGameOptions.CrewKillersContinue) return true; + + if (PlayerControl.AllPlayerControls.ToArray().Count(x => !x.Data.IsDead && !x.Data.Disconnected && x.Data.IsImpostor()) > 0 + && Killer != null && !Killer.Data.IsDead && !Killer.Data.Disconnected) return false; + + return true; + } + } +} \ No newline at end of file diff --git a/source/Patches/Roles/Doomsayer.cs b/source/Patches/Roles/Doomsayer.cs index 8c770e248..e64cd95c5 100644 --- a/source/Patches/Roles/Doomsayer.cs +++ b/source/Patches/Roles/Doomsayer.cs @@ -34,75 +34,75 @@ public Doomsayer(PlayerControl player) : base(player) AddToRoleHistory(RoleType); Faction = Faction.NeutralEvil; - if (CustomGameOptions.GameMode == GameMode.Classic || CustomGameOptions.GameMode == GameMode.AllAny) - { - ColorMapping.Add("Crewmate", Colors.Crewmate); - if (CustomGameOptions.PoliticianOn > 0) ColorMapping.Add("Politician", Colors.Politician); - if (CustomGameOptions.SheriffOn > 0) ColorMapping.Add("Sheriff", Colors.Sheriff); - if (CustomGameOptions.EngineerOn > 0) ColorMapping.Add("Engineer", Colors.Engineer); - if (CustomGameOptions.SwapperOn > 0) ColorMapping.Add("Swapper", Colors.Swapper); - if (CustomGameOptions.InvestigatorOn > 0) ColorMapping.Add("Investigator", Colors.Investigator); - if (CustomGameOptions.MedicOn > 0) ColorMapping.Add("Medic", Colors.Medic); - if (CustomGameOptions.SeerOn > 0) ColorMapping.Add("Seer", Colors.Seer); - if (CustomGameOptions.SpyOn > 0) ColorMapping.Add("Spy", Colors.Spy); - if (CustomGameOptions.SnitchOn > 0) ColorMapping.Add("Snitch", Colors.Snitch); - if (CustomGameOptions.AltruistOn > 0) ColorMapping.Add("Altruist", Colors.Altruist); - if (CustomGameOptions.VigilanteOn > 0) ColorMapping.Add("Vigilante", Colors.Vigilante); - if (CustomGameOptions.VeteranOn > 0) ColorMapping.Add("Veteran", Colors.Veteran); - if (CustomGameOptions.HunterOn > 0) ColorMapping.Add("Hunter", Colors.Hunter); - if (CustomGameOptions.TrackerOn > 0) ColorMapping.Add("Tracker", Colors.Tracker); - if (CustomGameOptions.TrapperOn > 0) ColorMapping.Add("Trapper", Colors.Trapper); - if (CustomGameOptions.TransporterOn > 0) ColorMapping.Add("Transporter", Colors.Transporter); - if (CustomGameOptions.MediumOn > 0) ColorMapping.Add("Medium", Colors.Medium); - if (CustomGameOptions.MysticOn > 0) ColorMapping.Add("Mystic", Colors.Mystic); - if (CustomGameOptions.DetectiveOn > 0) ColorMapping.Add("Detective", Colors.Detective); - if (CustomGameOptions.ImitatorOn > 0) ColorMapping.Add("Imitator", Colors.Imitator); - if (CustomGameOptions.ProsecutorOn > 0) ColorMapping.Add("Prosecutor", Colors.Prosecutor); - if (CustomGameOptions.OracleOn > 0) ColorMapping.Add("Oracle", Colors.Oracle); - if (CustomGameOptions.AurialOn > 0) ColorMapping.Add("Aurial", Colors.Aurial); - if (CustomGameOptions.WardenOn > 0) ColorMapping.Add("Warden", Colors.Warden); - if (CustomGameOptions.JailorOn > 0) ColorMapping.Add("Jailor", Colors.Jailor); + ColorMapping.Add("Crewmate", Colors.Crewmate); + if (CustomGameOptions.PoliticianOn > 0) ColorMapping.Add("Politician", Colors.Politician); + if (CustomGameOptions.SheriffOn > 0) ColorMapping.Add("Sheriff", Colors.Sheriff); + if (CustomGameOptions.EngineerOn > 0) ColorMapping.Add("Engineer", Colors.Engineer); + if (CustomGameOptions.SwapperOn > 0) ColorMapping.Add("Swapper", Colors.Swapper); + if (CustomGameOptions.InvestigatorOn > 0) ColorMapping.Add("Investigator", Colors.Investigator); + if (CustomGameOptions.MedicOn > 0) ColorMapping.Add("Medic", Colors.Medic); + if (CustomGameOptions.SeerOn > 0) ColorMapping.Add("Seer", Colors.Seer); + if (CustomGameOptions.SpyOn > 0) ColorMapping.Add("Spy", Colors.Spy); + if (CustomGameOptions.SnitchOn > 0) ColorMapping.Add("Snitch", Colors.Snitch); + if (CustomGameOptions.AltruistOn > 0) ColorMapping.Add("Altruist", Colors.Altruist); + if (CustomGameOptions.VigilanteOn > 0) ColorMapping.Add("Vigilante", Colors.Vigilante); + if (CustomGameOptions.VeteranOn > 0) ColorMapping.Add("Veteran", Colors.Veteran); + if (CustomGameOptions.HunterOn > 0) ColorMapping.Add("Hunter", Colors.Hunter); + if (CustomGameOptions.TrackerOn > 0) ColorMapping.Add("Tracker", Colors.Tracker); + if (CustomGameOptions.TrapperOn > 0) ColorMapping.Add("Trapper", Colors.Trapper); + if (CustomGameOptions.TransporterOn > 0) ColorMapping.Add("Transporter", Colors.Transporter); + if (CustomGameOptions.MediumOn > 0) ColorMapping.Add("Medium", Colors.Medium); + if (CustomGameOptions.MysticOn > 0) ColorMapping.Add("Mystic", Colors.Mystic); + if (CustomGameOptions.DetectiveOn > 0) ColorMapping.Add("Detective", Colors.Detective); + if (CustomGameOptions.ImitatorOn > 0) ColorMapping.Add("Imitator", Colors.Imitator); + if (CustomGameOptions.ProsecutorOn > 0) ColorMapping.Add("Prosecutor", Colors.Prosecutor); + if (CustomGameOptions.OracleOn > 0) ColorMapping.Add("Oracle", Colors.Oracle); + if (CustomGameOptions.AurialOn > 0) ColorMapping.Add("Aurial", Colors.Aurial); + if (CustomGameOptions.WardenOn > 0) ColorMapping.Add("Warden", Colors.Warden); + if (CustomGameOptions.JailorOn > 0) ColorMapping.Add("Jailor", Colors.Jailor); + if (CustomGameOptions.LookoutOn > 0) ColorMapping.Add("Lookout", Colors.Lookout); + if (CustomGameOptions.DeputyOn > 0) ColorMapping.Add("Deputy", Colors.Deputy); - if (CustomGameOptions.DoomsayerGuessImpostors && !PlayerControl.LocalPlayer.Is(Faction.Impostors)) - { - ColorMapping.Add("Impostor", Colors.Impostor); - if (CustomGameOptions.JanitorOn > 0) ColorMapping.Add("Janitor", Colors.Impostor); - if (CustomGameOptions.MorphlingOn > 0) ColorMapping.Add("Morphling", Colors.Impostor); - if (CustomGameOptions.MinerOn > 0) ColorMapping.Add("Miner", Colors.Impostor); - if (CustomGameOptions.SwooperOn > 0) ColorMapping.Add("Swooper", Colors.Impostor); - if (CustomGameOptions.UndertakerOn > 0) ColorMapping.Add("Undertaker", Colors.Impostor); - if (CustomGameOptions.EscapistOn > 0) ColorMapping.Add("Escapist", Colors.Impostor); - if (CustomGameOptions.GrenadierOn > 0) ColorMapping.Add("Grenadier", Colors.Impostor); - if (CustomGameOptions.TraitorOn > 0) ColorMapping.Add("Traitor", Colors.Impostor); - if (CustomGameOptions.BlackmailerOn > 0) ColorMapping.Add("Blackmailer", Colors.Impostor); - if (CustomGameOptions.BomberOn > 0) ColorMapping.Add("Bomber", Colors.Impostor); - if (CustomGameOptions.WarlockOn > 0) ColorMapping.Add("Warlock", Colors.Impostor); - if (CustomGameOptions.VenererOn > 0) ColorMapping.Add("Venerer", Colors.Impostor); - if (CustomGameOptions.HypnotistOn > 0) ColorMapping.Add("Hypnotist", Colors.Impostor); - } + if (CustomGameOptions.DoomsayerGuessImpostors && !PlayerControl.LocalPlayer.Is(Faction.Impostors)) + { + ColorMapping.Add("Impostor", Colors.Impostor); + if (CustomGameOptions.JanitorOn > 0) ColorMapping.Add("Janitor", Colors.Impostor); + if (CustomGameOptions.MorphlingOn > 0) ColorMapping.Add("Morphling", Colors.Impostor); + if (CustomGameOptions.MinerOn > 0) ColorMapping.Add("Miner", Colors.Impostor); + if (CustomGameOptions.SwooperOn > 0) ColorMapping.Add("Swooper", Colors.Impostor); + if (CustomGameOptions.UndertakerOn > 0) ColorMapping.Add("Undertaker", Colors.Impostor); + if (CustomGameOptions.EscapistOn > 0) ColorMapping.Add("Escapist", Colors.Impostor); + if (CustomGameOptions.GrenadierOn > 0) ColorMapping.Add("Grenadier", Colors.Impostor); + if (CustomGameOptions.TraitorOn > 0) ColorMapping.Add("Traitor", Colors.Impostor); + if (CustomGameOptions.BlackmailerOn > 0) ColorMapping.Add("Blackmailer", Colors.Impostor); + if (CustomGameOptions.BomberOn > 0) ColorMapping.Add("Bomber", Colors.Impostor); + if (CustomGameOptions.WarlockOn > 0) ColorMapping.Add("Warlock", Colors.Impostor); + if (CustomGameOptions.VenererOn > 0) ColorMapping.Add("Venerer", Colors.Impostor); + if (CustomGameOptions.HypnotistOn > 0) ColorMapping.Add("Hypnotist", Colors.Impostor); + if (CustomGameOptions.ScavengerOn > 0) ColorMapping.Add("Scavenger", Colors.Impostor); + } - if (CustomGameOptions.DoomsayerGuessNeutralBenign) - { - if (CustomGameOptions.AmnesiacOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Amnesiac) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Amnesiac)) ColorMapping.Add("Amnesiac", Colors.Amnesiac); - if (CustomGameOptions.GuardianAngelOn > 0) ColorMapping.Add("Guardian Angel", Colors.GuardianAngel); - if (CustomGameOptions.SurvivorOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Survivor) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Survivor)) ColorMapping.Add("Survivor", Colors.Survivor); - } - if (CustomGameOptions.DoomsayerGuessNeutralEvil) - { - if (CustomGameOptions.GameMode == GameMode.AllAny) ColorMapping.Add("Doomsayer", Colors.Doomsayer); - if (CustomGameOptions.ExecutionerOn > 0) ColorMapping.Add("Executioner", Colors.Executioner); - if (CustomGameOptions.JesterOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Jester) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Jester)) ColorMapping.Add("Jester", Colors.Jester); - if (CustomGameOptions.SoulCollectorOn > 0) ColorMapping.Add("Soul Collector", Colors.SoulCollector); - } - if (CustomGameOptions.DoomsayerGuessNeutralKilling) - { - if (CustomGameOptions.ArsonistOn > 0) ColorMapping.Add("Arsonist", Colors.Arsonist); - if (CustomGameOptions.GlitchOn > 0) ColorMapping.Add("The Glitch", Colors.Glitch); - if (CustomGameOptions.PlaguebearerOn > 0) ColorMapping.Add("Plaguebearer", Colors.Plaguebearer); - if (CustomGameOptions.GameMode == GameMode.Classic && CustomGameOptions.VampireOn > 0) ColorMapping.Add("Vampire", Colors.Vampire); - if (CustomGameOptions.WerewolfOn > 0) ColorMapping.Add("Werewolf", Colors.Werewolf); - if (CustomGameOptions.HiddenRoles) ColorMapping.Add("Juggernaut", Colors.Juggernaut); - } + if (CustomGameOptions.DoomsayerGuessNeutralBenign) + { + if (CustomGameOptions.AmnesiacOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Amnesiac) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Amnesiac)) ColorMapping.Add("Amnesiac", Colors.Amnesiac); + if (CustomGameOptions.GuardianAngelOn > 0) ColorMapping.Add("Guardian Angel", Colors.GuardianAngel); + if (CustomGameOptions.SurvivorOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Survivor) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Survivor)) ColorMapping.Add("Survivor", Colors.Survivor); + } + if (CustomGameOptions.DoomsayerGuessNeutralEvil) + { + if (!CustomGameOptions.UniqueRoles) ColorMapping.Add("Doomsayer", Colors.Doomsayer); + if (CustomGameOptions.ExecutionerOn > 0) ColorMapping.Add("Executioner", Colors.Executioner); + if (CustomGameOptions.JesterOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Jester) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Jester)) ColorMapping.Add("Jester", Colors.Jester); + if (CustomGameOptions.SoulCollectorOn > 0) ColorMapping.Add("Soul Collector", Colors.SoulCollector); + } + if (CustomGameOptions.DoomsayerGuessNeutralKilling) + { + if (CustomGameOptions.ArsonistOn > 0) ColorMapping.Add("Arsonist", Colors.Arsonist); + if (CustomGameOptions.GlitchOn > 0) ColorMapping.Add("The Glitch", Colors.Glitch); + if (CustomGameOptions.PlaguebearerOn > 0) ColorMapping.Add("Plaguebearer", Colors.Plaguebearer); + if (CustomGameOptions.VampireOn > 0) ColorMapping.Add("Vampire", Colors.Vampire); + if (CustomGameOptions.WerewolfOn > 0) ColorMapping.Add("Werewolf", Colors.Werewolf); + if (CustomGameOptions.JuggernautOn > 0) ColorMapping.Add("Juggernaut", Colors.Juggernaut); } SortedColorMapping = ColorMapping.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); diff --git a/source/Patches/Roles/Grenadier.cs b/source/Patches/Roles/Grenadier.cs index 8ffa5d2e4..6e73db3c7 100644 --- a/source/Patches/Roles/Grenadier.cs +++ b/source/Patches/Roles/Grenadier.cs @@ -47,19 +47,21 @@ public float FlashTimer() { var utcNow = DateTime.UtcNow; var timeSpan = utcNow - LastFlashed; - ; var num = CustomGameOptions.GrenadeCd * 1000f; var flag2 = num - (float)timeSpan.TotalMilliseconds < 0f; if (flag2) return 0; return (num - (float)timeSpan.TotalMilliseconds) / 1000f; } + + public void StartFlash() + { + closestPlayers = Utils.GetClosestPlayers(Player.GetTruePosition(), CustomGameOptions.FlashRadius, true); + flashedPlayers = closestPlayers; + Flash(); + } + public void Flash() { - if (Enabled != true) - { - closestPlayers = Utils.GetClosestPlayers(Player.GetTruePosition(), CustomGameOptions.FlashRadius, true); - flashedPlayers = closestPlayers; - } Enabled = true; TimeRemaining -= Time.deltaTime; @@ -67,111 +69,118 @@ public void Flash() var system = ShipStatus.Instance.Systems[SystemTypes.Sabotage].Cast(); var sabActive = system.AnyActive; - foreach (var player in closestPlayers) + if (flashedPlayers.Contains(PlayerControl.LocalPlayer)) { - if (PlayerControl.LocalPlayer.PlayerId == player.PlayerId) + if (TimeRemaining > CustomGameOptions.GrenadeDuration - 0.5f && (!sabActive)) { - if (TimeRemaining > CustomGameOptions.GrenadeDuration - 0.5f && (!sabActive)) + float fade = (TimeRemaining - CustomGameOptions.GrenadeDuration) * -2.0f; + if (ShouldPlayerBeBlinded(PlayerControl.LocalPlayer)) { - float fade = (TimeRemaining - CustomGameOptions.GrenadeDuration) * -2.0f; - if (ShouldPlayerBeBlinded(player)) - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(normalVision, blindVision, fade); - } - else if (ShouldPlayerBeDimmed(player)) - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(normalVision, dimVision, fade); - if (PlayerControl.LocalPlayer.Data.IsImpostor() && MapBehaviour.Instance.infectedOverlay.sabSystem.Timer < 0.5f) - { - MapBehaviour.Instance.infectedOverlay.sabSystem.Timer = 0.5f; - } - } - else - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = normalVision; - } + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(normalVision, blindVision, fade); } - else if (TimeRemaining <= (CustomGameOptions.GrenadeDuration - 0.5f) && TimeRemaining >= 0.5f && (!sabActive)) + else if (ShouldPlayerBeDimmed(PlayerControl.LocalPlayer)) { - if (ShouldPlayerBeBlinded(player)) - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = blindVision; - } - else if (ShouldPlayerBeDimmed(player)) + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(normalVision, dimVision, fade); + try { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = dimVision; if (PlayerControl.LocalPlayer.Data.IsImpostor() && MapBehaviour.Instance.infectedOverlay.sabSystem.Timer < 0.5f) { MapBehaviour.Instance.infectedOverlay.sabSystem.Timer = 0.5f; } } - else - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = normalVision; - } + catch { } } - else if (TimeRemaining < 0.5f && (!sabActive)) + else { - float fade2 = (TimeRemaining * -2.0f) + 1.0f; - if (ShouldPlayerBeBlinded(player)) - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(blindVision, normalVision, fade2); - } - else if (ShouldPlayerBeDimmed(player)) + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = normalVision; + } + } + else if (TimeRemaining <= (CustomGameOptions.GrenadeDuration - 0.5f) && TimeRemaining >= 0.5f && (!sabActive)) + { + if (ShouldPlayerBeBlinded(PlayerControl.LocalPlayer)) + { + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = blindVision; + } + else if (ShouldPlayerBeDimmed(PlayerControl.LocalPlayer)) + { + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = dimVision; + try { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(dimVision, normalVision, fade2); if (PlayerControl.LocalPlayer.Data.IsImpostor() && MapBehaviour.Instance.infectedOverlay.sabSystem.Timer < 0.5f) { MapBehaviour.Instance.infectedOverlay.sabSystem.Timer = 0.5f; } } - else - { - ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; - ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; - DestroyableSingleton.Instance.FullScreen.color = normalVision; - } + catch { } + } + else + { + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = normalVision; + } + } + else if (TimeRemaining < 0.5f && (!sabActive)) + { + float fade2 = (TimeRemaining * -2.0f) + 1.0f; + if (ShouldPlayerBeBlinded(PlayerControl.LocalPlayer)) + { + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(blindVision, normalVision, fade2); + } + else if (ShouldPlayerBeDimmed(PlayerControl.LocalPlayer)) + { + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = Color.Lerp(dimVision, normalVision, fade2); } else { ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; DestroyableSingleton.Instance.FullScreen.color = normalVision; - TimeRemaining = 0.0f; } } + else + { + ((Renderer)DestroyableSingleton.Instance.FullScreen).enabled = true; + ((Renderer)DestroyableSingleton.Instance.FullScreen).gameObject.active = true; + DestroyableSingleton.Instance.FullScreen.color = normalVision; + TimeRemaining = 0.0f; + } } if (TimeRemaining > 0.5f) { - if (PlayerControl.LocalPlayer.Data.IsImpostor() && MapBehaviour.Instance.infectedOverlay.sabSystem.Timer < 0.5f) + try { - MapBehaviour.Instance.infectedOverlay.sabSystem.Timer = 0.5f; + if (PlayerControl.LocalPlayer.Data.IsImpostor() && MapBehaviour.Instance.infectedOverlay.sabSystem.Timer < 0.5f) + { + MapBehaviour.Instance.infectedOverlay.sabSystem.Timer = 0.5f; + } } + catch { } } } - private static bool ShouldPlayerBeDimmed(PlayerControl player) { + private static bool ShouldPlayerBeDimmed(PlayerControl player) + { return (player.Data.IsImpostor() || player.Data.IsDead) && !MeetingHud.Instance; } - private static bool ShouldPlayerBeBlinded(PlayerControl player) { + private static bool ShouldPlayerBeBlinded(PlayerControl player) + { return !player.Data.IsImpostor() && !player.Data.IsDead && !MeetingHud.Instance; } diff --git a/source/Patches/Roles/Imitator.cs b/source/Patches/Roles/Imitator.cs index 453a50f6e..2c112e7cc 100644 --- a/source/Patches/Roles/Imitator.cs +++ b/source/Patches/Roles/Imitator.cs @@ -9,14 +9,13 @@ public class Imitator : Role { public readonly List Buttons = new List(); - public readonly List ListOfActives = new List(); + public readonly List<(byte, bool)> ListOfActives = new List<(byte, bool)>(); public PlayerControl ImitatePlayer = null; - public List ImitatableRoles = [RoleEnum.Detective, RoleEnum.Investigator, RoleEnum.Mystic, RoleEnum.Seer, RoleEnum.Spy, RoleEnum.Tracker, RoleEnum.Sheriff, - RoleEnum.Veteran, RoleEnum.Altruist, RoleEnum.Engineer, RoleEnum.Medium, RoleEnum.Transporter, RoleEnum.Trapper, RoleEnum.Medic, RoleEnum.Aurial, - RoleEnum.Oracle, RoleEnum.Hunter, RoleEnum.Warden]; public List trappedPlayers = null; + public Dictionary> watchedPlayers = null; public PlayerControl confessingPlayer = null; + public PlayerControl jailedPlayer = null; public Imitator(PlayerControl player) : base(player) diff --git a/source/Patches/Roles/Lookout.cs b/source/Patches/Roles/Lookout.cs new file mode 100644 index 000000000..e25c47864 --- /dev/null +++ b/source/Patches/Roles/Lookout.cs @@ -0,0 +1,41 @@ +using System; +using TMPro; +using System.Collections.Generic; + +namespace TownOfUs.Roles +{ + public class Lookout : Role + { + public PlayerControl ClosestPlayer; + public DateTime LastWatched { get; set; } + + public int UsesLeft; + public TextMeshPro UsesText; + + public bool ButtonUsable => UsesLeft != 0; + public Dictionary> Watching { get; set; } = new(); + + public Lookout(PlayerControl player) : base(player) + { + Name = "Lookout"; + ImpostorText = () => "Keep Your Eyes Wide Open"; + TaskText = () => "Watch other crewmates"; + Color = Patches.Colors.Lookout; + LastWatched = DateTime.UtcNow; + RoleType = RoleEnum.Lookout; + AddToRoleHistory(RoleType); + + UsesLeft = CustomGameOptions.MaxWatches; + } + + public float WatchTimer() + { + var utcNow = DateTime.UtcNow; + var timeSpan = utcNow - LastWatched; + var num = CustomGameOptions.WatchCooldown * 1000f; + var flag2 = num - (float) timeSpan.TotalMilliseconds < 0f; + if (flag2) return 0; + return (num - (float) timeSpan.TotalMilliseconds) / 1000f; + } + } +} \ No newline at end of file diff --git a/source/Patches/Roles/Modifiers/Aftermath.cs b/source/Patches/Roles/Modifiers/Aftermath.cs index 3d69e6d78..17c6d93d7 100644 --- a/source/Patches/Roles/Modifiers/Aftermath.cs +++ b/source/Patches/Roles/Modifiers/Aftermath.cs @@ -6,6 +6,9 @@ using UnityEngine; using TownOfUs.Modifiers.UnderdogMod; using Object = UnityEngine.Object; +using Hazel; +using TownOfUs.Patches; +using System.Linq; namespace TownOfUs.Roles.Modifiers { @@ -73,9 +76,17 @@ private static IEnumerator delay(PlayerControl player, PlayerControl corpse, Dea { if (!grenadier.Enabled) { - Utils.Rpc(CustomRPC.FlashGrenade, PlayerControl.LocalPlayer.PlayerId); grenadier.TimeRemaining = CustomGameOptions.GrenadeDuration; - grenadier.Flash(); + grenadier.StartFlash(); + var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, + (byte)CustomRPC.FlashGrenade, SendOption.Reliable, -1); + writer.Write((byte)grenadier.Player.PlayerId); + writer.Write((byte)grenadier.flashedPlayers.Count); + foreach (var player2 in grenadier.flashedPlayers) + { + writer.Write(player2.PlayerId); + } + AmongUsClient.Instance.FinishRpcImmediately(writer); } } else if (role is Hypnotist hypnotist) @@ -91,11 +102,18 @@ private static IEnumerator delay(PlayerControl player, PlayerControl corpse, Dea } else if (role is Miner miner) { - var position = PlayerControl.LocalPlayer.transform.position; - var id = ImpostorRoles.MinerMod.PlaceVent.GetAvailableId(); - Utils.Rpc(CustomRPC.Mine, id, PlayerControl.LocalPlayer.PlayerId, position, position.z + 0.001f); - ImpostorRoles.MinerMod.PlaceVent.SpawnVent(id, miner, position, position.z + 0.001f); - miner.LastMined = DateTime.UtcNow; + var hits = Physics2D.OverlapBoxAll(PlayerControl.LocalPlayer.transform.position, miner.VentSize, 0); + hits = hits.ToArray().Where(c => + (c.name.Contains("Vent") || !c.isTrigger) && c.gameObject.layer != 8 && c.gameObject.layer != 5) + .ToArray(); + if (hits.Count == 0 && !SubmergedCompatibility.GetPlayerElevator(PlayerControl.LocalPlayer).Item1) + { + var position = PlayerControl.LocalPlayer.transform.position; + var id = ImpostorRoles.MinerMod.PlaceVent.GetAvailableId(); + Utils.Rpc(CustomRPC.Mine, id, PlayerControl.LocalPlayer.PlayerId, position, position.z + 0.0004f); + ImpostorRoles.MinerMod.PlaceVent.SpawnVent(id, miner, position, position.z + 0.0004f); + miner.LastMined = DateTime.UtcNow; + } } else if (role is Morphling morphling) { diff --git a/source/Patches/Roles/Modifiers/Assassin.cs b/source/Patches/Roles/Modifiers/Assassin.cs index 06bc93bdf..65d49e307 100644 --- a/source/Patches/Roles/Modifiers/Assassin.cs +++ b/source/Patches/Roles/Modifiers/Assassin.cs @@ -55,6 +55,8 @@ public Assassin(PlayerControl player) : base(player) if (CustomGameOptions.AurialOn > 0) ColorMapping.Add("Aurial", Colors.Aurial); if (CustomGameOptions.WardenOn > 0) ColorMapping.Add("Warden", Colors.Warden); if (CustomGameOptions.JailorOn > 0) ColorMapping.Add("Jailor", Colors.Jailor); + if (CustomGameOptions.LookoutOn > 0) ColorMapping.Add("Lookout", Colors.Lookout); + if (CustomGameOptions.DeputyOn > 0) ColorMapping.Add("Deputy", Colors.Deputy); // Add Neutral roles if enabled if (CustomGameOptions.AssassinGuessNeutralBenign) @@ -75,9 +77,9 @@ public Assassin(PlayerControl player) : base(player) if (CustomGameOptions.ArsonistOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Arsonist)) ColorMapping.Add("Arsonist", Colors.Arsonist); if (CustomGameOptions.GlitchOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Glitch)) ColorMapping.Add("The Glitch", Colors.Glitch); if (CustomGameOptions.PlaguebearerOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Plaguebearer)) ColorMapping.Add("Plaguebearer", Colors.Plaguebearer); - if (CustomGameOptions.GameMode == GameMode.Classic && CustomGameOptions.VampireOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Vampire)) ColorMapping.Add("Vampire", Colors.Vampire); + if (CustomGameOptions.VampireOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Vampire)) ColorMapping.Add("Vampire", Colors.Vampire); if (CustomGameOptions.WerewolfOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Werewolf)) ColorMapping.Add("Werewolf", Colors.Werewolf); - if (!PlayerControl.LocalPlayer.Is(RoleEnum.Juggernaut) && CustomGameOptions.HiddenRoles) ColorMapping.Add("Juggernaut", Colors.Juggernaut); + if (CustomGameOptions.JuggernautOn > 0 && !PlayerControl.LocalPlayer.Is(RoleEnum.Juggernaut)) ColorMapping.Add("Juggernaut", Colors.Juggernaut); } if (CustomGameOptions.AssassinGuessImpostors && !PlayerControl.LocalPlayer.Is(Faction.Impostors)) { @@ -95,17 +97,21 @@ public Assassin(PlayerControl player) : base(player) if (CustomGameOptions.WarlockOn > 0) ColorMapping.Add("Warlock", Colors.Impostor); if (CustomGameOptions.VenererOn > 0) ColorMapping.Add("Venerer", Colors.Impostor); if (CustomGameOptions.HypnotistOn > 0) ColorMapping.Add("Hypnotist", Colors.Impostor); + if (CustomGameOptions.ScavengerOn > 0) ColorMapping.Add("Scavenger", Colors.Impostor); } // Add vanilla crewmate if enabled if (CustomGameOptions.AssassinCrewmateGuess) ColorMapping.Add("Crewmate", Colors.Crewmate); //Add modifiers if enabled - if (CustomGameOptions.AssassinGuessModifiers && CustomGameOptions.BaitOn > 0) ColorMapping.Add("Bait", Colors.Bait); - if (CustomGameOptions.AssassinGuessModifiers && CustomGameOptions.AftermathOn > 0) ColorMapping.Add("Aftermath", Colors.Aftermath); - if (CustomGameOptions.AssassinGuessModifiers && CustomGameOptions.DiseasedOn > 0) ColorMapping.Add("Diseased", Colors.Diseased); - if (CustomGameOptions.AssassinGuessModifiers && CustomGameOptions.FrostyOn > 0) ColorMapping.Add("Frosty", Colors.Frosty); - if (CustomGameOptions.AssassinGuessModifiers && CustomGameOptions.MultitaskerOn > 0) ColorMapping.Add("Multitasker", Colors.Multitasker); - if (CustomGameOptions.AssassinGuessModifiers && CustomGameOptions.TorchOn > 0) ColorMapping.Add("Torch", Colors.Torch); + if (CustomGameOptions.AssassinGuessModifiers) + { + if (CustomGameOptions.BaitOn > 0) ColorMapping.Add("Bait", Colors.Bait); + if (CustomGameOptions.AftermathOn > 0) ColorMapping.Add("Aftermath", Colors.Aftermath); + if (CustomGameOptions.DiseasedOn > 0) ColorMapping.Add("Diseased", Colors.Diseased); + if (CustomGameOptions.FrostyOn > 0) ColorMapping.Add("Frosty", Colors.Frosty); + if (CustomGameOptions.MultitaskerOn > 0) ColorMapping.Add("Multitasker", Colors.Multitasker); + if (CustomGameOptions.TorchOn > 0) ColorMapping.Add("Torch", Colors.Torch); + } if (CustomGameOptions.AssassinGuessLovers && CustomGameOptions.LoversOn > 0) ColorMapping.Add("Lover", Colors.Lovers); // Sorts the list alphabetically. diff --git a/source/Patches/Roles/Modifiers/Mini.cs b/source/Patches/Roles/Modifiers/Mini.cs new file mode 100644 index 000000000..db57d002f --- /dev/null +++ b/source/Patches/Roles/Modifiers/Mini.cs @@ -0,0 +1,23 @@ +using TownOfUs.Extensions; +using UnityEngine; + +namespace TownOfUs.Roles.Modifiers +{ + public class Mini : Modifier, IVisualAlteration + { + public Mini(PlayerControl player) : base(player) + { + Name = "Mini"; + TaskText = () => "You are tiny!"; + Color = Patches.Colors.Mini; + ModifierType = ModifierEnum.Mini; + } + + public bool TryGetModifiedAppearance(out VisualAppearance appearance) + { + appearance = Player.GetDefaultAppearance(); + appearance.SizeFactor = new Vector3(0.4f, 0.4f, 1.0f); + return true; + } + } +} \ No newline at end of file diff --git a/source/Patches/Roles/Modifiers/Saboteur.cs b/source/Patches/Roles/Modifiers/Saboteur.cs new file mode 100644 index 000000000..a89b1c18b --- /dev/null +++ b/source/Patches/Roles/Modifiers/Saboteur.cs @@ -0,0 +1,14 @@ +namespace TownOfUs.Roles.Modifiers +{ + public class Saboteur : Modifier + { + public float Timer = 0f; + public Saboteur(PlayerControl player) : base(player) + { + Name = "Saboteur"; + TaskText = () => "You have reduced sabotage cooldowns"; + Color = Patches.Colors.Impostor; + ModifierType = ModifierEnum.Saboteur; + } + } +} \ No newline at end of file diff --git a/source/Patches/Roles/Role.cs b/source/Patches/Roles/Role.cs index 335e11304..247180025 100644 --- a/source/Patches/Roles/Role.cs +++ b/source/Patches/Roles/Role.cs @@ -566,8 +566,32 @@ public static void Postfix(IntroCutscene._ShowRole_d__41 __instance) ModifierText.gameObject.SetActive(true); } - if (CustomGameOptions.GameMode == GameMode.AllAny && CustomGameOptions.RandomNumberImps) - __instance.__4__this.ImpostorText.text = "There are an Unknown Number of Impostors among us"; + var players = GameData.Instance.PlayerCount; + if (players > 6) + { + List buckets = [CustomGameOptions.Slot1, CustomGameOptions.Slot2, CustomGameOptions.Slot3, CustomGameOptions.Slot4, CustomGameOptions.Slot5, CustomGameOptions.Slot6, CustomGameOptions.Slot7]; + bool isAny = false; + + if (players > 7) buckets.Add(CustomGameOptions.Slot8); + if (players > 8) buckets.Add(CustomGameOptions.Slot9); + if (players > 9) buckets.Add(CustomGameOptions.Slot10); + if (players > 10) buckets.Add(CustomGameOptions.Slot11); + if (players > 11) buckets.Add(CustomGameOptions.Slot12); + if (players > 12) buckets.Add(CustomGameOptions.Slot13); + if (players > 13) buckets.Add(CustomGameOptions.Slot14); + if (players > 14) buckets.Add(CustomGameOptions.Slot15); + + foreach (var roleOption in buckets) + { + if (roleOption == RoleOptions.Any) + { + isAny = true; + break; + } + } + + if (isAny) __instance.__4__this.ImpostorText.text = "There are an Unknown Number of Impostors among us"; + } } } @@ -612,8 +636,32 @@ public static void Postfix(IntroCutscene._CoBegin_d__35 __instance) ModifierText.gameObject.SetActive(true); } - if (CustomGameOptions.GameMode == GameMode.AllAny && CustomGameOptions.RandomNumberImps) - __instance.__4__this.ImpostorText.text = "There are an Unknown Number of Impostors among us"; + var players = GameData.Instance.PlayerCount; + if (players > 6) + { + List buckets = [CustomGameOptions.Slot1, CustomGameOptions.Slot2, CustomGameOptions.Slot3, CustomGameOptions.Slot4, CustomGameOptions.Slot5, CustomGameOptions.Slot6, CustomGameOptions.Slot7]; + bool isAny = false; + + if (players > 7) buckets.Add(CustomGameOptions.Slot8); + if (players > 8) buckets.Add(CustomGameOptions.Slot9); + if (players > 9) buckets.Add(CustomGameOptions.Slot10); + if (players > 10) buckets.Add(CustomGameOptions.Slot11); + if (players > 11) buckets.Add(CustomGameOptions.Slot12); + if (players > 12) buckets.Add(CustomGameOptions.Slot13); + if (players > 13) buckets.Add(CustomGameOptions.Slot14); + if (players > 14) buckets.Add(CustomGameOptions.Slot15); + + foreach (var roleOption in buckets) + { + if (roleOption == RoleOptions.Any) + { + isAny = true; + break; + } + } + + if (isAny) __instance.__4__this.ImpostorText.text = "There are an Unknown Number of Impostors among us"; + } } } } @@ -768,6 +816,10 @@ private static void Postfix(LobbyBehaviour __instance) ((Mystic)role).BodyArrows.Values.DestroyAll(); ((Mystic)role).BodyArrows.Clear(); } + foreach (var role in AllRoles.Where(x => x.RoleType == RoleEnum.Scavenger)) + { + ((Scavenger)role).PreyArrow.Destroy(); + } RoleDictionary.Clear(); RoleHistory.Clear(); @@ -897,6 +949,7 @@ private static void Postfix(HudManager __instance) if (role.ColorCriteria()) player.nameText().color = role.Color; } + else player.nameText().transform.localPosition = new Vector3(0f, 0f, 0f); } } } diff --git a/source/Patches/Roles/Scavenger.cs b/source/Patches/Roles/Scavenger.cs new file mode 100644 index 000000000..e94bdb56d --- /dev/null +++ b/source/Patches/Roles/Scavenger.cs @@ -0,0 +1,76 @@ +using TMPro; +using System; +using UnityEngine; +using System.Linq; +using TownOfUs.Extensions; +using TownOfUs.Patches; + +namespace TownOfUs.Roles +{ + public class Scavenger : Role + { + public Scavenger(PlayerControl player) : base(player) + { + Name = "Scavenger"; + ImpostorText = () => "Hunt Down Prey"; + TaskText = () => + Target == null ? "Kill your given targets for a reduced kill cooldown" : "Hunt Down " + Target.GetDefaultOutfit().PlayerName; + Color = Patches.Colors.Impostor; + RoleType = RoleEnum.Scavenger; + AddToRoleHistory(RoleType); + Faction = Faction.Impostors; + ScavengeEnd = DateTime.UtcNow; + } + + public TextMeshPro ScavengeCooldown; + public DateTime ScavengeEnd; + public PlayerControl Target = null; + public bool Scavenging = false; + public bool GameStarted = false; + public ArrowBehaviour PreyArrow; + + public float ScavengeTimer() + { + var utcNow = DateTime.UtcNow; + var timeSpan = ScavengeEnd - utcNow; + var flag = (float)timeSpan.TotalMilliseconds < 0f; + if (flag) return 0; + return ((float)timeSpan.TotalMilliseconds) / 1000f; + } + + public PlayerControl GetClosestPlayer(PlayerControl toRemove = null) + { + var targets = PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected && !x.Is(Faction.Impostors) && x != toRemove && x != ShowRoundOneShield.FirstRoundShielded).ToList(); + if (Player.IsLover()) targets = PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected && !x.Is(Faction.Impostors) && !x.Is(ModifierEnum.Lover) && x != toRemove && x != ShowRoundOneShield.FirstRoundShielded).ToList(); + if (targets.Count == 0) targets = PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected && x != PlayerControl.LocalPlayer && !x.Is(ModifierEnum.Lover) && x != toRemove).ToList(); + if (targets.Count == 0) targets = PlayerControl.AllPlayerControls.ToArray().Where(x => !x.Data.IsDead && !x.Data.Disconnected && x != toRemove).ToList(); + + var num = double.MaxValue; + var refPosition = Player.GetTruePosition(); + PlayerControl result = null; + foreach (var player in targets) + { + if (player.Data.IsDead || player.Data.Disconnected || player.PlayerId == Player.PlayerId) continue; + var playerPosition = player.GetTruePosition(); + var distBetweenPlayers = Vector2.Distance(refPosition, playerPosition); + var isClosest = distBetweenPlayers < num; + if (!isClosest) continue; + var vector = playerPosition - refPosition; + num = distBetweenPlayers; + result = player; + } + + return result; + } + + public void StopScavenge() + { + Scavenging = false; + Target = null; + if (PreyArrow != null) UnityEngine.Object.Destroy(PreyArrow); + if (PreyArrow.gameObject != null) UnityEngine.Object.Destroy(PreyArrow.gameObject); + PreyArrow = null; + RegenTask(); + } + } +} \ No newline at end of file diff --git a/source/Patches/Roles/Swapper.cs b/source/Patches/Roles/Swapper.cs index 1f8b420d3..2ee3d06a5 100644 --- a/source/Patches/Roles/Swapper.cs +++ b/source/Patches/Roles/Swapper.cs @@ -9,7 +9,7 @@ public class Swapper : Role { public readonly List Buttons = new List(); - public readonly List ListOfActives = new List(); + public readonly List<(byte, bool)> ListOfActives = new List<(byte, bool)>(); public Swapper(PlayerControl player) : base(player) diff --git a/source/Patches/Roles/Transporter.cs b/source/Patches/Roles/Transporter.cs index 36188e357..317b3b681 100644 --- a/source/Patches/Roles/Transporter.cs +++ b/source/Patches/Roles/Transporter.cs @@ -55,6 +55,19 @@ public float TransportTimer() public static IEnumerator TransportPlayers(byte player1, byte player2, bool die) { + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(player1)) + { + if (!lookout.Watching[player1].Contains(RoleEnum.Transporter)) lookout.Watching[player1].Add(RoleEnum.Transporter); + } + if (lookout.Watching.ContainsKey(player2)) + { + if (!lookout.Watching[player2].Contains(RoleEnum.Transporter)) lookout.Watching[player2].Add(RoleEnum.Transporter); + } + } + var TP1 = Utils.PlayerById(player1); var TP2 = Utils.PlayerById(player2); var deadBodies = Object.FindObjectsOfType(); diff --git a/source/Patches/Roles/Vigilante.cs b/source/Patches/Roles/Vigilante.cs index cbed9c629..89ff5dd73 100644 --- a/source/Patches/Roles/Vigilante.cs +++ b/source/Patches/Roles/Vigilante.cs @@ -30,65 +30,52 @@ public Vigilante(PlayerControl player) : base(player) RemainingKills = CustomGameOptions.VigilanteKills; - if (CustomGameOptions.GameMode == GameMode.Classic || CustomGameOptions.GameMode == GameMode.AllAny) + ColorMapping.Add("Impostor", Colors.Impostor); + if (CustomGameOptions.JanitorOn > 0) ColorMapping.Add("Janitor", Colors.Impostor); + if (CustomGameOptions.MorphlingOn > 0) ColorMapping.Add("Morphling", Colors.Impostor); + if (CustomGameOptions.MinerOn > 0) ColorMapping.Add("Miner", Colors.Impostor); + if (CustomGameOptions.SwooperOn > 0) ColorMapping.Add("Swooper", Colors.Impostor); + if (CustomGameOptions.UndertakerOn > 0) ColorMapping.Add("Undertaker", Colors.Impostor); + if (CustomGameOptions.EscapistOn > 0) ColorMapping.Add("Escapist", Colors.Impostor); + if (CustomGameOptions.GrenadierOn > 0) ColorMapping.Add("Grenadier", Colors.Impostor); + if (CustomGameOptions.TraitorOn > 0) ColorMapping.Add("Traitor", Colors.Impostor); + if (CustomGameOptions.BlackmailerOn > 0) ColorMapping.Add("Blackmailer", Colors.Impostor); + if (CustomGameOptions.BomberOn > 0) ColorMapping.Add("Bomber", Colors.Impostor); + if (CustomGameOptions.WarlockOn > 0) ColorMapping.Add("Warlock", Colors.Impostor); + if (CustomGameOptions.VenererOn > 0) ColorMapping.Add("Venerer", Colors.Impostor); + if (CustomGameOptions.HypnotistOn > 0) ColorMapping.Add("Hypnotist", Colors.Impostor); + if (CustomGameOptions.ScavengerOn > 0) ColorMapping.Add("Scavenger", Colors.Impostor); + + if (CustomGameOptions.VigilanteGuessNeutralBenign) { - ColorMapping.Add("Impostor", Colors.Impostor); - if (CustomGameOptions.JanitorOn > 0) ColorMapping.Add("Janitor", Colors.Impostor); - if (CustomGameOptions.MorphlingOn > 0) ColorMapping.Add("Morphling", Colors.Impostor); - if (CustomGameOptions.MinerOn > 0) ColorMapping.Add("Miner", Colors.Impostor); - if (CustomGameOptions.SwooperOn > 0) ColorMapping.Add("Swooper", Colors.Impostor); - if (CustomGameOptions.UndertakerOn > 0) ColorMapping.Add("Undertaker", Colors.Impostor); - if (CustomGameOptions.EscapistOn > 0) ColorMapping.Add("Escapist", Colors.Impostor); - if (CustomGameOptions.GrenadierOn > 0) ColorMapping.Add("Grenadier", Colors.Impostor); - if (CustomGameOptions.TraitorOn > 0) ColorMapping.Add("Traitor", Colors.Impostor); - if (CustomGameOptions.BlackmailerOn > 0) ColorMapping.Add("Blackmailer", Colors.Impostor); - if (CustomGameOptions.BomberOn > 0) ColorMapping.Add("Bomber", Colors.Impostor); - if (CustomGameOptions.WarlockOn > 0) ColorMapping.Add("Warlock", Colors.Impostor); - if (CustomGameOptions.VenererOn > 0) ColorMapping.Add("Venerer", Colors.Impostor); - if (CustomGameOptions.HypnotistOn > 0) ColorMapping.Add("Hypnotist", Colors.Impostor); - - if (CustomGameOptions.VigilanteGuessNeutralBenign) - { - if (CustomGameOptions.AmnesiacOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Amnesiac) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Amnesiac)) ColorMapping.Add("Amnesiac", Colors.Amnesiac); - if (CustomGameOptions.GuardianAngelOn > 0) ColorMapping.Add("Guardian Angel", Colors.GuardianAngel); - if (CustomGameOptions.SurvivorOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Survivor) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Survivor)) ColorMapping.Add("Survivor", Colors.Survivor); - } - if (CustomGameOptions.VigilanteGuessNeutralEvil) - { - if (CustomGameOptions.DoomsayerOn > 0) ColorMapping.Add("Doomsayer", Colors.Doomsayer); - if (CustomGameOptions.ExecutionerOn > 0) ColorMapping.Add("Executioner", Colors.Executioner); - if (CustomGameOptions.JesterOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Jester) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Jester)) ColorMapping.Add("Jester", Colors.Jester); - if (CustomGameOptions.SoulCollectorOn > 0) ColorMapping.Add("Soul Collector", Colors.SoulCollector); - } - if (CustomGameOptions.VigilanteGuessNeutralKilling) - { - if (CustomGameOptions.ArsonistOn > 0) ColorMapping.Add("Arsonist", Colors.Arsonist); - if (CustomGameOptions.GlitchOn > 0) ColorMapping.Add("The Glitch", Colors.Glitch); - if (CustomGameOptions.PlaguebearerOn > 0) ColorMapping.Add("Plaguebearer", Colors.Plaguebearer); - if (CustomGameOptions.GameMode == GameMode.Classic && CustomGameOptions.VampireOn > 0) ColorMapping.Add("Vampire", Colors.Vampire); - if (CustomGameOptions.WerewolfOn > 0) ColorMapping.Add("Werewolf", Colors.Werewolf); - if (CustomGameOptions.HiddenRoles) ColorMapping.Add("Juggernaut", Colors.Juggernaut); - } - if (CustomGameOptions.VigilanteGuessLovers && CustomGameOptions.LoversOn > 0) ColorMapping.Add("Lover", Colors.Lovers); + if (CustomGameOptions.AmnesiacOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Amnesiac) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Amnesiac)) ColorMapping.Add("Amnesiac", Colors.Amnesiac); + if (CustomGameOptions.GuardianAngelOn > 0) ColorMapping.Add("Guardian Angel", Colors.GuardianAngel); + if (CustomGameOptions.SurvivorOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Survivor) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Survivor)) ColorMapping.Add("Survivor", Colors.Survivor); } - else + if (CustomGameOptions.VigilanteGuessNeutralEvil) { - ColorMapping.Add("Morphling", Colors.Impostor); - ColorMapping.Add("Miner", Colors.Impostor); - ColorMapping.Add("Swooper", Colors.Impostor); - ColorMapping.Add("Undertaker", Colors.Impostor); - ColorMapping.Add("Grenadier", Colors.Impostor); - ColorMapping.Add("Traitor", Colors.Impostor); - ColorMapping.Add("Escapist", Colors.Impostor); - - if (CustomGameOptions.VigilanteGuessNeutralKilling) - { - if (CustomGameOptions.AddArsonist) ColorMapping.Add("Arsonist", Colors.Arsonist); - if (CustomGameOptions.AddPlaguebearer) ColorMapping.Add("Plaguebearer", Colors.Plaguebearer); - ColorMapping.Add("The Glitch", Colors.Glitch); - ColorMapping.Add("Werewolf", Colors.Werewolf); - if (CustomGameOptions.HiddenRoles) ColorMapping.Add("Juggernaut", Colors.Juggernaut); - } + if (CustomGameOptions.DoomsayerOn > 0) ColorMapping.Add("Doomsayer", Colors.Doomsayer); + if (CustomGameOptions.ExecutionerOn > 0) ColorMapping.Add("Executioner", Colors.Executioner); + if (CustomGameOptions.JesterOn > 0 || (CustomGameOptions.ExecutionerOn > 0 && CustomGameOptions.OnTargetDead == OnTargetDead.Jester) || (CustomGameOptions.GuardianAngelOn > 0 && CustomGameOptions.GaOnTargetDeath == BecomeOptions.Jester)) ColorMapping.Add("Jester", Colors.Jester); + if (CustomGameOptions.SoulCollectorOn > 0) ColorMapping.Add("Soul Collector", Colors.SoulCollector); + } + if (CustomGameOptions.VigilanteGuessNeutralKilling) + { + if (CustomGameOptions.ArsonistOn > 0) ColorMapping.Add("Arsonist", Colors.Arsonist); + if (CustomGameOptions.GlitchOn > 0) ColorMapping.Add("The Glitch", Colors.Glitch); + if (CustomGameOptions.PlaguebearerOn > 0) ColorMapping.Add("Plaguebearer", Colors.Plaguebearer); + if (CustomGameOptions.VampireOn > 0) ColorMapping.Add("Vampire", Colors.Vampire); + if (CustomGameOptions.WerewolfOn > 0) ColorMapping.Add("Werewolf", Colors.Werewolf); + if (CustomGameOptions.JuggernautOn > 0) ColorMapping.Add("Juggernaut", Colors.Juggernaut); + } + if (CustomGameOptions.VigilanteGuessLovers && CustomGameOptions.LoversOn > 0) ColorMapping.Add("Lover", Colors.Lovers); + + if (CustomGameOptions.VigilanteGuessModifiers) + { + if (CustomGameOptions.DisperserOn > 0) ColorMapping.Add("Disperser", Colors.Impostor); + if (CustomGameOptions.DoubleShotOn > 0) ColorMapping.Add("Double Shot", Colors.Impostor); + if (CustomGameOptions.SaboteurOn > 0) ColorMapping.Add("Saboteur", Colors.Impostor); + if (CustomGameOptions.UnderdogOn > 0) ColorMapping.Add("Underdog", Colors.Impostor); } SortedColorMapping = ColorMapping.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); diff --git a/source/Patches/Roles/Warden.cs b/source/Patches/Roles/Warden.cs index 3899571c4..df34cc89f 100644 --- a/source/Patches/Roles/Warden.cs +++ b/source/Patches/Roles/Warden.cs @@ -6,7 +6,7 @@ public class Warden : Role { public PlayerControl ClosestPlayer; public PlayerControl Fortified; - public DateTime LastFortified { get; set; } + public DateTime StartingCooldown { get; set; } public Warden(PlayerControl player) : base(player) { @@ -14,15 +14,16 @@ public Warden(PlayerControl player) : base(player) ImpostorText = () => "Fortify Crewmates"; TaskText = () => "Fortify the Crewmates"; Color = Patches.Colors.Warden; - LastFortified = DateTime.UtcNow; + StartingCooldown = DateTime.UtcNow; RoleType = RoleEnum.Warden; AddToRoleHistory(RoleType); } - public float FortifyTimer() + + public float StartTimer() { var utcNow = DateTime.UtcNow; - var timeSpan = utcNow - LastFortified; - var num = CustomGameOptions.FortifyCd * 1000f; + var timeSpan = utcNow - StartingCooldown; + var num = 10000f; var flag2 = num - (float)timeSpan.TotalMilliseconds < 0f; if (flag2) return 0; return (num - (float)timeSpan.TotalMilliseconds) / 1000f; diff --git a/source/Patches/RpcHandling.cs b/source/Patches/RpcHandling.cs index 9f6f9d0b8..0bd667f9d 100644 --- a/source/Patches/RpcHandling.cs +++ b/source/Patches/RpcHandling.cs @@ -37,16 +37,23 @@ using TownOfUs.Patches.NeutralRoles; using TownOfUs.ImpostorRoles.BomberMod; using TownOfUs.CrewmateRoles.HunterMod; +using Il2CppSystem.Linq; +using TownOfUs.CrewmateRoles.DeputyMod; namespace TownOfUs { public static class RpcHandling { - private static readonly List<(Type, int, bool)> CrewmateRoles = new(); + private static readonly List<(Type, int, bool)> CrewmateInvestigativeRoles = new(); + private static readonly List<(Type, int, bool)> CrewmateKillingRoles = new(); + private static readonly List<(Type, int, bool)> CrewmateProtectiveRoles = new(); + private static readonly List<(Type, int, bool)> CrewmateSupportRoles = new(); private static readonly List<(Type, int, bool)> NeutralBenignRoles = new(); private static readonly List<(Type, int, bool)> NeutralEvilRoles = new(); private static readonly List<(Type, int, bool)> NeutralKillingRoles = new(); - private static readonly List<(Type, int, bool)> ImpostorRoles = new(); + private static readonly List<(Type, int, bool)> ImpostorConcealingRoles = new(); + private static readonly List<(Type, int, bool)> ImpostorKillingRoles = new(); + private static readonly List<(Type, int, bool)> ImpostorSupportRoles = new(); private static readonly List<(Type, int)> CrewmateModifiers = new(); private static readonly List<(Type, int)> GlobalModifiers = new(); private static readonly List<(Type, int)> ImpostorModifiers = new(); @@ -64,55 +71,33 @@ internal static bool Check(int probability) var num = Random.RandomRangeInt(1, 101); return num <= probability; } - internal static bool CheckJugg() - { - var num = Random.RandomRangeInt(1, 101); - return num <= 10 * CustomGameOptions.MaxNeutralKillingRoles; - } - private static int PickRoleCount(int min, int max) - { - if (min > max) min = max; - return Random.RandomRangeInt(min, max + 1); - } - private static void SortRoles(this List<(Type, int, bool)> roles, int max) + private static (Type, int, bool) SelectRole(List<(Type, int, bool)> roles) { - if (max <= 0) + var chosenRoles = roles.Where(x => x.Item2 == 100).ToList(); + if (chosenRoles.Count > 0) { - roles.Clear(); - return; + chosenRoles.Shuffle(); + return chosenRoles[0]; } - var chosenRoles = roles.Where(x => x.Item2 == 100).ToList(); - // Shuffle to ensure that the same 100% roles do not appear in - // every game if there are more than the maximum. - chosenRoles.Shuffle(); - // Truncate the list if there are more 100% roles than the max. - chosenRoles = chosenRoles.GetRange(0, Math.Min(max, chosenRoles.Count)); + chosenRoles = roles.Where(x => x.Item2 < 100).ToList(); + int total = chosenRoles.Sum(x => x.Item2); + int random = Random.RandomRangeInt(1, total + 1); - if (chosenRoles.Count < max) + int cumulative = 0; + (Type, int, bool) selectedRole = default; + + foreach (var role in chosenRoles) { - // These roles MAY appear in this game, but they may not. - var potentialRoles = roles.Where(x => x.Item2 < 100).ToList(); - // Determine which roles appear in this game. - var optionalRoles = potentialRoles.Where(x => Check(x.Item2)).ToList(); - potentialRoles = potentialRoles.Where(x => !optionalRoles.Contains(x)).ToList(); - - optionalRoles.Shuffle(); - chosenRoles.AddRange(optionalRoles.GetRange(0, Math.Min(max - chosenRoles.Count, optionalRoles.Count))); - - // If there are not enough roles after that, randomly add - // ones which were previously eliminated, up to the max. - if (chosenRoles.Count < max) + cumulative += role.Item2; + if (random <= cumulative) { - potentialRoles.Shuffle(); - chosenRoles.AddRange(potentialRoles.GetRange(0, Math.Min(max - chosenRoles.Count, potentialRoles.Count))); + selectedRole = role; + break; } } - - // This list will be shuffled later in GenEachRole. - roles.Clear(); - roles.AddRange(chosenRoles); + return selectedRole; } private static void SortModifiers(this List<(Type, int)> roles, int max) @@ -141,138 +126,430 @@ private static void GenEachRole(List infected) { var impostors = Utils.GetImpostors(infected); var crewmates = Utils.GetCrewmates(impostors); - // I do not shuffle impostors/crewmates because roles should be shuffled before they are assigned to them anyway. - // Assigning shuffled roles across a shuffled list may mess with the statistics? I dunno, I didn't major in math. - // One Fisher-Yates shuffle should have statistically equal permutation probability on its own, anyway. var crewRoles = new List<(Type, int, bool)>(); - var neutRoles = new List<(Type, int, bool)>(); var impRoles = new List<(Type, int, bool)>(); - if (CustomGameOptions.GameMode == GameMode.Classic) + // sort out bad lists + var players = impostors.Count + crewmates.Count; + List crewBuckets = [RoleOptions.CrewInvest, RoleOptions.CrewKilling, RoleOptions.CrewProtective, RoleOptions.CrewSupport, RoleOptions.CrewCommon, RoleOptions.CrewRandom]; + List impBuckets = [RoleOptions.ImpConceal, RoleOptions.ImpKilling, RoleOptions.ImpSupport, RoleOptions.ImpCommon, RoleOptions.ImpRandom]; + List buckets = [CustomGameOptions.Slot1, CustomGameOptions.Slot2, CustomGameOptions.Slot3, CustomGameOptions.Slot4]; + var crewCount = 0; + var possibleCrewCount = 0; + var impCount = 0; + var anySlots = 0; + var minCrewmates = 2; + var empty = 0; + + if (players > 4) buckets.Add(CustomGameOptions.Slot5); + if (players > 5) buckets.Add(CustomGameOptions.Slot6); + if (players > 6) buckets.Add(CustomGameOptions.Slot7); + if (players > 7) buckets.Add(CustomGameOptions.Slot8); + if (players > 8) + { + buckets.Add(CustomGameOptions.Slot9); + minCrewmates += 1; + } + if (players > 9) buckets.Add(CustomGameOptions.Slot10); + if (players > 10) buckets.Add(CustomGameOptions.Slot11); + if (players > 11) buckets.Add(CustomGameOptions.Slot12); + if (players > 12) buckets.Add(CustomGameOptions.Slot13); + if (players > 13) buckets.Add(CustomGameOptions.Slot14); + if (players > 14) buckets.Add(CustomGameOptions.Slot15); + if (players > 15) { - var benign = PickRoleCount(CustomGameOptions.MinNeutralBenignRoles, Math.Min(CustomGameOptions.MaxNeutralBenignRoles, NeutralBenignRoles.Count)); - var evil = PickRoleCount(CustomGameOptions.MinNeutralEvilRoles, Math.Min(CustomGameOptions.MaxNeutralEvilRoles, NeutralEvilRoles.Count)); - var killing = PickRoleCount(CustomGameOptions.MinNeutralKillingRoles, Math.Min(CustomGameOptions.MaxNeutralKillingRoles, NeutralKillingRoles.Count)); + for (int i = 0; i < players - 15; i++) + { + int random = Random.RandomRangeInt(0, 4); + if (random == 0) buckets.Add(RoleOptions.CrewRandom); + else buckets.Add(RoleOptions.NonImp); + } + } - var canSubtract = (int faction, int minFaction) => { return faction > minFaction; }; - var factions = new List() { "Benign", "Evil", "Killing" }; + // imp issues + foreach (var roleOption in buckets) + { + if (impBuckets.Contains(roleOption)) impCount += 1; + else if (roleOption == RoleOptions.Any) anySlots += 1; + } + while (impCount > impostors.Count) + { + buckets.Shuffle(); + buckets.Remove(buckets.FindLast(x => impBuckets.Contains(x))); + buckets.Add(RoleOptions.NonImp); + impCount -= 1; + } + while (impCount + anySlots < impostors.Count) + { + buckets.Shuffle(); + buckets.RemoveAt(0); + buckets.Add(RoleOptions.ImpRandom); + impCount += 1; + } + while (buckets.Contains(RoleOptions.Any)) + { + buckets.Shuffle(); + buckets.Remove(buckets.FindLast(x => x == RoleOptions.Any)); + if (impCount < impostors.Count) + { + buckets.Add(RoleOptions.ImpRandom); + impCount += 1; + } + else buckets.Add(RoleOptions.NonImp); + } - // Crew must always start out outnumbering neutrals, so subtract roles until that can be guaranteed. - while (Math.Ceiling((double)crewmates.Count/2) <= benign + evil + killing) + // crew and neut issues + foreach (var roleOption in buckets) + { + if (crewBuckets.Contains(roleOption)) crewCount += 1; + else if (roleOption == RoleOptions.NonImp) possibleCrewCount += 1; + } + while (crewCount < minCrewmates) + { + buckets.Shuffle(); + if (possibleCrewCount > 0) { - bool canSubtractBenign = canSubtract(benign, CustomGameOptions.MinNeutralBenignRoles); - bool canSubtractEvil = canSubtract(evil, CustomGameOptions.MinNeutralEvilRoles); - bool canSubtractKilling = canSubtract(killing, CustomGameOptions.MinNeutralKillingRoles); - bool canSubtractNone = !canSubtractBenign && !canSubtractEvil && !canSubtractKilling; + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NonImp)); + possibleCrewCount -= 1; + } + else + { + buckets.Remove(buckets.FindLast(x => !impBuckets.Contains(x) && !crewBuckets.Contains(x))); + } + buckets.Add(RoleOptions.CrewRandom); + crewCount += 1; + } + if (possibleCrewCount > 1) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NonImp)); + buckets.Add(RoleOptions.NeutRandom); + possibleCrewCount -= 1; + } - factions.Shuffle(); - switch(factions.First()) + // imp buckets + while (buckets.Contains(RoleOptions.ImpConceal)) + { + if (ImpostorConcealingRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.ImpConceal)) { - case "Benign": - if (benign > 0 && (canSubtractBenign || canSubtractNone)) - { - benign -= 1; - break; - } - goto case "Evil"; - case "Evil": - if (evil > 0 && (canSubtractEvil || canSubtractNone)) - { - evil -= 1; - break; - } - goto case "Killing"; - case "Killing": - if (killing > 0 && (canSubtractKilling || canSubtractNone)) - { - killing -= 1; - break; - } - goto default; - default: - if (benign > 0) - { - benign -= 1; - } - else if (evil > 0) - { - evil -= 1; - } - else if (killing > 0) - { - killing -= 1; - } - break; + buckets.Remove(buckets.FindLast(x => x == RoleOptions.ImpConceal)); + buckets.Add(RoleOptions.ImpCommon); } - - if (benign + evil + killing == 0) - break; + break; } + var addedRole = SelectRole(ImpostorConcealingRoles); + impRoles.Add(addedRole); + ImpostorConcealingRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) ImpostorConcealingRoles.Add(addedRole); + buckets.Remove(RoleOptions.ImpConceal); + } + var commonImpRoles = ImpostorConcealingRoles; + while (buckets.Contains(RoleOptions.ImpSupport)) + { + if (ImpostorSupportRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.ImpSupport)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.ImpSupport)); + buckets.Add(RoleOptions.ImpCommon); + } + break; + } + var addedRole = SelectRole(ImpostorSupportRoles); + impRoles.Add(addedRole); + ImpostorSupportRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) ImpostorSupportRoles.Add(addedRole); + buckets.Remove(RoleOptions.ImpSupport); + } + commonImpRoles.AddRange(ImpostorSupportRoles); + while (buckets.Contains(RoleOptions.ImpKilling)) + { + if (ImpostorKillingRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.ImpKilling)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.ImpKilling)); + buckets.Add(RoleOptions.ImpRandom); + } + break; + } + var addedRole = SelectRole(ImpostorKillingRoles); + impRoles.Add(addedRole); + ImpostorKillingRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) ImpostorKillingRoles.Add(addedRole); + buckets.Remove(RoleOptions.ImpKilling); + } + var randomImpRoles = ImpostorKillingRoles; + while (buckets.Contains(RoleOptions.ImpCommon)) + { + if (commonImpRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.ImpCommon)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.ImpCommon)); + buckets.Add(RoleOptions.ImpRandom); + } + break; + } + var addedRole = SelectRole(commonImpRoles); + impRoles.Add(addedRole); + commonImpRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) commonImpRoles.Add(addedRole); + buckets.Remove(RoleOptions.ImpCommon); + } + randomImpRoles.AddRange(commonImpRoles); + while (buckets.Contains(RoleOptions.ImpRandom)) + { + if (randomImpRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.ImpRandom)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.ImpRandom)); + } + break; + } + var addedRole = SelectRole(randomImpRoles); + impRoles.Add(addedRole); + randomImpRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) randomImpRoles.Add(addedRole); + buckets.Remove(RoleOptions.ImpRandom); + } - NeutralBenignRoles.SortRoles(benign); - NeutralEvilRoles.SortRoles(evil); - NeutralKillingRoles.SortRoles(killing); - - CrewmateRoles.SortRoles(crewmates.Count - NeutralBenignRoles.Count - NeutralEvilRoles.Count - NeutralKillingRoles.Count); - ImpostorRoles.SortRoles(impostors.Count); - - crewRoles.AddRange(CrewmateRoles); - impRoles.AddRange(ImpostorRoles); + // crew buckets + while (buckets.Contains(RoleOptions.CrewInvest)) + { + if (CrewmateInvestigativeRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.CrewInvest)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.CrewInvest)); + buckets.Add(RoleOptions.CrewCommon); + } + break; + } + var addedRole = SelectRole(CrewmateInvestigativeRoles); + crewRoles.Add(addedRole); + CrewmateInvestigativeRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) CrewmateInvestigativeRoles.Add(addedRole); + buckets.Remove(RoleOptions.CrewInvest); + } + var commonCrewRoles = CrewmateInvestigativeRoles; + while (buckets.Contains(RoleOptions.CrewProtective)) + { + if (CrewmateProtectiveRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.CrewProtective)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.CrewProtective)); + buckets.Add(RoleOptions.CrewCommon); + } + break; + } + var addedRole = SelectRole(CrewmateProtectiveRoles); + crewRoles.Add(addedRole); + CrewmateProtectiveRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) CrewmateProtectiveRoles.Add(addedRole); + buckets.Remove(RoleOptions.CrewProtective); + } + commonCrewRoles.AddRange(CrewmateProtectiveRoles); + while (buckets.Contains(RoleOptions.CrewSupport)) + { + if (CrewmateSupportRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.CrewSupport)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.CrewSupport)); + buckets.Add(RoleOptions.CrewCommon); + } + break; + } + var addedRole = SelectRole(CrewmateSupportRoles); + crewRoles.Add(addedRole); + CrewmateSupportRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) CrewmateSupportRoles.Add(addedRole); + buckets.Remove(RoleOptions.CrewSupport); + } + commonCrewRoles.AddRange(CrewmateSupportRoles); + while (buckets.Contains(RoleOptions.CrewKilling)) + { + if (CrewmateKillingRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.CrewKilling)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.CrewKilling)); + buckets.Add(RoleOptions.CrewRandom); + } + break; + } + var addedRole = SelectRole(CrewmateKillingRoles); + crewRoles.Add(addedRole); + CrewmateKillingRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) CrewmateKillingRoles.Add(addedRole); + buckets.Remove(RoleOptions.CrewKilling); } - neutRoles.AddRange(NeutralBenignRoles); - neutRoles.AddRange(NeutralEvilRoles); - neutRoles.AddRange(NeutralKillingRoles); - // Roles are not, at this point, shuffled yet. + var randomCrewRoles = CrewmateKillingRoles; + while (buckets.Contains(RoleOptions.CrewCommon)) + { + if (commonCrewRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.CrewCommon)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.CrewCommon)); + buckets.Add(RoleOptions.CrewRandom); + } + break; + } + var addedRole = SelectRole(commonCrewRoles); + crewRoles.Add(addedRole); + commonCrewRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) commonCrewRoles.Add(addedRole); + buckets.Remove(RoleOptions.CrewCommon); + } + randomCrewRoles.AddRange(commonCrewRoles); + while (buckets.Contains(RoleOptions.CrewRandom)) + { + if (randomCrewRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.CrewRandom)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.CrewRandom)); + empty += 1; + } + break; + } + var addedRole = SelectRole(randomCrewRoles); + crewRoles.Add(addedRole); + randomCrewRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) randomCrewRoles.Add(addedRole); + buckets.Remove(RoleOptions.CrewRandom); + } + var randomNonImpRoles = randomCrewRoles; - // In All/Any mode, there is at least one neutral and one crewmate, but duplicates are allowed and probability is ignored. - if (CustomGameOptions.GameMode == GameMode.AllAny) + // neutral buckets + while (buckets.Contains(RoleOptions.NeutBenign)) { - // Add one neutral role to the game, if any are enabled. - // This guarantees at least one neutral role's presence. - if (neutRoles.Count > 0) + if (NeutralBenignRoles.Count == 0) { - neutRoles.Shuffle(); - crewRoles.Add(neutRoles[0]); - // If it's unique, remove it from the list. - if (neutRoles[0].Item3 == true) neutRoles.Remove(neutRoles[0]); + while (buckets.Contains(RoleOptions.NeutBenign)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NeutBenign)); + buckets.Add(RoleOptions.NeutCommon); + } + break; } - // Add one crewmate role to the game, or vanilla Crewmate if none are enabled. - // This guarantees at least one crewmate role's presence. - if (CrewmateRoles.Count > 0) + var addedRole = SelectRole(NeutralBenignRoles); + crewRoles.Add(addedRole); + NeutralBenignRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) NeutralBenignRoles.Add(addedRole); + buckets.Remove(RoleOptions.NeutBenign); + } + var commonNeutRoles = NeutralBenignRoles; + while (buckets.Contains(RoleOptions.NeutEvil)) + { + if (NeutralEvilRoles.Count == 0) { - CrewmateRoles.Shuffle(); - crewRoles.Add(CrewmateRoles[0]); - if (CrewmateRoles[0].Item3 == true) CrewmateRoles.Remove(CrewmateRoles[0]); + while (buckets.Contains(RoleOptions.NeutEvil)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NeutEvil)); + buckets.Add(RoleOptions.NeutCommon); + } + break; } - else + var addedRole = SelectRole(NeutralEvilRoles); + crewRoles.Add(addedRole); + NeutralEvilRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) NeutralEvilRoles.Add(addedRole); + buckets.Remove(RoleOptions.NeutEvil); + } + commonNeutRoles.AddRange(NeutralEvilRoles); + while (buckets.Contains(RoleOptions.NeutKilling)) + { + if (NeutralKillingRoles.Count == 0) { - crewRoles.Add((typeof(Crewmate), 100, false)); + while (buckets.Contains(RoleOptions.NeutKilling)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NeutKilling)); + buckets.Add(RoleOptions.NeutRandom); + } + break; } - // Now add all the roles together. - var allAnyRoles = new List<(Type, int, bool)>(); - allAnyRoles.AddRange(CrewmateRoles); - allAnyRoles.AddRange(neutRoles); - // Add crew & neutral roles up to the crewmate count, including duplicates (unless defined as unique). - while (crewRoles.Count < crewmates.Count && allAnyRoles.Count > 0) + var addedRole = SelectRole(NeutralKillingRoles); + crewRoles.Add(addedRole); + NeutralKillingRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) NeutralKillingRoles.Add(addedRole); + buckets.Remove(RoleOptions.NeutKilling); + } + var randomNeutRoles = NeutralKillingRoles; + while (buckets.Contains(RoleOptions.NeutCommon)) + { + if (commonNeutRoles.Count == 0) { - allAnyRoles.Shuffle(); - crewRoles.Add(allAnyRoles[0]); - if (allAnyRoles[0].Item3 == true) allAnyRoles.Remove(allAnyRoles[0]); + while (buckets.Contains(RoleOptions.NeutCommon)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NeutCommon)); + buckets.Add(RoleOptions.NeutRandom); + } + break; } - // Add impostor roles up to the impostor count, including duplicates (unless defined as unique). - while (impRoles.Count < impostors.Count && ImpostorRoles.Count > 0) + var addedRole = SelectRole(commonNeutRoles); + crewRoles.Add(addedRole); + commonNeutRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) commonNeutRoles.Add(addedRole); + buckets.Remove(RoleOptions.NeutCommon); + } + randomNeutRoles.AddRange(commonNeutRoles); + while (buckets.Contains(RoleOptions.NeutRandom)) + { + if (randomNeutRoles.Count == 0) { - ImpostorRoles.Shuffle(); - impRoles.Add(ImpostorRoles[0]); - if (ImpostorRoles[0].Item3 == true) ImpostorRoles.Remove(ImpostorRoles[0]); + while (buckets.Contains(RoleOptions.NeutRandom)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NeutRandom)); + buckets.Add(RoleOptions.NonImp); + } + break; } + var addedRole = SelectRole(randomNeutRoles); + crewRoles.Add(addedRole); + randomNeutRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) randomNeutRoles.Add(addedRole); + buckets.Remove(RoleOptions.NeutRandom); } - else + randomNonImpRoles.AddRange(randomNeutRoles); + while (buckets.Contains(RoleOptions.NonImp)) { - // Roles have already been sorted for Classic mode. - // So just add in the neutral roles. - crewRoles.AddRange(neutRoles); + if (randomNonImpRoles.Count == 0) + { + while (buckets.Contains(RoleOptions.NonImp)) + { + buckets.Remove(buckets.FindLast(x => x == RoleOptions.NonImp)); + } + break; + } + var addedRole = SelectRole(randomNonImpRoles); + crewRoles.Add(addedRole); + randomNonImpRoles.Remove(addedRole); + addedRole.Item2 -= 5; + if (addedRole.Item2 > 0 && !addedRole.Item3) randomNonImpRoles.Add(addedRole); + buckets.Remove(RoleOptions.NonImp); } // Shuffle roles before handing them out. @@ -345,7 +622,7 @@ private static void GenEachRole(List infected) // Hand out global modifiers. var canHaveModifier = PlayerControl.AllPlayerControls.ToArray() - .Where(player => !player.Is(ModifierEnum.Disperser) && !player.Is(ModifierEnum.DoubleShot) && !player.Is(ModifierEnum.Underdog)) + .Where(player => !player.Is(ModifierEnum.Disperser) && !player.Is(ModifierEnum.DoubleShot) && !player.Is(ModifierEnum.Saboteur) && !player.Is(ModifierEnum.Underdog)) .ToList(); canHaveModifier.Shuffle(); GlobalModifiers.SortModifiers(canHaveModifier.Count); @@ -475,80 +752,6 @@ private static void GenEachRole(List infected) } } } - private static void GenEachRoleKilling(List infected) - { - var impostors = Utils.GetImpostors(infected); - var crewmates = Utils.GetCrewmates(impostors); - crewmates.Shuffle(); - impostors.Shuffle(); - - ImpostorRoles.Add((typeof(Undertaker), 10, true)); - ImpostorRoles.Add((typeof(Morphling), 10, false)); - ImpostorRoles.Add((typeof(Escapist), 10, false)); - ImpostorRoles.Add((typeof(Miner), 10, true)); - ImpostorRoles.Add((typeof(Swooper), 10, false)); - ImpostorRoles.Add((typeof(Grenadier), 10, true)); - - ImpostorRoles.SortRoles(impostors.Count); - - NeutralKillingRoles.Add((typeof(Glitch), 10, true)); - NeutralKillingRoles.Add((typeof(Werewolf), 10, true)); - if (CustomGameOptions.HiddenRoles) - NeutralKillingRoles.Add((typeof(Juggernaut), 10, true)); - if (CustomGameOptions.AddArsonist) - NeutralKillingRoles.Add((typeof(Arsonist), 10, true)); - if (CustomGameOptions.AddPlaguebearer) - NeutralKillingRoles.Add((typeof(Plaguebearer), 10, true)); - - var neutrals = 0; - if (NeutralKillingRoles.Count < CustomGameOptions.NeutralRoles) neutrals = NeutralKillingRoles.Count; - else neutrals = CustomGameOptions.NeutralRoles; - var spareCrew = crewmates.Count - neutrals; - if (spareCrew > 2) NeutralKillingRoles.SortRoles(neutrals); - else NeutralKillingRoles.SortRoles(crewmates.Count - 3); - - var veterans = CustomGameOptions.VeteranCount; - while (veterans > 0) - { - CrewmateRoles.Add((typeof(Veteran), 10, false)); - veterans -= 1; - } - var vigilantes = CustomGameOptions.VigilanteCount; - while (vigilantes > 0) - { - CrewmateRoles.Add((typeof(Vigilante), 10, false)); - vigilantes -= 1; - } - if (CrewmateRoles.Count + NeutralKillingRoles.Count > crewmates.Count) - { - CrewmateRoles.SortRoles(crewmates.Count - NeutralKillingRoles.Count); - } - else if (CrewmateRoles.Count + NeutralKillingRoles.Count < crewmates.Count) - { - var sheriffs = crewmates.Count - NeutralKillingRoles.Count - CrewmateRoles.Count; - while (sheriffs > 0) - { - CrewmateRoles.Add((typeof(Sheriff), 10, false)); - sheriffs -= 1; - } - } - - var crewAndNeutralRoles = new List<(Type, int, bool)>(); - crewAndNeutralRoles.AddRange(CrewmateRoles); - crewAndNeutralRoles.AddRange(NeutralKillingRoles); - crewAndNeutralRoles.Shuffle(); - ImpostorRoles.Shuffle(); - - foreach (var (type, _, _) in crewAndNeutralRoles) - { - Role.GenRole(type, crewmates); - } - foreach (var (type, _, _) in ImpostorRoles) - { - Role.GenRole(type, impostors); - } - } - [HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.HandleRpc))] public static class HandleRpc @@ -615,7 +818,7 @@ public static void Postfix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) ExileControllerPatch.lastExiled = null; PatchKillTimer.GameStarted = false; StartImitate.ImitatingPlayer = null; - JailChat.JailorMessage = false; + ChatCommands.JailorMessage = false; KillButtonTarget.DontRevive = byte.MaxValue; AddHauntPatch.AssassinatedPlayers.Clear(); HudUpdate.Zooming = false; @@ -836,6 +1039,33 @@ public static void Postfix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) break; } break; + case CustomRPC.Camp: + var deputy = Utils.PlayerById(reader.ReadByte()); + var deputyRole = Role.GetRole(deputy); + switch (reader.ReadByte()) + { + default: // the reason why I do both is in case of desync + case 0: //camp + var camp = Utils.PlayerById(reader.ReadByte()); + deputyRole.Camping = camp; + break; + case 1: //camp trigger + var killerTarget = Utils.PlayerById(reader.ReadByte()); + deputyRole.Killer = killerTarget; + deputyRole.Camping = null; + break; + case 2: //shoot + var shot = Utils.PlayerById(reader.ReadByte()); + if (shot == deputyRole.Killer && !shot.Is(RoleEnum.Pestilence)) + { + AddButtonDeputy.Shoot(deputyRole, shot); + if (shot.Is(Faction.Crewmates)) deputyRole.IncorrectKills += 1; + else deputyRole.CorrectKills += 1; + } + deputyRole.Killer = null; + break; + } + break; case CustomRPC.Hypnotise: var hypnotist = Utils.PlayerById(reader.ReadByte()); var hypnotistRole = Role.GetRole(hypnotist); @@ -957,6 +1187,13 @@ public static void Postfix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) var grenadier = Utils.PlayerById(reader.ReadByte()); var grenadierRole = Role.GetRole(grenadier); grenadierRole.TimeRemaining = CustomGameOptions.GrenadeDuration; + byte playersFlashed = reader.ReadByte(); + Il2CppSystem.Collections.Generic.List playerControlList = new Il2CppSystem.Collections.Generic.List(); + for (int i = 0; i < playersFlashed; i++) + { + playerControlList.Add(Utils.PlayerById(reader.ReadByte())); + } + grenadierRole.flashedPlayers = playerControlList; grenadierRole.Flash(); break; case CustomRPC.ArsonistWin: @@ -1086,9 +1323,22 @@ public static void Postfix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) readByte = reader.ReadByte(); var dienerBodies = Object.FindObjectsOfType(); foreach (var body in dienerBodies) + { if (body.ParentId == readByte) + { dienerRole.CurrentlyDragging = body; + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(body.ParentId)) + { + if (!lookout.Watching[body.ParentId].Contains(RoleEnum.Undertaker)) lookout.Watching[body.ParentId].Add(RoleEnum.Undertaker); + } + } + } + } + break; case CustomRPC.Drop: readByte1 = reader.ReadByte(); @@ -1226,6 +1476,15 @@ public static void Postfix([HarmonyArgument(0)] byte callId, [HarmonyArgument(1) var aurial = Role.GetRole(PlayerControl.LocalPlayer); Coroutines.Start(aurial.Sense(abilityUser)); } + else if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout) && abilitytarget != null) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(abilitytargetId)) + { + RoleEnum playerRole = Role.GetRole(Utils.PlayerById(abilityUser.PlayerId)).RoleType; + if (!lookout.Watching[abilitytargetId].Contains(playerRole)) lookout.Watching[abilitytargetId].Add(playerRole); + } + } break; } } @@ -1261,13 +1520,18 @@ public static void Postfix() ExileControllerPatch.lastExiled = null; PatchKillTimer.GameStarted = false; StartImitate.ImitatingPlayer = null; - JailChat.JailorMessage = false; + ChatCommands.JailorMessage = false; AddHauntPatch.AssassinatedPlayers.Clear(); - CrewmateRoles.Clear(); + CrewmateInvestigativeRoles.Clear(); + CrewmateKillingRoles.Clear(); + CrewmateProtectiveRoles.Clear(); + CrewmateSupportRoles.Clear(); NeutralBenignRoles.Clear(); NeutralEvilRoles.Clear(); NeutralKillingRoles.Clear(); - ImpostorRoles.Clear(); + ImpostorConcealingRoles.Clear(); + ImpostorKillingRoles.Clear(); + ImpostorSupportRoles.Clear(); CrewmateModifiers.Clear(); GlobalModifiers.Clear(); ImpostorModifiers.Clear(); @@ -1291,238 +1555,240 @@ public static void Postfix() if (GameOptionsManager.Instance.CurrentGameOptions.GameMode == GameModes.HideNSeek) return; - if (CustomGameOptions.GameMode == GameMode.Classic || CustomGameOptions.GameMode == GameMode.AllAny) - { - PhantomOn = Check(CustomGameOptions.PhantomOn); - HaunterOn = Check(CustomGameOptions.HaunterOn); - TraitorOn = Check(CustomGameOptions.TraitorOn); - } - else - { - PhantomOn = false; - HaunterOn = false; - TraitorOn = false; - } + PhantomOn = Check(CustomGameOptions.PhantomOn); + HaunterOn = Check(CustomGameOptions.HaunterOn); + TraitorOn = Check(CustomGameOptions.TraitorOn); - if (CustomGameOptions.GameMode == GameMode.Classic || CustomGameOptions.GameMode == GameMode.AllAny) - { - #region Crewmate Roles - if (CustomGameOptions.PoliticianOn > 0) - CrewmateRoles.Add((typeof(Politician), CustomGameOptions.PoliticianOn, true)); + #region Crewmate Roles + if (CustomGameOptions.PoliticianOn > 0) + CrewmateSupportRoles.Add((typeof(Politician), CustomGameOptions.PoliticianOn, true)); - if (CustomGameOptions.SheriffOn > 0) - CrewmateRoles.Add((typeof(Sheriff), CustomGameOptions.SheriffOn, false)); + if (CustomGameOptions.SheriffOn > 0) + CrewmateKillingRoles.Add((typeof(Sheriff), CustomGameOptions.SheriffOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.EngineerOn > 0) - CrewmateRoles.Add((typeof(Engineer), CustomGameOptions.EngineerOn, false)); + if (CustomGameOptions.EngineerOn > 0) + CrewmateSupportRoles.Add((typeof(Engineer), CustomGameOptions.EngineerOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.SwapperOn > 0) - CrewmateRoles.Add((typeof(Swapper), CustomGameOptions.SwapperOn, true)); + if (CustomGameOptions.SwapperOn > 0) + CrewmateSupportRoles.Add((typeof(Swapper), CustomGameOptions.SwapperOn, true)); - if (CustomGameOptions.InvestigatorOn > 0) - CrewmateRoles.Add((typeof(Investigator), CustomGameOptions.InvestigatorOn, false)); + if (CustomGameOptions.InvestigatorOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Investigator), CustomGameOptions.InvestigatorOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.MedicOn > 0) - CrewmateRoles.Add((typeof(Medic), CustomGameOptions.MedicOn, true)); + if (CustomGameOptions.MedicOn > 0) + CrewmateProtectiveRoles.Add((typeof(Medic), CustomGameOptions.MedicOn, true)); - if (CustomGameOptions.SeerOn > 0) - CrewmateRoles.Add((typeof(Seer), CustomGameOptions.SeerOn, false)); + if (CustomGameOptions.SeerOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Seer), CustomGameOptions.SeerOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.SpyOn > 0) - CrewmateRoles.Add((typeof(Spy), CustomGameOptions.SpyOn, false)); + if (CustomGameOptions.SpyOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Spy), CustomGameOptions.SpyOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.SnitchOn > 0) - CrewmateRoles.Add((typeof(Snitch), CustomGameOptions.SnitchOn, true)); + if (CustomGameOptions.SnitchOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Snitch), CustomGameOptions.SnitchOn, true)); - if (CustomGameOptions.AltruistOn > 0) - CrewmateRoles.Add((typeof(Altruist), CustomGameOptions.AltruistOn, true)); + if (CustomGameOptions.AltruistOn > 0) + CrewmateProtectiveRoles.Add((typeof(Altruist), CustomGameOptions.AltruistOn, true)); - if (CustomGameOptions.VigilanteOn > 0) - CrewmateRoles.Add((typeof(Vigilante), CustomGameOptions.VigilanteOn, false)); + if (CustomGameOptions.VigilanteOn > 0) + CrewmateKillingRoles.Add((typeof(Vigilante), CustomGameOptions.VigilanteOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.VeteranOn > 0) - CrewmateRoles.Add((typeof(Veteran), CustomGameOptions.VeteranOn, false)); + if (CustomGameOptions.VeteranOn > 0) + CrewmateKillingRoles.Add((typeof(Veteran), CustomGameOptions.VeteranOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.HunterOn > 0) - CrewmateRoles.Add((typeof(Hunter), CustomGameOptions.HunterOn, false)); + if (CustomGameOptions.HunterOn > 0) + CrewmateKillingRoles.Add((typeof(Hunter), CustomGameOptions.HunterOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.TrackerOn > 0) - CrewmateRoles.Add((typeof(Tracker), CustomGameOptions.TrackerOn, false)); + if (CustomGameOptions.TrackerOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Tracker), CustomGameOptions.TrackerOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.TransporterOn > 0) - CrewmateRoles.Add((typeof(Transporter), CustomGameOptions.TransporterOn, false)); + if (CustomGameOptions.TransporterOn > 0) + CrewmateSupportRoles.Add((typeof(Transporter), CustomGameOptions.TransporterOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.MediumOn > 0) - CrewmateRoles.Add((typeof(Medium), CustomGameOptions.MediumOn, false)); + if (CustomGameOptions.MediumOn > 0) + CrewmateSupportRoles.Add((typeof(Medium), CustomGameOptions.MediumOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.MysticOn > 0) - CrewmateRoles.Add((typeof(Mystic), CustomGameOptions.MysticOn, false)); + if (CustomGameOptions.MysticOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Mystic), CustomGameOptions.MysticOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.TrapperOn > 0) - CrewmateRoles.Add((typeof(Trapper), CustomGameOptions.TrapperOn, false)); + if (CustomGameOptions.TrapperOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Trapper), CustomGameOptions.TrapperOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.DetectiveOn > 0) - CrewmateRoles.Add((typeof(Detective), CustomGameOptions.DetectiveOn, false)); + if (CustomGameOptions.DetectiveOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Detective), CustomGameOptions.DetectiveOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.ImitatorOn > 0) - CrewmateRoles.Add((typeof(Imitator), CustomGameOptions.ImitatorOn, true)); + if (CustomGameOptions.ImitatorOn > 0) + CrewmateSupportRoles.Add((typeof(Imitator), CustomGameOptions.ImitatorOn, true)); - if (CustomGameOptions.ProsecutorOn > 0) - CrewmateRoles.Add((typeof(Prosecutor), CustomGameOptions.ProsecutorOn, true)); + if (CustomGameOptions.ProsecutorOn > 0) + CrewmateSupportRoles.Add((typeof(Prosecutor), CustomGameOptions.ProsecutorOn, true)); - if (CustomGameOptions.OracleOn > 0) - CrewmateRoles.Add((typeof(Oracle), CustomGameOptions.OracleOn, true)); + if (CustomGameOptions.OracleOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Oracle), CustomGameOptions.OracleOn, true)); - if (CustomGameOptions.AurialOn > 0) - CrewmateRoles.Add((typeof(Aurial), CustomGameOptions.AurialOn, false)); + if (CustomGameOptions.AurialOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Aurial), CustomGameOptions.AurialOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.WardenOn > 0) - CrewmateRoles.Add((typeof(Warden), CustomGameOptions.WardenOn, false)); + if (CustomGameOptions.WardenOn > 0) + CrewmateProtectiveRoles.Add((typeof(Warden), CustomGameOptions.WardenOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.JailorOn > 0) - CrewmateRoles.Add((typeof(Jailor), CustomGameOptions.JailorOn, true)); - #endregion - #region Neutral Roles - if (CustomGameOptions.JesterOn > 0) - NeutralEvilRoles.Add((typeof(Jester), CustomGameOptions.JesterOn, false)); + if (CustomGameOptions.JailorOn > 0) + CrewmateKillingRoles.Add((typeof(Jailor), CustomGameOptions.JailorOn, true)); - if (CustomGameOptions.AmnesiacOn > 0) - NeutralBenignRoles.Add((typeof(Amnesiac), CustomGameOptions.AmnesiacOn, false)); + if (CustomGameOptions.LookoutOn > 0) + CrewmateInvestigativeRoles.Add((typeof(Lookout), CustomGameOptions.LookoutOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.ExecutionerOn > 0) - NeutralEvilRoles.Add((typeof(Executioner), CustomGameOptions.ExecutionerOn, false)); + if (CustomGameOptions.DeputyOn > 0) + CrewmateKillingRoles.Add((typeof(Deputy), CustomGameOptions.DeputyOn, false || CustomGameOptions.UniqueRoles)); + #endregion + #region Neutral Roles + if (CustomGameOptions.JesterOn > 0) + NeutralEvilRoles.Add((typeof(Jester), CustomGameOptions.JesterOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.DoomsayerOn > 0) - NeutralEvilRoles.Add((typeof(Doomsayer), CustomGameOptions.DoomsayerOn, false)); + if (CustomGameOptions.AmnesiacOn > 0) + NeutralBenignRoles.Add((typeof(Amnesiac), CustomGameOptions.AmnesiacOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.SoulCollectorOn > 0) - NeutralEvilRoles.Add((typeof(SoulCollector), CustomGameOptions.SoulCollectorOn, true)); + if (CustomGameOptions.ExecutionerOn > 0) + NeutralEvilRoles.Add((typeof(Executioner), CustomGameOptions.ExecutionerOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.SurvivorOn > 0) - NeutralBenignRoles.Add((typeof(Survivor), CustomGameOptions.SurvivorOn, false)); + if (CustomGameOptions.DoomsayerOn > 0) + NeutralEvilRoles.Add((typeof(Doomsayer), CustomGameOptions.DoomsayerOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.GuardianAngelOn > 0) - NeutralBenignRoles.Add((typeof(GuardianAngel), CustomGameOptions.GuardianAngelOn, false)); + if (CustomGameOptions.SoulCollectorOn > 0) + NeutralEvilRoles.Add((typeof(SoulCollector), CustomGameOptions.SoulCollectorOn, true)); - if (CustomGameOptions.GlitchOn > 0) - NeutralKillingRoles.Add((typeof(Glitch), CustomGameOptions.GlitchOn, true)); + if (CustomGameOptions.SurvivorOn > 0) + NeutralBenignRoles.Add((typeof(Survivor), CustomGameOptions.SurvivorOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.ArsonistOn > 0) - NeutralKillingRoles.Add((typeof(Arsonist), CustomGameOptions.ArsonistOn, true)); + if (CustomGameOptions.GuardianAngelOn > 0) + NeutralBenignRoles.Add((typeof(GuardianAngel), CustomGameOptions.GuardianAngelOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.PlaguebearerOn > 0) - NeutralKillingRoles.Add((typeof(Plaguebearer), CustomGameOptions.PlaguebearerOn, true)); + if (CustomGameOptions.GlitchOn > 0) + NeutralKillingRoles.Add((typeof(Glitch), CustomGameOptions.GlitchOn, true)); - if (CustomGameOptions.WerewolfOn > 0) - NeutralKillingRoles.Add((typeof(Werewolf), CustomGameOptions.WerewolfOn, true)); + if (CustomGameOptions.ArsonistOn > 0) + NeutralKillingRoles.Add((typeof(Arsonist), CustomGameOptions.ArsonistOn, true)); - if (CustomGameOptions.GameMode == GameMode.Classic && CustomGameOptions.VampireOn > 0) - NeutralKillingRoles.Add((typeof(Vampire), CustomGameOptions.VampireOn, true)); + if (CustomGameOptions.PlaguebearerOn > 0) + NeutralKillingRoles.Add((typeof(Plaguebearer), CustomGameOptions.PlaguebearerOn, true)); - if ((CheckJugg() || CustomGameOptions.GameMode == GameMode.AllAny) && CustomGameOptions.HiddenRoles) - NeutralKillingRoles.Add((typeof(Juggernaut), 100, true)); - #endregion - #region Impostor Roles - if (CustomGameOptions.UndertakerOn > 0) - ImpostorRoles.Add((typeof(Undertaker), CustomGameOptions.UndertakerOn, true)); + if (CustomGameOptions.WerewolfOn > 0) + NeutralKillingRoles.Add((typeof(Werewolf), CustomGameOptions.WerewolfOn, true)); - if (CustomGameOptions.MorphlingOn > 0) - ImpostorRoles.Add((typeof(Morphling), CustomGameOptions.MorphlingOn, false)); + if (CustomGameOptions.VampireOn > 0) + NeutralKillingRoles.Add((typeof(Vampire), CustomGameOptions.VampireOn, true)); - if (CustomGameOptions.BlackmailerOn > 0) - ImpostorRoles.Add((typeof(Blackmailer), CustomGameOptions.BlackmailerOn, true)); + if (CustomGameOptions.JuggernautOn > 0) + NeutralKillingRoles.Add((typeof(Juggernaut), CustomGameOptions.JuggernautOn, true)); + #endregion + #region Impostor Roles + if (CustomGameOptions.UndertakerOn > 0) + ImpostorSupportRoles.Add((typeof(Undertaker), CustomGameOptions.UndertakerOn, true)); - if (CustomGameOptions.MinerOn > 0) - ImpostorRoles.Add((typeof(Miner), CustomGameOptions.MinerOn, true)); + if (CustomGameOptions.MorphlingOn > 0) + ImpostorConcealingRoles.Add((typeof(Morphling), CustomGameOptions.MorphlingOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.SwooperOn > 0) - ImpostorRoles.Add((typeof(Swooper), CustomGameOptions.SwooperOn, false)); + if (CustomGameOptions.BlackmailerOn > 0) + ImpostorSupportRoles.Add((typeof(Blackmailer), CustomGameOptions.BlackmailerOn, true)); - if (CustomGameOptions.JanitorOn > 0) - ImpostorRoles.Add((typeof(Janitor), CustomGameOptions.JanitorOn, false)); + if (CustomGameOptions.MinerOn > 0) + ImpostorSupportRoles.Add((typeof(Miner), CustomGameOptions.MinerOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.GrenadierOn > 0) - ImpostorRoles.Add((typeof(Grenadier), CustomGameOptions.GrenadierOn, true)); + if (CustomGameOptions.SwooperOn > 0) + ImpostorConcealingRoles.Add((typeof(Swooper), CustomGameOptions.SwooperOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.EscapistOn > 0) - ImpostorRoles.Add((typeof(Escapist), CustomGameOptions.EscapistOn, false)); + if (CustomGameOptions.JanitorOn > 0) + ImpostorSupportRoles.Add((typeof(Janitor), CustomGameOptions.JanitorOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.BomberOn > 0) - ImpostorRoles.Add((typeof(Bomber), CustomGameOptions.BomberOn, true)); + if (CustomGameOptions.GrenadierOn > 0) + ImpostorConcealingRoles.Add((typeof(Grenadier), CustomGameOptions.GrenadierOn, true)); - if (CustomGameOptions.WarlockOn > 0) - ImpostorRoles.Add((typeof(Warlock), CustomGameOptions.WarlockOn, false)); + if (CustomGameOptions.EscapistOn > 0) + ImpostorConcealingRoles.Add((typeof(Escapist), CustomGameOptions.EscapistOn, false || CustomGameOptions.UniqueRoles)); - if (CustomGameOptions.VenererOn > 0) - ImpostorRoles.Add((typeof(Venerer), CustomGameOptions.VenererOn, true)); + if (CustomGameOptions.BomberOn > 0) + ImpostorKillingRoles.Add((typeof(Bomber), CustomGameOptions.BomberOn, true)); - if (CustomGameOptions.HypnotistOn > 0) - ImpostorRoles.Add((typeof(Hypnotist), CustomGameOptions.HypnotistOn, true)); - #endregion - #region Crewmate Modifiers - if (Check(CustomGameOptions.TorchOn)) - CrewmateModifiers.Add((typeof(Torch), CustomGameOptions.TorchOn)); + if (CustomGameOptions.WarlockOn > 0) + ImpostorKillingRoles.Add((typeof(Warlock), CustomGameOptions.WarlockOn, false || CustomGameOptions.UniqueRoles)); - if (Check(CustomGameOptions.DiseasedOn)) - CrewmateModifiers.Add((typeof(Diseased), CustomGameOptions.DiseasedOn)); + if (CustomGameOptions.VenererOn > 0) + ImpostorConcealingRoles.Add((typeof(Venerer), CustomGameOptions.VenererOn, true)); - if (Check(CustomGameOptions.BaitOn)) - CrewmateModifiers.Add((typeof(Bait), CustomGameOptions.BaitOn)); + if (CustomGameOptions.HypnotistOn > 0) + ImpostorSupportRoles.Add((typeof(Hypnotist), CustomGameOptions.HypnotistOn, true)); - if (Check(CustomGameOptions.AftermathOn)) - CrewmateModifiers.Add((typeof(Aftermath), CustomGameOptions.AftermathOn)); + if (CustomGameOptions.ScavengerOn > 0) + ImpostorKillingRoles.Add((typeof(Scavenger), CustomGameOptions.ScavengerOn, false || CustomGameOptions.UniqueRoles)); + #endregion + #region Crewmate Modifiers + if (Check(CustomGameOptions.TorchOn)) + CrewmateModifiers.Add((typeof(Torch), CustomGameOptions.TorchOn)); - if (Check(CustomGameOptions.MultitaskerOn)) - CrewmateModifiers.Add((typeof(Multitasker), CustomGameOptions.MultitaskerOn)); + if (Check(CustomGameOptions.DiseasedOn)) + CrewmateModifiers.Add((typeof(Diseased), CustomGameOptions.DiseasedOn)); - if (Check(CustomGameOptions.FrostyOn)) - CrewmateModifiers.Add((typeof(Frosty), CustomGameOptions.FrostyOn)); - #endregion - #region Global Modifiers - if (Check(CustomGameOptions.TiebreakerOn)) - GlobalModifiers.Add((typeof(Tiebreaker), CustomGameOptions.TiebreakerOn)); + if (Check(CustomGameOptions.BaitOn)) + CrewmateModifiers.Add((typeof(Bait), CustomGameOptions.BaitOn)); - if (Check(CustomGameOptions.FlashOn)) - GlobalModifiers.Add((typeof(Flash), CustomGameOptions.FlashOn)); + if (Check(CustomGameOptions.AftermathOn)) + CrewmateModifiers.Add((typeof(Aftermath), CustomGameOptions.AftermathOn)); - if (Check(CustomGameOptions.GiantOn)) - GlobalModifiers.Add((typeof(Giant), CustomGameOptions.GiantOn)); + if (Check(CustomGameOptions.MultitaskerOn)) + CrewmateModifiers.Add((typeof(Multitasker), CustomGameOptions.MultitaskerOn)); - if (Check(CustomGameOptions.ButtonBarryOn)) - ButtonModifiers.Add((typeof(ButtonBarry), CustomGameOptions.ButtonBarryOn)); + if (Check(CustomGameOptions.FrostyOn)) + CrewmateModifiers.Add((typeof(Frosty), CustomGameOptions.FrostyOn)); + #endregion + #region Global Modifiers + if (Check(CustomGameOptions.TiebreakerOn)) + GlobalModifiers.Add((typeof(Tiebreaker), CustomGameOptions.TiebreakerOn)); - if (Check(CustomGameOptions.LoversOn)) - GlobalModifiers.Add((typeof(Lover), CustomGameOptions.LoversOn)); + if (Check(CustomGameOptions.FlashOn)) + GlobalModifiers.Add((typeof(Flash), CustomGameOptions.FlashOn)); - if (Check(CustomGameOptions.SleuthOn)) - GlobalModifiers.Add((typeof(Sleuth), CustomGameOptions.SleuthOn)); + if (Check(CustomGameOptions.GiantOn)) + GlobalModifiers.Add((typeof(Giant), CustomGameOptions.GiantOn)); - if (Check(CustomGameOptions.RadarOn)) - GlobalModifiers.Add((typeof(Radar), CustomGameOptions.RadarOn)); + if (Check(CustomGameOptions.ButtonBarryOn)) + ButtonModifiers.Add((typeof(ButtonBarry), CustomGameOptions.ButtonBarryOn)); - if (Check(CustomGameOptions.SixthSenseOn)) - GlobalModifiers.Add((typeof(SixthSense), CustomGameOptions.SixthSenseOn)); + if (Check(CustomGameOptions.LoversOn)) + GlobalModifiers.Add((typeof(Lover), CustomGameOptions.LoversOn)); - if (Check(CustomGameOptions.ShyOn)) - GlobalModifiers.Add((typeof(Shy), CustomGameOptions.ShyOn)); - #endregion - #region Impostor Modifiers - if (Check(CustomGameOptions.DisperserOn) && GameOptionsManager.Instance.currentNormalGameOptions.MapId < 4) - ImpostorModifiers.Add((typeof(Disperser), CustomGameOptions.DisperserOn)); + if (Check(CustomGameOptions.SleuthOn)) + GlobalModifiers.Add((typeof(Sleuth), CustomGameOptions.SleuthOn)); - if (Check(CustomGameOptions.DoubleShotOn)) - AssassinModifiers.Add((typeof(DoubleShot), CustomGameOptions.DoubleShotOn)); + if (Check(CustomGameOptions.RadarOn)) + GlobalModifiers.Add((typeof(Radar), CustomGameOptions.RadarOn)); - if (CustomGameOptions.UnderdogOn > 0) - ImpostorModifiers.Add((typeof(Underdog), CustomGameOptions.UnderdogOn)); - #endregion - #region Assassin Ability - AssassinAbility.Add((typeof(Assassin), CustomRPC.SetAssassin, 100)); - #endregion - } + if (Check(CustomGameOptions.SixthSenseOn)) + GlobalModifiers.Add((typeof(SixthSense), CustomGameOptions.SixthSenseOn)); + + if (Check(CustomGameOptions.ShyOn)) + GlobalModifiers.Add((typeof(Shy), CustomGameOptions.ShyOn)); + + if (Check(CustomGameOptions.MiniOn)) + GlobalModifiers.Add((typeof(Mini), CustomGameOptions.MiniOn)); + #endregion + #region Impostor Modifiers + if (Check(CustomGameOptions.DisperserOn) && GameOptionsManager.Instance.currentNormalGameOptions.MapId < 4) + ImpostorModifiers.Add((typeof(Disperser), CustomGameOptions.DisperserOn)); + + if (Check(CustomGameOptions.DoubleShotOn)) + AssassinModifiers.Add((typeof(DoubleShot), CustomGameOptions.DoubleShotOn)); + + if (Check(CustomGameOptions.SaboteurOn)) + ImpostorModifiers.Add((typeof(Saboteur), CustomGameOptions.SaboteurOn)); + + if (Check(CustomGameOptions.UnderdogOn)) + ImpostorModifiers.Add((typeof(Underdog), CustomGameOptions.UnderdogOn)); + #endregion + #region Assassin Ability + AssassinAbility.Add((typeof(Assassin), CustomRPC.SetAssassin, 100)); + #endregion - if (CustomGameOptions.GameMode == GameMode.KillingOnly) GenEachRoleKilling(infected.ToList()); - else GenEachRole(infected.ToList()); + GenEachRole(infected.ToList()); } } } diff --git a/source/Patches/SizePatch.cs b/source/Patches/SizePatch.cs index 65929ac8a..f4bb87450 100644 --- a/source/Patches/SizePatch.cs +++ b/source/Patches/SizePatch.cs @@ -2,22 +2,43 @@ using System.Linq; using TownOfUs.Extensions; using UnityEngine; +using System; namespace TownOfUs.Patches { [HarmonyPatch] public static class SizePatch { + public static float Radius = 0.2233912f; + public static float Offset = 0.3636057f; + [HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))] [HarmonyPostfix] public static void Postfix(HudManager __instance) { foreach (var player in PlayerControl.AllPlayerControls.ToArray()) { + CircleCollider2D collider = player.Collider.Caster(); if (player.Data != null && !(player.Data.IsDead || player.Data.Disconnected)) + { player.transform.localScale = player.GetAppearance().SizeFactor; + if (player.GetAppearance().SizeFactor == new Vector3(0.4f, 0.4f, 1.0f)) + { + collider.radius = Radius * 1.75f; + collider.offset = Offset / 1.75f * Vector2.down; + } + else + { + collider.radius = Radius; + collider.offset = Offset * Vector2.down; + } + } else + { player.transform.localScale = new Vector3(0.7f, 0.7f, 1.0f); + collider.radius = Radius; + collider.offset = Offset * Vector2.down; + } } var playerBindings = PlayerControl.AllPlayerControls.ToArray().ToDictionary(player => player.PlayerId); diff --git a/source/Patches/Start.cs b/source/Patches/Start.cs index cb3f0cd7c..2c755bacc 100644 --- a/source/Patches/Start.cs +++ b/source/Patches/Start.cs @@ -16,6 +16,14 @@ public static class Start public static Sprite Sprite => TownOfUs.Arrow; public static void Postfix(IntroCutscene._CoBegin_d__35 __instance) { + foreach (var player in PlayerControl.AllPlayerControls) + { + if (player.Is(ModifierEnum.Mini) && player.transform.localPosition.y > 4 && GameOptionsManager.Instance.currentNormalGameOptions.MapId == 1) + { + player.transform.localPosition = new Vector3(player.transform.localPosition.x, 4f, player.transform.localPosition.z); + } + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Detective)) { var detective = Role.GetRole(PlayerControl.LocalPlayer); @@ -58,6 +66,13 @@ public static void Postfix(IntroCutscene._CoBegin_d__35 __instance) tracker.LastTracked = tracker.LastTracked.AddSeconds(CustomGameOptions.InitialCooldowns - CustomGameOptions.TrackCd); } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lo = Role.GetRole(PlayerControl.LocalPlayer); + lo.LastWatched = DateTime.UtcNow; + lo.LastWatched = lo.LastWatched.AddSeconds(CustomGameOptions.InitialCooldowns - CustomGameOptions.WatchCooldown); + } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Hunter)) { var hunter = Role.GetRole(PlayerControl.LocalPlayer); @@ -95,13 +110,6 @@ public static void Postfix(IntroCutscene._CoBegin_d__35 __instance) politician.LastCampaigned = politician.LastCampaigned.AddSeconds(CustomGameOptions.InitialCooldowns - CustomGameOptions.CampaignCd); } - if (PlayerControl.LocalPlayer.Is(RoleEnum.Warden)) - { - var warden = Role.GetRole(PlayerControl.LocalPlayer); - warden.LastFortified = DateTime.UtcNow; - warden.LastFortified = warden.LastFortified.AddSeconds(CustomGameOptions.InitialCooldowns - CustomGameOptions.FortifyCd); - } - if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor)) { var jailor = Role.GetRole(PlayerControl.LocalPlayer); diff --git a/source/Patches/StopImpKill.cs b/source/Patches/StopImpKill.cs index 522a2fdad..88a8ff3ad 100644 --- a/source/Patches/StopImpKill.cs +++ b/source/Patches/StopImpKill.cs @@ -48,7 +48,13 @@ public static bool Prefix(KillButton __instance) } else if (interact[0] == true) { - if (PlayerControl.LocalPlayer.Is(ModifierEnum.Underdog)) + if (PlayerControl.LocalPlayer.Is(RoleEnum.Scavenger)) + { + var scav = Role.GetRole(PlayerControl.LocalPlayer); + if (scav.Target == target) PlayerControl.LocalPlayer.SetKillTimer(CustomGameOptions.ScavengeCorrectKillCooldown); + else PlayerControl.LocalPlayer.SetKillTimer(GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown * CustomGameOptions.ScavengeIncorrectKillCooldown); + } + else if (PlayerControl.LocalPlayer.Is(ModifierEnum.Underdog)) { var lowerKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown - CustomGameOptions.UnderdogKillBonus; var normalKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown; diff --git a/source/Patches/TaskPatches.cs b/source/Patches/TaskPatches.cs index cd4bc1d53..2b6146fed 100644 --- a/source/Patches/TaskPatches.cs +++ b/source/Patches/TaskPatches.cs @@ -1,5 +1,6 @@ using HarmonyLib; using TownOfUs.Extensions; +using TownOfUs.Roles.Modifiers; namespace TownOfUs { @@ -25,13 +26,16 @@ private static bool Prefix(GameData __instance) playerInfo._object.Is(RoleEnum.Plaguebearer) || playerInfo._object.Is(RoleEnum.Pestilence) || playerInfo._object.Is(RoleEnum.Werewolf) || playerInfo._object.Is(RoleEnum.Doomsayer) || playerInfo._object.Is(RoleEnum.Vampire) || playerInfo._object.Is(RoleEnum.SoulCollector) || - playerInfo._object.Is(RoleEnum.Phantom) || playerInfo._object.Is(RoleEnum.Haunter) + playerInfo._object.Is(RoleEnum.Phantom) || playerInfo._object.Is(RoleEnum.Haunter) || + (playerInfo._object.Is(ModifierEnum.Lover) && !Modifier.GetModifier(playerInfo._object).OtherLover.Player.Is(Faction.Crewmates)) )) + { for (var j = 0; j < playerInfo.Tasks.Count; j++) { __instance.TotalTasks++; if (playerInfo.Tasks.ToArray()[j].Complete) __instance.CompletedTasks++; } + } } return false; @@ -41,7 +45,7 @@ private static bool Prefix(GameData __instance) [HarmonyPatch(typeof(Console), nameof(Console.CanUse))] private class Console_CanUse { - private static bool Prefix(Console __instance, [HarmonyArgument(0)] NetworkedPlayerInfo playerInfo, ref float __result) + private static bool Prefix(Console __instance, [HarmonyArgument(0)] NetworkedPlayerInfo playerInfo, ref float __result, ref bool canUse, ref bool couldUse) { var playerControl = playerInfo.Object; @@ -61,6 +65,8 @@ private static bool Prefix(Console __instance, [HarmonyArgument(0)] NetworkedPla if (flag && !__instance.AllowImpostor) { __result = float.MaxValue; + canUse = false; + couldUse = false; return false; } diff --git a/source/Patches/Utils.cs b/source/Patches/Utils.cs index 452bcb866..039a0863b 100644 --- a/source/Patches/Utils.cs +++ b/source/Patches/Utils.cs @@ -26,6 +26,7 @@ using TownOfUs.NeutralRoles.SoulCollectorMod; using static TownOfUs.Roles.Glitch; using TownOfUs.Patches.NeutralRoles; +using Il2CppSystem.Linq; namespace TownOfUs { @@ -87,6 +88,7 @@ public static void Unmorph(PlayerControl player) else { player.SetOutfit(CustomPlayerOutfitType.Default); + if (!player.Is(ModifierEnum.Shy) || player.Data.IsDead || player.Data.Disconnected) return; player.SetHatAndVisorAlpha(1f); player.cosmetics.skin.layer.color = player.cosmetics.skin.layer.color.SetAlpha(1f); foreach (var rend in player.cosmetics.currentPet.renderers) @@ -260,6 +262,11 @@ public static bool IsCrewKiller(this PlayerControl player) var vigi = Role.GetRole(player); if (vigi.RemainingKills > 0 && CustomGameOptions.VigilanteGuessNeutralKilling) return true; } + else if (player.Is(RoleEnum.Deputy)) + { + var dep = Role.GetRole(player); + if (dep.Killer != null && !dep.Killer.Data.IsDead && !dep.Killer.Data.Disconnected) return true; + } return false; } @@ -316,6 +323,10 @@ public static bool IsJailed(this PlayerControl player) { var jailor = (Jailor)role; return jailor.Jailed == player && !player.Data.IsDead && !player.Data.Disconnected; + }) || Role.GetRoles(RoleEnum.Imitator).Any(role => + { + var imitator = (Imitator)role; + return imitator.jailedPlayer == player && !player.Data.IsDead && !player.Data.Disconnected; }); } @@ -564,6 +575,15 @@ public static bool AbilityUsed(PlayerControl player, PlayerControl target = null var aurial = Role.GetRole(PlayerControl.LocalPlayer); Coroutines.Start(aurial.Sense(player)); } + else if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout) && target != null) + { + var lookout = Role.GetRole(PlayerControl.LocalPlayer); + if (lookout.Watching.ContainsKey(targetId)) + { + RoleEnum playerRole = Role.GetRole(PlayerById(player.PlayerId)).RoleType; + if (!lookout.Watching[targetId].Contains(playerRole)) lookout.Watching[targetId].Add(playerRole); + } + } return true; } @@ -670,7 +690,16 @@ public static void MurderPlayer(PlayerControl killer, PlayerControl target, bool { if (ShowRoundOneShield.DiedFirst == "") ShowRoundOneShield.DiedFirst = target.GetDefaultOutfit().PlayerName; - if (killer.Is(ModifierEnum.Shy)) + if (target.GetAppearance().SizeFactor == new Vector3(0.4f, 0.4f, 1f)) + { + target.transform.localPosition += new Vector3(0f, 0.1f, 0f); + } + else if (killer.GetAppearance().SizeFactor == new Vector3(0.4f, 0.4f, 1f)) + { + target.transform.localPosition -= new Vector3(0f, 0.1f, 0f); + } + + if (killer.Is(ModifierEnum.Shy) && killer.GetCustomOutfitType() == CustomPlayerOutfitType.Default) { var shy = Modifier.GetModifier(killer); shy.Opacity = 1f; @@ -684,6 +713,28 @@ public static void MurderPlayer(PlayerControl killer, PlayerControl target, bool jailor.Jailed = null; } + // I do both cause desync sometimes + if (PlayerControl.LocalPlayer.Is(RoleEnum.Deputy)) + { + var deputy = Role.GetRole(PlayerControl.LocalPlayer); + if (target == deputy.Camping) + { + deputy.Killer = killer; + Rpc(CustomRPC.Camp, PlayerControl.LocalPlayer.PlayerId, (byte)1, deputy.Killer.PlayerId); + deputy.Camping = null; + Coroutines.Start(FlashCoroutine(Color.red)); + } + } + foreach (var role in Role.GetRoles(RoleEnum.Deputy)) + { + var dep = (Deputy)role; + if (target == dep.Camping) + { + dep.Killer = killer; + dep.Camping = null; + } + } + if (PlayerControl.LocalPlayer == target) { try @@ -869,6 +920,12 @@ public static void MurderPlayer(PlayerControl killer, PlayerControl target, bool Murder.KilledPlayers.Add(deadBody); + if (PlayerControl.LocalPlayer.Is(RoleEnum.Scavenger) && killer != PlayerControl.LocalPlayer) + { + var scav = Role.GetRole(PlayerControl.LocalPlayer); + if (scav.Target == target) scav.Target = scav.GetClosestPlayer(); + } + if (MeetingHud.Instance) target.Exiled(); if (!killer.AmOwner) return; @@ -936,6 +993,50 @@ public static void MurderPlayer(PlayerControl killer, PlayerControl target, bool return; } + if (killer.Is(RoleEnum.Scavenger)) + { + var scav = Role.GetRole(killer); + if (target == scav.Target) + { + if (target.Is(ModifierEnum.Diseased)) + { + killer.SetKillTimer(CustomGameOptions.ScavengeCorrectKillCooldown * CustomGameOptions.DiseasedMultiplier); + } + else + { + killer.SetKillTimer(CustomGameOptions.ScavengeCorrectKillCooldown); + } + scav.Target = scav.GetClosestPlayer(); + scav.ScavengeEnd = scav.ScavengeEnd.AddSeconds(CustomGameOptions.ScavengeIncreaseDuration); + } + else + { + if (target.Is(ModifierEnum.Diseased) && killer.Is(ModifierEnum.Underdog)) + { + var lowerKC = (GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown - CustomGameOptions.UnderdogKillBonus) * CustomGameOptions.DiseasedMultiplier * CustomGameOptions.ScavengeIncorrectKillCooldown; + var normalKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown * CustomGameOptions.DiseasedMultiplier * CustomGameOptions.ScavengeIncorrectKillCooldown; + var upperKC = (GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown + CustomGameOptions.UnderdogKillBonus) * CustomGameOptions.DiseasedMultiplier * CustomGameOptions.ScavengeIncorrectKillCooldown; + killer.SetKillTimer(PerformKill.LastImp() ? lowerKC : (PerformKill.IncreasedKC() ? normalKC : upperKC)); + } + else if (target.Is(ModifierEnum.Diseased)) + { + killer.SetKillTimer(GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown * CustomGameOptions.DiseasedMultiplier * CustomGameOptions.ScavengeIncorrectKillCooldown); + } + else if (killer.Is(ModifierEnum.Underdog)) + { + var lowerKC = (GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown - CustomGameOptions.UnderdogKillBonus) * CustomGameOptions.ScavengeIncorrectKillCooldown; + var normalKC = GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown * CustomGameOptions.ScavengeIncorrectKillCooldown; + var upperKC = (GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown + CustomGameOptions.UnderdogKillBonus) * CustomGameOptions.ScavengeIncorrectKillCooldown; + killer.SetKillTimer(PerformKill.LastImp() ? lowerKC : (PerformKill.IncreasedKC() ? normalKC : upperKC)); + } + else killer.SetKillTimer(GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown * CustomGameOptions.ScavengeIncorrectKillCooldown); + scav.StopScavenge(); + scav.ScavengeEnd = scav.ScavengeEnd.AddSeconds(-3000f); + } + scav.RegenTask(); + return; + } + if (target.Is(ModifierEnum.Diseased) && killer.Is(ModifierEnum.Underdog)) { var lowerKC = (GameOptionsManager.Instance.currentNormalGameOptions.KillCooldown - CustomGameOptions.UnderdogKillBonus) * CustomGameOptions.DiseasedMultiplier; @@ -1253,6 +1354,29 @@ public static void ResetCustomTimers() tracker.UsesLeft = CustomGameOptions.MaxTracks; } } + if (PlayerControl.LocalPlayer.Is(RoleEnum.Lookout)) + { + var lo = Role.GetRole(PlayerControl.LocalPlayer); + lo.LastWatched = DateTime.UtcNow; + if (CustomGameOptions.LoResetOnNewRound) + { + lo.UsesLeft = CustomGameOptions.MaxWatches; + lo.Watching.Clear(); + } + else + { + List toRemove = new List(); + foreach (var (key, value) in lo.Watching) + { + value.Clear(); + if (PlayerById(key).Data.IsDead || PlayerById(key).Data.Disconnected) toRemove.Add(key); + } + foreach (var key in toRemove) + { + lo.Watching.Remove(key); + } + } + } if (PlayerControl.LocalPlayer.Is(RoleEnum.Transporter)) { var transporter = Role.GetRole(PlayerControl.LocalPlayer); @@ -1286,21 +1410,31 @@ public static void ResetCustomTimers() CrimeSceneExtensions.ClearCrimeScenes(detective.CrimeScenes); } } + foreach (var role in Role.GetRoles(RoleEnum.Imitator)) + { + var imitator = (Imitator)role; + imitator.trappedPlayers = null; + imitator.watchedPlayers = null; + imitator.confessingPlayer = null; + imitator.jailedPlayer = null; + } if (PlayerControl.LocalPlayer.Is(RoleEnum.Politician)) { var politician = Role.GetRole(PlayerControl.LocalPlayer); politician.LastCampaigned = DateTime.UtcNow; } - if (PlayerControl.LocalPlayer.Is(RoleEnum.Warden)) - { - var warden = Role.GetRole(PlayerControl.LocalPlayer); - warden.LastFortified = DateTime.UtcNow; - } foreach (var role in Role.GetRoles(RoleEnum.Warden)) { var warden = (Warden)role; warden.Fortified = null; } + foreach (var role in Role.GetRoles(RoleEnum.Deputy)) + { + var deputy = (Deputy)role; + deputy.Camping = null; + deputy.Killer = null; + deputy.CampedThisRound = false; + } if (PlayerControl.LocalPlayer.Is(RoleEnum.Jailor)) { var jailor = Role.GetRole(PlayerControl.LocalPlayer); diff --git a/source/Patches/Vent.cs b/source/Patches/Vent.cs index 04da40fdc..dc46b7196 100644 --- a/source/Patches/Vent.cs +++ b/source/Patches/Vent.cs @@ -78,7 +78,7 @@ public static void Postfix(Vent __instance, float num = float.MaxValue; PlayerControl playerControl = playerInfo.Object; - if (GameOptionsManager.Instance.CurrentGameOptions.GameMode == GameModes.Normal) couldUse = CanVent(playerControl, playerInfo) && !playerControl.MustCleanVent(__instance.Id) && (!playerInfo.IsDead || playerControl.inVent) && (playerControl.CanMove || playerControl.inVent); + if (GameOptionsManager.Instance.CurrentGameOptions.GameMode == GameModes.Normal) couldUse = CanVent(playerControl, playerInfo) && (!playerInfo.IsDead || playerControl.inVent) && (playerControl.CanMove || playerControl.inVent); else if (GameOptionsManager.Instance.CurrentGameOptions.GameMode == GameModes.HideNSeek && playerControl.Data.IsImpostor()) couldUse = false; else couldUse = canUse; diff --git a/source/Resources/Banner.png b/source/Resources/Banner.png deleted file mode 100644 index 7599db529..000000000 Binary files a/source/Resources/Banner.png and /dev/null differ diff --git a/source/Resources/Camp.png b/source/Resources/Camp.png new file mode 100644 index 000000000..6f9f5337d Binary files /dev/null and b/source/Resources/Camp.png differ diff --git a/source/Resources/Crewmate.png b/source/Resources/Crewmate.png deleted file mode 100644 index e3b1b54d8..000000000 Binary files a/source/Resources/Crewmate.png and /dev/null differ diff --git a/source/Resources/Impostor.png b/source/Resources/Impostor.png deleted file mode 100644 index 0051159e6..000000000 Binary files a/source/Resources/Impostor.png and /dev/null differ diff --git a/source/Resources/Modifiers.png b/source/Resources/Modifiers.png deleted file mode 100644 index 50b44d3e6..000000000 Binary files a/source/Resources/Modifiers.png and /dev/null differ diff --git a/source/Resources/Neutral.png b/source/Resources/Neutral.png deleted file mode 100644 index 2fc4595c2..000000000 Binary files a/source/Resources/Neutral.png and /dev/null differ diff --git a/source/Resources/NormalKill.png b/source/Resources/NormalKill.png deleted file mode 100644 index 71f96d6a9..000000000 Binary files a/source/Resources/NormalKill.png and /dev/null differ diff --git a/source/Resources/SettingsButton.png b/source/Resources/SettingsButton.png deleted file mode 100644 index 8543cb7f6..000000000 Binary files a/source/Resources/SettingsButton.png and /dev/null differ diff --git a/source/Resources/Shoot.png b/source/Resources/Shoot.png new file mode 100644 index 000000000..fb180c171 Binary files /dev/null and b/source/Resources/Shoot.png differ diff --git a/source/Resources/Vote1.png b/source/Resources/Vote1.png deleted file mode 100644 index 730a12307..000000000 Binary files a/source/Resources/Vote1.png and /dev/null differ diff --git a/source/Resources/Vote2.png b/source/Resources/Vote2.png deleted file mode 100644 index b77411228..000000000 Binary files a/source/Resources/Vote2.png and /dev/null differ diff --git a/source/Resources/Watch.png b/source/Resources/Watch.png new file mode 100644 index 000000000..7a9090898 Binary files /dev/null and b/source/Resources/Watch.png differ diff --git a/source/Resources/touhats.bundle b/source/Resources/touhats.bundle deleted file mode 100644 index 5a6dd9289..000000000 Binary files a/source/Resources/touhats.bundle and /dev/null differ diff --git a/source/Resources/touhats.catalog b/source/Resources/touhats.catalog deleted file mode 100644 index 47787f533..000000000 --- a/source/Resources/touhats.catalog +++ /dev/null @@ -1 +0,0 @@ -{"m_LocatorId":"AddressablesMainContentCatalog","m_BuildResultHash":"1813fa6d62e3339657d0b33b4dd4f1af","m_InstanceProviderData":{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider"},"m_Data":""},"m_SceneProviderData":{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.SceneProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.SceneProvider"},"m_Data":""},"m_ResourceProviderData":[{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider"},"m_Data":""},{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider"},"m_Data":""},{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider"},"m_Data":""},{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider"},"m_Data":""},{"m_Id":"UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider","m_ObjectType":{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider"},"m_Data":""}],"m_ProviderIds":["UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider","UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider","UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider",""],"m_InternalIds":["_hat.asset","{UnityEngine.AddressableAssets.Addressables.RuntimePath}/../../../BepInEx/plugins/touhats.bundle","5up hat.asset","A Knoife! hat.asset","AfroBush hat.asset","Akatsuki hat.asset","Amcam hat.asset","Ana.asset","Angel Is Kimi hat.asset","annamaja hat.asset","anniefuschia hat.asset","Anya hat.asset","aphex hat.asset","aplatypuss hat.asset","Apple.asset","asexual hat.asset","ash_1 hat flipped.asset","ash_1 hat.asset","ash_2 hat.asset","Assassin hat.asset","AstasApple hat.asset","axilla hat.asset","Bad Aura hat.asset","Bait hat .asset","Basedkm hat .asset","basetrade_1 hat.asset","basetrade_2 hat.asset","basetrade_3 hat.asset","Bearded Grizzly hat.asset","Bee hat.asset","ben hat.asset","Bergmeister hat.asset","besty hat.asset","bgcbigs hat .asset","Big Shot hat.asset","Bill Cipher hat.asset","BillingMode","Billy Butcher hat.asset","birb hat.asset","BirthdayBean1.asset","BirthdayBean2.asset","bisexual hat.asset","BlackCat hat.asset","blaustoise hat.asset","Blaziken hat .asset","blood_bourne_hat.asset","bloody hat.asset","Blossom hat.asset","Blue Dream hat.asset","Blush-stache hat.asset","Boar hat .asset","boba hat.asset","Bodybuilder hat .asset","Bonsai House.asset","Bonsai Twin House.asset","Bonsai.asset","Book Of Sus hat.asset","Bosa hat .asset","br00d hat.asset","Breakfast Boba hat .asset","breeh hat.asset","BrittanyP95 Treasure hat.asset","brittzey hat.asset","brizzyears hat.asset","Brock.asset","Bros 1.asset","Bros 2.asset","BTW hat.asset","Bubbles hat.asset","Bunnies hat.asset","Buttercup hat.asset","CabociTV hat.asset","CandyCane hat .asset","CaptainStoppy hat.asset","Caracupcake hat.asset","Caramilk hat.asset","carnage_hat.asset","Carriemello hat .asset","Casper hat.asset","CaspersGrovyle hat .asset","Cat hat.asset","Cat Helmet hat.asset","Cat Helmet With Apron hat.asset","CB hat.asset","Chai hat.asset","charizard hat.asset","cheesy halloween hat.asset","cheesy hat.asset","Chibiusa hat.asset","Chickenz hat .asset","Chicky Tenders hat.asset","Chicky Tenders Sauce hat.asset","Chilled 2.asset","chilled halloween hat.asset","Chilled Shirt.asset","chilledchaos hat.asset","Chocoberry hat .asset","ChocoPun hat .asset","Chrome hat.asset","clara hat.asset","Cluckers hat .asset","Cocoa hat.asset","CoriKasarak hat .asset","Cosmicara hat.asset","COTC hat .asset","Court.asset","Courtilly hat.asset","CowboyMav hat .asset","Crab hat.asset","Crabcake hat.asset","Cream Unicorn hat.asset","credits/IGDA_Long_HEX-01_whitetext","credits/logoImage","Creepy Doll hat .asset","crocodile hat.asset","Cros Style hat.asset","Crow hat.asset","Cruella hat .asset","crunchy hat.asset","ctulhu hat.asset","Cynda hat.asset","Cyreni's Pony hat.asset","Dabi hat.asset","dad hat.asset","Dangorpa hat.asset","dawko hat.asset","DawnsHotMama hat.asset","Death hat.asset","defaultIcon","Dell hat.asset","Demogorgan hat.asset","Detective hat.asset","DigDuck hat .asset","dino_egg_hat.asset","Disconnected hat.asset","dizzilulu hat.asset","DJSmiles hat.asset","DK hat.asset","DougDimadome hat .asset","Doused hat.asset","DrunkyPoo hat.asset","DSCGluttony hat.asset","Dumbdog hat.asset","Dumbdog hat1.asset","duncan hat.asset","Dunce hat.asset","dwarf hat.asset","dyto hat.asset","ellum hat.asset","Ellum hat1.asset","Ellum hat2.asset","Em.asset","EndGame/EndGame","Espeon hat.asset","Evee hat.asset","Eyeball hat.asset","Facehugger hat .asset","Fairy hat.asset","FairysBlueFox hat.asset","falcone hat.asset","falcone_1 hat.asset","FengPJ hat.asset","Fillet-O.asset","FindAGame","firegod hat.asset","Firemage hat.asset","Flareon hat.asset","Flower Fedora hat.asset","Fluffy Boi hat.asset","fonts & materials/Barlow-Black SDF Atlas","fonts & materials/Barlow-Black SDF Material","fonts & materials/Barlow-BoldItalic SDF Atlas","fonts & materials/Barlow-BoldItalic SDF Material","fonts & materials/Barlow-Light SDF - Tutorial Role Text","fonts & materials/Barlow-Light SDF Atlas","fonts & materials/Barlow-Light SDF Material","fonts & materials/Barlow-Medium SDF - Quick Chat Phrase Button - Phrase","fonts & materials/Barlow-Medium SDF - Quick Chat Phrase Button - Player Name","fonts & materials/Brook Atlas Material","fonts & materials/Brook Atlas Material Masked","fonts & materials/Brook Atlas Material Masked - QC Category Button Text","fonts & materials/Brook SDF - BlackOutline","fonts & materials/Brook SDF - BlueAndWhiteOutline","fonts & materials/Brook SDF - BlueAndWhiteOutlineMaske","fonts & materials/Brook SDF - ChatField","fonts & materials/Brook SDF - CyanAndWhiteOutline","fonts & materials/Brook SDF - Gray","fonts & materials/Brook SDF - GreenAndWhiteOutline","fonts & materials/Brook SDF - HasBeenKillled","fonts & materials/Brook SDF - Red - WhiteOutline","fonts & materials/Brook SDF - RedAndWhiteOutlineThin","fonts & materials/Brook SDF - RedBlackOutlineMasked","fonts & materials/Brook SDF - RedOutline","fonts & materials/Brook SDF - Tutorial Header","fonts & materials/Brook SDF - White","fonts & materials/Brook SDF - WhiteAndRedOutline","fonts & materials/Brook SDF - WhiteAndRedOutlineMasked","fonts & materials/Brook SDF - WhiteGlowMasked","fonts & materials/Brook SDF - WhiteOutline","fonts & materials/Brook SDF - WhiteOutlineMasked","fonts & materials/Brook SDF Atlas","fonts & materials/CONSOLA SDF Atlas","fonts & materials/CONSOLA SDF Material","fonts & materials/Consolas Black Outline","fonts & materials/digital-7 Black Outline","fonts & materials/digital-7 SDF - BlackOutlineMasked","fonts & materials/digital-7 SDF Atlas","fonts & materials/digital-7 SDF Material","fonts & materials/DIN_Pro_Bold_700 SDF Atlas","fonts & materials/DIN_Pro_Bold_700 SDF Material","fonts & materials/LiberationSans SDF - BlackOutline","fonts & materials/LiberationSans SDF - BlackOutlineMasked","fonts & materials/LiberationSans SDF - Chat Message Masked","fonts & materials/LiberationSans SDF - Masked","fonts & materials/LiberationSans SDF - MaskedSlightBold","fonts & materials/LiberationSans SDF - SlightBold","fonts & materials/LiberationSans SDF - Tutorial Text","fonts & materials/LiberationSans SDF - WhiteOutline","fonts & materials/LiberationSans SDF Atlas","fonts & materials/LiberationSans SDF Material","fonts & materials/LiberationSans SDF PlayerInGame","fonts & materials/LiberationSans SDF RadialMenu Material","fonts & materials/NotoSansJP-Regular Atlas","fonts & materials/NotoSansJP-Regular Atlas Material","fonts & materials/NotoSansKR-Regular Atlas","fonts & materials/NotoSansKR-Regular Atlas Material","fonts & materials/NotoSansSC-Regular Atlas","fonts & materials/NotoSansSC-Regular Atlas 1","fonts & materials/NotoSansSC-Regular Atlas 1_0","fonts & materials/NotoSansSC-Regular Atlas Material","fonts & materials/OCRAEXT SDF Atlas","fonts & materials/OCRAEXT SDF Material","fonts & materials/VCR Black Outline","fonts & materials/VCR SDF - BlackOutlineMasked","fonts & materials/VCR SDF Atlas","fonts & materials/VCR SDF Material","fox hat.asset","Freckled Phenom hat.asset","frenchtoast hat.asset","freyzplayz hat.asset","Friday Night Funkin hat .asset","Friday Night Funkin hat 2 .asset","Frog hat redesign (original by Ressnie).asset","frog hat.asset","Frog hat1.asset","G7erard hat .asset","Gaara hat.asset","Galaxybrain hat.asset","garbage hat.asset","gay hat.asset","Gay-ny Day hat.asset","Gengar hat.asset","Gfro hat .asset","GfrosLopunny hat .asset","gh00stie_f hat.asset","Ghost hat.asset","giacomo hat.asset","Giddawid hat.asset","Gigawolf hat.asset","GingerbreadHouse hat .asset","GingerbreadMan hat .asset","GingerCat hat.asset","Glaceon hat.asset","Gligar hat.asset","glitch hat.asset","goku_hat.asset","Golden Boi hat.asset","Golden Wreath hat.asset","goldfish hat.asset","Gomez hat .asset","Good Aura hat.asset","GooglyEyes hat.asset","GooseTroop hat .asset","gorillaphent_f hat.asset","GreekGod.asset","groot hat.asset","Grumpy Cat hat.asset","Guardian Angel hat.asset","hafu hat.asset","Hafu Penguin hat.asset","harley_quinn_hat.asset","harrie hat.asset","hats_textures/hats0000","hats_textures/hats0001","hats_textures/hats0002","hats_textures/hats0003","hats_textures/hats0004","hats_textures/hats0005","hats_textures/hats0006","hats_textures/hats0007","hats_textures/hats0008","hats_textures/hats0009","hats_textures/hats0010","hats_textures/hats0011","hats_textures/hats0012","hats_textures/hats0013","hats_textures/hats0014","hats_textures/hats0015","hats_textures/hats0016","hats_textures/hats0017","hats_textures/hats0018","hats_textures/hats0019","hats_textures/hats0020","hats_textures/hats0021","hats_textures/hats0022","hats_textures/hats0023","hats_textures/hats0024","hats_textures/hats0025","hats_textures/hats0026","hats_textures/hats0027","hats_textures/hats0028","hats_textures/hats0029","hats_textures/hats0030","hats_textures/hats0031","hats_textures/hats0032","hats_textures/hats0033","hats_textures/hats0034","hats_textures/hats0035","hats_textures/hats0036","hats_textures/hats0037","hats_textures/hats0038","hats_textures/hats0039","hats_textures/hats0040","hats_textures/hats0041","hats_textures/hats0042","hats_textures/hats0043","hats_textures/hats0044","hats_textures/hats0045","hats_textures/hats0046","hats_textures/hats0047","hats_textures/hats0048","hats_textures/hats0049","hats_textures/hats0050","hats_textures/hats0051","hats_textures/hats0052","hats_textures/hats0053","hats_textures/hats0054","hats_textures/hats0055","hats_textures/hats0056","hats_textures/hats0057","hats_textures/hats0058","hats_textures/hats0059","hats_textures/hats0060","hats_textures/hats0061","hats_textures/hats0062","hats_textures/hats0063","hats_textures/hats0064","hats_textures/hats0065","hats_textures/hats0066","hats_textures/hats0067","hats_textures/hats0068","hats_textures/hats0069","hats_textures/hats0070","hats_textures/hats0071","hats_textures/hats0072","hats_textures/hats0073","hats_textures/hats0074","hats_textures/hats0075","hats_textures/hats0076","hats_textures/hats0077","hats_textures/hats0078","hats_textures/hats0079","hats_textures/hats0080","hats_textures/hats0081","hats_textures/hats0082","hats_textures/hats0083","hats_textures/hats0084","hats_textures/hats0085","hats_textures/hats0086","hats_textures/hats0087","hats_textures/hats0088","hats_textures/hats0089","hats_textures/hats0090","hats_textures/hats0091","hats_textures/hats0092","hats_textures/hats0093","hats_textures/hats0094","hats_textures/hats0095","hats_textures/hats0096","hats_textures/hats0097","hats_textures/hats0098","hats_textures/hats0099","hats_textures/hats0100","hats_textures/hats0101","hats_textures/hats0102","hats_textures/hats0103","hats_textures/hats0104","hats_textures/hats0105","hats_textures/hats0106","hats_textures/hats0107","hats_textures/hats0108","hats_textures/hats0109","hats_textures/hats0110","hats_textures/hats0111","hats_textures/hats0112","hats_textures/hats0113","hats_textures/hats0114","hats_textures/hats0115","hats_textures/hats0116","hats_textures/hats0117","hats_textures/hats0118","hats_textures/hats0119","hats_textures/hats0120","hats_textures/hats0121","hats_textures/hats0122","hats_textures/hats0123","hats_textures/hats0124","hats_textures/hats0125","hats_textures/hats0126","hats_textures/hats0127","hats_textures/hats0128","hats_textures/hats0129","hats_textures/hats0130","hats_textures/hats0131","hats_textures/hats0132","hats_textures/hats0133","hats_textures/hats0134","hats_textures/hats0135","hats_textures/hats0136","hats_textures/hats0137","hats_textures/hats0138","hats_textures/hats0139","hats_textures/hats0140","hats_textures/hats0141","hats_textures/hats0142","hats_textures/hats0143","hats_textures/hats0144","hats_textures/hats0145","hats_textures/hats0146","hats_textures/hats0147","hats_textures/hats0148","hats_textures/hats0149","hats_textures/hats0150","hats_textures/hats0151","hats_textures/hats0152","hats_textures/hats0153","hats_textures/hats0154","hats_textures/hats0155","hats_textures/hats0156","hats_textures/hats0157","hats_textures/hats0158","hats_textures/hats0159","hats_textures/hats0160","hats_textures/hats0161","hats_textures/hats0162","hats_textures/hats0163","hats_textures/hats0164","hats_textures/hats0165","hats_textures/hats0166","hats_textures/hats0167","hats_textures/hats0168","hats_textures/hats0169","hats_textures/hats0170","hats_textures/hats0171","hats_textures/hats0172","hats_textures/hats0173","hats_textures/hats0174","hats_textures/hats0175","hats_textures/hats0176","hats_textures/hats0177","hats_textures/hats0178","hats_textures/hats0179","hats_textures/hats0180","hats_textures/hats0181","hats_textures/hats0182","hats_textures/hats0183","hats_textures/hats0184","hats_textures/hats0185","hats_textures/hats0186","hats_textures/hats0187","hats_textures/hats0188","hats_textures/hats0189","hats_textures/hats0190","hats_textures/hats0191","hats_textures/hats0192","hats_textures/hats0193","hats_textures/hats0194","hats_textures/hats0195","hats_textures/hats0196","hats_textures/hats0197","hats_textures/hats0198","hats_textures/hats0199","hats_textures/hats0200","hats_textures/hats0201","hats_textures/hats0202","hats_textures/hats0203","hats_textures/hats0204","hats_textures/hats0205","hats_textures/hats0206","hats_textures/hats0207","hats_textures/hats0208","hats_textures/hats0209","hats_textures/hats0210","hats_textures/hats0211","hats_textures/hats0212","hats_textures/hats0213","hats_textures/hats0214","hats_textures/hats0215","hats_textures/hats0216","hats_textures/hats0217","hats_textures/hats0218","hats_textures/hats0219","hats_textures/hats0220","hats_textures/hats0221","hats_textures/hats0222","hats_textures/hats0223","hats_textures/hats0224","hats_textures/hats0225","hats_textures/hats0226","hats_textures/hats0227","hats_textures/hats0228","hats_textures/hats0229","hats_textures/hats0230","hats_textures/hats0231","hats_textures/hats0232","hats_textures/hats0233","hats_textures/hats0234","hats_textures/hats0235","hats_textures/hats0236","hats_textures/hats0237","hats_textures/hats0238","hats_textures/hats0239","hats_textures/hats0240","hats_textures/hats0241","hats_textures/hats0242","hats_textures/hats0243","hats_textures/hats0244","hats_textures/hats0245","hats_textures/hats0246","hats_textures/hats0247","hats_textures/hats0248","hats_textures/hats0249","hats_textures/hats0250","hats_textures/hats0251","hats_textures/hats0252","hats_textures/hats0253","hats_textures/hats0254","hats_textures/hats0255","hats_textures/hats0256","hats_textures/hats0257","hats_textures/hats0258","hats_textures/hats0259","hats_textures/hats0260","hats_textures/hats0261","hats_textures/hats0262","hats_textures/hats0263","hats_textures/hats0264","hats_textures/hats0265","hats_textures/hats0266","hats_textures/hats0267","hats_textures/hats0268","hats_textures/hats0269","hats_textures/hats0270","hats_textures/hats0271","hats_textures/hats0272","hats_textures/hats0273","hats_textures/hats0274","hats_textures/hats0275","hats_textures/hats0276","hats_textures/hats0277","hats_textures/hats0278","hats_textures/hats0279","hats_textures/hats0280","hats_textures/hats0281","hats_textures/hats0282","hats_textures/hats0283","hats_textures/hats0284","hats_textures/hats0285","hats_textures/hats0286","hats_textures/hats0287","hats_textures/hats0288","hats_textures/hats0289","hats_textures/hats0291","hats_textures/hats0292","hats_textures/hats0293","hats_textures/hats0294","hats_textures/hats0296","hats_textures/hats0297","hats_textures/hats0298","hats_textures/hats0299","hats_textures/hats0300","hats_textures/hats0301","hats_textures/hats0302","hats_textures/hats0303","hats_textures/hats0304","hats_textures/hats0305","hats_textures/hats0306","hats_textures/hats0307","hats_textures/hats0308","hats_textures/hats0309","hats_textures/hats0310","hats_textures/hats0311","hats_textures/hats0312","hats_textures/hats0313","hats_textures/hats0314","hats_textures/hats0315","hats_textures/hats0316","hats_textures/hats0317","hats_textures/hats0318","hats_textures/hats0319","hats_textures/hats0320","hats_textures/hats0321","hats_textures/hats0322","hats_textures/hats0323","hats_textures/hats0324","hats_textures/hats0325","hats_textures/hats0326","hats_textures/hats0327","hats_textures/hats0328","hats_textures/hats0329","hats_textures/hats0330","hats_textures/hats0331","hats_textures/hats0332","hats_textures/hats0333","hats_textures/hats0334","hats_textures/hats0335","hats_textures/hats0336","hats_textures/hats0337","hats_textures/hats0338","hats_textures/hats0339","hats_textures/hats0340","hats_textures/hats0341","hats_textures/hats0342","hats_textures/hats0343","hats_textures/hats0344","hats_textures/hats0345","hats_textures/hats0346","hats_textures/hats0347","hats_textures/hats0348","hats_textures/hats0349","hats_textures/hats0351","hats_textures/hats0352","hats_textures/hats0353","hats_textures/hats0354","hats_textures/hats0355","hats_textures/hats0356","hats_textures/hats0357","hats_textures/hats0359","hats_textures/hats0360","hats_textures/hats0362","hats_textures/hats0363","hats_textures/hats0364","hats_textures/hats0365","hats_textures/hats0366","hats_textures/hats0367","hats_textures/hats0368","hats_textures/hats0369","hats_textures/hats0370","hats_textures/hats0371","hats_textures/hats0372","hats_textures/hats0373","hats_textures/hats0374","hats_textures/hats0375","hats_textures/hats0376","hats_textures/hats0377","hats_textures/hats0378","hats_textures/hats0379","hats_textures/hats0380","hats_textures/hats0381","hats_textures/hats0382","hats_textures/hats0383","hats_textures/hats0384","hats_textures/hats0385","hats_textures/hats0386","hats_textures/hats0387","hats_textures/hats0388","hats_textures/hats0389","hats_textures/hats0390","hats_textures/hats0391","hats_textures/hats0392","hats_textures/hats0393","hats_textures/hats0394","hats_textures/hats0395","hats_textures/hats0396","hats_textures/hats0397","hats_textures/hats0398","hats_textures/hats0399","hats_textures/hats0400","hats_textures/hats0401","hats_textures/hats0402","hats_textures/hats0403","hats_textures/hats0404","hats_textures/hats0405","hats_textures/hats0406","hats_textures/hats0407","hats_textures/hats0408","hats_textures/hats0409","hats_textures/hats0410","hats_textures/hats0411","hats_textures/hats0412","hats_textures/hats0413","hats_textures/hats0414","hats_textures/hats0415","hats_textures/hats0416","hats_textures/hats0417","hats_textures/hats0418","hats_textures/hats0419","hats_textures/hats0420","hats_textures/hats0421","hats_textures/hats0422","hats_textures/hats0423","hats_textures/hats0424","hats_textures/hats0425","hats_textures/hats0426","hats_textures/hats0427","hats_textures/hats0428","hats_textures/hats0429","hats_textures/hats0430","hats_textures/hats0431","hats_textures/hats0432","hats_textures/hats0433","hats_textures/hats0434","hats_textures/hats0435","hats_textures/hats0436","hats_textures/hats0437","hats_textures/hats0438","hats_textures/hats0439","hats_textures/hats0440","hats_textures/hats0441","hats_textures/hats0442","hats_textures/hats0443","hats_textures/hats0444","hats_textures/hats0445","hats_textures/hats0446","hats_textures/hats0447","hats_textures/hats0448","hats_textures/hats0449","hats_textures/hats0450","hats_textures/hats0451","hats_textures/hats0452","hats_textures/hats0453","hats_textures/hats0454","hats_textures/hats0455","hats_textures/hats0456","hats_textures/hats0457","hats_textures/hats0458","hats_textures/hats0459","hats_textures/hats0460","hats_textures/hats0461","hats_textures/hats0462","hats_textures/hats0463","hats_textures/hats0464","hats_textures/hats0465","hats_textures/hats0466","hats_textures/hats0467","hats_textures/hats0468","hats_textures/hats0469","hats_textures/hats0470","hats_textures/hats0471","hats_textures/hats0472","hats_textures/hats0473","hats_textures/hats0474","hats_textures/hats0475","hats_textures/hats0476","hats_textures/hats0477","hats_textures/hats0478","hats_textures/hats0479","hats_textures/hats0480","hats_textures/hats0481","hats_textures/hats0482","hats_textures/hats0483","hats_textures/hats0484","hats_textures/hats0485","hats_textures/hats0486","hats_textures/hats0487","hats_textures/hats0488","hats_textures/hats0489","hats_textures/hats0490","hats_textures/hats0491","hats_textures/hats0492","hats_textures/hats0493","hats_textures/hats0494","hats_textures/hats0495","hats_textures/hats0496","hats_textures/metadata","hats_textures/metadata_gd","hats_textures/misc0000","hats_textures/misc0002","hats_textures/misc0003","hats_textures/misc0004","hats_textures/misc0007","hats_textures/misc0008","hats_textures/misc0009","hats_textures/misc0010","hats_textures/misc0011","hats_textures/misc0015","hats_textures/misc0020","hats_textures/misc0021","hats_textures/misc0022","hats_textures/myhats0016","hats_textures/standard0001","hats_textures/standard0002","hats_textures/standard0003","hats_textures/standard0004","hats_textures/standard0006","hats_textures/standard0009","hats_textures/standard0011","hats_textures/standard0012","hats_textures/standard0014","hats_textures/standard0015","hats_textures/standard0017","hats_textures/standard0018","hats_textures/standard0019","hats_textures/standard0020","hats_textures/standard0022","hats_textures/standard0024","hats_textures/standard0028","hats_textures/standard0029","hats_textures/standard0030","hats_textures/standard0032","hats_textures/standard0034","hats_textures/standard0035","hats_textures/standard0036","hats_textures/standard0038","hats_textures/standard0039","hats_textures/standard0040","hats_textures/standard0041","hats_textures/standard0042","hats_textures/standard0043","hats_textures/standard0044","hats_textures/standard0045","hats_textures/standard0046","hats_textures/standard0047","hats_textures/standard0048","hats_textures/standard0049","hats_textures/standard0050","hats_textures/standard0051","hats_textures/standard0052","hats_textures/standard0053","hats_textures/stream0000","hats_textures/stream0001","hats_textures/stream0002","hats_textures/stream0003","hats_textures/stream0004","hats_textures/stream0005","hats_textures/stream0006","hats_textures/stream0007","hats_textures/stream0008","hats_textures/stream0009","hats_textures/stream0010","hats_textures/stream0011","hats_textures/stream0012","hats_textures/stream0013","hats_textures/stream0014","hats_textures/stream0015","hats_textures/stream0016","hats_textures/stream0017","hats_textures/stream0018","hats_textures/stream0019","hats_textures/stream0020","hats_textures/stream0021","hats_textures/stream0022","hats_textures/stream0023","hats_textures/stream0024","hats_textures/stream0025","hats_textures/stream0026","hats_textures/stream0027","hats0000.asset","hats0001.asset","hats0002.asset","hats0003.asset","hats0004.asset","hats0005.asset","hats0006.asset","hats0007.asset","hats0008.asset","hats0009.asset","hats0010.asset","hats0011.asset","hats0012.asset","hats0013.asset","hats0014.asset","hats0015.asset","hats0016.asset","hats0017.asset","hats0018.asset","hats0019.asset","hats0020.asset","hats0021.asset","hats0022.asset","hats0023.asset","hats0024.asset","hats0025.asset","hats0026.asset","hats0027.asset","hats0028.asset","hats0029.asset","hats0030.asset","hats0031.asset","hats0032.asset","hats0033.asset","hats0034.asset","hats0035.asset","hats0036.asset","hats0037.asset","hats0038.asset","hats0039.asset","hats0040.asset","hats0041.asset","hats0042.asset","hats0043.asset","hats0044.asset","hats0045.asset","hats0046.asset","hats0047.asset","hats0048.asset","hats0049.asset","hats0050.asset","hats0051.asset","hats0052.asset","hats0053.asset","hats0054.asset","hats0055.asset","hats0056.asset","hats0057.asset","hats0058.asset","hats0059.asset","hats0060.asset","hats0061.asset","hats0062.asset","hats0063.asset","hats0064.asset","hats0065.asset","hats0066.asset","hats0067.asset","hats0068.asset","hats0069.asset","hats0070.asset","hats0071.asset","hats0072.asset","hats0073.asset","hats0074.asset","hats0075.asset","hats0076.asset","hats0077.asset","hats0078.asset","hats0079.asset","hats0080.asset","hats0081.asset","hats0082.asset","hats0083.asset","hats0084.asset","hats0085.asset","hats0086.asset","hats0087.asset","hats0088.asset","hats0089.asset","hats0090.asset","hats0091.asset","hats0092.asset","hats0093.asset","hats0094.asset","hats0095.asset","hats0096.asset","hats0097.asset","hats0098.asset","hats0099.asset","hats0100.asset","hats0101.asset","hats0102.asset","hats0103.asset","hats0104.asset","hats0105.asset","hats0106.asset","hats0107.asset","hats0108.asset","hats0109.asset","hats0110.asset","hats0111.asset","hats0112.asset","hats0113.asset","hats0114.asset","hats0115.asset","hats0116.asset","hats0117.asset","hats0118.asset","hats0119.asset","hats0120.asset","hats0121.asset","hats0122.asset","hats0123.asset","hats0124.asset","hats0125.asset","hats0126.asset","hats0127.asset","hats0128.asset","hats0129.asset","hats0130.asset","hats0131.asset","hats0132.asset","hats0133.asset","hats0134.asset","hats0135.asset","hats0136.asset","hats0137.asset","hats0138.asset","hats0139.asset","hats0140.asset","hats0141.asset","hats0142.asset","hats0143.asset","hats0144.asset","hats0145.asset","hats0146.asset","hats0147.asset","hats0148.asset","hats0149.asset","hats0150.asset","hats0151.asset","hats0152.asset","hats0153.asset","hats0154.asset","hats0155.asset","hats0156.asset","hats0157.asset","hats0158.asset","hats0159.asset","hats0160.asset","hats0161.asset","hats0162.asset","hats0163.asset","hats0164.asset","hats0165.asset","hats0166.asset","hats0167.asset","hats0168.asset","hats0169.asset","hats0170.asset","hats0171.asset","hats0172.asset","hats0173.asset","hats0174.asset","hats0175.asset","hats0176.asset","hats0177.asset","hats0178.asset","hats0179.asset","hats0180.asset","hats0181.asset","hats0182.asset","hats0183.asset","hats0184.asset","hats0185.asset","hats0186.asset","hats0187.asset","hats0188.asset","hats0189.asset","hats0190.asset","hats0191.asset","hats0192.asset","hats0193.asset","hats0194.asset","hats0195.asset","hats0196.asset","hats0197.asset","hats0198.asset","hats0199.asset","hats0200.asset","hats0201.asset","hats0202.asset","hats0203.asset","hats0204.asset","hats0205.asset","hats0206.asset","hats0207.asset","hats0208.asset","hats0209.asset","hats0210.asset","hats0211.asset","hats0212.asset","hats0213.asset","hats0214.asset","hats0215.asset","hats0216.asset","hats0217.asset","hats0218.asset","hats0219.asset","hats0220.asset","hats0221.asset","hats0222.asset","hats0223.asset","hats0224.asset","hats0225.asset","hats0226.asset","hats0227.asset","hats0228.asset","hats0229.asset","hats0230.asset","hats0231.asset","hats0232.asset","hats0233.asset","hats0234.asset","hats0235.asset","hats0236.asset","hats0237.asset","hats0238.asset","hats0239.asset","hats0240.asset","hats0241.asset","hats0242.asset","hats0243.asset","hats0244.asset","hats0245.asset","hats0246.asset","hats0247.asset","hats0248.asset","hats0249.asset","hats0250.asset","hats0251.asset","hats0252.asset","hats0253.asset","hats0254.asset","hats0255.asset","hats0256.asset","hats0257.asset","hats0258.asset","hats0259.asset","hats0260.asset","hats0261.asset","hats0262.asset","hats0263.asset","hats0264.asset","hats0265.asset","hats0266.asset","hats0267.asset","hats0268.asset","hats0269.asset","hats0270.asset","hats0271.asset","hats0272.asset","hats0273.asset","hats0274.asset","hats0275.asset","hats0276.asset","hats0277.asset","hats0278.asset","hats0279.asset","hats0280.asset","hats0281.asset","hats0282.asset","hats0283.asset","hats0284.asset","hats0285.asset","hats0286.asset","hats0287.asset","hats0288.asset","hats0289.asset","hats0291.asset","hats0292.asset","hats0293.asset","hats0294.asset","hats0296.asset","hats0297.asset","hats0298.asset","hats0299.asset","hats0300.asset","hats0301.asset","hats0302.asset","hats0303.asset","hats0304.asset","hats0305.asset","hats0306.asset","hats0307.asset","hats0308.asset","hats0309.asset","hats0310.asset","hats0311.asset","hats0312.asset","hats0313.asset","hats0314.asset","hats0315.asset","hats0316.asset","hats0317.asset","hats0318.asset","hats0319.asset","hats0320.asset","hats0321.asset","hats0322.asset","hats0323.asset","hats0324.asset","hats0325.asset","hats0326.asset","hats0327.asset","hats0328.asset","hats0329.asset","hats0330.asset","hats0331.asset","hats0332.asset","hats0333.asset","hats0334.asset","hats0335.asset","hats0336.asset","hats0337.asset","hats0338.asset","hats0339.asset","hats0340.asset","hats0341.asset","hats0342.asset","hats0343.asset","hats0344.asset","hats0345.asset","hats0346.asset","hats0347.asset","hats0348.asset","hats0349.asset","hats0351.asset","hats0352.asset","hats0353.asset","hats0354.asset","hats0355.asset","hats0356.asset","hats0357.asset","hats0359.asset","hats0360.asset","hats0362.asset","hats0363.asset","hats0364.asset","hats0365.asset","hats0366.asset","hats0367.asset","hats0368.asset","hats0369.asset","hats0370.asset","hats0371.asset","hats0372.asset","hats0373.asset","hats0374.asset","hats0375.asset","hats0376.asset","hats0377.asset","hats0378.asset","hats0379.asset","hats0380.asset","hats0381.asset","hats0382.asset","hats0383.asset","hats0384.asset","hats0385.asset","hats0386.asset","hats0387.asset","hats0388.asset","hats0389.asset","hats0390.asset","hats0391.asset","hats0392.asset","hats0393.asset","hats0394.asset","hats0395.asset","hats0396.asset","hats0397.asset","hats0398.asset","hats0399.asset","hats0400.asset","hats0401.asset","hats0402.asset","hats0403.asset","hats0404.asset","hats0405.asset","hats0406.asset","hats0407.asset","hats0408.asset","hats0409.asset","hats0410.asset","hats0411.asset","hats0412.asset","hats0413.asset","hats0414.asset","hats0415.asset","hats0416.asset","hats0417.asset","hats0418.asset","hats0419.asset","hats0420.asset","hats0421.asset","hats0422.asset","hats0423.asset","hats0424.asset","hats0425.asset","hats0426.asset","hats0427.asset","hats0428.asset","hats0429.asset","hats0430.asset","hats0431.asset","hats0432.asset","hats0433.asset","hats0434.asset","hats0435.asset","hats0436.asset","hats0437.asset","hats0438.asset","hats0439.asset","hats0440.asset","hats0441.asset","hats0442.asset","hats0443.asset","hats0444.asset","hats0445.asset","hats0446.asset","hats0447.asset","hats0448.asset","hats0449.asset","hats0450.asset","hats0451.asset","hats0452.asset","hats0453.asset","hats0454.asset","hats0455.asset","hats0456.asset","hats0457.asset","hats0458.asset","hats0459.asset","hats0460.asset","hats0461.asset","hats0462.asset","hats0463.asset","hats0464.asset","hats0465.asset","hats0466.asset","hats0467.asset","hats0468.asset","hats0469.asset","hats0470.asset","hats0471.asset","hats0472.asset","hats0473.asset","hats0474.asset","hats0475.asset","hats0476.asset","hats0477.asset","hats0478.asset","hats0479.asset","hats0480.asset","hats0481.asset","hats0482.asset","hats0483.asset","hats0484.asset","hats0485.asset","hats0486.asset","hats0487.asset","hats0488.asset","hats0489.asset","hats0490.asset","hats0491.asset","hats0492.asset","hats0493.asset","hats0494.asset","hats0495.asset","hats0496.asset","Heckinmoo hat .asset","HecksAmphy hat.asset","HecksBunBun hat .asset","HeyMcGurk hat.asset","Hinata hat.asset","Hold My Beer hat.asset","HoliGhost hat.asset","Horkit.asset","Horned Angel hat.asset","Hot Saucy hat.asset","Hovpool hat.asset","HowToPlay","Huntress hat.asset","Huntress hat1.asset","IchigoHollow hat.asset","imaginationoverflow/UniversalDeepLink","ImPAWstor hat.asset","Impostor Spark hat.asset","ImpTongue hat.asset","Inmouth hat .asset","Iron Man hat.asset","James hat.asset","jamobo hat.asset","janet hat.asset","Japanda hat.asset","JapandasSkitty hat .asset","JarrelBun hat .asset","jb hat.asset","jeremy hat.asset","Jeremy.asset","Jerm hat.asset","jerm hat1.asset","Jerry hat .asset","Jessica hat .asset","Jessie hat.asset","Jessie Monkey hat.asset","Jigglypuff hat .asset","Jolteon hat.asset","jose hat.asset","Jshooa hat .asset","Juicebox hat.asset","jukebox hat.asset","junkyard hat.asset","justjames hat.asset","Kangaroo hat.asset","Kara hat 2 .asset","kara hat.asset","Kara.asset","Kartodk Evil hat.asset","Kartodk Sus hat.asset","Kate hat.asset","kay hat.asset","KayWoo.asset","kDoolz hat.asset","Kn0vis hat.asset","Koala hat.asset","Koji hat.asset","Koji hat1.asset","Koji Maid hat.asset","KojiSkunk hat .asset","kris hat.asset","Ksmac3 hat.asset","Kurtgi hat .asset","L hat.asset","L hat1.asset","Lanaboo hat.asset","Larry Shirt.asset","Lavish hat.asset","lawhoo hat.asset","LayZFox hat.asset","Leafeon hat.asset","leah hat.asset","Lechonk hat .asset","lewis hat.asset","lexiemarie hat.asset","Lie-canthrope hat.asset","Lil Swift hat.asset","Lil Too Much hat.asset","LineBreaking Following Characters","LineBreaking Leading Characters","Little Angel hat.asset","Little Antoinette hat.asset","Little Chef hat.asset","Little Death hat.asset","Little Demon hat.asset","Little Evil Queen hat.asset","Little Gnome hat.asset","Little Golem hat.asset","Little Jason hat.asset","Little Jester hat.asset","Little Krampus hat.asset","Little Mage hat.asset","Little Pirate hat.asset","Little Red Riding Hood hat.asset","Little Santa hat.asset","Little Sheriff hat.asset","Liv Chipz Periodt hat.asset","Loweye hat .asset","Lucas hat .asset","luffy_hat.asset","Lunch hat.asset","Mac Vibes hat.asset","Magikarp hat .asset","Maid hat.asset","MainMenu","Maks hat .asset","mama hat.asset","Manatee hat .asset","Manbag hat.asset","mantis_shrimpling_hat.asset","Marionette hat.asset","MartiMoo hat 2 .asset","MartiMoo hat.asset","MarylinMonroe hat .asset","MatchMaking","materials/Collider","materials/EdgePicker","materials/EdgePickerHDRP","materials/FacePicker","materials/FacePickerHDRP","materials/InvisibleFace","materials/NoDraw","materials/ProBuilderDefault","materials/StandardVertexColorHDRP","materials/StandardVertexColorLWRP","materials/Trigger","materials/UnlitVertexColor","materials/VertexPicker","materials/VertexPickerHDRP","McMayhem hat.asset","McRib hat.asset","Menacing hat.asset","Meowth hat.asset","Mercy.asset","Michael Myers hat .asset","MikeDotTV hat .asset","Milky Joe hat.asset","mindy hat.asset","MinecraftSteve hat.asset","misc0000.asset","misc0002.asset","misc0003.asset","misc0004.asset","misc0007.asset","misc0008.asset","misc0009.asset","misc0010.asset","misc0011.asset","misc0015.asset","misc0020.asset","misc0021.asset","misc0022.asset","MissJersey hat.asset","MMMM hat.asset","MMOnline","Mods hat.asset","Monkeh hat.asset","Monokuma.asset","monster hat.asset","Moth hat.asset","Mr Griffin.asset","Mr T hat .asset","MrBeast hat.asset","Mudkip hat.asset","Mushroom hat.asset","MxJosie hat .asset","myhats0016.asset","Necro hat.asset","NeonBuns hat.asset","nerdout hat.asset","new/Shinbi/Sticol","new/Sweetrolled/Ana","new/Sweetrolled/BirthdayBean1","new/Sweetrolled/BirthdayBean2","new/Sweetrolled/Fillet-O","new/Sweetrolled/GreekGod","new/Sweetrolled/KayWoo","new/Sweetrolled/Mercy","new/Sweetrolled/Yellow Skittles","Nidoking hat .asset","nilesy hat.asset","Ninmuffin hat.asset","No U hat.asset","Nogla hat.asset","NohsAraquanio hat .asset","NoiBat hat.asset","nonbinary hat.asset","Novasauros hat.asset","Nurse hat.asset","Oilers hat .asset","Okey hat.asset","Olive Kruzadar hat.asset","OnlineGame","OogieBoogie hat .asset","Ophidian hat.asset","Oreos hat.asset","Overgrown hat.asset","owl hat.asset","ozza hat.asset","Ozza.asset","pancakes hat.asset","Panda Pride hat.asset","pansexual hat.asset","Pap hat.asset","Paradox Monkey hat .asset","Pasta.asset","pastaroni hat.asset","Patrick Jenner hat.asset","Paule_front hat.asset","Paws hat.asset","Peace Never! hat.asset","ped hat.asset","Pennywise hat.asset","pepe_hat.asset","Peppercorny hat.asset","Periodt hat.asset","Peter Griffin hat.asset","Petty Perkins hat.asset","phoebe hat.asset","pig hat.asset","Pikabubs hat.asset","Pilborg It Me hat.asset","Pink Body hat.asset","Pink hat.asset","pinkee hat.asset","Pizza hat.asset","Pjonk.asset","PK Fire hat.asset","platty halloween hat.asset","Platy Mayo hat.asset","Platy Shirt.asset","Platy With The Mayo.asset","PlayEveryWare/EarlyInitialization","PlayEveryWare/SplashIntro","Poseidon's Crown hat.asset","PossibleBear hat .asset","Potterhead hat.asset","Present hat .asset","Press X hat.asset","Princess Zeach hat.asset","Pumpkin hat.asset","Purple Shark hat.asset","Qthulhu hat.asset","Queen Maeve hat.asset","queenie_hat.asset","QuirtysPolywhirl hat .asset","Quonk Gun hat.asset","racoon hat.asset","raflp hat.asset","Rainy Day hat.asset","Random Ronnie hat.asset","Raptor hat.asset","Raven hat .asset","Ravenclaw hat.asset","ravs hat.asset","Rawbuhbuh hat.asset","rayc hat.asset","razzbowski hat.asset","Red Body hat.asset","Red Kruzadar hat.asset","Red Panda hat.asset","Redneck hat.asset","reenyy hat.asset","Reindeer hat .asset","revmeerkat_front hat.asset","rhythian hat.asset","Ribbonman hat.asset","RicKafe hat.asset","Rico's Navy hat.asset","Rikiisnotaferet hat.asset","RikisFerret hat .asset","rocky hat.asset","Roman hat.asset","rooster hat.asset","Sableye hat.asset","Sailor Steve hat.asset","SailorMoon hat .asset","Salamence hat .asset","Salmon hat .asset","sans hat.asset","Santa hat .asset","Sav Beanie hat.asset","Scarf Gang hat.asset","SelectableHyperlink","Sendit hat.asset","Shaman hat.asset","Sheriff hat.asset","shiki hat.asset","Shiny Psyduck hat.asset","Shmuelzy hat .asset","Shmuelzys Piss Bucket hat.asset","shrek hat.asset","shrimp_hat.asset","shubble hat.asset","Side Arms hat 2 .asset","Side Arms hat 2 alt .asset","Side Arms hat.asset","sims_hat.asset","sips hat.asset","skater_girl_hat.asset","SlackATK hat.asset","Slayed hat.asset","Slayed.asset","Slippy hat.asset","slushie hat.asset","Smajor hat.asset","Snapper hat.asset","Snorlax hat.asset","Snow Leopard hat.asset","Snowman hat .asset","So Devilish hat.asset","Sora hat.asset","Soyciety hat.asset","Sparkles! hat.asset","Specs n' Antlers hat.asset","Speedy.asset","SpiceRat hat.asset","SpicesPawmont hat .asset","spider hat.asset","Spiderhov hat.asset","SpriteAnimController","SpriteAnimPlaceholder","Squid hat.asset","squirrel hat.asset","standard0001.asset","standard0002.asset","standard0003.asset","standard0004.asset","standard0006.asset","standard0009.asset","standard0011.asset","standard0012.asset","standard0014.asset","standard0015.asset","standard0017.asset","standard0018.asset","standard0019.asset","standard0020.asset","standard0022.asset","standard0024.asset","standard0028.asset","standard0029.asset","standard0030.asset","standard0032.asset","standard0034.asset","standard0035.asset","standard0036.asset","standard0038.asset","standard0039.asset","standard0040.asset","standard0041.asset","standard0042.asset","standard0043.asset","standard0044.asset","standard0045.asset","standard0046.asset","standard0047.asset","standard0048.asset","standard0049.asset","standard0050.asset","standard0051.asset","standard0052.asset","standard0053.asset","Starlight hat.asset","Steampunk hat.asset","Steampunk Look hat.asset","stebon_hat.asset","Steve hat.asset","Sticol.asset","stitch hat.asset","Strawberry hat .asset","stream0000.asset","stream0001.asset","stream0002.asset","stream0003.asset","stream0004.asset","stream0005.asset","stream0006.asset","stream0007.asset","stream0008.asset","stream0009.asset","stream0010.asset","stream0011.asset","stream0012.asset","stream0013.asset","stream0014.asset","stream0015.asset","stream0016.asset","stream0017.asset","stream0018.asset","stream0019.asset","stream0020.asset","stream0021.asset","stream0022.asset","stream0023.asset","stream0024.asset","stream0025.asset","stream0026.asset","stream0027.asset","stumpy hat.asset","Stylish Witch hat.asset","Sugarcat hat.asset","Sunflower hat.asset","SusCrown hat .asset","Sushub hat.asset","Susotion hat.asset","Sweetroll hat.asset","Sylveon hat.asset","Taste The Rainbow hat.asset","Tatsugiri hat .asset","Taxi hat.asset","TechnicalMoon hat .asset","Teeth hat .asset","tenma hat.asset","Termy Boi hat.asset","Tessany Beauty hat.asset","Tessany Beauty Warrior hat.asset","textures/GridBox_Default","Thanos hat.asset","The True King hat.asset","The Witcher hat.asset","Thing hat .asset","ThisIsFine hat .asset","Tiki hat.asset","Tinkerbell hat .asset","Tippy hat.asset","tissue_box_hat.asset","Titans hat.asset","toby hat.asset","tomcraven hat.asset","Tongue hat .asset","trans_1 hat.asset","trans_2 hat.asset","trans_3 hat.asset","trans_4 hat.asset","Trenchcoat hat .asset","T-Rex hat.asset","Tropic Beach hat.asset","Troubella hat .asset","Tsedtacle hat.asset","Tuskspicious hat.asset","Tutorial","Tux hat.asset","Umbreon hat.asset","Umbreon hat1.asset","Undead Marah hat.asset","Unicorn Hairband hat.asset","Valak hat .asset","Vaporeon hat.asset","vGumiho hat.asset","vikram_1 hat.asset","vikram_2 hat.asset","vince_foot_front hat.asset","vince_front hat.asset","Virgil hat.asset","Voteme hat.asset","waffle hat.asset","Wailord hat .asset","WaitForConnectionDialog","weasel_hat.asset","Wednesday hat .asset","Wheelchair hat.asset","Wheelchair.asset","Wildcat hat.asset","Wildcat.asset","Wimpy Kid hat.asset","WingsBodyBuilder hat.asset","witch hat.asset","Wizard hat.asset","wolfabelle hat.asset","WolvsMimikyu hat .asset","Wonton hat .asset","Wonton.asset","Wreath hat.asset","wrench_f hat.asset","Xallysahoney hat.asset","xChocobars hat.asset","Xeno hat .asset","Xenomorph Queen hat .asset","X-Ray hat.asset","Yellow Body hat.asset","Yellow Skittles.asset","Yey Billy hat .asset","your_mom_hat.asset","You're so Salty! hat.asset","Zavvygamer hat.asset","Ze.asset","ZeroXFusionz hat.asset","zeroyalviking halloween hat.asset","zeroyalviking hat.asset","Zeta Mark V hat.asset","Zod hat.asset","Zombie hat.asset","zylus hat.asset"],"m_KeyDataString":"hg4AAAAnAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9faGF0LmFzc2V0ACAAAAAzODY1NTcyMGVjZDMzNzY0OGFlYjE4OGYyYjNjN2YwMQAHAAAAdG91aGF0cwBEAAAAdG91X3BhY2tlZF9hc3NldHNfYXNzZXRzX2FsbF84OTI2ZDQxYzQxNDgyZWQ4MGRkNGJkMTA1YjhkZjkyYS5idW5kbGUAKgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvNXVwIGhhdC5hc3NldAAgAAAAYmQ2YTU0YmY1MDU1NGExNDhiYzgwMWY3ZGViZDUxMmQAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQSBLbm9pZmUhIGhhdC5hc3NldAAgAAAAMmJmNDhhYTc1ZjNlYmMzNDk4NjgwOTlmMmZiMGJmN2MALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQWZyb0J1c2ggaGF0LmFzc2V0ACAAAAA4MjcxZmZhYTgxZWM1YzA0MWE0OGUxODRiZGY1NzZjOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ba2F0c3VraSBoYXQuYXNzZXQAIAAAADAwYTU5NjcxMTdjMzBhYTQ2OGQ2NjE2MGVjNThlMjY5ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0FtY2FtIGhhdC5hc3NldAAgAAAAMDQ1MjZiZTExODIwNTRhNDRiN2VkMDkyNjYwMTg4OGUAKgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL0FuYS5hc3NldAAgAAAAYWZkYWRlZTAxM2Q5MjgxNGJhNDg0MzUxMjIyMDUzYzMACwAAAHRvdXZpZXdoYXRzACYAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0FuYS5hc3NldAAgAAAAOTIyZGZlNTcwMWMwNTE5NGRiMjI0MWRkMzM0ZmQ5NTkANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQW5nZWwgSXMgS2ltaSBoYXQuYXNzZXQAIAAAADRlNmUyZDgzMDkzODIyMjQ4YjU0NDFiYWNkMjAwN2QyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2FubmFtYWphIGhhdC5hc3NldAAgAAAAY2U5MWY3ZjRiNGFhZDRmNGViMmU2OWFhMzhmOTJhOWEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYW5uaWVmdXNjaGlhIGhhdC5hc3NldAAgAAAANGYwZTRhYmU5ZjJmNGJhNGM4MjgzZDY0OGMyZjA2NDgAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQW55YSBoYXQuYXNzZXQAIAAAADcwNDE3OWU1ODgzYzY0ZDQ0YTM0ZjQyNDgzNGM4YTk3ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2FwaGV4IGhhdC5hc3NldAAgAAAAYmNjNThiZmFhMjcwMWI0NDI5YzJjOTU3Nzk3ZGEyMmIAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYXBsYXR5cHVzcyBoYXQuYXNzZXQAIAAAADkxMWMyNzMyYWMzYjk2YTQ5YjdjZmRhZmZkOTIzNGViACgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0FwcGxlLmFzc2V0ACAAAABjZjMxYzlmYzQ4NTg1MTg0ZGFmMjg3NjEzN2Q2ZjZjMwAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9hc2V4dWFsIGhhdC5hc3NldAAgAAAANGZlMjVhNWRlMzA2MTIzNGFiMzY2YjlmMjk1YWQ2YmEANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYXNoXzEgaGF0IGZsaXBwZWQuYXNzZXQAIAAAAGE4ZDczMmNkN2ExMjE0NzQ4ODhhMDA3NmEzOTIyN2FlACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2FzaF8xIGhhdC5hc3NldAAgAAAAZGJkNDgzNzY4MmRmMTI1NGQ4MmM2NDNiOWQ0ODU1MjgALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYXNoXzIgaGF0LmFzc2V0ACAAAAA2NjhjMGM5M2JiZWI5ZDg0OGE5NTczOGVjZTE0MGI5NgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Bc3Nhc3NpbiBoYXQuYXNzZXQAIAAAAGJmZGI3ZGM5OWUzOTM4MDQ0OTkxZTMzZDU3YjU2ODE5ADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0FzdGFzQXBwbGUgaGF0LmFzc2V0ACAAAAA3ZmJhY2YzYTY0NmI1OTE0MTk1NTA5YWI0NTE3MzhhMAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9heGlsbGEgaGF0LmFzc2V0ACAAAAA5YzExZGM5YTU5NDMzOWY0ZGFiNTM0MmM1ZjYxMWQ2MAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CYWQgQXVyYSBoYXQuYXNzZXQAIAAAAGNjMWYzZTU1OThkNzhiYTQzYjU0YjhmOTNlZWI4M2Y3ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JhaXQgaGF0IC5hc3NldAAgAAAAM2U4NzRlMDAwNzMwMzNkNGVhZTU1MmNjZDE1YmI1OWUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQmFzZWRrbSBoYXQgLmFzc2V0ACAAAAAyZWQzNmYyN2MwNzUxMGE0Mjk3MmRmMGI5MmQ0OTUyYgAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9iYXNldHJhZGVfMSBoYXQuYXNzZXQAIAAAADJhODMyNGFiYTRmMWFiZDRmYWIyNWI1ZmIxZWYwMmMxADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2Jhc2V0cmFkZV8yIGhhdC5hc3NldAAgAAAAYTcyNGYwNzFjNTMyOTYxNDU5YWM2YTQzNzM5NjA5MjAAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYmFzZXRyYWRlXzMgaGF0LmFzc2V0ACAAAAA1Y2VlNGZkMzg0MDFkNzA0NDgwNjI0Nzc3MDA5YjVjZgA2AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CZWFyZGVkIEdyaXp6bHkgaGF0LmFzc2V0ACAAAAA0M2Q2YTEzMjVhMWU2Njg0NjhkNWEzMWVhNDY1YThmZAAqAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CZWUgaGF0LmFzc2V0ACAAAABjYTc5ZWM5MjMzNmJmYzM0NGIzYWVkYzFmYzU3NjYwNwAqAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9iZW4gaGF0LmFzc2V0ACAAAAA0NjVkYTk1ZDRkYjI2MjE0NDhlOWIwYjM2YWQxMzc2ZAAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CZXJnbWVpc3RlciBoYXQuYXNzZXQAIAAAADVhYjA3NDA4YjczOGUwNTQ2OWRjMmFjNTI2ZjUzMjExACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2Jlc3R5IGhhdC5hc3NldAAgAAAANTEwNWRlZGY5ZDNjOGUyNDQ5MWM1M2I0Yzk4ZDk3MzcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYmdjYmlncyBoYXQgLmFzc2V0ACAAAAA1MzI0ODkyZWIxZDZjZGE0NGFiOTQxNTYyMDEzMzkxYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CaWcgU2hvdCBoYXQuYXNzZXQAIAAAADZmNGZiMTMwYjRkNDU1NzRjYWI5MTcxYzYwMmQ2NDZhADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JpbGwgQ2lwaGVyIGhhdC5hc3NldAAgAAAAYWI4NDM2NDhmNGJiYmUzNDlhNjBjNzYwYzk4YjY3YTcACwAAAEJpbGxpbmdNb2RlACAAAAAwMTAzY2QxYjY4Y2M0NmU0ODk4NWJlZDUzYzMyZDlmZAA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CaWxseSBCdXRjaGVyIGhhdC5hc3NldAAgAAAAYjE1MjExMmMwNGVkNTExNGY4NTA4MWZhYjI0OTdhMDEAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYmlyYiBoYXQuYXNzZXQAIAAAADYyYmIwMGRjNmVlYTEzZTRjYjIwNzdlZDYzMDZhYmJkADQAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9CaXJ0aGRheUJlYW4xLmFzc2V0ACAAAAAwZmY5YjE1NzAzMjkxZTU0ODhlNGJlMzZjZTVlYjIxNwAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CaXJ0aGRheUJlYW4xLmFzc2V0ACAAAABmMjIzMTM2MjQ1NzMxMzQ0Nzk4NTZkYjcxNmI4NDIyNQA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvQmlydGhkYXlCZWFuMi5hc3NldAAgAAAAYWFiZTUwMzRkMjljODJmNGE5MDUwNWM1NjYwMWNhOWMAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQmlydGhkYXlCZWFuMi5hc3NldAAgAAAAMDBkN2VhZjgxYWQyNWVlNDc5NThmODY1MDZkNDFhZGUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYmlzZXh1YWwgaGF0LmFzc2V0ACAAAAAyODhjZDJmYWIyNTA3Y2E0NTlhZmMyNGYyNDQ5YjdhYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CbGFja0NhdCBoYXQuYXNzZXQAIAAAADFkNjkzYjU5NDE0OTRlYTQ0YjE5NTYwNTVlNTZkY2EwADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2JsYXVzdG9pc2UgaGF0LmFzc2V0ACAAAAA1M2MwMTQ2ZmJlNjE3ZTc0Njg1ZDg3MGMxNjY5NmM1MAAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CbGF6aWtlbiBoYXQgLmFzc2V0ACAAAAAyY2I5OTU0NDFhZWE2ZDg0Y2I2YmFmZGM2MTBkOGY2ZAAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9ibG9vZF9ib3VybmVfaGF0LmFzc2V0ACAAAAA0OTRjNDljOTBjYjZjYjE0ZWE1YmQ4MWE2NDdkZDg1NgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9ibG9vZHkgaGF0LmFzc2V0ACAAAAAxOWZkMjVmZTZmZTNjNjE0N2FiYjg5NmMzODJmMmExYwAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CbG9zc29tIGhhdC5hc3NldAAgAAAAMTk2NGFlZWI1NWU3MTYxNDVhYzJiMzUxZTg2ZjRlNjEAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQmx1ZSBEcmVhbSBoYXQuYXNzZXQAIAAAADIwYmIwNjRjODBhNWRiMTQ1ODgwODQ5ZDBmNWZhNjRjADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JsdXNoLXN0YWNoZSBoYXQuYXNzZXQAIAAAADg2ZDhmY2ZjYzIyNmFkNTRkODIwNTA0NmExNWFhZDIxACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JvYXIgaGF0IC5hc3NldAAgAAAAMGYyZDdhNTM4NjI4ODlkNDlhYjViMDc5NWI3YzZhODYAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYm9iYSBoYXQuYXNzZXQAIAAAADNkOTIxOTdhMmM2ZTdkZjQxYTRhY2VjYTlmYTcxMTFjADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JvZHlidWlsZGVyIGhhdCAuYXNzZXQAIAAAAGZmYTM3NTkzMzA2OTQ3YzQzOWVhOTcyZTAwMzRkN2M1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JvbnNhaSBIb3VzZS5hc3NldAAgAAAAZTliYTE1OTUxNGQwMGJiNDZiMDA0MjlhMWZlZWZhY2IANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQm9uc2FpIFR3aW4gSG91c2UuYXNzZXQAIAAAAGNjZTcwNDU5YWZjZjZiOTQyYmFmYjliZjNhYzkzYTAyACkAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0JvbnNhaS5hc3NldAAgAAAAZDEyOTZiZGIxMGUzNGM0NDlhZWY1Y2QzZjJkMjgxNmUAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQm9vayBPZiBTdXMgaGF0LmFzc2V0ACAAAAAyMWQ3NTUzNzRhMTYxYzM0NWFlMGRkYmVhNWQ4MWIzZQAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Cb3NhIGhhdCAuYXNzZXQAIAAAAGRhYTFjMWEwY2I3YTc4ODQ0YjI3ODc3NTFkNzhjNDUwACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2JyMDBkIGhhdC5hc3NldAAgAAAANGYwNGI3MWI5Y2QxNTE1NDQ4MDAyNWMwYjQ3MzQzYzIANgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQnJlYWtmYXN0IEJvYmEgaGF0IC5hc3NldAAgAAAAMWNhMjZkNzViOTVlNjIxNGZhNWViZGFkYzNhYmZhNTAALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYnJlZWggaGF0LmFzc2V0ACAAAAAyZWU0MTE4NDQ5NTUxNjM0Yjg2YzE3MTk4MmViZjAzNQA7AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ccml0dGFueVA5NSBUcmVhc3VyZSBoYXQuYXNzZXQAIAAAAGUyYWQ2NzExZmQzY2U3MjRhOTc4YzY1NTliMmYxYWZlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2JyaXR0emV5IGhhdC5hc3NldAAgAAAANjQzYTAyYTM1MjhhOTgyNDg5YWE0MDcwZjM1MDMzMmUAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvYnJpenp5ZWFycyBoYXQuYXNzZXQAIAAAAGEyMWI1OWNhZGZhYTA2NjQ2OTVhMTU1ZjRjYjhjZDU5ACgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0Jyb2NrLmFzc2V0ACAAAABmNDdkNjczZmI0ODFiMjM0YTk2ZTliMmQxNmU4OTgzNQApAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ccm9zIDEuYXNzZXQAIAAAAGNiMTkyMDdhY2IxN2VmZDQ1YjcyMzlhMGRmYjEyYzY4ACkAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0Jyb3MgMi5hc3NldAAgAAAAOWIwMzMxYmY2ZmYwZTIxNDE5MjZlZTIyNTdiNDExZTcAKgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQlRXIGhhdC5hc3NldAAgAAAAZDkwZDdlZGExZmM0NTgzNDFhNDQ2ODUyYjQ0OGI2OWUALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQnViYmxlcyBoYXQuYXNzZXQAIAAAADFmNWMzZjE3MTM5ZWRmMjRkYWVlZGFjNzBjMDZhYTMyAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0J1bm5pZXMgaGF0LmFzc2V0ACAAAAA5ZjVjYmM2ZDljYTA5ZWE0NmJmNzRkYmRkZDU4ZTI3MgAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9CdXR0ZXJjdXAgaGF0LmFzc2V0ACAAAABhNzNjYTk4Y2JlMDNjZjY0OGE3MjE4MmI1ZTFjYWIyYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYWJvY2lUViBoYXQuYXNzZXQAIAAAADc4NTVlMjBkODBlZDQwMzRjOWMxODI0Y2RlMzQ1YWRkADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0NhbmR5Q2FuZSBoYXQgLmFzc2V0ACAAAABmZTFmOGJhMGU1NTc5Zjk0Njg5MTNiMjQyZmY1YmMzNwA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXB0YWluU3RvcHB5IGhhdC5hc3NldAAgAAAAOTIzNDUzZGM2ZTE2MzE2NDQ4YjU0YjhkMWVhNmU0NmIAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ2FyYWN1cGNha2UgaGF0LmFzc2V0ACAAAABjOTNjYWY4ODZmODA5YTI0ZmFjZmY0YjYwNzcxYTg2ZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXJhbWlsayBoYXQuYXNzZXQAIAAAADc1NTZhNDc5NjM4OGI0MjRmODk2ZWE4NmJjODIwMzZkAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2Nhcm5hZ2VfaGF0LmFzc2V0ACAAAAAwMjkzYWMzMGFkMmVmNjM0YWE1NWVjNTY0ZjA5MmExOQAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXJyaWVtZWxsbyBoYXQgLmFzc2V0ACAAAAAxYTc0OWUyNzlkMzI3NWU0ZTllNzY4MGY1YmM3MzcxNgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXNwZXIgaGF0LmFzc2V0ACAAAABlYTgyNzEzNjFhMjU3ZTE0ODlkZWEzODI3YWJmOTk3YQA2AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXNwZXJzR3JvdnlsZSBoYXQgLmFzc2V0ACAAAAA1MWIxYWE4OWEzNTdlNDY0OWFlZjc2ODhjMTU0YmZiMQAqAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXQgaGF0LmFzc2V0ACAAAAA0YmFmYjM5Yjc5NDYxNDk0N2I4ZTk0YmQ0ZGQ5NGFmMQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DYXQgSGVsbWV0IGhhdC5hc3NldAAgAAAAN2U2NDYyYWU4MGM2MDE2NDVhMmE2MzE3MDgxNTNlZWQAPAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ2F0IEhlbG1ldCBXaXRoIEFwcm9uIGhhdC5hc3NldAAgAAAAM2MyNjZmYjliZmY0YTU1NDlhYmMyZWQ4YzFkNDFmNzIAKQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ0IgaGF0LmFzc2V0ACAAAABhYTIzNTdjYzIzMmNjMzU0YjhkNWUwODk1NjhiNzcwZQArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DaGFpIGhhdC5hc3NldAAgAAAAZTVlNDg4MDIyZmI4NjEyNDRhYzA4Y2EyOGI3YzI0MjkAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvY2hhcml6YXJkIGhhdC5hc3NldAAgAAAAODNmYzRmZWYxZmY3ZjE5NDZiZjIzNjRkZDg4NjdiOGMANwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvY2hlZXN5IGhhbGxvd2VlbiBoYXQuYXNzZXQAIAAAADNiNmI3ZjlmMjA0ZmFiMTQzYTQ2ZDNlZTFlOWVkYWUzAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2NoZWVzeSBoYXQuYXNzZXQAIAAAADA0Y2U4MzEzY2ZkZGM0OTRmOTlhMTQ1NjIyODVlMzk4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0NoaWJpdXNhIGhhdC5hc3NldAAgAAAANjcwMjBhYjExYmQ5ODUyNDA4ZjE3NDgxMDEwZTc5YjQAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ2hpY2tlbnogaGF0IC5hc3NldAAgAAAAZDcyMWY1YmMwZTUwMmI2NDI4YzU5OGU5OTAwODZjYjAANQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ2hpY2t5IFRlbmRlcnMgaGF0LmFzc2V0ACAAAABmNmVmN2FiZmFjOTI4MTA0NTkyYjg1NDMyOGUxODUwOQA7AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DaGlja3kgVGVuZGVycyBTYXVjZSBoYXQuYXNzZXQAIAAAADI2MzI3ZTY0YWZmNGEzZTQxOGEzNmY2YzY4MDYyOTAyACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0NoaWxsZWQgMi5hc3NldAAgAAAAYWEzZDkzODAxYjliN2Q1NDE5NGJlNTI5ZmI0NmZjY2QAOAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvY2hpbGxlZCBoYWxsb3dlZW4gaGF0LmFzc2V0ACAAAABmMjNmNWRiM2JmMWIwODg0NDgwMzA0Y2M1NzBjNGUzOQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DaGlsbGVkIFNoaXJ0LmFzc2V0ACAAAABmZjdhNmFkOTQ4M2NlYzU0Y2E1ZGU3MzJlZTBmMzAzNwAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9jaGlsbGVkY2hhb3MgaGF0LmFzc2V0ACAAAAA2MzNkMmFlZGJhNmY0NWU0Njg1MmRmZjZkY2RlZDM2ZQAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DaG9jb2JlcnJ5IGhhdCAuYXNzZXQAIAAAADIyYWNiZWFlYWExOWFhMzQyOWY2MWFhNjViMThjZTg3ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0Nob2NvUHVuIGhhdCAuYXNzZXQAIAAAAGNhYTY4MWY5MTY2ZmE1MzQwYmJjYTc2NjQzZWNjZGMxAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0Nocm9tZSBoYXQuYXNzZXQAIAAAAGE5OTRmN2EzMjYwNTYwZTRjYmQ2ODdhMjExZjMxNDFmACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2NsYXJhIGhhdC5hc3NldAAgAAAAOGNmYTQxNGFhY2UxYTNjNDNiZjcwM2Y0NTFkNTQzNTUAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ2x1Y2tlcnMgaGF0IC5hc3NldAAgAAAANTA4YzZlZjkwOTdmMTVlNGU4MDA2MjllMWZmZDBiNTAALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ29jb2EgaGF0LmFzc2V0ACAAAABkZGU5OGU0M2VhMWZjNmQ0MWIwNTRhMzBkMTM2NzkzNAAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Db3JpS2FzYXJhayBoYXQgLmFzc2V0ACAAAAAyM2U3MmQ0ZjQ2ZjQ3N2Y0Zjk2ZDY1ZWIyY2I5NDNjMQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Db3NtaWNhcmEgaGF0LmFzc2V0ACAAAABhNmQ3OWQ3MmNmMTY5ZTI0ZTkyMmVhOWUxOTI5Mzk2OAAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DT1RDIGhhdCAuYXNzZXQAIAAAADYxMDliNGJkZWFmNDNiNzQxOGZjOGY3ZTUyMDRmZTQ5ACgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0NvdXJ0LmFzc2V0ACAAAABkOWUwODFkNzUzZTRiMTk0Mzg1YmVkZTI3ZDNmZDYwMgAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Db3VydGlsbHkgaGF0LmFzc2V0ACAAAABmOGI0NWI1NzEyYzMzYTk0N2I1Y2QzMzRmYjA4ZGM1MAAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Db3dib3lNYXYgaGF0IC5hc3NldAAgAAAAZGQyMTA0MGFkMDk1NTMyNDQ4OWNiOTE5YzVmOTQwMzIAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ3JhYiBoYXQuYXNzZXQAIAAAADZiN2UzMjE1OWEzZjk1NjRiOTNkYWY4OTIxNzUxNzFjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0NyYWJjYWtlIGhhdC5hc3NldAAgAAAANjZmOTllMjc4NGVlZmI1NDk4MWIwYTJiNWEzYjA3ZWYANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ3JlYW0gVW5pY29ybiBoYXQuYXNzZXQAIAAAAGZiNTdhNGMyYWMwMWQ4YzRjODFiNGNlMjdiOTNhZTkxACIAAABjcmVkaXRzL0lHREFfTG9uZ19IRVgtMDFfd2hpdGV0ZXh0ACAAAABkMzFmZTQ4MDNjZWJmYjM0MWJjNGU4M2I0NjI0NGNmNwAgAAAAYWIyMDZiODM3ZGI2YTkyNGM5N2M2OWI0ZTAyMjFhZTkAEQAAAGNyZWRpdHMvbG9nb0ltYWdlACAAAABjNzM1MWNjNjNhYjU4Y2U0NTk0MDMwNTUxNTc4ZTI0MAAgAAAAZjJkMGJjNzNjNjQ1MjkxNDlhODk5NTZiODlhYzRiZWYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ3JlZXB5IERvbGwgaGF0IC5hc3NldAAgAAAAMDhmNWE0ZDc3OGZmZTFjNDY4ZWQ2OWY1NmZhOTkyMWEAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvY3JvY29kaWxlIGhhdC5hc3NldAAgAAAAZWI1ZGJlY2MxM2ExODhhNGFiZWQ4Yzc4NDQ2OWUyNzkAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvQ3JvcyBTdHlsZSBoYXQuYXNzZXQAIAAAAGYwMjYzNjJjNzUxODllYjRlOGE1MTQyN2I3MjNiZGE0ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0Nyb3cgaGF0LmFzc2V0ACAAAABlMGRiYzE0MjI2YmRjN2I0MGI4NmU4NjBmYjQxODA1MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DcnVlbGxhIGhhdCAuYXNzZXQAIAAAAGExYjUwZmQ3ZDFiNzdmYzQzYjA0MGEyNzFiMTdiZTRhAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2NydW5jaHkgaGF0LmFzc2V0ACAAAAA5MTJjYWRkOWQxYzk3MTg0MjljZjk2NWUzZGQzMDM4OQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9jdHVsaHUgaGF0LmFzc2V0ACAAAABmMmUyZGQ2MDMxZDk5NjM0MDkzZGQ5N2FmMGEzZmI3NwAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9DeW5kYSBoYXQuYXNzZXQAIAAAADE4MTY1Mjg2ZDY3ZTY3ODQ4YjI1ZjMwZWUzZDVjMGQxADQAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0N5cmVuaSdzIFBvbnkgaGF0LmFzc2V0ACAAAAA0OWQ3MjQwN2ZjNjk3ZjM0YWFjYjE5MTMxNzE3NjhmZAArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9EYWJpIGhhdC5hc3NldAAgAAAANTJiYmJmMTY1MzhkNzhmNDdhMDcxNDA5ZWNmNDU2MjkAKgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZGFkIGhhdC5hc3NldAAgAAAAMWQ4YmFlNTIwZThlOGUyNGViNjU4NDg4NGUwMDQ4OTEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRGFuZ29ycGEgaGF0LmFzc2V0ACAAAAAwNmY0ZWQyMWNmOTRjMjU0Yzk2NTBiZWMwZWJkYjIyZAAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9kYXdrbyBoYXQuYXNzZXQAIAAAADg4NTkzOGVlNGQzZjNlZDQ3OGU4YzM5MTY1NGUwZjI3ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0Rhd25zSG90TWFtYSBoYXQuYXNzZXQAIAAAADQ4YzI0OTMwNTc1NTFiMTRhYTg1OTEzY2I5YWM4NDA3ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0RlYXRoIGhhdC5hc3NldAAgAAAANGM5OWIyM2U0ODcyZGNjNDBiNDA4ZTkzNGUzMTM0M2EACwAAAGRlZmF1bHRJY29uACAAAAAzY2NiODU2OTY5NWM4NDk0NmJhZjY2NDkxZTkxNzVlOAAgAAAAMzRkMDYwOGYxNDY4ZGNlNDRhOWE0MzU5MDFkZjg1ZDYAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRGVsbCBoYXQuYXNzZXQAIAAAAGY1NjFjZWNlZTc5MzI5ZTQ5YTYzYjkwZTQyZDg3NWViADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0RlbW9nb3JnYW4gaGF0LmFzc2V0ACAAAABhZDgyNjgzM2IzNGUwNDc0NDhhNjYyYzFlZjM3YmUyMAAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9EZXRlY3RpdmUgaGF0LmFzc2V0ACAAAAAzODM2NGEzZTVmYzU4MmQ0ODg2YmYxNzNkYTUxN2QxMAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9EaWdEdWNrIGhhdCAuYXNzZXQAIAAAAGE4ZDQ3Njk4MWIwYTA5MDQ3OGQ3NmMzYWQxZDkyNzg2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2Rpbm9fZWdnX2hhdC5hc3NldAAgAAAAZTRjMDNkMmFmNDVjZTYwNDM4YTFhZDEyZDA2ZjExMzIAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRGlzY29ubmVjdGVkIGhhdC5hc3NldAAgAAAANjEzOWY5YzViNjM2YjNmNDM5NzFlYmY5Y2FkN2E3YTgAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZGl6emlsdWx1IGhhdC5hc3NldAAgAAAANjE1NjQwNWM1NGFhMTFhNDdiODllYmVjZTg1YWMyZmQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvREpTbWlsZXMgaGF0LmFzc2V0ACAAAAA5NjkwN2U2ZWQwNDJlZDE0NGI2M2ZjNjRhZjFjMTgxNgApAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9ESyBoYXQuYXNzZXQAIAAAADc4ZWYwMmM0NTVhNWRiNTQxOGY3NjU1NDU1MGY2MmM0ADQAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0RvdWdEaW1hZG9tZSBoYXQgLmFzc2V0ACAAAAA3ZDY5NTI1Y2I5ODg1Yjg0Y2JlMzNmMDk3ZmVjNDc1ZQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Eb3VzZWQgaGF0LmFzc2V0ACAAAAAxNmZiYTEzNDM3OTUyNGE0MjgyMTY4MDJhMTI0ZjdmMAAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9EcnVua3lQb28gaGF0LmFzc2V0ACAAAAAyMjY2NzNjMmY4ODUzY2M0YmE1MTg4ZjZlOTZjYmUyYQAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9EU0NHbHV0dG9ueSBoYXQuYXNzZXQAIAAAADE0MjVlNGFmNWNlNTZmZDQ2YTlkYmNiMjU5YTdkNDZiAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0R1bWJkb2cgaGF0LmFzc2V0ACAAAABhYjg1MDFkZjkzNDZkYWM0MmI3ZGNkYWRlNDA0YzQzYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9EdW1iZG9nIGhhdDEuYXNzZXQAIAAAAGNjZjFmYjU0YzM4ZDg0NDRlOWZiZDhiYWIxNmEyOGQ5AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2R1bmNhbiBoYXQuYXNzZXQAIAAAADdkZTA5YTQ4MjYwZGNlYzQzOWI0NzQ2YzEzZmMxZDhlACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0R1bmNlIGhhdC5hc3NldAAgAAAAZGQxYjliYmIxNzlkNzUyNDU4OTEwNTIwMjVkZjkyY2YALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZHdhcmYgaGF0LmFzc2V0ACAAAAAwODIxNjkyNjkzZTNkNzI0NmI4NTZjMjlmYzkyNTBkNgArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9keXRvIGhhdC5hc3NldAAgAAAAMDczYzdhMDRiNWQxNjI4NGZhNTFjNjlkNTAzYjBmYzMALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZWxsdW0gaGF0LmFzc2V0ACAAAABjYmJiOTgzODg2MzkyZDQ0NGJkOWE5OTZmNGFmZTYwMAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9FbGx1bSBoYXQxLmFzc2V0ACAAAAA5NzFmMWViMDJhYmQ2OTk0YTllN2QyZjZkY2U3OGI1OAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9FbGx1bSBoYXQyLmFzc2V0ACAAAAAwYjFmZDhiN2Y5MzIzZTE0ZDg5NTdkMGNkNGJlMDIyMgAlAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9FbS5hc3NldAAgAAAAYzRhMjI5ZGM5NDBlYzJjNDI4MGU2NGIyYTdiYTgyMWUABwAAAEVuZEdhbWUAIAAAAGM2ZTNmYTVkMWIxMjJkZTQwOWY3ZTViNmIwZDk2NjkxBAYAAAAALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRXNwZW9uIGhhdC5hc3NldAAgAAAAMzY4M2QzNmUyNTMyYzNmNGJiNTdmNTJhOGExNmI3MDEAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRXZlZSBoYXQuYXNzZXQAIAAAADlmZTZmMjg4MDE0M2MyZjQ1OTcxMzk5YTk1MzJiMjU3AC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0V5ZWJhbGwgaGF0LmFzc2V0ACAAAAA4ZWQyYzNiYjMyODFmOTg0ZjljMDYxODAwOTU5NzE3ZgAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9GYWNlaHVnZ2VyIGhhdCAuYXNzZXQAIAAAADgxMDVlM2ZmMDQ0Yjg0MDQ0YWFjNTBjNDRhNWRlZmM4ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0ZhaXJ5IGhhdC5hc3NldAAgAAAAYmIxNWY4ZWFiYzQwMDI5NDJhNGQwMTE3YTA0ZjRiNTkANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRmFpcnlzQmx1ZUZveCBoYXQuYXNzZXQAIAAAADE4NGRiYzY3OGFjNTg4MzQyYjU2MTY2ZDVkMzVjMmNjAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2ZhbGNvbmUgaGF0LmFzc2V0ACAAAAAyM2I5Y2U0N2MxNThiODI0MWEyNzUyYTllMTQwZjdhZQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9mYWxjb25lXzEgaGF0LmFzc2V0ACAAAABkODAzMDVmOWQ3MTI0YTk0ZDhmMjk2Njg2YzdkMDYzOAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9GZW5nUEogaGF0LmFzc2V0ACAAAAAxNjIxZTNhYzBjZWRhNTA0N2FmODIwMTg4NWMyZGVlYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvRmlsbGV0LU8uYXNzZXQAIAAAAGFiZmZiOWMzY2M5NjU1YzQ0ODAwOWVmMzEyZjJlZTVkACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0ZpbGxldC1PLmFzc2V0ACAAAABjNWE3YjJjMTVjZTQzY2Q0Y2FiMTczYjZmNTYwZjg5ZgAJAAAARmluZEFHYW1lACAAAAAwMjE3NWJmM2E5MWQ5ZGE0YWJjNjY0ZTg3ZjMxODU2ZgQJAAAAAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2ZpcmVnb2QgaGF0LmFzc2V0ACAAAAAyNDg1NWRlOGNmNTE4OTQ0ODg1ZDM3Yzc1MGQ5N2JlNgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9GaXJlbWFnZSBoYXQuYXNzZXQAIAAAADhmMGU3NTMzZjY1NGY5OTQzODQ4MzUzYTBmNWFiNDI1AC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0ZsYXJlb24gaGF0LmFzc2V0ACAAAABkMjBiMjM3NzhiYzE5MTU0Mjk5OWY1MWQ1Mjk2MTg0OQA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9GbG93ZXIgRmVkb3JhIGhhdC5hc3NldAAgAAAAMzIzYmU1MTRkYWQ5ZGFjNGE4NjJiYWI3OTJmMDEzMWYAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRmx1ZmZ5IEJvaSBoYXQuYXNzZXQAIAAAADc1OGZlZmY5MTlhNDMxZjRkODY2ZTcwYWRjZjQ1MzIzACgAAABmb250cyAmIG1hdGVyaWFscy9CYXJsb3ctQmxhY2sgU0RGIEF0bGFzACAAAAA1YmYzOTA2YmU0NzEwYTU0NWI3YjFiZDVmODUzOGJkYwArAAAAZm9udHMgJiBtYXRlcmlhbHMvQmFybG93LUJsYWNrIFNERiBNYXRlcmlhbAAgAAAAMzc4NTk2N2IzM2M0YTI2NGFiNWQzNGI5YzI0YzRkNWIALQAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jhcmxvdy1Cb2xkSXRhbGljIFNERiBBdGxhcwAgAAAAMWMyNDdhODhmNTcyMTk1NGU5MzVmYTUxMTFmZTgyY2YAMAAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jhcmxvdy1Cb2xkSXRhbGljIFNERiBNYXRlcmlhbAAgAAAANWJhMmJmOGRkYTE1NTRmNDY5MWI5MGJlNzdjN2E2Y2UANwAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jhcmxvdy1MaWdodCBTREYgLSBUdXRvcmlhbCBSb2xlIFRleHQAIAAAADdhMTMwZjVhZjFlMTdmYzRlODkxYTRiYzcyMzEzN2QwACgAAABmb250cyAmIG1hdGVyaWFscy9CYXJsb3ctTGlnaHQgU0RGIEF0bGFzACAAAABkNDk2MjM0OTZlNzRkZDA0YzhhOWZmNTYxMThkNGNkYwArAAAAZm9udHMgJiBtYXRlcmlhbHMvQmFybG93LUxpZ2h0IFNERiBNYXRlcmlhbAAgAAAAMjU2YWZkMjgyNTg2YjY3NDRiYTM2NGM0NzU4NGRmZDAARwAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jhcmxvdy1NZWRpdW0gU0RGIC0gUXVpY2sgQ2hhdCBQaHJhc2UgQnV0dG9uIC0gUGhyYXNlACAAAABiMmYzYWEwZmRlOWE1MmU0NWEzMzZkNjBkMmM2YjMyZABMAAAAZm9udHMgJiBtYXRlcmlhbHMvQmFybG93LU1lZGl1bSBTREYgLSBRdWljayBDaGF0IFBocmFzZSBCdXR0b24gLSBQbGF5ZXIgTmFtZQAgAAAAMDM0ZmQ5NDA4OTUzMTRkNGJhYzQzMWNlMTMyZGIxZjkAJgAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIEF0bGFzIE1hdGVyaWFsACAAAABhMTlmZjJhODMzMTQ0MDE0ZTg2OTA3NDU1NWNlNTA2OQAtAAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgQXRsYXMgTWF0ZXJpYWwgTWFza2VkACAAAAA2YzY5YzNmYmMyZThmNWU0Yjg1Y2QyNTZmZTZlMTcwMABHAAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgQXRsYXMgTWF0ZXJpYWwgTWFza2VkIC0gUUMgQ2F0ZWdvcnkgQnV0dG9uIFRleHQAIAAAAGEwM2Y4OGE2ODE4MWI4NjQ1OGQ2YzcxZDg1ZDUzYzZkACoAAABmb250cyAmIG1hdGVyaWFscy9Ccm9vayBTREYgLSBCbGFja091dGxpbmUAIAAAADVkZmEzYzZkY2FkNDZkODRjYTY4MTg0NjM5YjNkZjUxADEAAABmb250cyAmIG1hdGVyaWFscy9Ccm9vayBTREYgLSBCbHVlQW5kV2hpdGVPdXRsaW5lACAAAABkMmZiN2EwZGVhZTYxM2Q0NThjM2RhMTc2N2U4ZTE0MgA2AAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgU0RGIC0gQmx1ZUFuZFdoaXRlT3V0bGluZU1hc2tlACAAAAA0ZTI5Mzg2MDEyZGJmNWI0NDhiMTZmNmViNjJkMTgzOAAnAAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgU0RGIC0gQ2hhdEZpZWxkACAAAAA2ODg1YTYwYjE0MjcxZTc0OGE1MDAzMzY1MWE2Y2MxMAAxAAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgU0RGIC0gQ3lhbkFuZFdoaXRlT3V0bGluZQAgAAAANGUxYjk4OGFkODM2MzFiNDg4YzFkYzAzMjZkMWY2NTQAIgAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIEdyYXkAIAAAAGM1YmI3ZTQ1ZWYyYjgwNTRkYjZmZWJmZDZkNWFiMGJhADIAAABmb250cyAmIG1hdGVyaWFscy9Ccm9vayBTREYgLSBHcmVlbkFuZFdoaXRlT3V0bGluZQAgAAAANTYzNTUyM2EzODFjZDYxNGE4Y2I5ZjEyMTVmNjMzY2YALAAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIEhhc0JlZW5LaWxsbGVkACAAAAAyYjYzN2U4YWM5ZDZhZWU0ODkxODlkYzU3N2QzZTNlOAAwAAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgU0RGIC0gUmVkIC0gV2hpdGVPdXRsaW5lACAAAABlYjUzMDIxY2E2ZjM1OTY0YmE1NzhjNmJjMGNmN2JlMgA0AAAAZm9udHMgJiBtYXRlcmlhbHMvQnJvb2sgU0RGIC0gUmVkQW5kV2hpdGVPdXRsaW5lVGhpbgAgAAAAMTBmMmUzYzE5NzA1YzljNDQ5NmU3NzA4MWIxNDA0OGYAMwAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFJlZEJsYWNrT3V0bGluZU1hc2tlZAAgAAAAYjZiMmY1ZTAzZWVjODEyNDU4OWI1ZjNjZWFjZTE5YWMAKAAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFJlZE91dGxpbmUAIAAAAGJmZDA3NGY0YmNjMDBjZTQxODg2NzUxZTQ3NGRkMjllAC0AAABmb250cyAmIG1hdGVyaWFscy9Ccm9vayBTREYgLSBUdXRvcmlhbCBIZWFkZXIAIAAAAGExNmMwODRlYzc4MGY4NzQ5YWViMzU0M2Y2MDg2Mzk0ACMAAABmb250cyAmIG1hdGVyaWFscy9Ccm9vayBTREYgLSBXaGl0ZQAgAAAAZDFjYmQzZTVhMTY3MjU0NGVhOGU1YjFjOWI2MjE1M2IAMAAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFdoaXRlQW5kUmVkT3V0bGluZQAgAAAANmEzYTJlMGVlMjNiODQ4NGI5ZTQxMzczYzI4N2QxNDIANgAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFdoaXRlQW5kUmVkT3V0bGluZU1hc2tlZAAgAAAAODMwZDZlZWVmN2I0ODBlNDhiMjE2MTI3OWU2YjdhMjEALQAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFdoaXRlR2xvd01hc2tlZAAgAAAANTVhMmU0YzEzMjgyMWMxNGU4MTk2NWUxMDM0MTgwYjEAKgAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFdoaXRlT3V0bGluZQAgAAAAZWM4YzFkZjI1NDgzM2Q5NDA4YjkwMTgxYTFjZjA1MmMAMAAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiAtIFdoaXRlT3V0bGluZU1hc2tlZAAgAAAAYTBmYWRmYmZjZmQxZTkwNGI5N2U5NjU5OWY2MDZmM2UAIQAAAGZvbnRzICYgbWF0ZXJpYWxzL0Jyb29rIFNERiBBdGxhcwAgAAAAZTg0YjcyYzAzM2QzMmIwNDZiYWEzNTRjOTczOGExYzIAIwAAAGZvbnRzICYgbWF0ZXJpYWxzL0NPTlNPTEEgU0RGIEF0bGFzACAAAAAyM2YxZmZjMmM2MjlkMGI0OWFmYjZlZGUzMjMwOGQ4MQAmAAAAZm9udHMgJiBtYXRlcmlhbHMvQ09OU09MQSBTREYgTWF0ZXJpYWwAIAAAADgyZmUxMjA1MTQ0YmQ1MTQ0YjNjNmNhOTZjMGQxN2I0ACgAAABmb250cyAmIG1hdGVyaWFscy9Db25zb2xhcyBCbGFjayBPdXRsaW5lACAAAAAwMmUxODhjNDFlZGNkOGQ0Mjk1ZDIwNTg3MjQ3YTJhYQApAAAAZm9udHMgJiBtYXRlcmlhbHMvZGlnaXRhbC03IEJsYWNrIE91dGxpbmUAIAAAADBjN2NhZWRiMjhmY2I4MjQwYTA5ZGY1MDc1NmM4YWQyADQAAABmb250cyAmIG1hdGVyaWFscy9kaWdpdGFsLTcgU0RGIC0gQmxhY2tPdXRsaW5lTWFza2VkACAAAABhYzE3YThmNTc0M2Q2ZTk0YjkxMGM1MWQ4YTk4ZGM0YQAlAAAAZm9udHMgJiBtYXRlcmlhbHMvZGlnaXRhbC03IFNERiBBdGxhcwAgAAAAMjU3YzkyZDVkYzY5OTY1NDY4NmFkYjhjYjRlYjU2ZWQAKAAAAGZvbnRzICYgbWF0ZXJpYWxzL2RpZ2l0YWwtNyBTREYgTWF0ZXJpYWwAIAAAADY5NjNjNmYwM2Y4ZWU5OTQ1OWZjYjhiMjdlMGQyNTEzACwAAABmb250cyAmIG1hdGVyaWFscy9ESU5fUHJvX0JvbGRfNzAwIFNERiBBdGxhcwAgAAAANTJkODE5YWU0NjViODU0NGQ5NzgwMThiZmEyMjNiNzYALwAAAGZvbnRzICYgbWF0ZXJpYWxzL0RJTl9Qcm9fQm9sZF83MDAgU0RGIE1hdGVyaWFsACAAAAAyYTA2MTNlMGE4MDRjYWI0OGI4ZDBkZWQyM2E4OWRjMwAzAAAAZm9udHMgJiBtYXRlcmlhbHMvTGliZXJhdGlvblNhbnMgU0RGIC0gQmxhY2tPdXRsaW5lACAAAABmZDUzZDA2YTdjMDYyOWY0MGIxMmY3ZTUzMDVlZDFiMQA5AAAAZm9udHMgJiBtYXRlcmlhbHMvTGliZXJhdGlvblNhbnMgU0RGIC0gQmxhY2tPdXRsaW5lTWFza2VkACAAAAAxODJlNzg4YjVkZTNhZGE0ODhjNDJlZjE0MWRlNGU1MwA6AAAAZm9udHMgJiBtYXRlcmlhbHMvTGliZXJhdGlvblNhbnMgU0RGIC0gQ2hhdCBNZXNzYWdlIE1hc2tlZAAgAAAANWE5YWI1M2YzN2Q5ZTNmNGJiMmEzOGExNThlNzRmM2UALQAAAGZvbnRzICYgbWF0ZXJpYWxzL0xpYmVyYXRpb25TYW5zIFNERiAtIE1hc2tlZAAgAAAAMjBiZjY3NmI5ODEwNGU1NDQ4MzlmZTMyYmVjOTIwZjIANwAAAGZvbnRzICYgbWF0ZXJpYWxzL0xpYmVyYXRpb25TYW5zIFNERiAtIE1hc2tlZFNsaWdodEJvbGQAIAAAADgyOWU4YTk1YWFlMjYwNDQyYTI0NmYyNmY1MjNmNzNlADEAAABmb250cyAmIG1hdGVyaWFscy9MaWJlcmF0aW9uU2FucyBTREYgLSBTbGlnaHRCb2xkACAAAABmMDA2NzZkMDcxZjI4ZjM0M2EwYzA5MDE3NmQ2MTNkNwA0AAAAZm9udHMgJiBtYXRlcmlhbHMvTGliZXJhdGlvblNhbnMgU0RGIC0gVHV0b3JpYWwgVGV4dAAgAAAANTZiZjY2YmNmZDJiYzFlNGU4ZDM0YTBmZjIzMDJlMzMAMwAAAGZvbnRzICYgbWF0ZXJpYWxzL0xpYmVyYXRpb25TYW5zIFNERiAtIFdoaXRlT3V0bGluZQAgAAAAMmY1YzVmMmYxMWEzNDRiNGFhNzkyODkxYjZhZjVlNTAAKgAAAGZvbnRzICYgbWF0ZXJpYWxzL0xpYmVyYXRpb25TYW5zIFNERiBBdGxhcwAgAAAAYzkyMGVlNWI0NGUwMjVmNGI5ZDliNzVkMjU5ZDIyNDkALQAAAGZvbnRzICYgbWF0ZXJpYWxzL0xpYmVyYXRpb25TYW5zIFNERiBNYXRlcmlhbAAgAAAAOTU1NTgwZmViMzcxNjJhNDc5M2E3MjZkMmRkNmMyZGQAMQAAAGZvbnRzICYgbWF0ZXJpYWxzL0xpYmVyYXRpb25TYW5zIFNERiBQbGF5ZXJJbkdhbWUAIAAAAGRkYjFmMTMwYzMzNmU3ZDQwODY0NjlhYjQ3MzQ2MmJiADgAAABmb250cyAmIG1hdGVyaWFscy9MaWJlcmF0aW9uU2FucyBTREYgUmFkaWFsTWVudSBNYXRlcmlhbAAgAAAAZTU2ODI2NWNmNTE1NTM1NDRhYzBiOGQ0ZjAyOWQwNGQAKgAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zSlAtUmVndWxhciBBdGxhcwAgAAAAMzNjOTdhMDI5MjIxZDI5NDJhMTlkOTg4MDY4MDk2YzkAMwAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zSlAtUmVndWxhciBBdGxhcyBNYXRlcmlhbAAgAAAANzVjOWI1YTliN2QyM2Q2NGJhMmQ4ODNkNmNkMjQzNjYAKgAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zS1ItUmVndWxhciBBdGxhcwAgAAAAYmZlMzI5MzAzY2NmOWM2NGE5Mzc0NmM2NGUzNmU3NDgAMwAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zS1ItUmVndWxhciBBdGxhcyBNYXRlcmlhbAAgAAAAOThiMzlhMzNmY2VmZjhkNGY4MDA0ODhiODExODBjZmQAKgAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zU0MtUmVndWxhciBBdGxhcwAgAAAANTJmMDEzYzYyMmY3MThkNGJhMDZmNTRhM2ViNWQxMWMALAAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zU0MtUmVndWxhciBBdGxhcyAxACAAAABjZjNjNmYyYjljYjZjN2I0YzljZjMwMWZiY2VjNjQwYwAuAAAAZm9udHMgJiBtYXRlcmlhbHMvTm90b1NhbnNTQy1SZWd1bGFyIEF0bGFzIDFfMAAgAAAAZWZmY2QwZWNkNDEwMDBlNDNiYjdlZTEwMmFiNWQ2NzAAMwAAAGZvbnRzICYgbWF0ZXJpYWxzL05vdG9TYW5zU0MtUmVndWxhciBBdGxhcyBNYXRlcmlhbAAgAAAAODljYzkyMTFkMWNmYTI2NDc4Mzg5YzEzOGU4YjBjMjEAIwAAAGZvbnRzICYgbWF0ZXJpYWxzL09DUkFFWFQgU0RGIEF0bGFzACAAAAAwNTY3YzA4N2VhZGQxZjg0NDlhMzdkMzcxY2VkMjRkOQAmAAAAZm9udHMgJiBtYXRlcmlhbHMvT0NSQUVYVCBTREYgTWF0ZXJpYWwAIAAAADVmN2QxMmRiZTAwMzIwNDQwYjRiOGE2OWU4Nzk4MzBlACMAAABmb250cyAmIG1hdGVyaWFscy9WQ1IgQmxhY2sgT3V0bGluZQAgAAAAMDc3MDU4ZTUzZTZmOTk2NGU5YjQxYzNmZTFlNWIxOGEALgAAAGZvbnRzICYgbWF0ZXJpYWxzL1ZDUiBTREYgLSBCbGFja091dGxpbmVNYXNrZWQAIAAAADljZjM2NmYxYTAzZjIxMTQ3OGQwMjM0NTMwZDJkNmM2AB8AAABmb250cyAmIG1hdGVyaWFscy9WQ1IgU0RGIEF0bGFzACAAAAAzYzA2Mzk0MzM4MWJlMGQ0MjhiN2I4MDExY2FkNTQ1OAAiAAAAZm9udHMgJiBtYXRlcmlhbHMvVkNSIFNERiBNYXRlcmlhbAAgAAAAZmFiZjdiZTQ3M2E4NTQ4NDliZjQ1ZjM5MGRkY2MyNTMAKgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZm94IGhhdC5hc3NldAAgAAAANGMzN2I2MzdmYTQzYTYzNDFhN2U4MDVkOWZkZjM3NWQANgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRnJlY2tsZWQgUGhlbm9tIGhhdC5hc3NldAAgAAAAZjExMGMxZTE5ZjBhZDY5NGVhMmMwNDFhM2U1NmY3MDAAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZnJlbmNodG9hc3QgaGF0LmFzc2V0ACAAAAA4NTU3YzM4Y2ZiMTc2NWQ0NGJiMGU5NDdiY2Q5MTcyMAAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9mcmV5enBsYXl6IGhhdC5hc3NldAAgAAAANjk5NjZkMmY1NTg5YWRiNDI5YmIwNGQ5NzBhNDk5NDEAOwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRnJpZGF5IE5pZ2h0IEZ1bmtpbiBoYXQgLmFzc2V0ACAAAAA5YzgyOTk5ZDgyODZhZmY0NTkyNTMzMDJiNzA0ODU4NAA9AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9GcmlkYXkgTmlnaHQgRnVua2luIGhhdCAyIC5hc3NldAAgAAAAZmMyMjVmNDkxNzIzODUyNDA5NDE2ZmIyYzEzNTAxNzkASgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRnJvZyBoYXQgcmVkZXNpZ24gKG9yaWdpbmFsIGJ5IFJlc3NuaWUpLmFzc2V0ACAAAABjMzI2MWM5MmU5ZGM3NjI0Y2IyZDFkYmE4YjZkZWE3YwArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9mcm9nIGhhdC5hc3NldAAgAAAAMDNkOTQwMjFkMTFjNDcxNDRhZWJlYmI4ZWNmN2MxOWQALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvRnJvZyBoYXQxLmFzc2V0ACAAAABkY2E5NGUwZmRlMjkyNmM0Mzg2YmNlZjZmYTRkZjJjNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9HN2VyYXJkIGhhdCAuYXNzZXQAIAAAADBiNmQwYmEzY2RhZDcwMTRmOTI2MDU2MGRjZTg0MWEyACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0dhYXJhIGhhdC5hc3NldAAgAAAAYzQwNGM4NGI4N2YzYjZhNGI4ZWM3NTc1YzhlODE2NzEAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR2FsYXh5YnJhaW4gaGF0LmFzc2V0ACAAAABmY2M2Zjc3NDA4ZDE0NDc0ZWJmYzQ2ZGI0ZmEyY2M2YwAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9nYXJiYWdlIGhhdC5hc3NldAAgAAAAOWFjZWQ2OGM0NTJlMzc2NDM4MGQzMWM5YTFlOTY5M2YAKgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZ2F5IGhhdC5hc3NldAAgAAAAZDM4M2EwODQ0ZDNkMTlkNGY5YWE1ZmVlYjNlMTMxNTUAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR2F5LW55IERheSBoYXQuYXNzZXQAIAAAADZiOWNkNjI1MGU3ZGMwNDQ1YjgxNjgyZGM3MzM4N2FmAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0dlbmdhciBoYXQuYXNzZXQAIAAAADIzOTQwN2Q3YWU4NzliNDRkYjQxNWIzOTU4NTI2NjI2ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0dmcm8gaGF0IC5hc3NldAAgAAAAYmMyYTE5MzYwOWU4ZmQwNDE4N2VlNTRhMDg5MGE0MzQANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR2Zyb3NMb3B1bm55IGhhdCAuYXNzZXQAIAAAADg0YTQzOGNmOWQwMjBkNDQyYjYxNDJiMzljYWExM2RhADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2doMDBzdGllX2YgaGF0LmFzc2V0ACAAAABkNjIzNWRhNjRjNDJkOWE0OTgxNGJmNjgyYTVjYzM1OQAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9HaG9zdCBoYXQuYXNzZXQAIAAAAGNjNzcwNzI4ZmViMGEyMzQyODMxOWMwOWQyODI2NWRjAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2dpYWNvbW8gaGF0LmFzc2V0ACAAAABkNDc5NjE2YWM4OGZkNzc0N2E1YmE1MjdlMGVlY2YzNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9HaWRkYXdpZCBoYXQuYXNzZXQAIAAAAGM3ZGRhN2Q0NmM0ODQ0OTQ0ODkxMDYxOTgwNjhhZjc4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0dpZ2F3b2xmIGhhdC5hc3NldAAgAAAANzk2MDcwYjM2YTFlZWE3NGQ5Y2I0OGIxNTMyZjRiZGIAOAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR2luZ2VyYnJlYWRIb3VzZSBoYXQgLmFzc2V0ACAAAAA4ODgxODY2YzIzMzA0ZjE0ZDg2YzYwNTE4ZGEwZWUyYQA2AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9HaW5nZXJicmVhZE1hbiBoYXQgLmFzc2V0ACAAAAA2OWE1MzM0NDI5M2MxOTM0Nzg2YmY0YTY3NWRhM2ZjMQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9HaW5nZXJDYXQgaGF0LmFzc2V0ACAAAAA4MjVjYTA5MDc5YThiMjk0NDg1OTdiZjI3ZTk2ZmFlZAAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9HbGFjZW9uIGhhdC5hc3NldAAgAAAAN2E0YjYyODcyNGY2ZjhjNGI4NzRlMGVkYWFiMTVkYTcALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR2xpZ2FyIGhhdC5hc3NldAAgAAAANTk2ZTliMjFlZmJhYjJkNDNhNmYxODM2NTU5ZDA3N2QALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZ2xpdGNoIGhhdC5hc3NldAAgAAAAZTc1YTRhMDJhMzliMGMzNGU4YmFjMzcwMTNmMTEyNDYAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZ29rdV9oYXQuYXNzZXQAIAAAADRlZTdiZTY5MTZlNGU2NzQyYmM3ODhmNTBjZmFmODMwADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0dvbGRlbiBCb2kgaGF0LmFzc2V0ACAAAAA2MTQ2ZjZhZGViMDE4ZGM0ZTk0NzViZDNmMmNkYTZhNAA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Hb2xkZW4gV3JlYXRoIGhhdC5hc3NldAAgAAAAMmYzNmFiYzU1ZmVjYmEzNDliYmE2NjNmN2MzMmYxOWUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvZ29sZGZpc2ggaGF0LmFzc2V0ACAAAABjODQ1NGZmMjAxMWJmMzg0YWEyZjM1NGU4MDA5MzRkNAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Hb21leiBoYXQgLmFzc2V0ACAAAAA0MmNlMjU0OWM3N2IyY2Q0YmIyNmI2MjM2ZDYyNTZlOQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Hb29kIEF1cmEgaGF0LmFzc2V0ACAAAAA1N2VmOGRkYWJhMmFkMzQ0NGI4NDYxNjRmYTRjODg2ZgAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Hb29nbHlFeWVzIGhhdC5hc3NldAAgAAAAZTVmOGRhOWY5ZDk1YjYwNDdhMmMwZGNhOTcxNDJjZjQAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR29vc2VUcm9vcCBoYXQgLmFzc2V0ACAAAAA2NWYxZmZhYTRiNjkxZTc0ZmEwM2NmY2QxMWM1MTgzZgA1AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9nb3JpbGxhcGhlbnRfZiBoYXQuYXNzZXQAIAAAAGI5ZjI3YmUwNmM4MzUxZDRhOTNhY2JlZjQ1MDE0OTZkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9HcmVla0dvZC5hc3NldAAgAAAAMTA1MDQ3YzdhYjYxNDNlNGFiMzJkYTY0YTE3MTRkZWYAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR3JlZWtHb2QuYXNzZXQAIAAAAGMyZWMwMjZlZThhOTM4MDQ3YjU1ZDRkNjg2YmU0Y2E4ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2dyb290IGhhdC5hc3NldAAgAAAANzQ5MmQxNmIyNGI3NjU4NGZiNmNhNjVmZjVkYzA4YWQAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvR3J1bXB5IENhdCBoYXQuYXNzZXQAIAAAADA3YWRmMWE5ZGEyZGQ1ZjRiYTUwMTUwMTc3YjRmNDNiADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0d1YXJkaWFuIEFuZ2VsIGhhdC5hc3NldAAgAAAAYzVkMzZkNjFiODA0OThhNDM5YTFhMjg5N2QxN2NkMGQAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvaGFmdSBoYXQuYXNzZXQAIAAAADg5ZTZlZDEzM2MxYTRmZTRjYTkwZTg1MzhkNmM4ZmQ3ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0hhZnUgUGVuZ3VpbiBoYXQuYXNzZXQAIAAAAGMzMTJjYTY0N2UwODNhYjRkOTZhYzMyZTg1NjM4ZGY1ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2hhcmxleV9xdWlubl9oYXQuYXNzZXQAIAAAAGQxZmY2ODJjN2YzNTczNDQxOGQzNmQwMWUxZmFmODExAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2hhcnJpZSBoYXQuYXNzZXQAIAAAADRiMWFkYTBhY2E3ODczNzQ3OTA1Y2NkMTMxNjc0ODkzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDAwACAAAABmMjI1NmEwY2E4NjBlZmY0NWJjYzU0ZWY0NjdjMTBhNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAwMQAgAAAAMjcwYTlhZTdmN2JiMGUzNGZhYWY4Nzg4ZDcyNjJhZGIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMDIAIAAAAGJjYjBkZGU3Mzk1YWM5MTRhOWJiM2U1OWI2YTM5MDk0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDAzACAAAAA2YTAxODFjMTE3NDcyM2Q0ZWIwMmM1NzNkYjJiYWIxNgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAwNAAgAAAAYjRiZDE1OTZjNTk2Y2I0NGQ5YmM1YjUxMDczM2FlNTIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMDUAIAAAADA2ZWVmMjkzMWMyMzg4NzRkOGU4NzlkNTJjZGMwYjUyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDA2ACAAAABiNTBmZDVlMDIwZWVkODM0ZWI4ZDk3ZDFkM2NmNzRmMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAwNwAgAAAANWUwZGM5NTExZWY2NDFkNGY4NDNiNjRhYjdiOGQzMTYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMDgAIAAAADI1MDE4Mjk3ZDBjMjQyZDRhOGRhOTBlNmEzZmQ2ZmRmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDA5ACAAAAAxNmIwNWYzOTJhNTdmY2Y0Y2I2NTFlMzEwMDBlODU1YQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAxMAAgAAAANzk0YjcxYjI4NjViODdlNDNiNGJjMzA4MjBkMTdhZWMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMTEAIAAAADk4MDQzMmFiMmIxMDRlZTQxYTBmMTNiZGQyZTRiOGY0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDEyACAAAAAwMmNlOGFkNDMwNGIyMjc0ZGJkYWMwYjI5ZDkyZGFkMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAxMwAgAAAANzAxMDQ4MTNmMjRmZTFlNDhiNzJjZDJlN2M0Mzk1MTUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMTQAIAAAAGI3MDg1ZWY5ZjQxMmEwNDQ3YTNmMzdhMTYyNTY5YTg4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDE1ACAAAAAyYTY0YjkzZWQyY2IxNDQ0MmE0YmZlYmQyOTMyNDM1MwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAxNgAgAAAAYzNhMjQwMzA3Y2Y3YTgwNDc5NzJkNTVmYTMyNmY4YzMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMTcAIAAAADcwOTk2NGZkODNjMjJiODQ0YjZmYTk0YmMyZmFlOTYzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDE4ACAAAABmNGViZTdmMmQ1NDY1MDg0ZjkyMDQ3YTFlNmY3OThiYQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAxOQAgAAAANjU3YzVlYzA4MTdiNzQ0NDFiYzBhMGQwODQ1OTk5NDkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMjAAIAAAADkyMjQyNzM0MWVjYTY2NDRhYmVkNDY1MjY0MGJjYjAyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDIxACAAAABhOWMwNjM3ZjI5Njc1Njg0MmE3YTI4NDlmY2NiMjFiYQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAyMgAgAAAAZjJjMGQ5YjNjMjJmNDY4NDRhZDNiZDMzYzViZmE5ZmMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMjMAIAAAAGRjYTE4MGI1NDQ1MTg2MDQwOGYzZDU2ZDQ0YzY2YjA4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDI0ACAAAABhNWZmNGQ2ZDY1ZTdmMTM0Nzk1YzZhMTYyYzEyM2MwYgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAyNQAgAAAAN2QzYWRlYzFkYzQzMTAzNGQ5YjkyNjMzYjA0YmYwMDQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMjYAIAAAAGNiYjhmYzU5OWFjYzVkOTQxOGM0MzY0OTk4OTNlM2I0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDI3ACAAAAA0MWZmZGUwYWUwZmMxZTQ0NzlmNWU4NjVmYjNmNDhmNAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAyOAAgAAAAODZhN2IyYjgxMzFjZWFlNDJiMjU5MDU4Njc0ZmNhZGYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMjkAIAAAADI1ZTRiNDgwN2ZiN2RhMzRlOWVkNzkxNmM5ZjAyN2NjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDMwACAAAABmYjM1MmZiODEzMTRmNTk0ZDliODkyZDRhMjZiNWFkMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAzMQAgAAAAYWNhYzIxODlkOTJlYzI4NDRiN2RiNWNmNzUwZmQ1OWQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMzIAIAAAADI4YzVmOGYwNzQ2Y2VmYjQ3OGUzZmEyMzM3YWM4NDY1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDMzACAAAAA4MWQzNmQ4NjAzNGE0Y2U0ZDhmNzkxYzI2Y2E3Y2MyNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAzNAAgAAAAY2ExZGY3M2MzZWI1ZTI3NDU5YjIxOTRiZjhkYWZjNjYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMzUAIAAAADc0NzRiOTk2N2ExNmFkYjQzOWE0NzZlMWJkNWQ5YzdjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDM2ACAAAAA1NDU5NmYzNGExMTkwODA0OTkyZmQ2NzA0MDc1ZDg3MQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDAzNwAgAAAAZjg2ZWVlNzNlNjliZDQ1NDhhMTczODMxZTFmN2VjNWUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwMzgAIAAAADc4ZWZkODViODAxMzk2NTQyYWU4ZjA5N2UxMjg1YTVhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDM5ACAAAAA1ZjEyOTY1MjM3NjhjMjg0ZDlkYjhjOGJmMjYyYmY0ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA0MAAgAAAAM2IwNjFhNzIxYjE4MDc2NDU5NjRjNmYxN2ZlZTAzMGEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNDEAIAAAAGQ1NzAyM2NjMWUwNDcyMTQzODY5OTUzMWYyMDIyNzAxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDQyACAAAABkNTVjMWYyY2I0ODA3YjQ0M2IyMDZhYmZkZDQ5YmJjYQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA0MwAgAAAAZjIwYTE2MmFiNTdlNzAzNDZhNGU1N2U0ODAzMzdjMmUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNDQAIAAAADM5NDkxMjA2NWE0ZTMyNDRlYTVmYzQ2OTM3MDY0Y2QzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDQ1ACAAAABhOWJkNmZhMzEzMzNlNDk0YTkwOTUyOGQwMGY0OTVkOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA0NgAgAAAAMGJiMmVjNmNiZmI2ZjI5NGNhMTU5ZTUyNmUyNTNhMDUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNDcAIAAAAGM1NjBmZDY3Y2UxNzc1NDQ1YTdkZjQ3YTU4ODQxYzEyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDQ4ACAAAAA0MWU4MzlmOTQ5ZmNjNDM0NjgxNTEyOTAxMjg4YWJhZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA0OQAgAAAAYmY1YjhlYjlhYTYxNTdjNGNiODZhZWIzNGM3NGQwZDQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNTAAIAAAADgwNDFhYTU0YmYyMTFjNTQyYWQxMWJhMTBlZTRkZmY5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDUxACAAAABkNTViZGZiMTg0NTZmOTU0OGI5OTQyYWUwN2QwODkxNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA1MgAgAAAAM2Y4MzQ4YzI2MjFlOWI3NDY5NzEyNjIwM2VmMjY1NDEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNTMAIAAAADQyNGI2NDhiZTI5ODg3ZDQ0OGQxZWZmMjZjOWU0NWYzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDU0ACAAAAA5YWE5ZDI2NzRhYzBjNmY0N2IwMWRiOTM0NGY0M2JmZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA1NQAgAAAAZjlmOGM4ZGQzNTFjNTlmNDhiMGNjMmJjYjNjMjc4NDAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNTYAIAAAADA4ZjZmM2IwM2MyM2NlNDRiYTRmNWUwMWE2ZDk0OTA2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDU3ACAAAAA0ODRiMWEzZjMzMTZhOTk0YmJkMmFjYjdlOGZhNzUxMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA1OAAgAAAAMGViNDZiNTQyNjEwNzVhNGU4YWI1Y2I5ZDk0ZTBiOGIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNTkAIAAAAGVkZTQ3NWU0ZmNiMjg3MzQzOGQ0NTgyODdmZTRjYWZmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDYwACAAAABhMjQ2NjJiNjM3MTMyODM0YmFmZTk2MDVlNWMzYjM4NAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA2MQAgAAAAN2E4ZGZlOWIzMzI5NmQ5NDNiYWRhY2JjZjhiMzAxNzMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNjIAIAAAADMwZDM5ZTNiNDUyYWIyMzRjYjNjY2YwNmUyMWY3ODM2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDYzACAAAABhMzQyMTZmNzI0MWNkNjU0MzlmZDRmZGMwMDlmYWViNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA2NAAgAAAAOTMwMGIwYWVlZGQxMGFmNGFiZmJiZjM0NzY2MTk4ZjIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNjUAIAAAADEyMjZmOTJkNzY3ODc5NzQ3YjhhYWFiMzc4Njc1NjBjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDY2ACAAAAAzYjQ5OGZhMDZlNDI0NDU0NDk0YmI2YTcxZmEwNTkxMgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA2NwAgAAAANjdlZGNlMDllZGU3M2ZlNDlhZDdhYzI0ZGI4ZjE5YjQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNjgAIAAAAGYzNTlmMWU3OTIwZWQ5MzQzYmY2MDdkY2UyMjZlOTdjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDY5ACAAAABjYjFjZDBhNzg3M2NmODA0MDljZDFjNzFkMmYwMTJlMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA3MAAgAAAAZjM3MzBkMTY4OTA1MGZiNGM4NTg3MjU0YTRjMTEwNTIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNzEAIAAAAGJmMzRhMTg5MjJiYWQ3MzRhODhhZjI1ODBiN2ZlYWEzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDcyACAAAABkYzczYjhlNTMyNDRmZjE0Mjk3ZTIzY2RhYzUwYzU5ZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA3MwAgAAAAYTU3ZmVhNGNhNzA4YTNmNDg4MzgwMThmZGQyNzc3ZTIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNzQAIAAAADliODYwMmU3ZjNlMWVhNTQyYjJkMjQ3Mjg0Mzg0MmM3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDc1ACAAAABjZTFlYjgwMzZkOWI3MWQ0ZTk1Mjc0NWQ4MzMyOGI0YgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA3NgAgAAAAMDU1NTNlOGI4Nzk1NTc0NGRhMDY5ZmNmNmZjNWVmMDYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwNzcAIAAAADZkYjAxN2Q1ZjViMDc5ODRhYjQ2YTdiZGU4MzViODhhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDc4ACAAAAAwYTI5MzA0NGNiZGEwOTU0OWIwMjk5YzYyZjVkMGQ0NgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA3OQAgAAAANDQwMGY2OWE0MzgwYmRjNGM4NDcyYzI0ZDIzZGQzOTIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwODAAIAAAADRmYTc0ZGYyZjgwODBkYjQ4YjI4MTU2NjMxYjE1MDMzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDgxACAAAAA0MTRmODIzM2JiZGIwNDk0NGFmYzg1MGQ1MTkwNjQwMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA4MgAgAAAAMTY2MDI5NWFkYWM5NzIyNGI4ZWE0ZGUyYzAwYWZlNmIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwODMAIAAAAGE4Yjg5MjViYWY3ZDU1NzQ3ODM5OWYyMjE5YzNjOTk3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDg0ACAAAAAwMDZiMmE2MzdhOTEyNjc0Njk2MDUzNGM5MGZiMGZmOAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA4NQAgAAAAZTJmYmY0NzZiMGUxNWY3NDRhYWNhMTdhMTUyODkzZDIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwODYAIAAAADZjYjQ4NmExN2M5M2ZjMTRmODdlYjEzNzQwZjhlMjRhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDg3ACAAAABjM2Q0MzhlN2ZmZTlhYzM0MGI0MmEyYTFjOGQyZjE1NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA4OAAgAAAAZDk4NTZlNWViNDM2OWU2NGJhYWI2OGNhMzBlNDkzYmMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwODkAIAAAADZjZjJlNjMzZWQzYjgyNjRlOWU2YWYwMGE4OTI1YzFjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDkwACAAAABhNDJiMDg0NzFjMzIwMzM0MTllMWIxMzZlOGVhYjM4NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA5MQAgAAAANTE2Y2MwNjA2YzUzZmQ2NDRiZGEwOTg5OGQ1YjBlMGIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwOTIAIAAAAGEyMzM2ZmYyNGNlMTA5MTQ5ODY5MTcwMWE2MjAzYWY5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDkzACAAAAAyYjhiNGE3OTM2ZjNiZTg0NDlhMmU3M2JmNzBlMjM4YwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA5NAAgAAAANDEzM2RkMjBkOGIxMWNkNGVhYTFmMTM0YzNiYTk4YWUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwOTUAIAAAAGIxNjJkZTMyMGMxZWExYTRhOWU0ZGQ2MmNjMGJhNGIzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDk2ACAAAABiZjBkMjQ5YzhmMmRhNTk0ODlkZGM2ODU0NzE3NjVjZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDA5NwAgAAAAN2FjZmY3MDRmYjhkNmEzNDViNWM1MzgzZTdhYTMwNDkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAwOTgAIAAAADQ4NTVkYTQ3NzUwZGU1NjQ4ODdkYzYyMDEyZmJjMjUyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMDk5ACAAAABhNDRiZTFjM2JlNDg3N2M0ZTg2ODRhNDE5OTFjOGQ2ZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEwMAAgAAAAZmJkNTQxN2IyZDJmNTE0NDE4MGMwZDUzZGI4NWE2NzMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMDEAIAAAADk0MmE1ZjMxNjkxYzJlZjQxYmI2NjdkOWM4Y2MxYTg4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTAyACAAAABmNWU0MTM4MTQwNWMzM2E0MTlhMTcyZjYxNDAwNTJlYgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEwMwAgAAAAMmNlYjk2YWQzZWVjNGU2NDQ4MzE5OTA4NzlmZTYwYjgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMDQAIAAAADU5MzhkNjJjYTgyNzI3MjRiOTk0NTczOGY1YzViOWQzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTA1ACAAAABhOThkZTExNGRiMDQ4ODY0NWFmODhiM2Q3OGE2ODZmNgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEwNgAgAAAAYmVjM2JhNjMxMmE2MjFlNDhiMWZlZTk0MTlmZGMwYmEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMDcAIAAAADRiOGNiMTczYzkxMThmMTRkODI4MDdjNWZlZjFiZTAxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTA4ACAAAAA2ZjFkNzg2YmVjMjJhY2Q0MmIzZmM3MTM0NWE2ZTFjYQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEwOQAgAAAAZDVkNmEwMjA4ZTgwNmM4NDViYWUwODE5ZWQxYWUwYTEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMTAAIAAAADM2ZWQ4OTdkM2I4YTY4ZjQzOGNlYjM0YjExMmExMmMyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTExACAAAAAxNTVlZWE4NzNlYWViMDA0ODlhNzc5NTA2ZWZjMGYwNAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDExMgAgAAAAMDEzM2QyNGRlNjc3ZjMzNDA4ZmUzODUzODJhY2Y4NjgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMTMAIAAAADVkMDIwYTMyNGM5NDdkZjQ0OGE4YjliZjczY2Y3ZTAwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTE0ACAAAAAxMWFkNjgzNTE4OWU2MjE0YmEzMWVmMDA4OWFjZTU1ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDExNQAgAAAAMTZmODM4MmZkYTJlYTA0NGJiMjA3ZjIyYWQzMTMxYjkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMTYAIAAAADg4OTNlMjY1ZjgwOWQyNTQzYTJkNWQ4YTA2MGEyM2RjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTE3ACAAAABiNzY3M2I5NGM3MGZlYzE0Mjk4ZWMxN2FmMDQxZWNmZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDExOAAgAAAAYTQzZjI0YTU1ZGVhYjk3NGE5MTg3N2NlMWIzNjE0MzQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMTkAIAAAADlmNWExOGZlZDMxYjI0MjQ4OTFiNmM5MjNhYzhkYWJjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTIwACAAAABmNDllYjQ2N2IyMjU2MTA0NGJhZmE5MGNkZmI5MTMxNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEyMQAgAAAANWRiMzQ0NmI5YzU2MDMyNGJiNzk2YjBhNTg4YTBiOGEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMjIAIAAAADc1Zjk1MDQ3YzVjZTllYjQwYTc0ZTk5NDUxZmViNDUxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTIzACAAAABhNzYzN2Y1NTVkNTFmNTU0MDkxN2Y1YzNlMmYwNDY1YgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEyNAAgAAAAZTUyN2YzNTYzZWYwN2Q4NGY4MTljYmZjNzkzZGVjMjEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMjUAIAAAAGJjY2Q5NDUxZWVhMWRiMTQ5YTNmMDdiZmY5NWEzMjM0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTI2ACAAAAA2YTEyYWE5NWYyZDZiZGY0M2IyNzY4ZWQ4YjEzNGE5ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEyNwAgAAAAZTAwZGI2ZjVjNWUwZWJkNGY4ZmFjYTY0NWM5Y2NjMTMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMjgAIAAAADVmMzNiMzM2Zjg1ZWE3MjQwOWFkYTgxNmM2ZmM4NzkzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTI5ACAAAABmMGY3YTVjNzQ1MzY2NzU0NDk5ZTA1NDZkNWNhMmU2OQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEzMAAgAAAANTAyNGExMTRmYWMyNjUwNDFiZmI5ODkzOTZjZTgwMGYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMzEAIAAAAGY3OTNmZGEwZWI5OWJiMjRkYTk3NzkwMjEwYzU4NzMxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTMyACAAAABkM2E1OGYzYWJiZTE4MDM0ZTlmMjQyYjY5MGFhNmZhNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEzMwAgAAAAYzFiZjQ2ZGQwNDM2YzY2NDQ5YThmMTY3Y2ExYzI2OTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMzQAIAAAAGQxZTRhZmVmNzY2YjA1MzRkOTA4ZWQ3MDYyZTQyNjEwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTM1ACAAAAAyYzk4MWI4M2NjZGY4NWE0YmI1N2NiNjA3MWM5Yzg2NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEzNgAgAAAAOWNiMjI4NDYyOWY1M2ZmNDJiZjkyYjRkZDE1OGVkZDkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxMzcAIAAAADlkNDAzZjE0MTdiNzM0OTQxOGRjNDdiOTNmZTc1N2FhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTM4ACAAAABlZmQzY2M3NDQ3YzY1ZmQ0ZmE0M2ZlMDNkNTQwZTFlZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDEzOQAgAAAAYWNlOWU5YTllOTY0NDYwNDA4M2NlNzlkODUwNGYzZDcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNDAAIAAAADE5MWQ4MjBmNjcxYjJiODQ0YmZiYjMxMTdkYzE3NmYxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTQxACAAAABlODhhYTM3NGUzYmMxYjg0Yjk5ZWY1MWJiMTg5OTJiZAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE0MgAgAAAAYmY2NTgyMWQ5YzdlMGQwNGQ4OGQxNGVkYjIwYzgzNDEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNDMAIAAAADU0ODcwZWQ4ZjY5MGM0MjQ3Yjc0YzBiODI3Y2QxNzJkABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTQ0ACAAAAA2YzU3MWIyYzUyNjY5ZTA0MGIwMmJlMjA1OGE2M2Y1YgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE0NQAgAAAAYWJiNzg2Y2FlMzQxOTliNDVhZWI1YmMwODVhOWRlNjEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNDYAIAAAAGNlNGZiMzgwYWEzOGE3MDRjODc4MTI0MGViN2E0ZTgxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTQ3ACAAAAA1YmYzNDAxZWRmZTY2ZDU0YTgxZDdlNmZjMDhmZDM3OAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE0OAAgAAAANjYwZDM3MzhjMDQ5YzM1NDk4NTgyNmU2ODEwN2VjYmQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNDkAIAAAAGQ5MTczNTQ0NmUxMDQyZDQzOTgzYzM3YzBmYzc0YzYyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTUwACAAAAAwNmRhMzRlNGYwYzAwNzc0YzlmNDk3MDdlOTE4ODE4MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE1MQAgAAAAZjU5MjEyZTBkMDdlNDljNDJhMGJjMTlhNzUyZWZmYjcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNTIAIAAAADc2NjEyNTQyYzA1YWQxYTRkOWJlNjk2NGNjMjQ5MzgwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTUzACAAAAAwMmUyZmI1MDU5MGIzN2I0ZmJhMjBlOGJlYmRkMTgwNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE1NAAgAAAANmUyMDQwNTM0MWJkNDhiNDJiNWIxYTkwZWUxZTc0NzcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNTUAIAAAAGYwOTJmM2Q4YzkyYmM5MDQwODE5OWJkMTFlNWM5ODIyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTU2ACAAAABhYzgzNGM5MGNlZjA2ZGM0NGI2Yzg0NWY2MzY2YjgyOAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE1NwAgAAAAZDM5YzVjMGNjZmQ5NTBiNDI4N2JkZmFmODQyNjg2NDMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNTgAIAAAAGE4MTBkYThhZmJiYTJiMTQxYmRmYTM4MTE0NDM5YzllABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTU5ACAAAAA0MzI4MDMxYjE5NjQ4N2E0ZmI1Y2U5YTk1Yjc5OGYxNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE2MAAgAAAANjAyMDIxMTQwMGMwYjgxNDZhNjgzMTFkOGQ2MTRiNmQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNjEAIAAAADVhNDllMzQwN2U3OWRmNzQ4OTE1YzBhYTU0YmMxMzM5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTYyACAAAAA2YmYwMTMzMjZkMGQ0NjU0ZTgxNzVkNWIwYzA2NWNjMQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE2MwAgAAAAMGQ1NTJhZjAxM2QzMGUxNGVhZmFiMGIyZTFiNGI4YWMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNjQAIAAAADU4NDgyZGNjYjMxZWVlNTQ2ODZlOWI0OGFiOGNiYTdiABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTY1ACAAAAA4MmMwMGE1YWNiMzg3MTc0MGE3OWU3YTlmNzgyMzk1MwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE2NgAgAAAANDFkYmMxY2NjYWE2NWFmNGJiM2JmM2I0YTFiZDk5ODIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNjcAIAAAADg5OThkODc0ZmYxZWZmZDRiYmMwOGQyZTBmNDViMjE0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTY4ACAAAABiYWUyYjMzMjY2ODMxMGQ0OTkyZjIxZDczYjQ5OTViNAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE2OQAgAAAANjlkMThjZTQ4NTFlNjM0NDQ5MjViMTdjNzQwNzMzOWMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNzAAIAAAADIyOTY2NWUwNWI4M2I4MjQ0OTdjODIzMjRhZTM3MTZhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTcxACAAAAA2NjBiOWFkYjQ3NzZkNWM0ZjhjMDk4ZDQyY2UzNmRkNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE3MgAgAAAAMWYwZGE2OGRiZTUyNmYyNDBiYzA3ZDZkM2NkNTY0MWMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNzMAIAAAADc1MWQ0MThjMGEyM2VlNTQwOGM1ZTc2YmM4MmRjNzhjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTc0ACAAAABmMmZiOTQ3ODUzZDAwMGQ0ZTlmZWRjNTk4YzAyZjA3NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE3NQAgAAAAMzIyY2I2MjI4MGJjZDU0NDBiOTU1NTViMDVhYWI4YmYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNzYAIAAAADkyYWVjNDU3NmE1Y2NlZDQxYWQ5OWE5N2ZmNmNkMTAzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTc3ACAAAAA1YWQyNzc1NTc0Njc2YmE0ZGE3YzA0MDk2N2JlMWJlOAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE3OAAgAAAANDkyYjNmN2IwZjRmNTY4NDliY2NiZDA3ZGIwN2YyYTkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxNzkAIAAAAGRlMzllZjRmMGFmZGI2NzQ5YTRkNjgxMDA0YmE5M2Q0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTgwACAAAAAyMWZjNTNlNWZmNDI2Yzc0NGE1ZDAxYjA5OWYzM2YzNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE4MQAgAAAAY2NjOTViNjgwMjg4NzI1NDc4OTUyMDhmMThlZGM0NDAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxODIAIAAAADMyMDBjZTY4NmZkNjYwMjQ5ODM3NTVlZjdiZGZlMzgzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTgzACAAAAAxMWY4MzdjZTQxOTA2ZDA0MTkxM2RhZjkyNTAwODRlOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE4NAAgAAAAYWQ5MDZjNDA1ZDRkZjhmNDM5ZWE3OGQxM2ZlMTk2YTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxODUAIAAAAGE4ZDZlYTEyOTJiM2FkMzQ3OGE5YmIyNzZkM2JhYTg3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTg2ACAAAABmOTU0M2NiMWE5MmIyM2M0NGEzNDhmMTAyODcyNTIxNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE4NwAgAAAAMWE1ZDVkMTMzZTFlNGU4NDhhMTVjMWFmMWJkMjk5OWIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxODgAIAAAADI1NTljMzA2MzQ4NTZjZTQxOGE5MGVjODFkNTA1MWVhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTg5ACAAAABmOGZkZDZlZTJkZDZkMTE0ZmJlYzE5MzQwNTk3MDQxNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE5MAAgAAAAMzEzYjIyMjU4NWMwZGQ2NDNiNzUyMjZkOGVkZTI4ZGQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxOTEAIAAAADdjZmI5Y2NiOWJkN2E4NjRkYjYzNTBmN2MyMGQ1MzU5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTkyACAAAABiNzUwMmJkZWE1ZmM4ODU0ODllODkwZWJmMWVhZmMzNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE5MwAgAAAAOTg0M2JhMDRkYmE2MDcwNDI5MWU3NWY5MmUzMmUxN2QAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxOTQAIAAAADYxNDk3OGU4N2E5NjE2NjRmODA0NTY2MjUzMGEyYTRiABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTk1ACAAAABkZTlmMjllODZmNDgxZjE0ZTkwMWFkMzNlMzVmMTU0OQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE5NgAgAAAAYmIxMmZlODRkNTFhNDcxNGZiYzE5MjUwNmFlYjhmZWIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAxOTcAIAAAADQ2ZjA5MTUyZjZhMWNiNzRhYThkM2U3MDE3OTQwNWU1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMTk4ACAAAAA0MWM5YWRmYWY1MzU2ZDY0NGI1ZTc0YTZmN2Q5ZjM2YQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDE5OQAgAAAAMzU5YmNkODRlZGEzZDc0NDRhY2E1YjdkOWNlNGNjYTAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMDAAIAAAAGI3NjYyOTcxYjI1NWI4ZTQxOWQ0MDMzMTI0ODRjNmU3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjAxACAAAABlNDg1OGNmNTdiMGYzNjQ0NmE0ZGU2NzA5ZGJjY2Q4MAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIwMgAgAAAAYjQ3YzRiZjk5YzY2NDU0NGZhY2U0OWU5NTFjNjMxM2QAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMDMAIAAAAGIxNThhYzIyNzczMGNjYzRjODg2ZjA1ZWZlY2ZlZTI1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjA0ACAAAAAxZDA4ODU4YjNhZDUwNDg0ZGI4NWQ0ZDc1ZjYwNTZlMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIwNQAgAAAANjcxMzg2MTA1MzJlMTBmNDJhNzRiMDFiMDc3YTI0NzUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMDYAIAAAAGJlNGU2YjkxZTViOTI4NjQxOGEzN2Q3MTZlYjA4MjAwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjA3ACAAAABjZjE0Y2VmYWEzMDkzMmM0MGE3MmNkMTE2YTBjNWFjOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIwOAAgAAAAN2FlNGRkMDA4ZDdiNjM1NGJhN2QxNzIyMmIzY2U2NGMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMDkAIAAAAGY1YTI3ZGYxZDJkOGJlYzQyYTY4NTdmYTZmNmMwYWNjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjEwACAAAABiYTAyMzRkOTM5MTgyMTA0YjhlZWYzYzIwZjYwOGY3YwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIxMQAgAAAAMDAzNmFkNGYzMzA2ZjA3NGFhOWEzMjczOTM4MWVkYmMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMTIAIAAAADRhNWE1Njc4ZmU4Y2RjZjQwYTQyYjMxNzYyMTc4YmQyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjEzACAAAABiMjY2NmNjMDU2OTFlMWI0ZGJhZmIxNjYyNGIwNmU2ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIxNAAgAAAAMDZiMDUwYzBiOGE0NDEyNDNiNzczOGVmZjliYWU4OTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMTUAIAAAADUwZGZlODExY2UzMDBlODQ0OTQ0Nzc5NmYzMjNjZmJmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjE2ACAAAAAwNTg2ZDM2NDJhMjZkZmE0NGE5YjExODUyODI5MzFhMgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIxNwAgAAAAMzNkNjU3ZTExMjhlODc5NDg5ZWViMWU2MWNmMTk4OTEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMTgAIAAAAGIwNTg5MTk3OGY0YTYwMDQ2YWE2YzM2NjU5NzcwNGNmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjE5ACAAAABlNjZhYjI2MzRhNmZiMzA0Y2I5ZjZiZTZjMGIwYTI4ZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIyMAAgAAAAMTcwMjlkMTQ2ODQ0ZTI1NGNhNGVmNWY0Y2Y0Y2FkMjIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMjEAIAAAADEzMGNkZGJjOTc3YjYxNjRkYTFkMjU4MTQ0ZTgyNjNjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjIyACAAAABmMTA3Y2ZjODM1NjhjZGE0ODhmOGYwNmU1MDQ2NzdmMwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIyMwAgAAAAY2YxMmRmMWViNzlmMDVkNDc5MWM1MzQ0YjgwOTEyMzQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMjQAIAAAADBiNWJkYWUwYzI5ZmFlNjQ2OGRhYmMxOTU3ZGY0NDE5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjI1ACAAAAAwZjFmZjM4Yjc1MTg3MGU0NGI4MDRiZWJmZmY3ZTkxNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIyNgAgAAAAYzk2NjFhNWUxN2VkZjlmNDliM2ViNjY3ZWI4YmUyMDAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMjcAIAAAADRkY2E1YzExOTg1ODJjMTQ1YWJjN2E0NWI0OGZlZTk1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjI4ACAAAAA5ZWMzM2QyMTE2NTE2ZDI0ZTgwMDhkOGNkN2MwMDdhNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIyOQAgAAAAMTMxNDU3ZGZkZmEyODI3NDVhMmYwYmY2MDZkMzU1Y2QAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMzAAIAAAADYzMzExZDZmYzIwYWQ5ZDQ3YjQ5YTA1MGQ2ODMxNGRlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjMxACAAAABmN2M0MmU0NTQwZmMyZjc0OGExMjBhNmY3ODY5OTg0NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIzMgAgAAAANmIwNTQ2MGQ4MGM0MjdhNGM5NzBiNDJjMmM5YzAxZjAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMzMAIAAAADRlYTk5NWRmOTRhOTQyYzRiYjllZmFkM2M0MGUyNjhkABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjM0ACAAAAAyZGFkMzM3ZWQ0MTJkNjk0N2JiMDcyYjNlOWQ2ZDE2MQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIzNQAgAAAANzg2ZmMzOGRiZjg3MzIwNDdhYWM5NmFkZjVkOTU4NDkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMzYAIAAAAGNmM2JiOTk2OTFlOGYwNzRmYjkxYzdiMDVkODFhMzIyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjM3ACAAAAA4Y2YxNTIwNWEyMzliOTM0N2JlOWQzYTNkZDY3MDE2MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDIzOAAgAAAANzM2YWExOGEzZWI4OGZkNGNhMTBjYThjOWU2MzU5N2MAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyMzkAIAAAADQzYWQ5OWI5MTk2ZjY2OTQ1OGQ4OGZiY2RiYzg5NGQxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjQwACAAAAAxNGViZmFjYTYyYzFiZTc0MGI3ODc3MTNiMTE5MDU4ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI0MQAgAAAAMDY4OWMxNWIzNDIyYTM2NGQ4MWUyMDdjMDNhNzE5YTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNDIAIAAAADExMDM2MTVhNmRmZDc1ODRkYWI2MmY2MWNlNjE2NTZjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjQzACAAAABkNDk3ODM2YzJmNmI1ZTQ0YmEyYTY4OGI3M2QxNGY1YwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI0NAAgAAAAM2M4YzNhYzhkNGY0YTZhNDhiM2M1MmY3NGYyMzg1NjAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNDUAIAAAADRkZWNmNmFiNmQ5MjhhNzRjYjcwOTM5ZDYyNGIxYTI1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjQ2ACAAAAA2MTY0YWM4ZmJmZmE4MDU0N2JhOGVhNTA5NzQyZWY2MAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI0NwAgAAAANDRhM2ZlODUwYmQ0MjQ1NGQ4MmE4YzU2YWQxMGJkZTIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNDgAIAAAADhlYTg2MmNmNGI0MTYwZTQ4ODYzMmQzNWYyYWM1ZjY2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjQ5ACAAAAA1ZWVmMjNhNDlkNzkyNjE0MmFlNWMzMGVlODJlY2FjZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI1MAAgAAAAZmQzODc5NDc4ODFiZWJhNDc4OTk1MjY5NTNhNWY0ZjEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNTEAIAAAAGJiNDdjYmYyZWVlZjYyYzQzYjJiZTA3YTk5Y2UyMDRmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjUyACAAAAAwZjc3NmEyMWJjZjBkZGE0NGExNzJkMmEyMDM1NjViOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI1MwAgAAAANGIyN2M2NmFlZTFlYjg0NGZhMmUzNjU1YzdlMjA3NmIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNTQAIAAAADc1YmJjYWI0YWNhNmI0MDQ3YjYwZjM2OTIzNzc2NDhjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjU1ACAAAAAzNTNkYzI3NjU1MGI0NzE0NjkyNGEwOTEwOWI4N2Y1NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI1NgAgAAAAMTE1MTVlMjZhYmZhMmE1NGNiYjVmN2NlOTg1OGQ5N2YAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNTcAIAAAADBjOTRlMzYzNThiMTVkMjQxODk4MmIyNGJiMjZiZWZkABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjU4ACAAAABhZDIyYjJkYmY2YjQyNDg0MGE2ZDViMTNiYzYzMzFlNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI1OQAgAAAAMzBiNmU2MGFiNTRjNmI3NDk4MDI4ZDVhMWIzOTU4MjgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNjAAIAAAAGY3OWZiYWU0ZDdlYjNmODQxYWI1MGE5YzY3Yjc1MTJlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjYxACAAAAA5MWZkNWM1YTEwOWQ1Zjg0N2JlYzBjNTkxNGM5NWRjMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI2MgAgAAAAYTE1OTMyZTYxODUyMDA0NGFhNmJkMWM1ZDBmM2I0ZTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNjMAIAAAAGViNmRiYmU3MzU5ZTQ3ZjQyODE2YTNmZDIyZGNmNzU2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjY0ACAAAAAwNTc5MTQ2YzIzOGI4Yzc0YmJkMzgwOGFhY2Q1N2E2OAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI2NQAgAAAAMTYxMWRkN2JiNzNkMGJhNGE4MmU5MDBlZjZmODdjYmYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNjYAIAAAADk1MmUxNTRlYzVjOWJlNzRhODlmMzZlOGM1ZGIyZmNlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjY3ACAAAAAxOTFkYjMwZmMzMmQxNzM0MjhlZTQwNDY1MjY1ODBiYgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI2OAAgAAAAODFjZGZkZTNjZjc4YTUwNDE5NmNjYzk0NWI5M2FiZjcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNjkAIAAAADA3NTg1YmQyYzczNTk2ZjRjODVkYzYzYzgzMDliMTIzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjcwACAAAAAzMTQ2YTdhOGViZjI4Yjc0NmE2Nzk2ZGI0MDkxMTViNgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI3MQAgAAAAMjAyNDg4YmZiZjM5NWFjNDI4MTliNjE0ZTY3YjVjMDUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNzIAIAAAAGIzOWY0YTA4ZjE1NGIyYjQyYmIzN2EyNDYxOTJiMGM5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjczACAAAAA4MjdhNzMzMDE2ZGJhM2Q0YTg1YzdlZWVhN2ZhYTA3YQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI3NAAgAAAAZWQ2MDg4ZjM1OTA3MTRkNGZiNzI5MThmM2ViZDA2NTMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNzUAIAAAADhkNjg1ZGI4MzMwMTAxODQyYWU4MTlmNTVmNTc1MDc3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjc2ACAAAAA2ODEyYWMzMzM5NGFkMDg0YzhiYmUxZWE2NWIzYWQ5MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI3NwAgAAAANzdkY2E3ZDUyNzQwZGY3NGJiZTQ2ZTVhZTgxYmQ3YzQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyNzgAIAAAADA0NjlmMDUzOTIyYzBlMjRlYThjZDU1YjJmYTRkZTY3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjc5ACAAAAA0MDczMzFiNzAzNWQzZDQ0ZTgzYTBmNDUxOTg3NmE2YgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI4MAAgAAAAM2FjNTk0ZjRkNzcxODY2NDU4YTRjOTZhNDczYTc1YzMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyODEAIAAAAGY1MmNlMzJiYjQyOGJhNTQwYWZhOTI3NTgwMGZlMzQ2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjgyACAAAABmZjc1MDE5MTcyYjgxYjQ0NTk4Mzg4YmVhMjUwMWMwMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI4MwAgAAAANjZjOGY3ZjU4NmRlZGFhNDhhZWFmZDQ0NTBkNjhhYjIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyODQAIAAAAGI2MWUyYjI3NWU2NjM3ZTQ2YTMzMzdhNzE1MmZmOTg4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjg1ACAAAABmMDM1ZmY0YzIzOWQ5N2U0Yjg1YmFjOGY2OWIwOWM0ZAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI4NgAgAAAANmJlMWQ3YzY3NjdhNjYxNGJhMjI4ZGE3OGMxMDU5NzEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyODcAIAAAADM4ZTg3ZTliODFjODk4ODRlYjI0MGM0ZDgxMmZiNzc1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjg4ACAAAABmYzllOGJiMmUzZjk0NGI0NGFmYzcyYTQ1NjNlMDA1NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI4OQAgAAAAZDVlYTU1NGJlNzczYWQ1NDg4YjY3YzBmZmRjNjNiZjMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyOTEAIAAAADJiNTgzNjVjMjNjMDJkYTQ3YWNmNzFiYTYzOGRhNWYwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjkyACAAAABlMzA4YzEwMWFiOGQ0ZGI0NDhkYjRkMTIwZDdhMjhhZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI5MwAgAAAAZGZmMzIyZGIwNDBlNmZlNGE4MmU2OWYwZWRiYWJiN2EAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyOTQAIAAAADc3YWFmMWU0OWMwMDFkNDQwOWEzNTQzODYzMGFlYzYwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjk2ACAAAAA2YWYxODA5ZGY4YWFjOWU0Nzg4NzAzMjQ5NGY0Yjk3MAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDI5NwAgAAAAM2M3YzBhYWIzMDg5MzQzNDZiYTY3M2EyMDU1ZDQwYTgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAyOTgAIAAAAGYwM2I1Yjk1M2QwMTM4ZTQ0OTZhOWE4ZTUxMzUzMDhlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMjk5ACAAAABlZDAzYTRkY2QwYjk1NDY0YTlmYjk5ZDg4MGI2NjZmMQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMwMAAgAAAAY2Y2MWE3MGU1ZWQzODM4NDk5ZDExNDEyZmYzMTVhZmEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMDEAIAAAADFjNmM2ODRlMDQyNzIyMzQwYmNhODAwYzgwMWZkNTNjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzAyACAAAABiNTE5OGE1ODgzMzFhYjM0ZTgzMTIwN2Q4YjhmYzc4NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMwMwAgAAAAMWVlYzI5MmE5ODcwMjA2NGFiMWI3NjBmMjUzNzJlMWIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMDQAIAAAADgwZDNhYWQ4YWM2M2I1ODQ2OGMyN2IyNjM5MWM0MGQ2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzA1ACAAAAA4NWU0YzNmNmE2NzdlMGY0NmE0ODBkMTk5NWE0MmQyMQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMwNgAgAAAANDAzZjgwODk4YmFiZWI4NGVhNjliZWEyZjY1YTJjMTAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMDcAIAAAADBhMDJiNmEzMmFkMjIzNzRlYTUzNzFhN2IwZGI3Y2MxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzA4ACAAAABhMTExN2I2OWEyMmRmMjA0MDg3MTc5ZGNhOWRiMDc5ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMwOQAgAAAAYjM2MzJiMWY3ZmQ5OGYwNDZhOWI4OGI4NTNhZTg1NWEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMTAAIAAAADEwYjNmYjExNDFkYzA3MjQ2YTc2NmJhNThkNDQ4YzY5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzExACAAAAA2NmUzOWIxOGEzNWU3Yjg0NTk2NmYxMTU0NDdlMGVmMgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMxMgAgAAAAMDIxZDM0YmQ0MzdiZTI4NGViZjliMmRmM2I1YmZjOTYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMTMAIAAAADFmZjg0NTQ0OGI3OWVmNzRmODRjOTY5YjhjOWU4ZDliABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzE0ACAAAAA3MGE5ZmIwZDQyMDAyZTE0NThhNTI2YWU0ZGQ4MzU1ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMxNQAgAAAANjA2NDg2ZTVmZGVjZDlkNDdiMDAwMmQxZDA3ZDFiZTIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMTYAIAAAADJjZTg3NzEwYjFiMmRmNTQwOWRkODI5MTlkOGZmNjI4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzE3ACAAAABhZDIxOTJkMGUyZDRiMmQ0N2E0ZmM3MDNhZjE4MjFhYwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMxOAAgAAAANTIzNGU4ZmRkMjMwMjgxNDhiODZiNGI4MzMxZDMxNzYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMTkAIAAAADhhMDVjOWJkYmRlZmJmYTQ1YTM0MTkzODEyOThhNmE2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzIwACAAAABjNDE1MGQxZmM1ZDliNDY0ZmFmNzI2ZDI1MzAzMDJiNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMyMQAgAAAANTY2NzIyNzIzMDQ3Y2U1NDg4MmIxYTRmNjIyNmNkYjkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMjIAIAAAADNkOWNhYmJlYjVlNmI5MjRjYmNiMGZlMjA2ZDkzMTc4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzIzACAAAAA5OTNlM2U5NmIxMzU2OWM0MjliYmNiY2ZlN2MyZDY5MAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMyNAAgAAAAMTgxOThmN2ZlMTY1MzdiNDQ4Y2YzM2ZmMGU4YWJhMWQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMjUAIAAAAGU4NDhkYzBiZTgzMTVmZDRlYjQxMWVhMmJkYTZhZmJjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzI2ACAAAAA5ODE2ODE0MTM5MzU4ODE0NTllNmQyMmZkYTI5MjM0YgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMyNwAgAAAANzk1MGE3MWQ4NGU0ZDQ4NDU5Mjg0ZGM1YmNkNjc5ZGUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMjgAIAAAADAzNjQzNzBmNGExMjUyYjQyYjNiZWQxNDFhNTFjNGNlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzI5ACAAAAAxNmFlYTA3MWNjN2MyZmY0YmI0MGUzYzE2YTc2NDVkOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMzMAAgAAAAYjRhYzBjMDY3YjQ5NzBkNGY5MTEzZDQ3MWE0MjQ3YTgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMzEAIAAAAGMyMGYwODM0ZDhjODE5NTQxOTBhY2FjZGZjOTNhYjYwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzMyACAAAABlNzQ2M2ZlMWIzODRmMmE0ZWExMDkxZDM2NmFlNTMxMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMzMwAgAAAAY2RjZmVmNzQ4NGYxMjEyNDQ5ZWNhYTg4MzZkNTM0YjgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMzQAIAAAADEwYjAwMTRlYjVkMjgxZjQyODJjNmM2ZGU3ZmQyZTRlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzM1ACAAAAA2Y2QwYmE0ZDliOGI0NWY0MmEwNmEzNDZhNjY4Y2Y2ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMzNgAgAAAAOTRkYzM0N2Y2ZGFjNTZlNGZhZTZiZGY3Njc4NTVkOTkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzMzcAIAAAADVmMWQwM2NiYTE3NDc0NTQzOTRiOWQxNzM4MmNkODM4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzM4ACAAAAA1NDljNDY0MDQ5NTgyZmU0Yzk2YTc5Yzc0MWQ1M2NlZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDMzOQAgAAAANTIzYzdjZjJhOTY4NmZhNDViM2ZmNjdiNTkzNmRhZWUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNDAAIAAAADM3MzJiMmJmNWQ5Mjc2MTQ3YmQxZmJjOTNmYTc1ODI5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzQxACAAAAAyYWUzY2Q5OWQ3ZTUwZTA0MWFmMTUxYjJjNGU0OTViNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM0MgAgAAAANmU5ODI2NWM2ZDM2NDk5NDVhMDNjNWIxNzdiYTI3YmIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNDMAIAAAADllNjEwZTVmNTlmYzQwNzRmODk2OTM1NzBkNWY3ZWFiABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzQ0ACAAAAAzOGViMTNiZTU5NjA2NjE0MmI5ZWZjYWI4YTVkM2U5MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM0NQAgAAAANGI1NmI2YzlmYWI3MTJhNGI5Yjc1NTc0NmM1ZGYyMTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNDYAIAAAAGZiYTdhYWFjNzZhOTRlZjQzOGRlZDA3YmE4ZGQ4MWJhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzQ3ACAAAAAxMjFkODU1MzllMDczNDE0NWFiN2ViNWY1YWM5MzIyNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM0OAAgAAAANmMyMTgyNzczYWUzMDViNDE4YTk4ZTBiZDcwM2RhZTUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNDkAIAAAAGZhNDkxODY0MWIyMGUzNTRhYjBiNTllNjI0NWYxYjkyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzUxACAAAABiZTYyNDM1ZWVkYWEyYjU0YmI2NjQ1YzE0NDllYTg4ZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM1MgAgAAAAMzZhYzcyODYyN2YxZjM4NDU4YjY5MGQzZjdkMjJjZTcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNTMAIAAAAGVjNWI3MDhkZTY4NTQxMzRkYTJlOTA2ZDc5YzQxNDJiABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzU0ACAAAAAwYzMyNjlkYTdiZWFjNDk0OThmZmU4MTEzZThhYmVhYgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM1NQAgAAAAYzAxNmMxYzQyYzI4YThiNDFiYTNlMGFkYjg3NTExMmYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNTYAIAAAADI2OWMxZDExNDRhNGRmZjQwYWFiMTExMjcyMzM4ZWU2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzU3ACAAAABlYzlhZjhjZjU1YzYzYTI0YjlmN2QxOTExYjFkNjQ2OQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM1OQAgAAAAYjM2NzY0MTUwNzAwMGQ1NDdhYWI2YjY4NmM2OThkMzAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNjAAIAAAAGM3MGJiNjUyNWY5NjBjMzRlOGI5Y2I0NzE1MzVjMzkyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzYyACAAAAA5ODljMjBmZDQ3M2JiMzM0MThmZjQ5MmZkNjVkNGM5ZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM2MwAgAAAAOGM1YmIzMzIyMjUzMDAzNDI4ZjU1OWZjM2Y1N2IxYzIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNjQAIAAAADEwNTJmMzdiYzNiNDcxNDQxYjNiOTBlNGY5NjQyMzliABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzY1ACAAAAAyZTEyN2ZiYTQyNTllZWY0NDk3YzdhMTBkNzhkYzNjNwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM2NgAgAAAAZGJhZDA5ZjM1NTBiM2EyNGQ4OWVhNWVjYTAwZWE1MTEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNjcAIAAAADBiMTk5Mjg4NTJlOTM0ZjRlODg4MTc3OWY0NGYzNjJjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzY4ACAAAAAyZmQ5NDFiNTc3YTAxNGY0NWI4ZTEwNjMyMzAwMWJjZgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM2OQAgAAAAYTk3MDAzMzc4MDFhMTc4NDU5MjliYTE0YmVmZGNkY2IAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNzAAIAAAADIyN2I1OGU5NDFmNmUxMDQwYmNiMDMyOTgwMWQ0MmEzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzcxACAAAAAyMzhhNDlkYTAwNmYzMmM0MzgxMTk2YzBhYjNkMWY3OAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM3MgAgAAAAMjY3MTRlYmNiNGZhNjkyNDlhNjY2OTY4MDNlZTlkYjUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNzMAIAAAAGU4MTQyOWM5NWJmZGExNjRlOWY2NDI4M2IyZGY1ZDQwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzc0ACAAAABhMjI1ODQ5ZjEyZWFlMTM0YWJkY2Y4ZjQ1YzVmMDk4NgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM3NQAgAAAAMTYxODI4MTk2MjhlMjZhNGY4MjJiZGI2ZDE5NzNiMGQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNzYAIAAAAGVlMjQyNzQ4NWRkYjY2NjRlOWJiYjQ0MzQxYjU4NmM3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzc3ACAAAAAxNjQ4OThiNWI3MGU3NGY0ZDkwNmE2OWQ4NjgxZmI4MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM3OAAgAAAAMDA0NjQ3NWI4YzQwMjcyNDVhNDZjMDkzODExZDFmZTEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzNzkAIAAAADlkZmIwN2M1NDdjNDFjYTRkOWExMDkwZWVjNzU2Njk5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzgwACAAAAA5YjZhN2IxOGMwMDk3ZTc0NWJkOTgyZGY1NWQ4Yzc0NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM4MQAgAAAAYjFmNThhNjdmZjk3OTBmNGViZTBiNTM0OTM3MGYzZDIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzODIAIAAAAGEwY2EzNmVjZDFmN2JiMzQzODcwNzZkZWVhNWY3ZWY5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzgzACAAAAAyN2MwMjc5MTY4ZDEyYmQ0OThmMDdkYTI4ZWM2ZDJkNAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM4NAAgAAAAZmVlNmViZGMxN2JiMzNmNGM5NjdjYjg2YTYzYWE5MjQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzODUAIAAAAGEzYjUwNjI0YTNmMGQ4YjQ5ODBmMTFmMGRiOTQyOTAxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzg2ACAAAAA5MWZhZTEyNjcxYmEwY2I0NWEyNTU2OWE4MGVlMjc5ZAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM4NwAgAAAAOTk2NGQ0ZWQzYTUwMzJjNGY4MTQ1NWE5NGVjNzY1YWIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzODgAIAAAADBjYWQyNGY0Mzc2YmU2YjRmOTk0NzA4YzMwN2MwMWMyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzg5ACAAAABiOTA4Y2RhNjk4MDQwYjM0ZmFmOTVhZWUzY2E3MWYwNAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM5MAAgAAAANGQ4OTg5MzQ4Y2IzMzJhNDY4ODAzZTQ5N2E3ZmYzZjEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzOTEAIAAAADg0OGM3ZmQxYzEwM2NmYTRkYjY0YTJlZjI3YjZmYTUxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzkyACAAAAA3NDQyNjlkZmRmNTI0NzY0MThiNmIyMzZkY2VhYjdiZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM5MwAgAAAAOGRlM2Q4MGM4ZjkzZTUyNDRiNGNhMzU0ZmY3YjI4YzgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzOTQAIAAAADU4NWI5ZmQ0ODM1ZTRjYTRhOWJmNDg0YWIyYjNjNWNmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzk1ACAAAAA0M2Q0ZWJiODYyZTQ5YmU0MzllM2Y0NjBlOGM5ODk3YQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM5NgAgAAAANjdlZGUyZGQzM2FlNzEwNGNhMWYxZjAxZjA5OGI3ZmYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czAzOTcAIAAAAGM5NTFmYmJhYmM4OWZkZDRhYTY4ZWYyMGI3N2FmMzFmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwMzk4ACAAAAA3OGMzYTUwM2U5OWVjYWM0ZWE5YTVkOTY3NDhjMmRmMwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDM5OQAgAAAANjBhMGUxZmU0YmQzMGQ1NDliNzA1YjRkMzZmOTRiZGYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MDAAIAAAADUzZTI0MDg5MjNmODU0OTQ1ODhmYTk3ZDNhMjdiMDQwABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDAxACAAAAA4OWM1Y2Q1OTU0MDdiNjg0ZTgzMjk4YjQ4N2Q4Yjc0YQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQwMgAgAAAAOTc4N2I3NDIzODM1NDFiNGI5NTczOGIzODNmOTZiNjgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MDMAIAAAADcwMjJlNGM4ZGE3YTljNzRhYTdhNTg4NjUwZjA2MTVmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDA0ACAAAAAwYmMyNWRjMjg4ZjBiY2Q0ODlmZGI2ODA0ZTc0NmZhNAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQwNQAgAAAAMDFhYjQwZDQ4ZDFiZDhmNGM4Njc5MGQzNGNlNDUyMDIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MDYAIAAAAGFjMzJiZjYxMTBhNTcwYTQzOTA1YjQ4YTA0NWRiMDFhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDA3ACAAAAAzZThkNDViZjM3MzQ4Y2I0ZGEwNDhhOTE1YmYyNTdlMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQwOAAgAAAAYWM4ZjMyMDY5Yzc4M2UwNDY4YjI1YzFmNDFmNmExZTEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MDkAIAAAADU2MGQ0ODhiMzZmNGQ0MjQyYTc2ZGZkZWYzYTZlNWVjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDEwACAAAAA3ZmYwNjI2YTA2M2M2ZWY0M2I4N2UxYTkxZDU0OGU4NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQxMQAgAAAAMDAzZTljYjQyNzJkZDk5NGI5MzY4NDEzMmM4MTU2MDYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MTIAIAAAADc3M2JjMWRlMDdmMTYxZTRkODYzNWE3NWEyMjdmODhlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDEzACAAAAA1YjI4NmZmYjM2YWRhYTc0ZjlkMmJiYjg0MWU2OTVmZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQxNAAgAAAANmRhZmZiODRmMTczYmUwNDZiNThmMDQyNzNmZWNlMmUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MTUAIAAAADBhYjk5MmVkOGVhMzhhMzQyYjc1MGM5MjY0ODVjMDIzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDE2ACAAAABhYzZkOTA1YzYxM2IwM2U0M2FhNDhkMGY4NjgzM2JkNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQxNwAgAAAAYWMwYmQxYTNiMTRiZGYzNDQ4MDM1YjA5ZDUyMzM0YjkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MTgAIAAAADIxZjUxNDI3MDk1NjU2ZDQ3OWVmYTlkOWUxMWQ4NmQxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDE5ACAAAAA3MzhlNGNlNGU3NDZjNDI0MmEwYzdkNDk5YjMwODI4MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQyMAAgAAAAZTVlOGUyZmM1ZGRkMTBiNDQ5ZTk0NjgyM2M0OGQ4OTUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MjEAIAAAADYzNzFmODFkYTQ1ZmMxYjQxYTBlYTQ0MjRjNWE3ZmM2ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDIyACAAAAAyOTdmZGQ3ZjY2ZmU1MzE0YjhjNjkxZTU0NjZkZTQ2MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQyMwAgAAAAOTZhYjk4NDgxYjI4MWJlNDc4NjQ4MTNiNzZiYjE1MGUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MjQAIAAAAGU1MGRiZTkxZjUxMjY5MTQ5OWI2OTJjN2NmODA2Mjc3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDI1ACAAAAA3NjFlM2ViMjAzZGRiMmM0MDllMWU4ZWNjOGVkNTQ5YgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQyNgAgAAAAODI0MmQwMjMyNDJhNTUyNGNhYTMwM2JmZDUzZTgxMzkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MjcAIAAAADliY2IwYzI4OTJjOWQzYjQ0YWE1ZmQ4ZjE4OGY3NTNmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDI4ACAAAAAzODE5YzFlZjhhNTkyZjQ0Y2FhOGEzNTczYjFmNTM3NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQyOQAgAAAAOTE5ZjBlYTYxYzNkNTU2NDI4ZjJmZTNiOTcwYjVmM2MAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MzAAIAAAAGY1NGFkNGZlM2Q3ZDRiNTRmYmNiNjU2MWU5MWNjMmJiABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDMxACAAAAA2MTkxNGRmYmJlNTE2Y2Y0Y2JhZGEzYmMzNzY3MGQ1MwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQzMgAgAAAANTZmY2I2NzI2YTM2OTU1NDlhODQwOGVhZDUyNTY4ZTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MzMAIAAAAGU5YmJhM2ZkMzMwNmI2YjRlOTQ2YTdjMGQyZGEzNTE0ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDM0ACAAAAAzOTA0ZmFkODgyZmFjNzk0NWIxZjU2M2IwNDRkNzE0MwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQzNQAgAAAANTI3MjlmYWFjYzYwZDNiNDM5NzA3NGE4ZGJlNjE4NjcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MzYAIAAAAGMyODY1YmViODcyMTAyYTQ1YTE3NTEyZTYxNmMyZDhiABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDM3ACAAAABiNzI0OGQwZGE2YzBhN2M0MDhjYzYzZDVkOTU3OTIzOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQzOAAgAAAAYWZjNTAyNmQ5ZmMzMDA2NDdhMWFjZWIwMjFlMjQ4ZGMAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0MzkAIAAAAGE4MmExNDBiMWM1Y2YzZjQ0OTBkYWNmNjUyYTFkZDM1ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDQwACAAAABkNzlkMmRhNGU3YTExMTg0YTlkZWY0Zjk3MDZmOGU5MwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ0MQAgAAAAODM0NThiOTA2NTE2NmRhNDliZmZjZmY0YWM5Y2YwZTgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NDIAIAAAADkyOTRkMzdkNmMyMjc3MjRiODI4MDA1MGEzY2Y4ZGExABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDQzACAAAAAzMjJmNzFkMTkyOTZmZDQ0Nzk4ZDQ3YTMxMGU1ZjhiMQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ0NAAgAAAANjNiMTk4OTk5ZTJkZTA2NGE4MzU2OGJjNzFkN2E3NWQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NDUAIAAAAGE1YjVlN2RiOGFlZWI2NjQ2YmQ3ZmQ2Mzc2OGZjYWEyABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDQ2ACAAAABmYjIyOGY1YTZhMmUwNzc0ZGJhYmZiN2Q1MDRmNWQ4YwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ0NwAgAAAAMjAyMDY2Yzc4OGYxNzFjNGZhNzAyZDVhNDk0NDMyZjEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NDgAIAAAADJlMGNiYzQwMDA3ODgzYTRlOTZhMmVjMGMxYWJjOWM3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDQ5ACAAAAAyYjY1ZDU5OGU4OWQxM2U0OGI0MmZjNjAyNzgwMDA0ZQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ1MAAgAAAAMDRiMDE4ZjVhMDNjZTlhNDJhMTBkMGFiNDcxNWMxNGEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NTEAIAAAADBjNTZhMDk2NDE2YmU5YjQ2OTMwYjBlYmM2YWVkNGJjABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDUyACAAAAA3MjUyNWM5YmE5OGVlMjA0OWIxOGM1OTRkMzFkYjFiOQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ1MwAgAAAAOWNkZmJlOGI2ZGRlYzE3NGQ5YjRiMmZiYTlhZTVlZjgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NTQAIAAAADJhMjQwMDg3YzU0Yzc5NzQ4YWU3MzAyODBjNDdlMzg5ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDU1ACAAAAAwYTQzNWQ3YjhkOTkwMTc0MjlkZTZmMzVjZGVkYzQ4NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ1NgAgAAAAOTU2ZmYxMDViMjI0NGMwNGViYjEyZGM1NmYwNDZjYzYAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NTcAIAAAAGRjZWYxYTkxYWMzZDdlNjQ4Yjk5MjU2MTg5NjZjOWZlABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDU4ACAAAAAwNGU0YWRkZWZiNzQ4Zjg0Mjk5NTIzOGIwNGNjODYxMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ1OQAgAAAANTExNjFhOTkwZjY3YzVhNDc4ZjFiMGExMzcwYzY4MDAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NjAAIAAAADZiMDU3ZWUzZmQ3NmEyYzQzOTA5ZWIwNmEyMjVhYmIxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDYxACAAAAA4YWQ0YjE1Y2FmMzFiZDQ0NGE1OWIyMzhlZTA1ZTNmZAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ2MgAgAAAAYjY3NTNlYjE5MjcyODZkNGRiNTk4MjE5MzFjZDgwZTcAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NjMAIAAAADFlMDEwYjhmZmVlMDhhNTRmYTBlNmVjNzg0Mjg4M2QzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDY0ACAAAAA1MWJkYmUyZjI5ZDJhMWI0OWE5NWRiM2Y4ZWNkYTM1MgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ2NQAgAAAAOTY0N2UxZTA5YTRkOTZmNGNhNjJkNmY5OWUxZTRmMDgAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NjYAIAAAADVlNWE4Y2MyZjYxM2UyYTRhYTg2ZTZlMjVhYmNkNjliABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDY3ACAAAAAxMDFkMzNhMmY5NDhmODk0Mzg1MGQxYjY5N2JmN2FiMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ2OAAgAAAAZmU4NmVmNzk4Y2EyNTQxNDBhNDBhMDk3YzAyNGQ2YjIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NjkAIAAAADBjMzE0ZmE2Nzg5NTBiODQ0YjNlMDM3ZTI5NzIxN2RmABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDcwACAAAABjNDEwZGViMmZhNjZjNmI0NWE4OWRjMWM0ZTUxNTBkYwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ3MQAgAAAAZDE4ZDE1ZWQ4MWZiYWMzNGViZTNkMmYxOTgzMjNjMmIAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NzIAIAAAADNmOTY5NjhlZTQyZWIxNzQ3YjZiYWFlNmQ3OTZmN2MxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDczACAAAABkNjI2ODIyZDU3MTA3ZDc0MmE2ZThlOTlkNjY2NTJmMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ3NAAgAAAAYjljZGU3NzYxZDAzM2Y2NGNhZjE5NTdkNDZkMDVkYmUAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NzUAIAAAADNkYmM0M2RjOGQwZmY2NjQ3OGU4NjYzZGY2OTc4NzljABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDc2ACAAAAA0Y2M5MmE5MjU2M2Y0NjY0ZjlkNmI4MTMwMTIzZDg3NQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ3NwAgAAAANzhiYjdiOWY3ZmNhOTI5NGY5NDk0MmZmZjBlNGJmZTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0NzgAIAAAAGViMDRiZWMzOGM3ZGFlMDRiYTZjZWEzNDQ4NWNmMzgxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDc5ACAAAABmYzYxNGE4MTc1MDE1Nzk0Zjg3YmFiODkxODk1Y2ZlNgAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ4MAAgAAAANGRkYjEwYTA3OWM0ZTA3NDJhNTZkMmRlZDM5ODQ3NjkAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0ODEAIAAAAGZkNTIyNDdmY2E0M2Q4OTQ4YmRlNzUyYWExMjJjOTYzABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDgyACAAAAA2NTM5N2FiNzg5NTI0MGI0Y2FjNTU4MTU3ZmQwOTI4MAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ4MwAgAAAAMjUwNzdkYzczYTQxYTI5NDJhZWFkODgzOTYzNjQyN2UAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0ODQAIAAAADU4MTg0YzZjNTdjNjE4NDQxYTA2NjIzZmI0ZDM1OWE3ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDg1ACAAAAA3MDEyNDhhNzllYjhlN2M0OTg1MmM0ZWEwZGNjMTZlNQAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ4NgAgAAAAODllMGQ5MjgxODU1MmExNDZhNjBiNTJiY2MzYjAwYjAAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0ODcAIAAAAGU1ZTI1M2QwNDlkMGIxODRiYmZlNmFlYmMwNjA2ZjhhABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDg4ACAAAABiMjZiYjQ2MDViMjQzYzM0M2E3MmVjYTI4MDAzNTY2NAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ4OQAgAAAANjNiZDUxZjZlYTdiZjY5NDc4ODg4YWEwMmY3OTUwZmEAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0OTAAIAAAADNlNmNmNzg3NzNiY2YzNTQwYTMyODcwOTdkZWM2MGYxABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDkxACAAAABlYWNkMDIxZWEwY2ZhNWM0MmE4Yzc4YmIwMmVlZTI3NwAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ5MgAgAAAANmNhYWNiNTVhMzZhMmE1NGE5ZDlkMzc0Y2Q4ZDg0NTQAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0OTMAIAAAADRkYWU0YmIxYTM4NTY2NDRjYWQ3M2I1OGQ2NWZiNWI4ABYAAABoYXRzX3RleHR1cmVzL2hhdHMwNDk0ACAAAABmMTA0NGEzNWM2ZmZjOGY0M2E1YzMxMWJmNGFmZjVmMAAWAAAAaGF0c190ZXh0dXJlcy9oYXRzMDQ5NQAgAAAAMGUwNzFlZmFlNGZiMWY5NDM4NzY3OWNlYjRmYTUzM2UAFgAAAGhhdHNfdGV4dHVyZXMvaGF0czA0OTYAIAAAAGFhYTEwYjEzNjVmZTI4YTQwODM3NDA0OGNiMzA3MjJhABYAAABoYXRzX3RleHR1cmVzL21ldGFkYXRhACAAAABjMGY5ZTMyNjg3MzZiYmQ0MmE4ZDBhOWViOTA4YzdhYgAZAAAAaGF0c190ZXh0dXJlcy9tZXRhZGF0YV9nZAAgAAAANjc1ZWI4YmFmOGY0Zjc4NDY4MTE5NGRmYzVlODgxMjQAFgAAAGhhdHNfdGV4dHVyZXMvbWlzYzAwMDAAIAAAADFmMjc2Y2YzZjcyZjc0OTQ0ODBiNWM5Njg5MGE1NGViABYAAABoYXRzX3RleHR1cmVzL21pc2MwMDAyACAAAAA4ZjQ3OTE5NjA4ZjRjNWM0ZjgyZDBjZjAzYzkwNjM4OAAWAAAAaGF0c190ZXh0dXJlcy9taXNjMDAwMwAgAAAAOGJiNTcyOTQzYjczNTI2NDdhMjczMGMyN2QzZWVjMGEAFgAAAGhhdHNfdGV4dHVyZXMvbWlzYzAwMDQAIAAAAGJkZDdhNTQ4Y2VjZmMzODQ1OTRkNTNjZWRjZWZjMGIwABYAAABoYXRzX3RleHR1cmVzL21pc2MwMDA3ACAAAABiOWFkM2M0ZWJkZWIyOTY0YmE5YzI0ZjcwYTUxZDY5NAAWAAAAaGF0c190ZXh0dXJlcy9taXNjMDAwOAAgAAAAYjdjYmZjZmUwMjc5MDQ0NGU5MTI1MDdmMDY0ZDcxNDgAFgAAAGhhdHNfdGV4dHVyZXMvbWlzYzAwMDkAIAAAADljZDgwZTE2NTVkOGRhOTQyYmRmZjY3NWJkNTk1NDMzABYAAABoYXRzX3RleHR1cmVzL21pc2MwMDEwACAAAABlNTAyZDdmNzdiZDYwOGU0ODk1Zjk1YzI3YjczYWIyMwAWAAAAaGF0c190ZXh0dXJlcy9taXNjMDAxMQAgAAAAOGM2ODNiNzkxMjM3ZGY3NDM5MDllZWM0YzdhMTRiMzgAFgAAAGhhdHNfdGV4dHVyZXMvbWlzYzAwMTUAIAAAAGZiZTUzNDQwYzEwNjBkYjRiYmEwZTJlMDYxMjc3OWEzABYAAABoYXRzX3RleHR1cmVzL21pc2MwMDIwACAAAABhNDg4MjcwYmU2NjQwZjc0Y2EyNTE0MTdiYmVmNjc5NAAWAAAAaGF0c190ZXh0dXJlcy9taXNjMDAyMQAgAAAAYTlhM2Q1NGJjYzJiZDlhNGQ5ZTljOTQwNGVkNDhkMTAAFgAAAGhhdHNfdGV4dHVyZXMvbWlzYzAwMjIAIAAAAGIwMjFjM2Y2YzBjNjA0ODRkYjhmYjdmMGJiNGQ1NzI0ABgAAABoYXRzX3RleHR1cmVzL215aGF0czAwMTYAIAAAADljMzJkMTYwMjRhMTRjYzRkOTViYWEzODc4ZTllODRkABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAwMQAgAAAAMzQwMzI0ZTQ3OGNlMjA3NGU5MzQ4YzhkMjRmNjNhNGQAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDAyACAAAAA3ZTYxZDRhNTJiYTZkNDc0Y2FhYzJiM2YxZGM1MzZjNwAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMDMAIAAAADYzZGI1OWFkMmY3NzRkODQ1YWMxMzE2NjkxOGQzMzZhABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAwNAAgAAAAOWVlMzU4YmEzMjA3MDA5NDRhNzRjMTIyM2VjNTA5MzIAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDA2ACAAAABjZjJmZDFjYjYzYTdiZjU0MDkzNmVhNjA3YTg3MGZkZAAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMDkAIAAAADdlNjA1N2YwNGYwZGFmMjRiYmMyZTY1MjNmZTBkODU0ABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAxMQAgAAAAODE3MDhhNmYyNDJkOWYxNGJhYmRjMjFjY2JmZWI2NzUAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDEyACAAAAAwNjFhZjlkYTY2YzFmM2U0NTkxZjEwMzJjYWJkMzYyNQAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMTQAIAAAADA3ODc1YWZmZmQ5MjJmNzQwYWRkZjA2NjQ1NjY3MjA0ABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAxNQAgAAAAMGE3MmE1MTA2NzhiYmFhNDY4MTk1MDYwNDVkNDY2NjIAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDE3ACAAAAAzYjIxNzBlZWMzYjU2NTU0Zjk4M2FjZjJlY2U4MTJhMAAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMTgAIAAAAGZiMDBiOWRiNzYyNzA5NjQzODc2NmI2N2E3ZTExN2MxABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAxOQAgAAAAM2YyMWY4OGZjYjA5YmRjNGQ4ZmQwNjNiNWZiY2I4YTEAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDIwACAAAAAzNzQwMTc2ZGNiYTZmNjg0NmJhMmMxY2U0MTBlZjRjNQAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMjIAIAAAADg0YjVmM2M5ZDgyN2E5NzRkOGJlOTIzZDU4Y2ZmMzI2ABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAyNAAgAAAANDdjMDI5YzQyYzRiMzg4NGM5NTExNGI0MzNmZWMzYzMAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDI4ACAAAAA0Njc3MjhmNTFiYTZmM2Q0YjhjMTJjNjgzY2RkYWEzYQAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMjkAIAAAAGExYWM5ZDIwNGMwNmViNzRhODlmYWFjMTdkOGVlMWE4ABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAzMAAgAAAAMWNlMWMwM2ZiMzIzYzcyNDQ5NWI4MDgyMWI4NzhjOTgAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDMyACAAAAAxMWQwODIwZjA4YzEzOTY0NWFjYmFkODE3ZDFhOGQ2MAAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMzQAIAAAAGZiYzBhMmMxZDliZjJkNjQ4OTRmZmNlZjk1ZGFlNDJhABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAzNQAgAAAAMzdhZmYxMDM5OTQ2ZTE4NGQ5ZTQwMDc0ZjAxNzFiY2MAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDM2ACAAAAAyYWE5NTQwYWUxY2E2NmE0Yjg4NjIwYzY2NTk2MmI1MAAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwMzgAIAAAADM5YTRiYzhkOWI3YWFhNDQ5ODlkNDIzMzQ5YTQ3NjQ5ABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDAzOQAgAAAAZTAzNmZmODgwM2ZhNjAyNGY5OTg2YmYyNTQ5ZmE0OTkAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDQwACAAAAAzMTE3MTA4ZTBkMzFiOTE0MmFmYjgxMDc4MDVkZmJhYgAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwNDEAIAAAAGRlMDBlOGY3ZTkwMDZiODQ5YjQ4OTUxMzBiMzI2YTg1ABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDA0MgAgAAAAYjkwNmMxZWViZWQzZjBjNDhiZjIxODkyY2I4NTcwYmUAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDQzACAAAABiN2ZjYjFkZWU1NzJlYTg0NTg4MmQyOTA2ZmU0NjUwZgAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwNDQAIAAAADc5MzYyYzQ0MmVkMGI1YjQzOGJkOTgyM2JjMjZhMmJmABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDA0NQAgAAAANmNjNDA0ZjI5YTgxNTE1NDNhODUzMTliN2ZiNTBjODMAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDQ2ACAAAABmOWUwMWY2YzljYmViNTQ0Y2EyZjZhOTc3Zjk1MDhkZAAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwNDcAIAAAAGFhMDc0MWYwNTIxZDQxODQ2OTE5NTg0YmNhMmQ3ODIyABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDA0OAAgAAAAZmRjNjU2NDQ1YmEzZDJmNDBhMjhjNTY0YjBkYzU2NzcAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDQ5ACAAAABlMjM1Njg4NDFkZDRhOGE0M2I4N2U2MGZhNjFkM2Y1ZQAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwNTAAIAAAADU5MmQ1MGY1NmNmYjlkYTQwOWEwNjcyNGRhZjJjNTZhABoAAABoYXRzX3RleHR1cmVzL3N0YW5kYXJkMDA1MQAgAAAAMTQzYmMwYjkwNmRjZGE4NGE5OWQ2MDE0ZTRjYzdhMzEAGgAAAGhhdHNfdGV4dHVyZXMvc3RhbmRhcmQwMDUyACAAAABhNjIzZjY3NjZjZDNlMmE0MmJhZmE0YmFlMDczNjgzZgAaAAAAaGF0c190ZXh0dXJlcy9zdGFuZGFyZDAwNTMAIAAAAGQ4ODlhZGExMjVlMzNhMjRmYjg0YWVhYTljOTQ0YTM5ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDAAIAAAADA3MjUwYzE5ZDFlZTc2NTQ2ODI4Y2EyY2NkOTcxYjNkABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDEAIAAAAGFkMjdkYjI3YTM1ODcxZDRhOWExZGVmNDhhM2JmZGNjABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDIAIAAAAGUzZDhiMGFhMTc1YmEyMzQ4ODBlNWVlMTllZGNiZGVmABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDMAIAAAADFkNGY1MmRmNjNjMzJlNzQxYjM0OGIxM2UyNDdiYTUzABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDQAIAAAADdjZjk5NDY2YTM3YjdhMjRlOTQ5NDVkZTdlODRmZDMzABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDUAIAAAADE0MTJmN2Q0MDEwOGExYzRhOTE2M2Y1ZmFjMjVhZjhjABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDYAIAAAADM3MTcxMjNiN2Y3MzU3MTQ3ODhhZGQ0Njc5MmFiMzE3ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDcAIAAAADkxZmNhNDI4ZTllZGMxNjQ0YmE2ZGUwNzcxYWRlYTExABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDgAIAAAADc5MTMxM2ViZTE2MzE0ZDQyOTEwOTg2YjU4MTc5ODQxABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMDkAIAAAADA1YmE3ODkzMmI5YTgyMDRkODk5NWIwMWVkNjc1NDI5ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTAAIAAAADUxNDJlM2IwYjY4M2IwMTQxYWE2MTQxZjcwOTEwNDg4ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTEAIAAAADk2Y2ZiOWQyODVjYTRiYjQ5OGVlZWRhZWFkY2QzOGMyABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTIAIAAAAGYyMmMwY2QyZmZmMzk4YTQ0YmJlYmQ1Y2E3ZjE3MDQ3ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTMAIAAAADRmNGY4NGIwMGUxMzUyMTRlYTA2YzU3ZmZlM2E0MGIzABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTQAIAAAADI4Mjg2NmNlZDZiNTE0NDRmYjdmNzgzN2NiODRhYTczABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTUAIAAAAGE2ZmM3NDI1ZjY5N2U5ZjQyYjliNGFjNGQyYjZjZTVmABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTYAIAAAADBmYTJkZGExZGQ4ZmFlMzQ3ODBjMmZiOGE0YTUzNTc5ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTcAIAAAADI0MjllMDZlNmE4YTc1NzRhYWIzZDFlMzQxOGZkYzNjABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTgAIAAAADc3MThiZDAxZmNhYjNiMDRkYTkzYzc3YWI1Njg4MWRmABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMTkAIAAAAGJmNmM5ZDkyM2EwN2VhNTQwOTA3Y2U5N2I4YzZlYTA1ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjAAIAAAAGIyMjhmNmU5OTI1N2ZlZTRhYTE5NGMwYzNhNDY3MTIwABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjEAIAAAAGQ2MjM0YjdmNGYwMTQwODRhYTUyODViMzZiODBmMjU2ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjIAIAAAADYwOWNkMzM4ODg2MzhjZjQ4YjNkNmE2NTZlYjk0YWIxABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjMAIAAAAGVhMjUyOGRiYWI0YmU2ZDRjYTdmYjBkMmFlZjk2NDA0ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjQAIAAAAGRmMzA1ZmI2NjdmYjY3ZjQzODBiOTIwZTczM2I3NzQyABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjUAIAAAADA2Zjk2YmE2YWFlZWM5NjQ3YTAxODc0YzExOGIzYzIyABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjYAIAAAADFkMDkxYTMxM2I5ZjYyOTQwYTQ4NTVkZTZlMTY1MTM2ABgAAABoYXRzX3RleHR1cmVzL3N0cmVhbTAwMjcAIAAAAGU0ZGZhOTFkZmUzZDJkZjQ3OTRhZTU3ZDVhMzk2ZmExAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAwMC5hc3NldAAgAAAANDJlYTk0NzQ2YzRhNDRlNGI5MzBjYmU5ZTU2ZTYwZmUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDAxLmFzc2V0ACAAAAA1MGZjY2RkZjkyOThhNDU0OTg2YzYyZjI2MmFjYjkxMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMDIuYXNzZXQAIAAAADFmNTA4ZDAwYmEzNDYwZjQ4YjJjOTA4MGEyOWE5ZjVjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAwMy5hc3NldAAgAAAAZGQxMzRkN2ZmODYyZmY2NGFiMDlkMzQwZDg3OGU5NzEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDA0LmFzc2V0ACAAAAAxMjM1ZWE2NzFkYWYzOGM0M2FiYmNlNDBhMTk3NTVjYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMDUuYXNzZXQAIAAAADU2YzY4NjQ3MGNmNjMzYTQ4YWNkMzRiMTRiNzkyZmY2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAwNi5hc3NldAAgAAAANDk2NzA0YWM3NmVhZTkzNDVhZTI2ZWQwNDA0N2VkYTYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDA3LmFzc2V0ACAAAAA3ZjdkZGQ3NDRhZjJmYmU0OGI1ZDlkODE4ZWRjNzU1ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMDguYXNzZXQAIAAAADljYTk2YmIxZTA0YzVmNjQ5ODE3NGE4MDZiNjkxZTdjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAwOS5hc3NldAAgAAAAMzQwODNlNDk4YjMxNTRmNGM4ODA3Y2EzZDY2MzljNjEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDEwLmFzc2V0ACAAAAAyYzZiNzk2ZTM2Y2QxNWE0Mjg3NzY2NTA1ZTY0MTMxOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMTEuYXNzZXQAIAAAAGY3OTk5MzExNzZhOGYzNzQzOTYyZDIwNGMxMTA5MjgxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAxMi5hc3NldAAgAAAAZDM1N2M2YTg3NmVjODVhNDhhM2Q4ZWRjMjg5YTE2ZTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDEzLmFzc2V0ACAAAABjNTUzMWJhMWE5NmY2ZTA0Yzk1YmE4Nzg5YWMyNzRjZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMTQuYXNzZXQAIAAAAGFmNGY1MTBjNmFjMmJmNzQ5YjkzMGQ2Y2NmYWYxNDE2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAxNS5hc3NldAAgAAAAMDkxMmIxZGVmMmZjZThhNGZiNTJhNWViYzNjYjcwMDgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDE2LmFzc2V0ACAAAABhNmI0Y2NkOWE2OGQ1YWU0ZWEwNjk3ZjQ1YWUwMTg4YgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMTcuYXNzZXQAIAAAADQ0NDJkZWMyYTBjZWFkNTQxYjg3Y2EwYWQ4MGEyMjg4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAxOC5hc3NldAAgAAAAMjBhMzJjNjIzNjM0OTBkNGFhNWRjMzE4MDlmNGUzMTgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDE5LmFzc2V0ACAAAABlZjg4ZDIyZWQwMmJjNDE0OWFiNmFjNDM1NDQwNDFjYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMjAuYXNzZXQAIAAAAGRlNTQ2ZWFjOWYwMThjZDQ4YWFjNGU1ODVhNTc3NDA1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAyMS5hc3NldAAgAAAAN2RjN2Y5ZTNiMWRmOGQzNDY4Y2MwZWE3Y2VmMDk3ZDAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDIyLmFzc2V0ACAAAABhM2MyOTZhNzE0N2FhN2I0Y2FkMTM0MjhlZTNkM2M0YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMjMuYXNzZXQAIAAAADYwN2FiYWQ1MjZmMTAwNDQ1OGFmMzQyNWViNWIxMjIzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAyNC5hc3NldAAgAAAAMjY0NTljY2M2MTFkMTRlNDlhYjAwYTYzY2JhMGM0YmMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDI1LmFzc2V0ACAAAABhMDliNzc0NmZmODZkOTQ0MDk3YWFkMWM2MDdiODczYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMjYuYXNzZXQAIAAAADU1YzliMWJmYmJlYjhjOTRiOTVkYTMxNzIwYjE5NTQwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAyNy5hc3NldAAgAAAAY2VjNjhiYjhkMGRmYzVkNGM5NGE0ZDQ0ODllYzZlOTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDI4LmFzc2V0ACAAAABiYTI2NDVmZWU3ZDM2Njk0Zjk5YmZiNzZlNTMzNDhmMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMjkuYXNzZXQAIAAAADEyZDk3ZmViNDYyNDAwZTQ5ODQ4MjYxMGFhZjcxOGVkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAzMC5hc3NldAAgAAAAZDdmODc2YzRjNWY5MGNmNGM4Y2Y0NDk3YmMxMTdhZjcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDMxLmFzc2V0ACAAAABjODE2NjQ3OWJmNDE4NDU0MTg2YzUyNGQ4MTI0NTU0NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMzIuYXNzZXQAIAAAAGE0NGUwNGI4MWY0YTBlODQxOGRlZDg5ZWFjOWNkM2FlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAzMy5hc3NldAAgAAAAYThlYzRiNjMzYmM0N2MyNGFiNzVlMGViOWFmZDExYzcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDM0LmFzc2V0ACAAAABiYWMwM2I5MDIzNmVjZGI0YTg0MWYwYzIzMTA2MThhZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMzUuYXNzZXQAIAAAADNhY2ExOWZmMDc2YTk2ZDQ5ODZmNDg2ZjRkNGMwM2ZiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAzNi5hc3NldAAgAAAANGQxM2RkZWJlZTM2NWE3NGM4MDk1ZjU1Y2Q1ZjZlYjMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDM3LmFzc2V0ACAAAAA2ZjgxNzJjZDM0YTcxNTc0Yjk4ZDE5NWFkMzJiZjcwMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwMzguYXNzZXQAIAAAADMzZWY1NThjYjYzYjkxNjRlOTFlMDQxZWFjZTJiZjJhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDAzOS5hc3NldAAgAAAAOTQwMmJkMWJjNjA3N2JhNDQ4ODhiNWY1YjQ1MjQ1ZmMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDQwLmFzc2V0ACAAAAA3ZjIxN2JjNDIwMWRmY2U0YWEzM2Y5N2U0OWFmOTcxNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNDEuYXNzZXQAIAAAADU2MDlmOGU5ZGY4YzVjNjRlODhmZjlkYjNkYjg4NTg0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA0Mi5hc3NldAAgAAAAMzU3NzYxNWM0NjhjNjM2NDQ4ZGU3ZmIyZWU0NzA3NmIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDQzLmFzc2V0ACAAAABjNmFjMDdlMjg5NWVhMWQ0YThmMTU1NmVlNWFkZjY4OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNDQuYXNzZXQAIAAAAGI0MmYyMzVmMDk4ZmJiMTQ3OWEwMzAyMzVkNjM5OGMxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA0NS5hc3NldAAgAAAAYzA4N2EyYjQ2NDllZjkzNDM4ZGE4MWJlZjI0NmVkMTUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDQ2LmFzc2V0ACAAAAA3ZjRiZWIwMzZiNTE3Nzc0NmIyOTE0MjZiMzgwNDE2OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNDcuYXNzZXQAIAAAAGM1ZDVjNzUzMDE2OTU1YjQyYjZhNzU5Y2ExNzg5MDRlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA0OC5hc3NldAAgAAAAMjI2MmY2OGFkNWMwNmFhNGZiMWI4YjA1NGNiYTlhYmEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDQ5LmFzc2V0ACAAAABiOWMwODBmMmZkNTllYTE0OTgxZDE2NmYwODZlOWY0OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNTAuYXNzZXQAIAAAAGViNzczNTgxNGZjZTZlOTQzODc5OGY0MzhlNDc5MjU0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA1MS5hc3NldAAgAAAAZDdkNjg3M2UzNjc5MjAxNGNiMGJiZWI0NWIxNGMxMDEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDUyLmFzc2V0ACAAAABhOGJmNTZjZWNmMDFiNTg0MWE1ODgzOTliYmQwNTgwOAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNTMuYXNzZXQAIAAAADUwYTg5MWRlYTU1YjgyMDQzYWIxYmY4NmNhMzQ2NzU4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA1NC5hc3NldAAgAAAAOTQwYjI2NTdjMjk1YWU4NDk4MzE5MzMwM2Y2MDk1NmYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDU1LmFzc2V0ACAAAABlNzAyYzQyNzU1MWQxZGM0N2JmNzJkY2RiNWM3ZmI0YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNTYuYXNzZXQAIAAAAGFhODA2YjdlZmUyNmQ2ZDRkYjUzNjM1MzViMzllMWIzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA1Ny5hc3NldAAgAAAANTBmYTMwM2YyMjFlZjA5NDZiY2Y1ZjQzZWZmNjVkZGIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDU4LmFzc2V0ACAAAABhZGI1YTE1ZWExMzBlMmU0OTg4Y2IzYWFmYzJiMGIzZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNTkuYXNzZXQAIAAAAGZlNTdhYmFhMDI2MzNkMzRmODk3NWJmNjE1OWE0OWIxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA2MC5hc3NldAAgAAAAMmIyMGFjY2YzZDJjYTY3NDk4MTg5ZDgyMjE0YWQ1NjgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDYxLmFzc2V0ACAAAABhNmFmNjkyY2I4MzUxMjQ0OGI2MTdiY2M5MzVhM2ExMQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNjIuYXNzZXQAIAAAADI0ZmEzN2FiMTc1NzM3OTQ1YWQ0OGE1NjdkYjVkNDA3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA2My5hc3NldAAgAAAAMWQ5NGE0OTM2YWY0NzAzNDBiZTYyNGYyY2ZjZWUzMTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDY0LmFzc2V0ACAAAABlNDljMDdmYmQ4N2VlOTU0YTk3ZDUxNjAwZDczMzhiYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNjUuYXNzZXQAIAAAADkxZjYzZTRhNmFhMjM3YzQzYjQ2ZGZhMjRhN2FmNTI3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA2Ni5hc3NldAAgAAAAYjliMGMwMTQ3YzI0MTVmNGFhODkwY2UyOTQ1M2VlM2YALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDY3LmFzc2V0ACAAAABmNjA4MDUxZjE5NDllZDc0ODljMGYwZjgzMzY0M2RhMQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNjguYXNzZXQAIAAAADg2M2JiZmY4MjVhNzY5MzRiOWVhN2JkYTVjYmY2ZGU4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA2OS5hc3NldAAgAAAAMzNkOTM4MmEzMTk4OWE1NGY4M2MzOGI0YzJiY2Y0MTYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDcwLmFzc2V0ACAAAAAwMWQ3NmYzZjE2ZjljNmM0MWFjMGE5MjlmNWY5Mzk4MAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNzEuYXNzZXQAIAAAADFiNjZiZDJkZmZjNzAwNjRjOWFkNzBlOTA0OTAwODJiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA3Mi5hc3NldAAgAAAAYjAyZGFmMjNlZDNhOTA4NDg5ZmI4OWM1MzgzMWViNmMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDczLmFzc2V0ACAAAABkZGQzOTc3Nzk5ZTgyYmU0Njg3YTY0OGNkODNkMWY1MQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNzQuYXNzZXQAIAAAADVmNWUyZGRjNmMyNWI3ODQxODQ1YWM5YmVmMGQ0MGJhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA3NS5hc3NldAAgAAAAMmYwMTdiOGVjMTEyNTc1NGFiYTBiNDc3NGJlZDliZGQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDc2LmFzc2V0ACAAAAA0MTBmMDdmODFmM2VhZGQ0Mjg2MjUxNjM2MDE3MjcyNgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwNzcuYXNzZXQAIAAAAGI1MjRjNDQ4MDg1MWE4YzRmYTYxNGVmODQyN2MyZDY4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA3OC5hc3NldAAgAAAANzY1NDI5OGUxZjVhZDliNDA5OTJhOTgzZWQxYzRkZDAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDc5LmFzc2V0ACAAAAAyYTIyZWI0N2ZlOTUxNDk0ODhlOGUzYTZlY2M1ODNiNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwODAuYXNzZXQAIAAAADVjNWI1MGUwM2Q5MzQyNDQ1ODVkYjI4ZTdiMjY5NDlmAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA4MS5hc3NldAAgAAAAMWFjMmQ2ZjZjMjdkOWI2NGQ4MjljMzJmZDlkZWJjOWIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDgyLmFzc2V0ACAAAABhOGUxODE4Zjk4YWI2MDA0NWJmYTY4YjZjM2E4ZDRjYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwODMuYXNzZXQAIAAAADdiNDVhZTJkZjEwYmFkNzQxYmUxZjQ0ZWUxNmMwODg0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA4NC5hc3NldAAgAAAAODhhODFmNzg3ZDE5MzYxNGU4YzI4NTJlYmIwMzA0YWEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDg1LmFzc2V0ACAAAAAxZWQ4NjllNjhlZGVlNjM0YWIxNjJiN2YxNDc2OWU4ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwODYuYXNzZXQAIAAAADFjN2YxZWJmN2RiYTVlYTQ3YTEwNzRlODIyZWY5ZjcxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA4Ny5hc3NldAAgAAAANzk1M2IxZjhhZGM3YWViNGQ5YzRlOWNmMGI0ZWI3MjcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDg4LmFzc2V0ACAAAAAyMzgyMTZmZjQwN2E0YjI0ZmFhZTQxOTdhYzY4ZGVlMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwODkuYXNzZXQAIAAAADVmZjgxODZhNDJkNTViYjRmOWM0ZWFmNDNiZjIyMDljAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA5MC5hc3NldAAgAAAAYTEyMjc0ZGVlNTRmZjk3NDg5MzU4OTg0OGEyZThiZWIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDkxLmFzc2V0ACAAAAA4YjM0ZjcyMjMwZmE4ZjU0YmJjOWVmZTAwZGU2ODkwMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwOTIuYXNzZXQAIAAAADBiNjZkZGFhMzUxODI5ZTRhOGU0YmEzODU0NzcyNDZiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA5My5hc3NldAAgAAAAZTQ1NDEzNjRhZDI4ZDJhNGU4NzU2YjI4YjliYmRiYmQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDk0LmFzc2V0ACAAAAA0ZDZiYWVmZTkzNzc3NzA0ZGJlZTA4YjFjYmNjMjM4YgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwOTUuYXNzZXQAIAAAADcyYmUwZWI1NWYzMzdiZDQ0ODIzZWU0NWYyOGVlNjU2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA5Ni5hc3NldAAgAAAAZGFkMDAwYTgyZTg4ZGY1NDU4MDZlYzIwYzhiNTlkMGYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMDk3LmFzc2V0ACAAAABkOTY5MGI3NDIyMDRiZmY0NzliMTJkYmQ0NjEyZWIyMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAwOTguYXNzZXQAIAAAAGQ2YWU2ZDY0MjhlODliZjQyOTZkNjNjZjRlN2U0YTQxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDA5OS5hc3NldAAgAAAAZjg3MmU4NmZiYmQxZWViNDA5MDA0OTA3M2MzYTkxZmEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTAwLmFzc2V0ACAAAAAzNjA0ZWE5NjVhYjIwNmU0YzgzZTg1ODg5NDFkZTIzYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMDEuYXNzZXQAIAAAADg1MzA1MzllZDdkN2MzNDQ4OGE4NTlmMDgwYTJmN2I0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEwMi5hc3NldAAgAAAAYWQyZjRhOWNlZWY1NWYxNGFiZmE4NDVhNGE3NjVhNmMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTAzLmFzc2V0ACAAAAA0NGNlYmUxNzEyNGMzZGM0MzlhMjFjNDljZmZhZDA1MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMDQuYXNzZXQAIAAAAGMzNDBiZDg2ZjUxNmZlZjRlODhhNTg0MGVhZDBiZDk0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEwNS5hc3NldAAgAAAAZTZiNzNhMjkyZWEzYzMyNDlhNTcwZmQ1ZmMzNTFjZTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTA2LmFzc2V0ACAAAAA2MzIzNzcxMzM3NDJkNDc0OWJmYTQ0MmFlYWY2ZTM1ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMDcuYXNzZXQAIAAAADA4YzFiMTBjN2ZjMzgzMDRmOThmZWMzZjQ5ZDA3ODY0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEwOC5hc3NldAAgAAAANDBkZmYyYTAwOTYwMWZiNGQ5NGRmNGMwOTI5MzY0ZTIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTA5LmFzc2V0ACAAAAA0NmUyZWE5NjFkNTI4MGE0NzgwYTJhNDRkZGRiNzJlNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMTAuYXNzZXQAIAAAAGU3MTQzMWZkMzZlZmU1MjRmYmNkZjUyNGFlMTUyYWRiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDExMS5hc3NldAAgAAAAYzRmMjdkYzUxMWUzMTc1NGE4OWY2NGY4MjU5NDgzZTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTEyLmFzc2V0ACAAAAAzODNkYmE0YWRjOWIwODg0MDk5M2U1MWIwMmU1NGQzYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMTMuYXNzZXQAIAAAADY4YzhmYmE0YTYyODhhZTQ4YTBkNzFiYjc3NDY0Yzc0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDExNC5hc3NldAAgAAAAMGE0MmNlMzZjMjg3NTZhNDY5YmEwYjRhN2NhZDIxNDYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTE1LmFzc2V0ACAAAAA5Y2NlM2QyYzEwOTcwMzI0NmI5NTA5NDdlZThlNTNkYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMTYuYXNzZXQAIAAAADJlMzNkMmM4MTVlNTdlZjQ2YWU0OTJjMjY4MDQ2MDAyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDExNy5hc3NldAAgAAAAMGIwZjRkNGY3OTk3NWI1NGZiYWYzM2ZiYmQyNDYwMzkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTE4LmFzc2V0ACAAAAA3NTczMTA2YjkwZjRhYTU0MWJhYmZmYzk0OWM4NmUzMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMTkuYXNzZXQAIAAAADM4NDYwN2UyMWRhMDg2ZDRlYjRmMmFkNjQ2N2VmMTlkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEyMC5hc3NldAAgAAAAZDA0MTY0NjUwNzg1MWVhNDc4YWJlZTA3OTA3NjI4NDkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTIxLmFzc2V0ACAAAABhNWQ2M2NmZGFjOGFmMWQ0ODg0ODU2YWZlMGQzMTQ4ZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMjIuYXNzZXQAIAAAAGRlNjExMGQwMWU3MjU2ZDQyOGYyNzUwNGNiY2RjZjNiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEyMy5hc3NldAAgAAAAZjQzYTExOTc5Njk2NWMxNGQ4YjgzYjMzNmRjZDhlNDIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTI0LmFzc2V0ACAAAAA4OTJjMmEzOTYxNmZhZTQ0N2IwYzZkMzFjMWQ5NzRhOAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMjUuYXNzZXQAIAAAADFiNTFlNGI3M2ZhNTE5NTQwOTcyMTE1MTVhNDVlZjExAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEyNi5hc3NldAAgAAAANGE3ODMzMzgwY2QwZjdlNGRiMmY1OTdlYTE2NTdhZjEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTI3LmFzc2V0ACAAAAA3MzBmNmNjYmQ5NzA1ZmI0NWIwOThlMmE2MmY0YWRkYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMjguYXNzZXQAIAAAADkxNDJkZjMwMzk5OWVmYTQ0OWQ5NGYxMGNhNDUxNDU4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEyOS5hc3NldAAgAAAAMzIxYTc5ZTA4OWE0YTQzNGI4MDJhNDk1MGU5MWRjMDYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTMwLmFzc2V0ACAAAAA4Y2UzMDRlZWE0NTJhMzM0NDk3M2IwMDkwZTQ5ZDhjOAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMzEuYXNzZXQAIAAAADAyMzAxNWFjMWQzYjM2NzQ5YjM5ZjQxZjIzYzBkMTE2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEzMi5hc3NldAAgAAAAYjA4NjI2Njc2MDk0MjE2NGJhYjhlMDBmMDc1MTgxZjcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTMzLmFzc2V0ACAAAABhZTY0MWVkOWYzMzMyMTk0MDg0NDczNWQ0MjBlODBiNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMzQuYXNzZXQAIAAAAGI3YmMwZTU2OTRmZDBkODQzOGNiNjlhZmI5ZjYzMzc0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEzNS5hc3NldAAgAAAAYWUyNzAzY2RmOTI3NjFjNDM5MWFjZjlmN2VmZmE3YjMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTM2LmFzc2V0ACAAAAAxMTg0YjFkY2RmZWRmODc0ODkxYzI5YzE0NWNhZTE3NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxMzcuYXNzZXQAIAAAADdiNDNhMmI3YjNkZmU0MDQ0OTZhODAzOThkMDVkMTQ2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDEzOC5hc3NldAAgAAAAMTQ4ODQwYzM5ODQzNjE1NGZhNmQwYzBhYTY1NmVkZjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTM5LmFzc2V0ACAAAABjODg1MDBmM2JiYTBmY2I0OGFiN2NhNjI3NDc0MmJjZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNDAuYXNzZXQAIAAAAGRhYzIwNzI1MWE4MTI5NTRkOGRhMjgyZGVmYjNhM2JiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE0MS5hc3NldAAgAAAAZmY0NDUzOTk2Njk5YTcyNGE4NGY0MzZiNzE1NTQ0MDUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTQyLmFzc2V0ACAAAAA0ZDc4NmJkYjAyZTgyNjg0NGFkYjdmZTA0ZWM0NGFiZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNDMuYXNzZXQAIAAAAGViYTY4ZTMyNDIxOTM0YjRlODQyNjNlNTBjY2FkMGI2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE0NC5hc3NldAAgAAAAY2NiODA4ODdmZWJhNzM3NDY4MzQzYmYyZDBhZjEyYjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTQ1LmFzc2V0ACAAAABiNTNhZjhlNTU0MjYyNGU0NmI3YmY1ZjAyYTU5MWI4ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNDYuYXNzZXQAIAAAAGFlMGJkOWM5MmI2ZTdlNzQ0OTQ4NDZhYWEwYzkwMmY0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE0Ny5hc3NldAAgAAAAZjM4YzZjYWQwMjA4ZDY1NGRhYTM4Zjc0ZGI2MmUzOWEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTQ4LmFzc2V0ACAAAAAzYTMyYjM3ZTM5ZmNmNGE0MDg3YmIwZjVjMGI2ZDU2YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNDkuYXNzZXQAIAAAADQ2MGI5OGUyMGE1N2ZhODQ3YjdjYjRkZTE3MzhjM2FkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE1MC5hc3NldAAgAAAAN2U2MzFlOTBmNWMyYjUzNGY4MzU5YzNhYzI5NGYxZTMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTUxLmFzc2V0ACAAAAA5OWQyZjQyNTlmZjYxY2M0OGJiOTkwYTRhMGZlZTQwNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNTIuYXNzZXQAIAAAADlmZmIxODdhZjFhMTc5ZDRkOGI4NWExNzU1OWFhMmRhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE1My5hc3NldAAgAAAAYjVjMTZlMjg4ZDIyYWUyNDBiMWIwMGU3MjhmM2RmMmQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTU0LmFzc2V0ACAAAAAwNTA0MTE0Zjk4NzEwNmY0NzliMmMwODA5ZjQ2MDZiMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNTUuYXNzZXQAIAAAADEyNjQxNjhkMjI1OTYyMDRlYjkzNTUyMjFiZWFhZjE4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE1Ni5hc3NldAAgAAAAZWZkOTdhNDQ0ZTNlMTQzNGZiNmQ3Mzc4OGU3ODJhMDQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTU3LmFzc2V0ACAAAAAzNzk2MmMzN2RlNTljZjI0NWFlOTc0ZmJhMDk5NmIxYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNTguYXNzZXQAIAAAADBmMGUzZDExMjVkYjM2OTQwOTc5YWM2YjEyYzI2ZmM5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE1OS5hc3NldAAgAAAAYTFlNzU1Yjc1NGM5ZjRkNDliM2E0NDE3MmI2NGNiMTYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTYwLmFzc2V0ACAAAAAxZjc2NjY0NTYyM2QxZWY0OWI0YzlhNTIwN2I2MTlmNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNjEuYXNzZXQAIAAAADk1OTIyOGYwYWVlYzVjODQ5ODJmMTk2NTZiOGM0MTZlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE2Mi5hc3NldAAgAAAAYTA2Zjc3ODJkNTdhNGEyNGE4ODU4ZWNlNjUzNTUxODEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTYzLmFzc2V0ACAAAAA2YWQxODVhODBlM2NkYTU0N2I1Yzk5ODgxZWI0NWRiZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNjQuYXNzZXQAIAAAADM5NGFmY2I3ZDhjZWMyNDRiOGI5NzI2MTkyMTNiZDk3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE2NS5hc3NldAAgAAAAMjc3ZGRlOWY0YzYxNTFkNGI5NTMyZWY4NzhlZDdjYTYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTY2LmFzc2V0ACAAAAAyNGVhZWNlNDdhMzc4MjU0ZGFlZWQ0YzljZTk5ZmJlYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNjcuYXNzZXQAIAAAADdhNGRkNDFiNThlOWJiMDQ1OTBhNDQ0YmQzNWRmYWQ5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE2OC5hc3NldAAgAAAAMmVkYTJmNTQ1MTE2OTk0NDc5YzJlYzNhNDcyMDA0MzUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTY5LmFzc2V0ACAAAABlZDRhZjU2ZGZjZWI2Nzk0YTljMmE5NWNjY2Q3NDg3ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNzAuYXNzZXQAIAAAAGZiNWI3MzNmMGJhMGNjNTQxYWIyMmI3YmE5NzZlMDg1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE3MS5hc3NldAAgAAAAZDhmYTY0MzNjYWU2ZWI0NGI5MDFhYWM0MzY0M2YxMjEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTcyLmFzc2V0ACAAAAAxMDRiMmQ2ZjJhYzQ1MTI0YTg1ZmMwZWExOTFkYzc0NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNzMuYXNzZXQAIAAAAGI4MGMyYWYyNmU1Y2NmODQ0YTM5MmExMTM5MjI5NWEzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE3NC5hc3NldAAgAAAAODY3ZDQ0NGVmODFkNmNhNGRhODVhZDU1NDFkNWI5N2QALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTc1LmFzc2V0ACAAAAAyMmY4ZTE1NDZkNmY4M2U0NDgwN2VlMzI5YzEzNjc4MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNzYuYXNzZXQAIAAAAGUwM2YzZmJkNzE4ZWYyNjQxYTc3NDA2OTUxMjY5ZjVhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE3Ny5hc3NldAAgAAAAMTZmMjcwNGZkY2E0YjE5NGU5N2UzYWQwOTNmMzFmNGMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTc4LmFzc2V0ACAAAAAzNGUzZGE1M2IzYmM1MTY0NjgzM2U1NTAwODJkOWFjNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxNzkuYXNzZXQAIAAAADdhYmM4NGJhZDhkODI5ZjQ2YWYwMjFlMWY3ZmFmODhmAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE4MC5hc3NldAAgAAAAMGQyNThlOWU3NDI4M2Y3NGViYTk5N2QxNWFlNTM0NzYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTgxLmFzc2V0ACAAAAA0MTI2YzZlMjA5MDE3NDU0ZGI2MzRjNjk0YTNlNDg2NwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxODIuYXNzZXQAIAAAAGMxZjYzOTYwZThmMzRiYzQwOWVhM2ExOGYzYmEyYzAyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE4My5hc3NldAAgAAAAZjEwYzlmMzI0OGNiMjhlNGM4ZWY1OTIzZWYwZTk0MDEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTg0LmFzc2V0ACAAAABhZDMyZWQzOWY2M2Y1ZmQ0MjljNjI4MTVhNmI1YmYxNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxODUuYXNzZXQAIAAAAGVjYWNiYWZlOGU5OWM0ZDQwODhjOTViZmVjY2Q5MjlkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE4Ni5hc3NldAAgAAAAMjk0NzM2ZjUwMDk5YmEwNDNhZjA3YmYyNjMxMDQyODAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTg3LmFzc2V0ACAAAABmYzkwYTNkYTY4OGMyZTU0ZGJkYzg5ZDlmOGQ5NzhhNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxODguYXNzZXQAIAAAAGMwMjg5ZGI5ZDg3MTM4ODQwYjYxMWMxN2RjOWFhOGMxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE4OS5hc3NldAAgAAAAOWU0MzEyN2I4ZDUzN2VmNDM4MWJlMzBkZTM3YjkwMzEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTkwLmFzc2V0ACAAAAA4NGRkODQ2YmZhNWFjYjk0OGFkZDViNTUwODI2NmQzYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxOTEuYXNzZXQAIAAAAGFlY2NiYjkxN2JjZDkxMjQ2YjM2OTRmZmY2Y2Y4MDYwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE5Mi5hc3NldAAgAAAAMTY2NDdmMmU4MmY0YWYzNGE5ZDQ2Y2JlOTM0ZjQxNDEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTkzLmFzc2V0ACAAAAA3ZDJhODU5ZTZjNzU1Njk0MWFhNjQxZThiZWZkMTU5OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxOTQuYXNzZXQAIAAAAGZkZTRhYTBhYzhlOTI1YzRlOTY1MDg5OTlhM2IwOGI5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE5NS5hc3NldAAgAAAAY2M2MDE4OTUyYTEwZmE2NGZhZTQ0ZjYyNjQ1YmRhMTYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTk2LmFzc2V0ACAAAAAzNTg4MTQzYWI3MWFiODQ0OTliZDc5OTFjNDZiNjI5NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAxOTcuYXNzZXQAIAAAAGIzNTJkOTc2ZmU3ZjFkMTRiYmNmZjIxYTAzMmZiYzgwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDE5OC5hc3NldAAgAAAAZWNkY2MxMzljMGE5M2NlNGFhMzk5N2UzNjcyOGY0ZDkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMTk5LmFzc2V0ACAAAAAyODgxMTUzNzZmMzAwMmY0NDhjZGFkOGZhNmM5MjllOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMDAuYXNzZXQAIAAAAGJmNTQ5NDgyNWM1ZDBiOTQ1YTJjMTEwYWZjODAxN2FhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIwMS5hc3NldAAgAAAANDg5YzkzNmQ3YTMxZTM1NDVhZWJjNDA3MzUwMjQyMzEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjAyLmFzc2V0ACAAAAA4MGU0YWViZjM5NWI5YmE0OTlkYzM5NGNhNDEyNGI4NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMDMuYXNzZXQAIAAAADEwYTA4OGM5M2Y4Y2RjNDQwYWNjZGRlZDAwNTFlNTM0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIwNC5hc3NldAAgAAAAZjgxZTI2MWQzNjIzZjhiNGRiODU4ZWY2MTJjOGMzMzQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjA1LmFzc2V0ACAAAABjYzViZTA1OWUxMGQyYWI0ZDk1NTRkZjU2NmM3M2MyMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMDYuYXNzZXQAIAAAADNjOTEzOTdkNmRkOTgzNzQ4YjM4OGMyNmE2YjEzNzc0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIwNy5hc3NldAAgAAAAN2Q2N2Q4NzhmNWM2YTEyNDhhMTgwZGQxNjI0NjdmYzgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjA4LmFzc2V0ACAAAABmOGI4NDNhMTc1ZjM2Nzc0Y2I5Mjc4OThlNmJiMzVhYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMDkuYXNzZXQAIAAAADgyMTE2MDIxMWYzNWViZTRlYTA1ZDI4MTg1NzQ1ZmY0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIxMC5hc3NldAAgAAAAYmZlN2UxNDdhNmFkNmE1NGZhY2YxYzI1ZTRlZWM3MzYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjExLmFzc2V0ACAAAABhOTQyYjUwYjFlOTU5MDE0OTlkMGQ2YzBiZWE5ZTk1NwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMTIuYXNzZXQAIAAAADc0ZTY4ZDkwMTlmYjRlODQ4OGQ0YmZiNzE3ZTY2MjNkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIxMy5hc3NldAAgAAAAYWEyMjY4OGYxNzA5MWRkNDZhMjJkYWMxODIzODdkYzEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjE0LmFzc2V0ACAAAAA5M2EzMTc5MTAyZmE4ODc0Nzg4M2YzYzU3ZGNiNjM3MAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMTUuYXNzZXQAIAAAAGMxMTUzOWQ4OTJmMDEzZjRjYWZjNTA2MTI3NmMwZjRhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIxNi5hc3NldAAgAAAANDc2MDVlZWFhZDRkNTM1NDg5MTUwMmZiODJkOWQzOWEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjE3LmFzc2V0ACAAAAA0YmJhYWM3ODIxMGViNjM0ZTkzNGM2ZDIyMzZkMDljNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMTguYXNzZXQAIAAAADJmZWRjZDg1NWM3ZmMwMTRmYmRhYmFmNzEyNGY4ZTJkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIxOS5hc3NldAAgAAAAZTdkNDViNTc5MDIxNWI5NDA5MjY3ODExODA0NWRlYzcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjIwLmFzc2V0ACAAAABlZWE4YTFiY2M3ZDNhM2Y0NTllNWU0MWIwNTQ3ZjkwMQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMjEuYXNzZXQAIAAAADY1MDM5YzQ3ZTY5ODM1ZDQxOGI4YjEzYTVjZGJhM2FiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIyMi5hc3NldAAgAAAAYTMyOWQyZmUyYmY2ZjBiNGViNzFhZjU3Yzc1MDQ0ZTAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjIzLmFzc2V0ACAAAAA3M2FlNGFiODIzNGE5OWM0M2JhYjEwOTQzMjMxZjcxOAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMjQuYXNzZXQAIAAAADRhZmFhYmNiM2ZiNzEwMzQzOGRjZjE4NmQwZTM1ZjIzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIyNS5hc3NldAAgAAAAMjBkMDg5MjQzN2VkOTI0NGRiM2FiMWMzNzUxMjU5NDcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjI2LmFzc2V0ACAAAABkNmY4ZDRkYTFlYWY3Yzk0NTg5NDZiYTE1OTFmNzU5MgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMjcuYXNzZXQAIAAAAGMwYzkxY2I0YjZjNDlhZDQwYTlmN2NlNDFmN2Y5OTAwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIyOC5hc3NldAAgAAAAYzZjNzExNDY2MmFkZjI4NGU4YThmYTJiYjZkY2JjYWMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjI5LmFzc2V0ACAAAAA4YWEzNzI1M2QzNWU2YmU0ZGE3ZTVjNTMzZmMyODRlMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMzAuYXNzZXQAIAAAADFkMTRhZTU5ZDQxYTZhNDQ5YTMyOTY5OTBkZmVjMjMyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIzMS5hc3NldAAgAAAAODU1ZDY5ZTYyNWI3ODE3NGFiNDE2NjQ2NmM3N2U2NjQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjMyLmFzc2V0ACAAAAAyMzY0NTgxZTJlMGUzZmY0N2JlNDU0MmNiOWJjNGEwZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMzMuYXNzZXQAIAAAADA1NDFkOWMxNjRmOTE0ZTQ1OTk3ZTllMmIzZjkyYjE3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIzNC5hc3NldAAgAAAAMzE1NjEzZDJkZjEwZTQwNGJhZjJkNDVhNDA1ODFhZDEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjM1LmFzc2V0ACAAAAA0ODUwNzUzMWVjMDQyNWI0ZmE3NzMzNTQ1MWQyOWVhYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMzYuYXNzZXQAIAAAADUxNTM5OTc2NDBmZmMzZDQzOTJiNmY3MTEyMDdhYTMwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDIzNy5hc3NldAAgAAAAOTAxYWE5ODljMzZlOGMzNGI5Zjk0MzljNTNmNjU1OWQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjM4LmFzc2V0ACAAAABmMzFlNTliN2Q0ZGY1OTA0M2JlZDQ4ZDRlOTNkMTU3YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyMzkuYXNzZXQAIAAAAGYyMzc5NzhiYWJhZjE3OTRjYWY4NWMzZDkzNjUwZjVlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI0MC5hc3NldAAgAAAAOWMxNmJmNTExN2E0OWQzNDBiMWExNmQ2ZDc3ZGVlNTIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjQxLmFzc2V0ACAAAAA0YWFiMjc4NWRmYzY1YmY0NWJjMDJmOTI1YTM1NTQ1ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNDIuYXNzZXQAIAAAADZhMDI0MTI4ZjE4NzEzMTQxOTcyNTJiMzc5ZWJkNDUyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI0My5hc3NldAAgAAAAMzE3NTYyZjFmMzc3ODNjNGQ5YmEyZGM5YWJhYzI2YTMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjQ0LmFzc2V0ACAAAAA4NjUyZDAyMWU0OTExNmU0NWI4MmI3MDM1YTdmZjc2NgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNDUuYXNzZXQAIAAAAGQxYWEyNzNlNGJhZDk0YzQ4ODljZTlkZmViZTg2MTcwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI0Ni5hc3NldAAgAAAAYTcyYjZiNDQ1ZmQwNjNkNDlhNmE2MjI5ZTcxMGUwYTAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjQ3LmFzc2V0ACAAAABjZjFlMTY3NzczZmRmZjI0YTg5MTVmZTg5M2JiOTlkYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNDguYXNzZXQAIAAAAGE0ZTFmZjY4Y2MxNzRiOTRjYTc5NWY1NjAzY2I5NjNhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI0OS5hc3NldAAgAAAAODM2NjMxZGIxNWM3ZGZmNDJiZDI3Y2M0YjRjNmQ5NWIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjUwLmFzc2V0ACAAAAAxNTQ1OWJkNmQzMzNhMDA0MGI3N2Q2Mzk2NWEwYWZhNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNTEuYXNzZXQAIAAAAGViMWJjNGFjZmMzZGZhZTQyOTE4ZTA3M2I5MWQ5NTVkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI1Mi5hc3NldAAgAAAAZmJjNzU4NTMzZWZkNGJkNDU4NjQwZTQ0YzA1ZTVlODUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjUzLmFzc2V0ACAAAAA1MDA0OWVmMWI4NDk3MjM0OGIwNWJiZDMxYmEyMGRlNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNTQuYXNzZXQAIAAAADFjMjk4OThlOTNkYWRkNzRkOWZiYWI1YTUwYThmNDNkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI1NS5hc3NldAAgAAAANTBhMGVkMWM0OTY2NGU3NDVhNjI2NDRkMTlmOTJjYjcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjU2LmFzc2V0ACAAAABlYWRjMmY1NzJmOWZjMmY0NmFkNDUxNzk5YmI3YmViMQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNTcuYXNzZXQAIAAAAGUyOGNjOTJkYmMyMWViMTQyOWRmYzRmYTRkNWU4NDVkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI1OC5hc3NldAAgAAAAZGFmNWRlODExZWMzMmNhNDk4MGU2MTM0MDFhOWUwM2EALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjU5LmFzc2V0ACAAAAAxZjI4NzEyMGQxOTBhYjM0M2JkZTI1OWYzYTBkODBlYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNjAuYXNzZXQAIAAAADk2MGJjOTJmNjYxYWMxMTRlYjRjMTRkNTBmOGY4NTc2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI2MS5hc3NldAAgAAAAZTZjOGNjZjA5ZTA0YWNiNGM5YmUwMDVjNTQwZDEyZjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjYyLmFzc2V0ACAAAAA2MDMwZmRkOGQ0ODIyZDg0YmJiYzI5MzQzMDRlNTRjMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNjMuYXNzZXQAIAAAADQ5ZTFkYjk5OGUyZjEzYTQzYjg4NzA4NDYxZjY1N2RjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI2NC5hc3NldAAgAAAAZDYwOTdhOTVlY2Y0N2U1NDU4Yzk1OGUyMDU4YjBlMWYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjY1LmFzc2V0ACAAAABjODUwN2U4NWYzMWM0NWU0MDlmN2UwMDZiY2U2NGI3NwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNjYuYXNzZXQAIAAAADg3ZDVjMmFiZWIxMDY5OTRhODRhNWVmYzI4NDk2MWUxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI2Ny5hc3NldAAgAAAANjk4MDQ3ZWEzNTJiYWQzNGU5MGU3MWQyYWIyMGMxNmMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjY4LmFzc2V0ACAAAAA1YTBiY2E1MjJkYmRmNzY0ZmEzYzA0N2M2NjRjOTlhZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNjkuYXNzZXQAIAAAADgwOThkOTM3MGIxMzdlMTQzODFjYTViYmMxMGM1ZjQ4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI3MC5hc3NldAAgAAAAZDNmOTE5MmRmNTVjNjQ5NDk4ZmVkZDE0MGRiZjBkODYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjcxLmFzc2V0ACAAAAA0N2EwZDU5ZWYxYzIzMTY0Yzk4NjY0ZjcwYTBkYWI2NgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNzIuYXNzZXQAIAAAAGRlY2ExZTcyOTg2NzhkMjQ4Yjc2NjBkYWY1YjFlNjMwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI3My5hc3NldAAgAAAAZjJhYjZmZDg1YTZlMzAyNDJhMmE3OTBiZWQzNTUyNjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjc0LmFzc2V0ACAAAAAyMzViZWRjMzJkZjlmNjI0NmFhZTM4NWNjMWQ3ZjExNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNzUuYXNzZXQAIAAAADdmNzc3OTc0YzkyNjYyMzQ5OWI3ZjE3MzA2ODJmMTE5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI3Ni5hc3NldAAgAAAAYjY1NDRkZjI4ZTg3ZDc4NDg5Yzg2OTk5ZTljNDVkNDUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjc3LmFzc2V0ACAAAABjZmEzZTA4M2FlNjcyMWE0Nzg0M2EyYzMxYjYzZDM3ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyNzguYXNzZXQAIAAAAGZhNmU0NDc1OWEwODFhYjQyYmMwMGRlYjlhOWNkZjg5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI3OS5hc3NldAAgAAAAMmI0ZGU2ZDhiMzFiMjg4NGM5MjdkMTJmNmIwODg1ZWYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjgwLmFzc2V0ACAAAABjNDIzMzkxZWZkZGIyYWE0NWFlODYzZjY3ZTY1ZjIwMQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyODEuYXNzZXQAIAAAADRjNjlhMjA3YTNmYTRlOTQ2YTc3ZTQ5YjkxNzlmNDkwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI4Mi5hc3NldAAgAAAAMzkyZjI5YzY2ZmQ5MGUzNGNiZjZlNTI4MmY3ZjMyMjgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjgzLmFzc2V0ACAAAABiOTc1M2Y4NDEwMDdmMDM0OWFiMTQ2MDgyODYzMWI5MgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyODQuYXNzZXQAIAAAAGZjODY5ODZhMWU2OWUxNjRjYTY0ZjQyYWNkMTg0YWZjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI4NS5hc3NldAAgAAAAY2ZmM2E0NzIwYmQ0MmJmNGE4NDZhYmY4NWQyZWQxOTgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjg2LmFzc2V0ACAAAAA2ODAxMjU0YWFkZmU0ZTk0MGExOGI1YzJmYWZhMzVkYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyODcuYXNzZXQAIAAAADI2OTY3OGE2YzVjMmZmZDQ3YjYwYzIwM2FiZDk5OWFkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI4OC5hc3NldAAgAAAAODY4M2MxODJiMjE2ZTA2NGJiY2NhYWQ2OTYxNjFhYTQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjg5LmFzc2V0ACAAAAA1MTA5YmY3ZDFhMzBhMmE0YzhkNWIwNWU3MGNlNmRhNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyOTEuYXNzZXQAIAAAAGIyMTM1MzU5Y2FiYWFlMzRlODkxNjU4OWVkNjljOTI2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI5Mi5hc3NldAAgAAAANGNiNTZjNjY2YTA0YTYxNGJhYjJjYTE1ODQ5YzJiZGIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjkzLmFzc2V0ACAAAAA0ZjhlNWQ0MDhhNDk5ODE0MTg2Yjc1ZjJiMDM4YmZlYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyOTQuYXNzZXQAIAAAADlmMDMyMTU0NzQ4YWQ5NDQxYTJmNjBmMzhiNWYyN2M0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI5Ni5hc3NldAAgAAAANmJlNDUyYTViNTIxZWVhNDk4Yzg5OTUwZjU0MGQwODcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMjk3LmFzc2V0ACAAAAA1NTkxZjQyYjg4ODFiNjc0YTlmMzgxNGE1NGRhZTY5MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAyOTguYXNzZXQAIAAAADJlYTk0ZmY5OGE1YTk2NzRlYmM3ZGNjN2FlMDhmMjE5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDI5OS5hc3NldAAgAAAANzgyYWY3MGFlMjEyYjNmNDQ4ZGI1MGI1NmJkMDFiZDAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzAwLmFzc2V0ACAAAAA1MDA3MjkyOWYyMmY3Mzc0YzliOWQ0NDM4NTliZjQwNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMDEuYXNzZXQAIAAAAGIwNzNhNWQ4NTM0NmM0NTRmOGZhZmJlZDk4NWU2ZjAwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMwMi5hc3NldAAgAAAAODliNTE1MGViNjZkNTI4NDRiMjY5YWY0NTY2MzY0YTQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzAzLmFzc2V0ACAAAABmNTc5NGZhMWNmYmRiMTA0NDllMDM5YjdiMWFlMGQ5OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMDQuYXNzZXQAIAAAADcxMGNhNGE4NGIzMTUzYjRiYTVhNDNhZWUwZTllODcyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMwNS5hc3NldAAgAAAAMDQ1NTdlYzI4ZTMwMmQwNGVhNjgzNWIyM2M5YWE3NzgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzA2LmFzc2V0ACAAAAA2MjliOTc3Y2I5ZDU5ZDE0ZTk5ZWJjOTdiNmMwYzk1OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMDcuYXNzZXQAIAAAADZlZDY5NTIzY2ZmZDkzODQ3OTRjZGU5YzkzMDA4ZTQ1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMwOC5hc3NldAAgAAAAZmVmYmVmMGU3MWZhMDA1NGRiMGQwZTUyZGUwYjUxYzMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzA5LmFzc2V0ACAAAABjNTZlYWMwYjZhN2M4NmE0MGFlNWRjZDRmOWI3NzRmZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMTAuYXNzZXQAIAAAADE0NmJhYjE5MmI5ZTgyMTQzYmQwMzNjMjFiZGVmMmE4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMxMS5hc3NldAAgAAAANDI1ZDhiNTJhMmFiYjQxNDk4OWJjYWUxMzg4MTBlNjIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzEyLmFzc2V0ACAAAABmNWUzZDcyY2ZlYzFhNDA0ZjliYzE1OGQ4OTIxY2E1OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMTMuYXNzZXQAIAAAADJlZjAyNmVmMjk4NWRhYzQ4YjY2ZTYyYjM4Zjc4YmM5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMxNC5hc3NldAAgAAAANDQzMDhlMDk2NWYwNWJhNDdhNWM3MjQ1YjExOGYwMjYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzE1LmFzc2V0ACAAAAA5MzQ0NGIxZTAxNWNiMjI0NGFiZTFhMmQwOWZhY2EzMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMTYuYXNzZXQAIAAAAGY5Njc1YmE5NDMwNTdlOTRiYjE2YWQ1MmZkOGE3NTFjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMxNy5hc3NldAAgAAAAMjMxNzYyZTQzNjYxNDk5NDBiMjE3YWJiZTMyM2YyOWYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzE4LmFzc2V0ACAAAABhZjdjZDQ5YmIxZjM3OGE0NmJlYjgwYTkzM2I1YTQ1NwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMTkuYXNzZXQAIAAAADUzYjI1Y2Q3MTBjMGZkMjQ5YTk3NzM4YWQ5MDY2YjBhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMyMC5hc3NldAAgAAAAOTc1ZDMwMjU4OTY3OWE4NGZhODA0MjUyMzM4OWZmYzUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzIxLmFzc2V0ACAAAABlMDBmOTY0YjA2NzliNzI0OTkyZTBhYzRiOGI0OGI5MQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMjIuYXNzZXQAIAAAADU1OWY2NmExNzZmYzIzYTQzYjA3ODc2NDg0Zjc5NjlmAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMyMy5hc3NldAAgAAAAOWM3NzRjMWRhZjAyMGRkNDBhYTFmOWQ0NjU1M2ZiNjQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzI0LmFzc2V0ACAAAAAzY2ExMzk1ZDRiZWY5OGE0NThkNDVkZmUzNWMyMjQ3NAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMjUuYXNzZXQAIAAAAGY1ZDZjMmQ2OTBlMGY2NDQ5YmY3ZDRjYzRlZTJkMmU0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMyNi5hc3NldAAgAAAANWIxN2MzMjczMTY3MzA1NDA4ZWIxZmY0YzAwZTI3Y2EALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzI3LmFzc2V0ACAAAAA2NzY3OTNiZDQyMDM5MTM0M2EyZjgyMjc5MGEwMDZiZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMjguYXNzZXQAIAAAADM2OGQwN2Y2NjgyMTMzMDQ3OTNjYTQ3ZGFlNGYyNzJhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMyOS5hc3NldAAgAAAAYTNmZjRhNTBiYmJlMDkwNDQ5YTgwZjdkYzA2YmY3OTgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzMwLmFzc2V0ACAAAAAwMGI2MWEwMzE1NDY2Mzc0M2JmMDkxYzkyMDk4NDZjYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMzEuYXNzZXQAIAAAAGIwYjM4YzQ2OGY2YjI4YTQ4YjZmYTUzOGVkYTk2ZGY1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMzMi5hc3NldAAgAAAAZTM0Y2U0NjI0MWM0MWNiNGViYWY1MGZmM2I1Yzc0NTMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzMzLmFzc2V0ACAAAAA0NTQyYzlkZjAyZTgzMjQ0NjkzNjk2N2VhNDg5MjQ1YwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMzQuYXNzZXQAIAAAADM2MjFhMTQxMDM3NjQ0NTQxOGVlMzQwZjc0ZGUxY2VlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMzNS5hc3NldAAgAAAAYTU2MjkxOWJiOTk3NjM0NDRiNjVkZTRhYjg1OWE2MmMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzM2LmFzc2V0ACAAAAA1Y2E2ZDVhY2UzODIxZDk0ZThjMTQ4MDE1MjUyZGFkOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzMzcuYXNzZXQAIAAAADkyYjg3MTc4MWUxOGRkZTRiYTRjNzIyNTlkY2VlZWM2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDMzOC5hc3NldAAgAAAANGUyOGFkYmY1YzZhYzEzNGE4NTUxNWZkNmE2ODlkZTcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzM5LmFzc2V0ACAAAAAyNjAyNDcyMTdhZmE5ZTY0MjkwN2RmNDcxMjg4NTdhYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNDAuYXNzZXQAIAAAADQyMzQ3YjJmZWJhNTA3NDQwYjFiNDE5MTdjNzc3ZTFiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM0MS5hc3NldAAgAAAAZmEyMDZiOTViMWVlOTQ5NDI4YzZmNjc4YzFlYWExYjIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzQyLmFzc2V0ACAAAABhOWZhMmNjYzAyMzc4NTk0NTkwMjNhMzQ1MTUzN2NmNgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNDMuYXNzZXQAIAAAAGU3NWJmOGE0NmJlZWY3ZDRlOTlkOGIyZDQ2YmFjZjZiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM0NC5hc3NldAAgAAAAOWE4YTQ0NDI3MjQ2OTZlNDk4NzAxYTliMjAxNTFlNTcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzQ1LmFzc2V0ACAAAABhZTkxN2U4ODVjMTk1NzI0NmJhZDdlYzAzMjNlMDY4MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNDYuYXNzZXQAIAAAAGRlYjM2ZThmMmJmN2U0ZDQ0YmZmMjU4M2Y1MzFkZGZlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM0Ny5hc3NldAAgAAAAOTNmZGQxMGQwZmQ2MjQ3NDFhMzNhYWI2ZDg1YmEyNGUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzQ4LmFzc2V0ACAAAABmOGQ4MGIwYzdlNTAxMGY0ZmI2NjAxZGQwMTczODRiMAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNDkuYXNzZXQAIAAAADliZDEzZDA4MWM1ZTg0NDRhOGVmMjdkYzFmMTBjNjUzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM1MS5hc3NldAAgAAAAYmQxMDk5ZTkyZDczYzY0NDY5MDYyNjRiMTZmNDA3M2UALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzUyLmFzc2V0ACAAAAAwYjJhODZlNGE0YTE4ZTc0YzlkNjdlNTZkZjZlMTBmMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNTMuYXNzZXQAIAAAAGZiZDVmODdlYjgwNmE2ZTQwYTdjODRlOTQ3MzU1MWVhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM1NC5hc3NldAAgAAAAMTE3MDYwODQ1YTNmODEwNDRiNDMzNjRkZjc2M2QyOWIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzU1LmFzc2V0ACAAAABlZTE1ZDRmYzQ1ZjQ3NzI0OTgyYmZmYmFiZmFmMzMzNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNTYuYXNzZXQAIAAAAGNlZjIyN2I1OGJjNjNhNTRkYjg4YWY4YmQ4ODk5MTI0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM1Ny5hc3NldAAgAAAAODc2OWY3MTJjMjEzNWQyNDVhOTJlZDQ1ODgyOWQ5NDQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzU5LmFzc2V0ACAAAABlZDg5NmQxZDM0MDc3NTQ0NjllNDY0OTY4YmZhZDYxNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNjAuYXNzZXQAIAAAAGI4ZWViNWI2MzNiNDZjNzQxYTZkMTAwMmZjNDljNmJmAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM2Mi5hc3NldAAgAAAANDY0MTNiODU4NTQ5NGM5NGVhMTNmMjNmMWEyMTFjY2YALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzYzLmFzc2V0ACAAAAA4ZDM3NDRiNzllMWZmNTk0OTkzZWQwYjE0MTdlZmRmOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNjQuYXNzZXQAIAAAAGYwMTRmNzNmZWJmMTAwZDQwOGIwZmY0NDIxOTg1MjY0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM2NS5hc3NldAAgAAAANDBkMGIyZGJjNmZhMDEwNDliMjU5YjU5ZjI2NTFlYzgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzY2LmFzc2V0ACAAAAA2N2RjZWE0ZTdkNTBkMjM0MTk5NGYxMmE4Y2Y2NWQ5MgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNjcuYXNzZXQAIAAAADEwOGMzYTk3OTEzNWJhZDQ2OTExMTIxYTUzOTQ2YjgzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM2OC5hc3NldAAgAAAAYWM5OTdmNjBlYjlkYTg0NDU5MmVhYzRkYjcyYzU3MTQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzY5LmFzc2V0ACAAAAAyNmQzZjFlNzRlNmUxOGY0ZGFjZWUyNWRhN2E0NGNjNgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNzAuYXNzZXQAIAAAADJhZWQ2Mzc4MjlhN2Y1ZDRmOWFhMWRiOGQ5NDcxNzA4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM3MS5hc3NldAAgAAAAODlhYzhhZTRjMjhlMjdjNDFiMDhkMjcwYzhhZDU4ZWUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzcyLmFzc2V0ACAAAAA3Mzg4ZDM0ODRjMTFmNjg0NjllZDY2OWFiMDJiYTVhYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNzMuYXNzZXQAIAAAAGNkOGY4NDRlYzQyZTM0YzQ4OTI2OGY2MWZhZjI3ZDZhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM3NC5hc3NldAAgAAAAOWE1NjFiZDU0YWQzYjI5NDA4ZWNjOGNmODMwYjQ5YmYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzc1LmFzc2V0ACAAAAA1NzgzZjY1OTM1NWQ4OWQ0ZThkMzQ2NDlhMjJlNTRjZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNzYuYXNzZXQAIAAAAGZmMmZlNzcyYjVjNzYyNTQ4OTgxOWRkMzcxNDQ1YTk2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM3Ny5hc3NldAAgAAAAMGZmNDA5ZWEwMmE1YzkyNDQ5YzA0YjM4MTFjMmMzNDYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzc4LmFzc2V0ACAAAAAxZWU0MzQwN2QxM2UzODg0Mjg2YTdiMTEwNWYwNmNjZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzNzkuYXNzZXQAIAAAAGQ4NjhmMGI3ZDg3OTViNTRiYmIwYTE3ZjYyNzIyYzQ4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM4MC5hc3NldAAgAAAAMzZiYTExMmI1Mzk3NDIyNGE4YjRkM2M5MTFlZDBjNmIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzgxLmFzc2V0ACAAAAA0NTY5MWE2YTk1ZTVjZDA0ZWI1MzEzYzYzYmJjYzg0YgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzODIuYXNzZXQAIAAAADljYTNiM2FlOThmMjI2NDRlYTIyNzk5NDNkNjcwYjQ4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM4My5hc3NldAAgAAAAYzQ0YjIxNDZlZTZkMjVjNDk4M2I3NWY5MGRmODk1MzgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzg0LmFzc2V0ACAAAABmNjNiMTQ1N2QyNGE0OGE0YWIxZWU3NmQ5NWEwMjIwNgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzODUuYXNzZXQAIAAAADRjY2RmNzRlMzA4YjFkMjQxYjM0MTVmZGExM2VkMjJlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM4Ni5hc3NldAAgAAAAMzEyYmVjZjYxYmZhNWQxNDFiZWRiOWVjNmY4MjFjYzgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzg3LmFzc2V0ACAAAABmZGUyYmFhNzA1ZjMwYjM0YjgyMjE4ODU4ZjAxYmMyYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzODguYXNzZXQAIAAAADUzYTVkOTJmZWE1ZjJkMjQyYTI1N2M2ZjFmY2Q1ZjIzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM4OS5hc3NldAAgAAAAYmQyMTlhNGY3NjNlOTM5NDQ4MzhhOTIyZDNiMTkwMTAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzkwLmFzc2V0ACAAAAAwYWEwM2I4MTU3MzI5MjU0MjhlMDcxNmZkMWY3Yjk2MAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzOTEuYXNzZXQAIAAAAGY0YjdmN2VhMzc5ZjRmMTRjODJmYjJkNWI4YTUyOTY4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM5Mi5hc3NldAAgAAAANWI5MTViNzAwMTAzZWM3NGJiMWRkNTFiODA1MDdkMWEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzkzLmFzc2V0ACAAAAAxM2I4ODI4YzI1NzM4MDU0Y2JmMTMxZDUwY2RjMjI4NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzOTQuYXNzZXQAIAAAADY2NDZlNTIzZTk0ZTNlNzQxYmVlMzc1MjExNTgzNzRjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM5NS5hc3NldAAgAAAAM2M1NDY1ODM0ODQxZDI3NDViYzJkZWVmYzIzNWVlZTgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzk2LmFzc2V0ACAAAAA1YTdjNWU1MmM2YjA0NzE0MWJmMmE1ODY3ZmM4MjUyNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czAzOTcuYXNzZXQAIAAAAGZiMmE1Njk0Nzc1ZTllNDQxYjYxNWY2M2I2NWQ0OTNiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDM5OC5hc3NldAAgAAAAYjk2OWQxMTE0YzM2ZTUyNDFhODNlYjEzMTQ3ZmU3OWQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwMzk5LmFzc2V0ACAAAABmMGY2MjgxMTlhMjgyOTQ0MmFlZTVkZTE1NDBjMWY3NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MDAuYXNzZXQAIAAAADU3NGVhN2Y5OTlkZDVjYTQzOGZjODJjZjZjZmVmNmQzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQwMS5hc3NldAAgAAAANjQxYmZmZmViMzBhM2M5NDI5ZDEyZTMwNTU4MTU5YTEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDAyLmFzc2V0ACAAAAAyZjNmMDU5YmE0ODA5YzU0YWIyNGU2NDVhNzAyOTk4NAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MDMuYXNzZXQAIAAAADNiNGI1OTUzNWRjMTUwNzQ1OGM5YTE3ZmJhOGJiNTU5AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQwNC5hc3NldAAgAAAAYjYyZjNiMmM3MDUyOTAxNDY4ZGIxMDI5MGVlYWJiYjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDA1LmFzc2V0ACAAAABkZDk4NTdjZWI2NDVhZjM0MzhhZTgzM2MwZjYzOTg0OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MDYuYXNzZXQAIAAAAGM2Mzg1N2Y0MmU4MjhjNzQ3YjE0MDE4Nzk1NTA5NzYzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQwNy5hc3NldAAgAAAAMGM4MDk0YThlY2RmYmExNGFhOGMwNjJjNmNiY2NjZDkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDA4LmFzc2V0ACAAAAA2MjFjNDNlNmE2MmI4OWE0NmE5ZjQ3ZmZhZTc2YjliYQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MDkuYXNzZXQAIAAAADYwZTg1ODg1MGU5ZWU5NTRhYWJjOGJlM2MzODFlZTljAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQxMC5hc3NldAAgAAAAOWRiZDIxMjU3ZjZiNzg3NDRiZDU4MjRiZGM5YTE0MWYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDExLmFzc2V0ACAAAAAzNjJhZjFjMWJjODA2YWM0ZDlmYjM3M2ZlYWVmMzBlNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MTIuYXNzZXQAIAAAADczZWQzYTZlNWYyMDdhYzRlYmFiMmViM2EyNzI1MTUzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQxMy5hc3NldAAgAAAAZDZhMWZiMzJiNGUyMTNhNDE4ZDJkN2NhMDJkZWQwMTIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDE0LmFzc2V0ACAAAAA2NGEzNzhkMTAzN2FhYmU0NTk2MjE4MTBkYmM4NzMwZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MTUuYXNzZXQAIAAAAGNjMzFhZTViYTllZjQ1MjQ2ODU2YTc1ZjkxMGZjZTU4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQxNi5hc3NldAAgAAAANzY2MTU2YWM5ZTMzNTI1NDg5YzU3MmEwOWJmNmJjMGIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDE3LmFzc2V0ACAAAABlYTFkNTJlYWM1ODFmZTc0ZGI5YTE4Y2U0OGU3ODQxMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MTguYXNzZXQAIAAAADQ4NjQ0Y2YxNTgyYzNjYzQzOTk0YTA0MmJhODYzODc0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQxOS5hc3NldAAgAAAAYmNhYWVkOTM4NDYzNTdiNDJiMDZiZGJjNGY0ZGNlZmUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDIwLmFzc2V0ACAAAABhNmM2NDE2NjI3NTFkZDY0ZmI5Y2Q0YmNjM2QxYTlmNwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MjEuYXNzZXQAIAAAADAyNTQ2NzgxZjVkYjVjNzQyOTUyOTc5YjI5OWI0OTZjAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQyMi5hc3NldAAgAAAAMzRkYmE2N2RhYzlkMDMyNDZhZmE5Y2FmNGZjODE1Y2QALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDIzLmFzc2V0ACAAAAA0MDEzOTdiYmVkOTAxOWE0OGE0ODg1MTU1YTg5ZWE5NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MjQuYXNzZXQAIAAAADU4NzI1ZDM3ZTZmODg5NjQ5YmI4YTZkNmE2M2NmNDVkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQyNS5hc3NldAAgAAAAMTgzOGNkZGExNmZjMmYyNGQ5Mzc0ZjMxYWZhODgzZDIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDI2LmFzc2V0ACAAAABkNzgxZjk2MTRjZjJkZjA0MDg2MzA3ZjdlZWE2YzA2YgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MjcuYXNzZXQAIAAAADE1YzM1MTY3Y2ExMTEwZjRmYjBhNzFiNzg3NTc2NWJiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQyOC5hc3NldAAgAAAAZTQ2YzA2YWZmYjgzOGQ1NGVhYTdmNzE5OTlkNDI5YjkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDI5LmFzc2V0ACAAAAA5ZTY2Nzk2YzNlYjA0YjA0OWJkNWE5MmE4MTA5NTgwMQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MzAuYXNzZXQAIAAAAGI2MTJiNjJhMDAxN2RkNzQ2OWM2MmNiMTJiMWU3ZGU2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQzMS5hc3NldAAgAAAAMjVlNWVlZWNhMzI0ZjkwNGViZWE2ZGM3MDM3ZmM4OTEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDMyLmFzc2V0ACAAAAA2YjgzZjY3NDhlN2IyZDk0ODkxM2VlMTA4ZDM1MWQ0MgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MzMuYXNzZXQAIAAAADdiNjAyOGQzYzgzZDMwZjQyYWQ3Y2MxMWU4OTMzODY1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQzNC5hc3NldAAgAAAAYjFlYWQzNTM1YjkyY2QzNDBiNGJiMzI5ZGI0MGRkY2MALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDM1LmFzc2V0ACAAAAAyYTA2ZTgzZDljNDg4OTc0OTk3YjA1ZDI0MGZlNDMxZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MzYuYXNzZXQAIAAAADM3YzYyNWQzNzNhZDE0NDQzYWFkNzM2MjBiNTA2ZmNkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQzNy5hc3NldAAgAAAAZjk4YjRjMWQ4ZTE2YjQ4NDNiOWZkYmE4MzYwN2IyOTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDM4LmFzc2V0ACAAAABhY2YyMmMyOTA5ODE5Y2Q0NTllZTFjNTNjMzRlZGUzZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0MzkuYXNzZXQAIAAAADA0ZTJmNDJmNzhkY2FmNTRkYTA3MDQzNzYxMmQwYTMxAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ0MC5hc3NldAAgAAAAOGM1NWU0MTY5MzliY2EyNDRhZDgxM2RkMmIzZTcwMmIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDQxLmFzc2V0ACAAAAA2NGM5YjFiZmVlODhmNGE0YTg4Y2ExZmEwNTc4MzRlZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NDIuYXNzZXQAIAAAADk3YTJkNGFkMDZmYjQwYTQ0OGY1MTAwYzcyNDBjMzYwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ0My5hc3NldAAgAAAAY2RhYjljOTg2NGM0NTY0NGE4NTRhOTgzOTE4YWY4YTkALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDQ0LmFzc2V0ACAAAAAzMjk3ZDg1NmJhNTNiZGM0YThjNWRlYTg0NDhhYzMyMAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NDUuYXNzZXQAIAAAAGU1N2YyZGQyOTk2ZGE2YTRmYTI3ZGQ3MTlhNWJmNjExAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ0Ni5hc3NldAAgAAAANWFmY2Y0ZTNlZDNhZGZhNGI5MzRmN2ZiN2Q4YmE4ZTIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDQ3LmFzc2V0ACAAAABlYjhjOGJjY2RlYjEyYWQ0NzgwOGFiMzBjMmE2YjU0NQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NDguYXNzZXQAIAAAAGE4MzA4ZTg0MDRiYTMzOTRhYmI2NjE3YWYwZWE1MDk0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ0OS5hc3NldAAgAAAAOGMzMTI3NzYyMWY5MTBkNGM4MzkyNzcwOGUwNjIzOTUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDUwLmFzc2V0ACAAAABhMDgwMzg4MDU0OGI5YmI0YmFlYjljZDg1ZTQ3MWQ4MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NTEuYXNzZXQAIAAAADc5YWUyMDRhNDgyYmYyYzRjOTFhMGEwYmQ0OTAzNWRiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ1Mi5hc3NldAAgAAAAZjQzODU2N2QzZWM4ZTUxNDk5MDg4NzAxYzUwZTFjOWQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDUzLmFzc2V0ACAAAAA5YTVlZGFmMTQyM2RmYTU0Nzk4NTIxYjY4MjY0NDNjYgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NTQuYXNzZXQAIAAAAGNhNDg4ZDA1MzY3MjgxYzQ4ODlmY2Q2OGI5NTI3ZGEyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ1NS5hc3NldAAgAAAAMTA0NTc2MjI2ZDkwMmQxNDE4MDU3M2I2YjU0MGExMGEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDU2LmFzc2V0ACAAAAAyOWEzNTFhMjc0OTQ2MWE0NmI0NjUyYmFjMmE1NGNmNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NTcuYXNzZXQAIAAAADI0YjE0NWFiZDNkNmEyNjRhODg2ZGMxYWNlMWZmZGMyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ1OC5hc3NldAAgAAAAN2Y5YzA1ZDI4YjM1ZmYzNDhhMmYxYjcyMGIxZTAwNTgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDU5LmFzc2V0ACAAAAAzNTk5ZWFiZTNiMTI2ODk0ODhhNGQ1YjM3MDJiNzQyOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NjAuYXNzZXQAIAAAADRjNGUyNDc0NDVkNGQ4MjRlOWIwZDc1YWM5N2Y0YWUyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ2MS5hc3NldAAgAAAAM2UwYWFhZWE2MGZiMWFhNGZiYjIxMGExMmFiMTBlNTEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDYyLmFzc2V0ACAAAAA3NjE2ZGU3NTE3NzVjMDQ0Yjg0YzY1ZDgxOGNhOWY1YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NjMuYXNzZXQAIAAAADZiZTk0MGI4MTBkZWUwMDRkYjRhZjA2MGJkY2M3YTJhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ2NC5hc3NldAAgAAAAZDlmMGJjNmJlNTIzN2EwNDI5Nzc1ZDNiYWJkYTc2M2MALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDY1LmFzc2V0ACAAAAA5OTZkYzljYTNiYzM3ZDQ0ZDg1MWIyMjdkNjBjZWFjMAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NjYuYXNzZXQAIAAAAGFiMWJlMjJkNzg1YWZiODRiYTNiZWRjOTc3MzgyNWM1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ2Ny5hc3NldAAgAAAAZjZhZTMxYWQ5N2JlMzQyNDJiZjNkYWEzMzFiMmNjOGQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDY4LmFzc2V0ACAAAABhZWY3MzIzOWI5ZDY5MDA0YmJiNjNmYjE4ZDkyNDZjMgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NjkuYXNzZXQAIAAAADQ2Yzc4NmZhNzg3YzU5NzQ2OWY2NDExMjczMmY3NDM3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ3MC5hc3NldAAgAAAAOTdkZGE2MjI3ODliMTVlNDRiNmU1Y2FhMTY2ZTBiZmEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDcxLmFzc2V0ACAAAABjZDM0MjQ3NjRmMDAwOGM0YTkxZjVhMzQzNzViZjM0YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NzIuYXNzZXQAIAAAADMyNGI3MjA5OTMwOTcxYTRhYTkyM2UyMWU2ZTRlOWVmAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ3My5hc3NldAAgAAAANjA5MjhmYWNiNGFjYTA3NDM4OTU3OTQ4N2MwYmY3ZTMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDc0LmFzc2V0ACAAAAA1YjQ0YjdlZTllOGZlZmY0YmJmY2Y0NGI4NDRhN2Y0ZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NzUuYXNzZXQAIAAAADg2MzM0YjRkYjkwNWVkNzRjOGRmNWZjZGEwYWM4NTI2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ3Ni5hc3NldAAgAAAAMmVlMDFmNTg4NGRkY2IxNGM4M2ViMjJkNjI3NzkzODIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDc3LmFzc2V0ACAAAABlMWU4ODJmMDRkYWJlMjM0MTgwNWFkOTdlOGVlYTUwOQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0NzguYXNzZXQAIAAAADcyN2I2MjQ2ZGY0OTdiOTQ5OGJkN2NjY2JmNTRiYWY3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ3OS5hc3NldAAgAAAAZjk1MTc3MGViMzdiNWQ3NGY5MWU1MjUzNjdmOGQ0ZjUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDgwLmFzc2V0ACAAAAAwOTg4ZGVmNGI1NzhkYWU0OWFmMjdmODBmYTQ4MDEwZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0ODEuYXNzZXQAIAAAADEyMDg1MTM4ZmJiMzVkYzRjOTk0NDVmMTVkMmNlMTcwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ4Mi5hc3NldAAgAAAAYTJkZDk0ODg4MzI4MjRlNDQ5NmQ3OGNjOWFhNmU4YWUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDgzLmFzc2V0ACAAAABmMDBlZjIwYjc2ZmViMzU0OWJhNTJmM2I2MjVkOTAwOAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0ODQuYXNzZXQAIAAAADJjZmVkYzg1NmFkNTY0ZTQ4ODhjM2RiOWIzYTg2ZDFlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ4NS5hc3NldAAgAAAAMGY2MzUyNjNmOGQzMWUzNGRhOTE0ZTU5YmQwYjdkNWEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDg2LmFzc2V0ACAAAAA4MjE1NTQ0YmU2ZGNmODE0MmI0M2UzYmQxNmU3MjM4MAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0ODcuYXNzZXQAIAAAAGJhZmZmNzFkNWRiMzBjNzQ5OWY5MTQzMDZkMGUwZjVkAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ4OC5hc3NldAAgAAAAMzdlMDIwMWIzNWRlNTVkNDhiNDg2MDNhNjQ5NTdmNWIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDg5LmFzc2V0ACAAAAA0ZWE5NDI3ZDczNDMyZDk0MzkyZjBkOThhNDgwNzljYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0OTAuYXNzZXQAIAAAAGIzYzU0NGJiYzg4YTcyYTQxYjk1YjRjNTc2MGIxMjY3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ5MS5hc3NldAAgAAAAN2EwMjlhMTI0OWUyODM4NDA4M2VmZDRkMjAzOTM4YzcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDkyLmFzc2V0ACAAAAA0ZDk1M2M2YzcwNGNiNmM0OWJiNWM4MDMwZmQxMzQ2OAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0OTMuYXNzZXQAIAAAAGY4YTEyOWRjMzU1NWI4YjRhOWRmY2IzMDEyOWQxNzZhAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9oYXRzMDQ5NC5hc3NldAAgAAAAOTI3YWYwYTZmNmNlM2ZjNGI5YWNmMDYzM2NkOGM2OWUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL2hhdHMwNDk1LmFzc2V0ACAAAAA3NzIwNDJmMGU5MDIzNmM0NGE0ZTdjM2NhMDAxOWJhNQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvaGF0czA0OTYuYXNzZXQAIAAAAGI0YmY3ZmRlNDNmMmQ0YjQzOTM3OTBlOWI1YmFhZmExADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0hlY2tpbm1vbyBoYXQgLmFzc2V0ACAAAABhMTAzNTk3OTQzNTRmOTU0OGFhMTNmZTM4NTg4NDYwNwAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9IZWNrc0FtcGh5IGhhdC5hc3NldAAgAAAAMTZhZDA2MjI1YzY2NjRiNDVhYTgzYTcxZjFiN2Y4NTcAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSGVja3NCdW5CdW4gaGF0IC5hc3NldAAgAAAAODQ0YTlmN2YyMDJjOGYzNDRhOTY2ZjU3YzU5ZjdkYzUAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSGV5TWNHdXJrIGhhdC5hc3NldAAgAAAANzliYzUwOTJkMTc5ZDVmNGM4M2FiMDkyMTI1ZmMzMWYALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSGluYXRhIGhhdC5hc3NldAAgAAAAODQ2ZWE0MTU2Mzc4Njg1NGQ4Y2ZjZjY1M2UxYTZlM2MAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSG9sZCBNeSBCZWVyIGhhdC5hc3NldAAgAAAAYTM5ZDczYTY3ZGUwODIzNDU4ZTVlOWFmYmFjMDU3MDMAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSG9saUdob3N0IGhhdC5hc3NldAAgAAAANWFlMTdhMzQ3OTMxYzVkNDNhZThjZGM1Yzk5MmMyNDQAKQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSG9ya2l0LmFzc2V0ACAAAABkMjhhMzUzZTY5ODljOGM0ZGI0MWUwZWZlMjY1YjI1MwAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ib3JuZWQgQW5nZWwgaGF0LmFzc2V0ACAAAAAxY2I3NzQ5NDdmZDI3NjY0N2E4MTZlZjE5ZGI1M2EzNwAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ib3QgU2F1Y3kgaGF0LmFzc2V0ACAAAABkNWYxMDNmNjVlMTk3NWE0ZjkyNTI5MTkxMzlkOGVlMAAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ib3Zwb29sIGhhdC5hc3NldAAgAAAAOGE0MmE4MWM3NjM0OTdlNDA4YjZkMGRhODA1M2NlYTEACQAAAEhvd1RvUGxheQAgAAAAZmRkYTIwYmExYjRmOTk0NDQ5N2NmNmRjZjhlZmY4YzMEBwAAAAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9IdW50cmVzcyBoYXQuYXNzZXQAIAAAAGE4NTBlM2U0NDRjOTQ4NzQ2ODRiZTUzNzExMzA1ZWI0ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0h1bnRyZXNzIGhhdDEuYXNzZXQAIAAAADA0ZjQxMGM3NGI5ODU0MDQzODg5NzJiMmUzZjc3MjkwADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0ljaGlnb0hvbGxvdyBoYXQuYXNzZXQAIAAAADZjYTI4Njg3ZmQ1MzE2MjQ5YWM2YmM4ZDA2N2NiODg4ACUAAABpbWFnaW5hdGlvbm92ZXJmbG93L1VuaXZlcnNhbERlZXBMaW5rACAAAAA4OGQxY2UyYjMyODE4YWY0YWE3MDhiNGEyZDMxNDI4MgAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9JbVBBV3N0b3IgaGF0LmFzc2V0ACAAAAA4NjUzMzIzZDM2Y2Y0Mjg0ZWIzMTU1Yzc4ZmQzMzRkMAA1AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9JbXBvc3RvciBTcGFyayBoYXQuYXNzZXQAIAAAADg4NWY4YzcwM2ViOGFmYTQ1OWI5Zjk4OWQ4OTU4MDVmADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0ltcFRvbmd1ZSBoYXQuYXNzZXQAIAAAAGNmZTEwNzkzM2EwZDAyMzRmOTYwNTBiZTJhOTcxOGQyAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0lubW91dGggaGF0IC5hc3NldAAgAAAAYzJiZWJmMDU0Y2I1YjdmNDM4ZDg5YWNjOTgyYTYwNjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSXJvbiBNYW4gaGF0LmFzc2V0ACAAAAAyNzk2YjM4MTRmMjE0NmM0NGJmMWZkYjY0NjNkNWEyZAAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9KYW1lcyBoYXQuYXNzZXQAIAAAAGZkZGUyNWZjMThiNzkwYjQxOTQ4MGE3ZDM1NzA4OTllAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2phbW9ibyBoYXQuYXNzZXQAIAAAADE5OGZkYTM4MmZjZTk1ZjRiYWQ5MmZlMDZlMzQ2ZGI2ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2phbmV0IGhhdC5hc3NldAAgAAAAMDEwMTQ0MTI4Njk4OWIxNGJhYjJlOWFmZTYxMDAzNjMALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSmFwYW5kYSBoYXQuYXNzZXQAIAAAADY5Y2U1YWQxMTJiYTM4YjQyYTFhMmFmYWFhODY2YjgxADYAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0phcGFuZGFzU2tpdHR5IGhhdCAuYXNzZXQAIAAAAGM1ZmRkNTYxYmVmYzMzNzQxOWQyNDU2MjA0ZGYxNTRmADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0phcnJlbEJ1biBoYXQgLmFzc2V0ACAAAABiZDk2NmU2ZWI3ZGE4YTA0MTgzOTFjMzMxOTcxZWZjYQApAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9qYiBoYXQuYXNzZXQAIAAAAGM1MjU4YzA3YmZjZGYxYzQ1OGZkZTgxNGQ3NDk5ZWU2AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2plcmVteSBoYXQuYXNzZXQAIAAAADQ4NjdlNjE2YTE2NjU4MjQ0YTQ3NDk1MWY1MWNkMmUyACkAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0plcmVteS5hc3NldAAgAAAAODc1Njg0MmIzMTJiODI2NGNiZWQ5NzY4YzJmYjg2NjcAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSmVybSBoYXQuYXNzZXQAIAAAADk5ZGNlZjVkMmM1ODdjZTQ3OTAzYzFiN2JlYTJkNDYzACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2plcm0gaGF0MS5hc3NldAAgAAAAZTg2MGNkNWM5OWZlNzhlNDY4N2RkODMzYmRmN2RmMGYALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSmVycnkgaGF0IC5hc3NldAAgAAAANzkzOWU3MDgyMDYxNzJhNDliYmNmYTIzY2IwMjcwZDcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSmVzc2ljYSBoYXQgLmFzc2V0ACAAAABlYjkxODdjYjJlMWIzYzY0NzljOTBiYzhjMzZjZDI0ZQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9KZXNzaWUgaGF0LmFzc2V0ACAAAAAyMWMxOWMyYjIzN2Q0YTg0ZDkwZTY3MGQ1N2I1NGUyYQA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9KZXNzaWUgTW9ua2V5IGhhdC5hc3NldAAgAAAAOTJkMzhkMjNkZjJjYTRhNDNhMTI5MjUwOTBjNGQ4MTkAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvSmlnZ2x5cHVmZiBoYXQgLmFzc2V0ACAAAAA5MzZkZGM0ODIxNDc2YTY0OGIwN2VlNDg4MjIwNzFlYgAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Kb2x0ZW9uIGhhdC5hc3NldAAgAAAAZWViNmZmMDkzOGZmYTJkNDliMTU4YmYyNjUzYjk4OWUAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvam9zZSBoYXQuYXNzZXQAIAAAADFhM2NkNjA1MTU0YzgzZjQ3OGE4YjQwOTFiNWJkOWRiAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0pzaG9vYSBoYXQgLmFzc2V0ACAAAAA3MDFlZjlkZGI5Nzg5NTQ0NjhjNWQ1OGJiZWM0ODUxZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9KdWljZWJveCBoYXQuYXNzZXQAIAAAAGE4MTkxMTUyODk1N2IyMjRlOTFmY2QzZDBmMDU3YTRmAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2p1a2Vib3ggaGF0LmFzc2V0ACAAAABhOTkzOGExYmZhNWMxZGM0NzhkMWNlOTI0YWEzZDY1YQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9qdW5reWFyZCBoYXQuYXNzZXQAIAAAADdiYjY3OTI1OTc1MTAzODRmYTlhYTJmZDc3MTEyYzA1ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2p1c3RqYW1lcyBoYXQuYXNzZXQAIAAAAGUwZGI3MTUzZDE4MDlhODQ4YWEwN2JkNTRkMzUyZGYwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0thbmdhcm9vIGhhdC5hc3NldAAgAAAAMmNmNWI5MzU1ZmI3NmE4NDA5YTM2ZTYxY2E3YjczZjkALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvS2FyYSBoYXQgMiAuYXNzZXQAIAAAAGY5ZWM4MThmMmFkZjQyZjRjODNkZmFiYWVkM2U4YmEyACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2thcmEgaGF0LmFzc2V0ACAAAABhZDZkY2I3ZjJiMzgxZjI0ZGJhOWM2NGE1MTc3MmI5OQAnAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9LYXJhLmFzc2V0ACAAAAA1ZmJmNWI5NTBkMGY0ZjA0ZmI2Y2ZmNGU3YjZkNTNiZgAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9LYXJ0b2RrIEV2aWwgaGF0LmFzc2V0ACAAAABkYjVjYjA3YTBjNjIzN2E0ZGI0YmU3MGQxYzBkNDM1ZAAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9LYXJ0b2RrIFN1cyBoYXQuYXNzZXQAIAAAADg5MjdkMjAwOTMyOWJkNjRjYWM1MjU4ZGMwYTRhYjhhACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0thdGUgaGF0LmFzc2V0ACAAAABlZmZkZTRlMjAwYjg4YTU0MWEyMmVhMjliODViNmFkMAAqAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9rYXkgaGF0LmFzc2V0ACAAAAAzZWU4MzE3N2MyYjJhMzI0NGEyMGYwOTE0MzJkYmIwNgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvS2F5V29vLmFzc2V0ACAAAABjZDA0NzdlZWM1ZmZjYTE0NWIwOWFhZTc1Y2FlMWZlMQApAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9LYXlXb28uYXNzZXQAIAAAADgxOThkNGFhMTdiNmE1YzQ3YmUyZWEyN2M4MWRjMjE4AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2tEb29seiBoYXQuYXNzZXQAIAAAADM4NjE5OGE2MTQ3MzA5YzQ4OGQ2MmM2MTU4NTM5MWQwAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0tuMHZpcyBoYXQuYXNzZXQAIAAAADE2MDUzNGI1YjJjZTQwOTQxYWUzOTg3NmU4Mzg3NjhmACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0tvYWxhIGhhdC5hc3NldAAgAAAAMmMxNTU0MzVlOTA0NjRkNGM4OWM2N2IwYTg5ZWJjNjYAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvS29qaSBoYXQuYXNzZXQAIAAAAGRkY2ZiNjg3YzUzNTE3ZjRkYWM1M2Y3NGUzMTgwM2EyACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0tvamkgaGF0MS5hc3NldAAgAAAAYzJiNjlkNzNlYjgwNDUzNDg4NDg5MmNkNjMxZTRiOTUAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvS29qaSBNYWlkIGhhdC5hc3NldAAgAAAANmI3OWMyNWQwMmU0ZDYyNGJhNTQxZGFjNmRjM2U1Y2IAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvS29qaVNrdW5rIGhhdCAuYXNzZXQAIAAAADNhMDFhOGRjOTU5Y2QyOTQ3YmIwZTQwYzhlNmMyNzcwACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2tyaXMgaGF0LmFzc2V0ACAAAABjYjIwOWJhMzc4NDg1MDQ0MjgxNTQ3NmYyYjdjYzA2NgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Lc21hYzMgaGF0LmFzc2V0ACAAAAAyMTNmMzM5OTI4Njk2Mzc0N2JjMTI4MDlhYTA3YjJjMwAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9LdXJ0Z2kgaGF0IC5hc3NldAAgAAAAOTQ5MjdmMmEzZWY3MGZkNDI4NWJkMjMxOTEzNjA0NzcAKAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTCBoYXQuYXNzZXQAIAAAADQ1ODg1Mjg1Y2UxZjVmODQ0YWM2MzZlZDA5ZjcxMGEyACkAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0wgaGF0MS5hc3NldAAgAAAANzczYTk4OGU5N2YxZTQxNGNhNzBhMmY4OTUzZjI1N2EALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGFuYWJvbyBoYXQuYXNzZXQAIAAAADBkNzIzMTRlZjMyNzFlMjRjOTBjNGFhNTdkNmY3NmI3AC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xhcnJ5IFNoaXJ0LmFzc2V0ACAAAAA2YTIyMjNiMTUxZTE2NzY0ZDk5NGFlMGI2Yjc5MjVlMQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MYXZpc2ggaGF0LmFzc2V0ACAAAABmN2M2MmY0MTg0ZThhNmQ0Zjg5NTI0YzQ3NmU3ZTdiNQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9sYXdob28gaGF0LmFzc2V0ACAAAAA1YzRjNDE5Y2I3ZWU4OWE0NThhODk3NDI5OTE0ZTdmZQAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MYXlaRm94IGhhdC5hc3NldAAgAAAAZTM0MGM1YjgzOTE5YjVhNDc4YjNiNWEzZDg3NTUxOTYALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGVhZmVvbiBoYXQuYXNzZXQAIAAAADM5YjY3Y2ZkNjkzYjFhNDRkOTkyMTkxNWY4NzFmNjZjACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2xlYWggaGF0LmFzc2V0ACAAAAA5ZmU0Y2UwMmVmYTQ1ZDk0YWFhMTk5ZDQwYzk2MTVmOAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MZWNob25rIGhhdCAuYXNzZXQAIAAAADZmMGQzOGM5NTU5MTM4YjQ3OGIzNGExYWIwMTBkNjI2ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL2xld2lzIGhhdC5hc3NldAAgAAAANTRjOWM1ZWY1MTFiNDhiNDBhZDEzMTFlNzI2ZjVmMmYAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvbGV4aWVtYXJpZSBoYXQuYXNzZXQAIAAAADA3MzZkNzIwNjYxNWMzZDQzODFiMDdkOWE5ZWM4OWUyADQAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpZS1jYW50aHJvcGUgaGF0LmFzc2V0ACAAAAA5MGQyMGZkNTQ2MWE1MmU0NmI1MDhiMmQ2N2ZiNmYxNAAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MaWwgU3dpZnQgaGF0LmFzc2V0ACAAAAAyZDk0YTlkNDYwOGM4ZWM0NTg0OWM2MTI4ZjJkZjBkYgAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MaWwgVG9vIE11Y2ggaGF0LmFzc2V0ACAAAAA5Yjg1NmNmYTI3NmQwMmM0Y2IxNWQxYjMyMjQ5YWI2MgAhAAAATGluZUJyZWFraW5nIEZvbGxvd2luZyBDaGFyYWN0ZXJzACAAAAAzY2M5Mjg5NDM3Nzc4NWQ0YmIyZDY3ZmIxMWZjMTBjNwAfAAAATGluZUJyZWFraW5nIExlYWRpbmcgQ2hhcmFjdGVycwAgAAAAODUwMjI0MGNkYzAzN2Y0NDU5NGM4YmI0ODEzOGZhYjEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIEFuZ2VsIGhhdC5hc3NldAAgAAAAZGM4NDVjZmNmMzI5MmVmNDZhMDA5N2FiZWFhZjA0YTQAOAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIEFudG9pbmV0dGUgaGF0LmFzc2V0ACAAAABkNTQxYjJjYmU4MzNlN2U0NjhjOTNjZjY0YTA1ZDYzNQAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MaXR0bGUgQ2hlZiBoYXQuYXNzZXQAIAAAADI4NmE2ZjJiN2ZhZWYzZTQ4YjNmNGVmMmUwYjc5M2JiADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpdHRsZSBEZWF0aCBoYXQuYXNzZXQAIAAAAGRjYTkzNjM0MDUxYTNkMDRlYmJmYmI3YTI5NDZkNDQ0ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpdHRsZSBEZW1vbiBoYXQuYXNzZXQAIAAAADcxYzg4OTJhNDk5ZDUxOTQ2YjM0NTQ3YzQxZjJjZGRhADgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpdHRsZSBFdmlsIFF1ZWVuIGhhdC5hc3NldAAgAAAAODViYTAzMTFhNDBkNGQ0NGI5ZDNhYzNlNTI3NGMzYWYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIEdub21lIGhhdC5hc3NldAAgAAAANjVkMjA0NjliNjVmMzNkNGM5Yjk2OTk0YWU5NjNiZjIAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIEdvbGVtIGhhdC5hc3NldAAgAAAANWQ1MjJiOTc4MDMzZjRjNDFiZWRhOTc0NTExZDAxNmQAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIEphc29uIGhhdC5hc3NldAAgAAAAMzZjN2FkZjczM2Q4YTJkNGRiMDc1OTRhOWQwYzY5MTYANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIEplc3RlciBoYXQuYXNzZXQAIAAAADA4NmRiYjFlZDdkMDNhMDQ3YjM0ZjNmNGEyZmQ0NmNhADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpdHRsZSBLcmFtcHVzIGhhdC5hc3NldAAgAAAANjNmYzRiOGE4OGIwMWY3NDFiODFkY2Q0OTYwMjc0ZjkAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIE1hZ2UgaGF0LmFzc2V0ACAAAAA3NGJjYmM0M2EyNWVmMWY0MGIyYTJmYjRhMTBlYmEzZAA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MaXR0bGUgUGlyYXRlIGhhdC5hc3NldAAgAAAAYWM5Mjc0NGFhNmI1MDU5NGViYmYzMWQwODU2Y2NiMjkAPQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl0dGxlIFJlZCBSaWRpbmcgSG9vZCBoYXQuYXNzZXQAIAAAADcyYWYxMDUxOWM0ZDAwMzRjOGUwODdhMGE3MDY2NzEyADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpdHRsZSBTYW50YSBoYXQuYXNzZXQAIAAAADhiOGQ3YTgwNTBlNDAzMTQ1ODUzODY2MmExZjlhZmM4ADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL0xpdHRsZSBTaGVyaWZmIGhhdC5hc3NldAAgAAAAM2M4NmYxZjE2YzE3NzIxNDlhNzA5NDBkOTNjY2VlNDgAOAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTGl2IENoaXB6IFBlcmlvZHQgaGF0LmFzc2V0ACAAAABjMWQ2YjBkMGRmY2ZkNTQ0ZWJlZTNlNmY1MTRhYzE2YQAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Mb3dleWUgaGF0IC5hc3NldAAgAAAAYjQwZmU4MDYyNzVhOTNjNDRhZDU1OTllNjMwODk2YzAALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTHVjYXMgaGF0IC5hc3NldAAgAAAAN2MxY2Q1NDE1MGE5MjMyNDI5ZDk1NDQzNTY5MzQ5YjYALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvbHVmZnlfaGF0LmFzc2V0ACAAAABjZmMwNTcyMzMyY2UzMGY0NmIyMDE1NDFlZTBhODk0MwAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9MdW5jaCBoYXQuYXNzZXQAIAAAADNlY2UyYzk2OWRiYmZjODQ3YmQyZjRjY2Q1OTM3M2MxADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01hYyBWaWJlcyBoYXQuYXNzZXQAIAAAADk1ZThlNzU2MmNkYmNkOTRlODYxZmIzYTg2OTU5NDQxADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01hZ2lrYXJwIGhhdCAuYXNzZXQAIAAAAGVjZGY4OTFjZDZmYWFlOTQ3OGMxYjI3ZWNmYjg0YWM1ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01haWQgaGF0LmFzc2V0ACAAAAA2OWRhNTljOWM5NGY0MmY0ZWIwMWFiNGNlNDY0ZTI4NQAIAAAATWFpbk1lbnUAIAAAAGM2YzJjMTNjODA0NDNhZDQwODc2MmZhOTM2YzIxMzRjBAIAAAAALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTWFrcyBoYXQgLmFzc2V0ACAAAABhMmFlNDEwYTU0NWRiNjY0Mjg0MWY0YTAxZDA2OTc0YgArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9tYW1hIGhhdC5hc3NldAAgAAAAOTM5MTFlYTRjNDNhZWU1NGRhNTBmN2YwMzYwMGNmNjIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTWFuYXRlZSBoYXQgLmFzc2V0ACAAAAAxNWFkOTk2MDQ5Y2U4Y2I0MGIzZGMzZmViMTZkYjE0OAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NYW5iYWcgaGF0LmFzc2V0ACAAAAAwYTViMDlhNDUxZjQ2Yzg0ODg4ZTI1ZjBhZjc1ZTVmMgA4AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9tYW50aXNfc2hyaW1wbGluZ19oYXQuYXNzZXQAIAAAADNkNjk2MDUxZTVkZWUxYzRiYTYyMDg1MzdlMGVmZTZmADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01hcmlvbmV0dGUgaGF0LmFzc2V0ACAAAABhNjI1OGU1N2YyYTVkYzM0MjhhOWRhNDMwODljOWQxOQAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NYXJ0aU1vbyBoYXQgMiAuYXNzZXQAIAAAADI0NWMxZmJjOGMzNzc5NzRhOTQwNWJiODhkN2RiZTBlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01hcnRpTW9vIGhhdC5hc3NldAAgAAAAOTQwYjRjNzE1MzY5MDJmNDI5NmUzYjQ5MTQzNDJhNjkANQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTWFyeWxpbk1vbnJvZSBoYXQgLmFzc2V0ACAAAABmODg5NjkwMzkwZGU3M2Y0Yjk5MjVmMjUzYjFmNzg1NQALAAAATWF0Y2hNYWtpbmcAIAAAADgzZDc3NGI4NzM5Y2ZmZDQwODJmYjU5OWNkNTBjMjFjBAMAAAAAEgAAAG1hdGVyaWFscy9Db2xsaWRlcgAgAAAAMTY2MTcwMThlMDlkZTE3NDFhNDk2YmRmNTQ2M2ZhMjIAFAAAAG1hdGVyaWFscy9FZGdlUGlja2VyACAAAAA0NzNmMGYxNGZmOTdjZDc0NWJkNWZiMGI5ZGI2YWE0NQAYAAAAbWF0ZXJpYWxzL0VkZ2VQaWNrZXJIRFJQACAAAAA1M2VmNzA4NjhhNWFkZTA0ZWFmMjFmZGRhOWQxNmMzMQAUAAAAbWF0ZXJpYWxzL0ZhY2VQaWNrZXIAIAAAAGYwYzExNjJlYzkyZjhlYTQ2YWQ2NjZjNGE4NDE4Nzk3ABgAAABtYXRlcmlhbHMvRmFjZVBpY2tlckhEUlAAIAAAADgyOTRmMDk3Mzc5YTg3MTQ1YjdiMDg5MmM4YTk4OGQ5ABcAAABtYXRlcmlhbHMvSW52aXNpYmxlRmFjZQAgAAAAYWExYjJlYjQ4NGUxNzlhNDFhZjk1M2QzZGM3YjcwYzQAEAAAAG1hdGVyaWFscy9Ob0RyYXcAIAAAAGViNzY2YTE4YmEzNmRkZDQ0YTljMDM2MDk3MDkwMTM1ABsAAABtYXRlcmlhbHMvUHJvQnVpbGRlckRlZmF1bHQAIAAAADRkZGE0MzFmZDBmOTVkODRiOGY3Yjk0NDg2ODhhYzczACEAAABtYXRlcmlhbHMvU3RhbmRhcmRWZXJ0ZXhDb2xvckhEUlAAIAAAAGJjZTM3ZWZjZDBmMjczNjQwOTAyMDcwMmVjMTgyZDA5ACEAAABtYXRlcmlhbHMvU3RhbmRhcmRWZXJ0ZXhDb2xvckxXUlAAIAAAADk0ZWMxMTYxZDM1YWIwOTQwOTY5ZGUzZjNlZDQ1NmJmABEAAABtYXRlcmlhbHMvVHJpZ2dlcgAgAAAANTk5MWFlMmFkODM2NGRhNGNiZTNlNmJmMmU5OTM0NWYAGgAAAG1hdGVyaWFscy9VbmxpdFZlcnRleENvbG9yACAAAAAyMTMzNmVmZThjZDBkMGU0MDgyY2VmOGMxZWI1MzE1NQAWAAAAbWF0ZXJpYWxzL1ZlcnRleFBpY2tlcgAgAAAAMWQ5OGQ3M2JmYjNlZjBkNGY5ZTQ4NDNjOTVlMTU0ODQAGgAAAG1hdGVyaWFscy9WZXJ0ZXhQaWNrZXJIRFJQACAAAABmNTE4ZTgyN2ViZDViN2Q0YWI5MzU3NTQ3ZjNkNGRiYwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NY01heWhlbSBoYXQuYXNzZXQAIAAAADY2OGVhNzI2Nzk4YTViNTRkYTczZjdhN2JmNmU4N2U5ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01jUmliIGhhdC5hc3NldAAgAAAAZGU1ZTIzN2VhMWU0ODRjNDVhZjJmNWU5OTJjNzQzZmYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTWVuYWNpbmcgaGF0LmFzc2V0ACAAAAAyMTNlZDhhOTZjNjAwMDE0MWJkNTBlMDI2ZTE4MGY3YwAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NZW93dGggaGF0LmFzc2V0ACAAAAA4YjlkZTc3YWIzYzU3ZDA0MWFhODU0YTU3OTRhYjA5MwAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvTWVyY3kuYXNzZXQAIAAAAGI5MTA4ZDVhOTcxMTgwMjQ0YTVkNTNjOTU3OTZkNzU2ACgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01lcmN5LmFzc2V0ACAAAABmMWE4MmI5NGRmNWEwZWE0M2JjOGI2MTQyYzQ5YTFjNwA1AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NaWNoYWVsIE15ZXJzIGhhdCAuYXNzZXQAIAAAADhjOWFlMmMzMzZjODQ4ZDRhYWVjYTY3MWVkNjdhYWRkADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01pa2VEb3RUViBoYXQgLmFzc2V0ACAAAAA2ZmRiNjUwMTJlNTY0ZmY0Mjg1MGQ2N2M2YjcwZTRlNgAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NaWxreSBKb2UgaGF0LmFzc2V0ACAAAAAyNjk3ZWVmZjZlN2I3MGI0ZTg1ODNiOGNkNDZlM2I4MwAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9taW5keSBoYXQuYXNzZXQAIAAAADVhNDAzODA1NDdmYzAyNjQ5OTJjOWE3ZmFmMDBlNWI4ADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL01pbmVjcmFmdFN0ZXZlIGhhdC5hc3NldAAgAAAAMDZjZDU1YmRiOTZmM2ZmNGI4NTEyNjM2M2E2MzBlZTcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL21pc2MwMDAwLmFzc2V0ACAAAAA4MjJjOGM2MWU0OTVlNjA0ZGFiZGI0ZDBhNDZjOTYzZgAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvbWlzYzAwMDIuYXNzZXQAIAAAADVlZGUyYWE1MTY5NmQ0MjRjYmJiMWQ0ZGIyN2FiNGM3AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9taXNjMDAwMy5hc3NldAAgAAAANmUyYjM3ZDA3MzdlMDRhNDY4N2YwZmMzYzhhMjMwNGMALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL21pc2MwMDA0LmFzc2V0ACAAAABjZmQxOGIxNjdmZmRlYTg0ZTk2NmJiZjE1MmMzMWY1ZQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvbWlzYzAwMDcuYXNzZXQAIAAAAGUzNTFkN2IxNjhmYzkzYjRhYjI2MTBkYzZlMjRlN2EzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9taXNjMDAwOC5hc3NldAAgAAAAOTdhNjNhMDJmODhjZDE5NDI5MzY3ZDNhMDdjMGIzYjAALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL21pc2MwMDA5LmFzc2V0ACAAAABlMmMzODE2OTI1OWI2YmY0YjlmYjAwMGRiOTNiYTc0ZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvbWlzYzAwMTAuYXNzZXQAIAAAADIwZDYxZDUxOWZjMmFmOTQxYTgxMTc1YTIxYjhjMWEwAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9taXNjMDAxMS5hc3NldAAgAAAAZjIzYmI5ODBjNWIyYmVkNDdhYzUwNzc0NmJmNjQ2NzUALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL21pc2MwMDE1LmFzc2V0ACAAAAAwMjAxNTQ0ZWYxMDU0ZDc0MGIxNTU4YzQ1YzkyM2Q0NAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvbWlzYzAwMjAuYXNzZXQAIAAAAGFhNzY5MDAzNWVmNTcxOTRlYmEyNGFjYzk1ODM5OTRiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9taXNjMDAyMS5hc3NldAAgAAAAOTEyYjdkMmQ1Yzk0MzBmNGRhOTk0NzQ0NDkwNDk1N2UALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL21pc2MwMDIyLmFzc2V0ACAAAAA4MDcxZGQ1MTkwYjFjN2U0ZmJlNGM2MWY4YjJhN2M0ZQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NaXNzSmVyc2V5IGhhdC5hc3NldAAgAAAAOTgyMmNkZWQ0YWNjZmYzNGNhZDMyNWQ0YzE2M2EzY2UAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTU1NTSBoYXQuYXNzZXQAIAAAAGZhOTllNGI1MmI4N2RlZDRhOGJkYzc4ODk5ZTNmNWZjAAgAAABNTU9ubGluZQAgAAAANjk0NWQxN2M2NThhYWU5NGFhNGI5ZjhiYjQzZTM1OWQECAAAAAArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Nb2RzIGhhdC5hc3NldAAgAAAAYzU0NGUxNzc4MzlmOGJhNDk4Y2NlZTllMzUwMWExMGYALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTW9ua2VoIGhhdC5hc3NldAAgAAAAM2RlNGYxMzA5MzJjNDZhNDBhNzBlOTNiNmIxODNjMDgAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTW9ub2t1bWEuYXNzZXQAIAAAADMwOGY1ZTFhMGNkYTM3NjQ5YTE4Y2UyZjIxZjViOTZmAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL21vbnN0ZXIgaGF0LmFzc2V0ACAAAABiYTZhOTFjZDljY2ZmMzk0OWIyM2IxYTkwZDk2ZmY1NgArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Nb3RoIGhhdC5hc3NldAAgAAAAMjY0MDE3NWM0Y2I1Zjg2NDQ4NTQzZjA0NDNhMWJlMTEALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTXIgR3JpZmZpbi5hc3NldAAgAAAANWZjMGJmNmE1MTljNzEzNDc5ZjcwOWRjZTEwYWJlNjkALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTXIgVCBoYXQgLmFzc2V0ACAAAAAxOGQ0ZTI3NWJkYTBhOWI0ZDlhMmEzN2I2MTgwMmIwOQAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NckJlYXN0IGhhdC5hc3NldAAgAAAANDYxZjM4OWMyODliYTBmNDRhMDgwZTlmMzIyYWEyN2EALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTXVka2lwIGhhdC5hc3NldAAgAAAANTkwYWJlNTkxODRkYjQwNGJiM2UwYjNmNDg3NzZiMDYALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTXVzaHJvb20gaGF0LmFzc2V0ACAAAABkNjM0ZDlmMDM1MjAyYmU0ZmEyOTZlN2VmMTIyMWE3YwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9NeEpvc2llIGhhdCAuYXNzZXQAIAAAADYyODY5ZWMyMTMyOWExNDRlOGQyMTlkNjZhZmY3NTIwADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9teWhhdHMwMDE2LmFzc2V0ACAAAAA1MDRiNTdkZWM4ZGY4MzA0Y2E1YzQzNTI4YzI3MTlmZgAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9OZWNybyBoYXQuYXNzZXQAIAAAADkwZmY2YzM4YWM3NGQ2NzQ2Yjg1ZmM0OGYzNDczYTgzAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL05lb25CdW5zIGhhdC5hc3NldAAgAAAAYmU1MzgxMGRmYzMyN2M4NGI4NGY3ZGNiMDc5N2ZkM2IALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvbmVyZG91dCBoYXQuYXNzZXQAIAAAAGU1MjFiYzJmYzU2OGEzYTQ4YmNhYThmNjllODg0ODQ4ABEAAABuZXcvU2hpbmJpL1N0aWNvbAAgAAAANTFlYWFlM2JmOWYzZDY0NGViODJlNWQwZWUyZDBjODYAEwAAAG5ldy9Td2VldHJvbGxlZC9BbmEAIAAAADI1NWU3NTlkNzgwNTUzYzRiODAzMzQ0MTJhNDdlMWJkAB0AAABuZXcvU3dlZXRyb2xsZWQvQmlydGhkYXlCZWFuMQAgAAAAODM3NDUxYmEwMjgxN2Y3NDg5YzNlYTY0MjY1Y2QzNjUAHQAAAG5ldy9Td2VldHJvbGxlZC9CaXJ0aGRheUJlYW4yACAAAAAyODA4MWJjMzkzNmEyN2M0MmE5MWNmYzY3Y2Y5MDg5OAAYAAAAbmV3L1N3ZWV0cm9sbGVkL0ZpbGxldC1PACAAAABjYTIwZWM2ZDJjNzIzODg0NmJkYmJkOGNjZTliNjg3MgAYAAAAbmV3L1N3ZWV0cm9sbGVkL0dyZWVrR29kACAAAAA0MmU1YjUxYmQyZmMxODk0ZTk3NjFiNTA2YmYyNmMxZAAWAAAAbmV3L1N3ZWV0cm9sbGVkL0theVdvbwAgAAAAMjNiMDExYTc5MGY5ZjJjNDNhYWFkZDRkZDAyYjE5ZTkAFQAAAG5ldy9Td2VldHJvbGxlZC9NZXJjeQAgAAAAMzI3Y2ZhNjBlYWIzNWU3NGQ5NTkzOWJiMjA2Yzc5MWUAHwAAAG5ldy9Td2VldHJvbGxlZC9ZZWxsb3cgU2tpdHRsZXMAIAAAADlmODVhYzUyNTEzNjFjNjRjODJiZmY4OTc2ZjgxODI4ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL05pZG9raW5nIGhhdCAuYXNzZXQAIAAAADc0YTllM2MxYTM5YzYzYzQ0YjkwMzM0YWI1NDlhY2Y2AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL25pbGVzeSBoYXQuYXNzZXQAIAAAADZkMmUyMzhhOTNjMTMzYjRhYmIzOWZiMWIxMzAzZWIyADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL05pbm11ZmZpbiBoYXQuYXNzZXQAIAAAADM5NjgxYmRkMTkwNmNmNzRlYmZiNzYzZjFmODVjNDE0ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL05vIFUgaGF0LmFzc2V0ACAAAAAxMTc0NDRkZjBkMzFlNjU0MWEyYWQ4MWJhNDRjMmM0OQAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ob2dsYSBoYXQuYXNzZXQAIAAAADJiMDEwNTg0MWE4NWYyZDRkYjUzNGE0ZDJiZDgxNzM4ADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL05vaHNBcmFxdWFuaW8gaGF0IC5hc3NldAAgAAAAMmEyZmE4YmJlYjliNjA3NDliOGJkM2EwMTlmODY4MTQALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTm9pQmF0IGhhdC5hc3NldAAgAAAAZjE1OGM5OWMwZjg4MmE4NDJhZDgyODRkMTg4NWI4NDEAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvbm9uYmluYXJ5IGhhdC5hc3NldAAgAAAAYWUwM2RhMmEyYTA5YjE4NGI4NGM5NGRkMDJhOTg2OGEAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvTm92YXNhdXJvcyBoYXQuYXNzZXQAIAAAAGJlNGRjODkwZjQ0YzQ4ZDQxOWNmZDgyYzRkY2U3NDc0ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL051cnNlIGhhdC5hc3NldAAgAAAANGFjMTJmYjM3YWEwODk4NGZiM2JjZWI2MTFkNTUwODcALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvT2lsZXJzIGhhdCAuYXNzZXQAIAAAADY0M2JlODRkYTYxZjQzMzQzODY1NTFjMTQ0N2MxNWU1ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL09rZXkgaGF0LmFzc2V0ACAAAABkZTFlMWVjOTk4Y2E0Yjk0Y2IzZTQzMmY1MGQ3ODMzNAA1AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9PbGl2ZSBLcnV6YWRhciBoYXQuYXNzZXQAIAAAADc3ODllOWMxOGFjZTU5ZTQyYTM1ZjkyM2MwNjIxNmU5AAoAAABPbmxpbmVHYW1lACAAAABhMGRhMWQwZWJhNGQyOTA0NzgzYjUzNjNmNzAzMTc3YgQEAAAAADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL09vZ2llQm9vZ2llIGhhdCAuYXNzZXQAIAAAADYxMDliOTdkYjU3MWM0OTQxOWU4ZDFkZWQ5Mjc5ZDA4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL09waGlkaWFuIGhhdC5hc3NldAAgAAAAYjVmNzJhNGYwN2I2NzEwNDViODMwYzUwMWZjZWFiNTIALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvT3Jlb3MgaGF0LmFzc2V0ACAAAABmNmIyOGU3NTFkN2IzYzE0ZGFjOWY5YmIwYzE3MTBkNAAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9PdmVyZ3Jvd24gaGF0LmFzc2V0ACAAAABiZjNiZDdlNjY0YWI2YWQ0YTg1NjE3ZmVhYWRlZmEzMAAqAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9vd2wgaGF0LmFzc2V0ACAAAABhMDYxOTE0Y2EyNmUwNTQ0OGJiYjg0ODYxMWViOTU5NgArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9venphIGhhdC5hc3NldAAgAAAAYjNjZWI2NjViNDJiMjkxNDVhODg1NjNlYWM3YmMwMWEAJwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvT3p6YS5hc3NldAAgAAAAZGNlNzc0OTFmY2NlOWQxNDhiMjc4ZGQ4NzQxNDRjNTgALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvcGFuY2FrZXMgaGF0LmFzc2V0ACAAAABlZjM1YTFiYmExMTBhOWQ0Zjk3YmVhYzExODdjMDhmOAAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QYW5kYSBQcmlkZSBoYXQuYXNzZXQAIAAAADE3MjEyMjI5NTY3NDExMzQ3YjUwOTQzYTAwYTZlMzgzADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3BhbnNleHVhbCBoYXQuYXNzZXQAIAAAAGFlNjlkMDU0MDFkNTRmMjQ2YWU2NGUzYjEwNTAxMmE2ACoAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BhcCBoYXQuYXNzZXQAIAAAADU0ZTc3YWY2Mzc5MTJkMjQ1OWNkOWJmOWMwMWQwMmQ5ADYAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BhcmFkb3ggTW9ua2V5IGhhdCAuYXNzZXQAIAAAADQxNmMzYTY0M2U4NWM5MTQ2YTA2NjcwNWI1YzlhMTc0ACgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Bhc3RhLmFzc2V0ACAAAABkYTkxN2M1ZjY5ZTg0NzQ0NjgzNTIwNzNmNTQ2ZDVjMQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9wYXN0YXJvbmkgaGF0LmFzc2V0ACAAAAA1NTQ5ZmQyMzM0MGZhOGU0ZWJmOTcyZWQ4MjU1ZDA0MQA1AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QYXRyaWNrIEplbm5lciBoYXQuYXNzZXQAIAAAAGIxM2Y2ZWUyZDJmZWViMjQ2YjcwZTJjZWQ2NGRhNjZlADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BhdWxlX2Zyb250IGhhdC5hc3NldAAgAAAANjBmOTJmOTdjNTRlYjk0NDJhN2YxYmE5OTU5Mjk2MjcAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUGF3cyBoYXQuYXNzZXQAIAAAADhlZDMwYTlkNTNkYjE2ZTQwYTZmNTUxMWUxZDdlODc1ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BlYWNlIE5ldmVyISBoYXQuYXNzZXQAIAAAADFjNDJjZjJmZWE2NTRkNDQ1YjkyZWM1YWIyNzBkNWE2ACoAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3BlZCBoYXQuYXNzZXQAIAAAADFlNjRkYTJmZGQ2OTQ5ODRlYWI2YzEwYjI3MGM1NjIwADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Blbm55d2lzZSBoYXQuYXNzZXQAIAAAADlhMjg4NTFhMGVkNTdkNzQyYTc5YTA0ZTJmYmNjNTFjACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3BlcGVfaGF0LmFzc2V0ACAAAABlNjNjMjU2NzhhNzk3YTc0MGI5M2UzMDQ2Mzc4MTBlMwAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QZXBwZXJjb3JueSBoYXQuYXNzZXQAIAAAADJkYjVlYzg2MjM2NmVjOTQwYjg5MGM5YmM4MDViNzBmAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BlcmlvZHQgaGF0LmFzc2V0ACAAAAA2NWJjMjYxYmEwMmIzZjQ0YTg0YTYyYzYzODdkY2Y5YgA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QZXRlciBHcmlmZmluIGhhdC5hc3NldAAgAAAAZDE4YjRjOTFiNTFiMTViNGRiYWRiNWNhODMyZTM2NjIANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUGV0dHkgUGVya2lucyBoYXQuYXNzZXQAIAAAAGZkMzYwZjAzNzBhZDM4ZDQwOTdlZGU0M2I0ZmY3YzU3AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3Bob2ViZSBoYXQuYXNzZXQAIAAAADIwYWQ4OTIyZGQ1YWI2YjRlYmFhYmVlYzIzYmM4ODc0ACoAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3BpZyBoYXQuYXNzZXQAIAAAADFjMzcxZmU1ZWVhMjc1ZjRlOWExYTI3NWJmOWU3ZWY4AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Bpa2FidWJzIGhhdC5hc3NldAAgAAAAMmM5YjgyMjY2MjI2MjU5NGJiZDgxMmI0YjhjNjNkMWIANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUGlsYm9yZyBJdCBNZSBoYXQuYXNzZXQAIAAAADJkNjViNGE2YThmOTFjNjRmOWM0MWYzMzFkNWUyMWY4ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BpbmsgQm9keSBoYXQuYXNzZXQAIAAAAGM5YjkzNGZlMWQ2M2M5NzQyYmI0ODM5ZTA5ZjVkYTQyACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BpbmsgaGF0LmFzc2V0ACAAAAAyZmMyMjlmMWI0NGYxYjU0NDhlODQyMDhjYzc3MDRjYwAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9waW5rZWUgaGF0LmFzc2V0ACAAAABjYmZmMmMyZTk2NWM0ZGE0MWI4ZjdhZDk1MTMwZjFiYQAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QaXp6YSBoYXQuYXNzZXQAIAAAAGE2NDIxOTE1NDEwYjc4MjRkYjUyM2E0MWI2NzI5NDFlACgAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Bqb25rLmFzc2V0ACAAAABlYmU5ZGMyODkyZTUzY2I0NzljZDdlZjZiOGU4NWE2ZAAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QSyBGaXJlIGhhdC5hc3NldAAgAAAAMTYzOThjODgyYTUyYTExNDZhMTE4YjIwZTQ3MmVmNjcANwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvcGxhdHR5IGhhbGxvd2VlbiBoYXQuYXNzZXQAIAAAAGQxNTgyY2FmYzAxYjMzOTQ0ODgyYWJkYWIyMTEzNzUxADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1BsYXR5IE1heW8gaGF0LmFzc2V0ACAAAAAxYTIyNTIyYmQ0NTE5NjY0NmE1MDBmOWM1NWQ5ZmUxZQAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9QbGF0eSBTaGlydC5hc3NldAAgAAAAZWViYThlMjQ0NDE2YTA5NDJhNmVmZjcyMTVkODdmODIANgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUGxhdHkgV2l0aCBUaGUgTWF5by5hc3NldAAgAAAAYjg0MDc2OTQ2MTY0MDNkNDdiZDczNWM5ZjUyZGJkMzIAEwAAAEVhcmx5SW5pdGlhbGl6YXRpb24AIAAAADM2ZDU3YmRlZmQ1Mzc0YzRhYWY5ZTdmMzQ1MzVhYzM5BAAAAAAACwAAAFNwbGFzaEludHJvACAAAAAyYWMxOWMzMTRmZTM2ZDg0NzgyMzQ4ODc4NzY2MjEwNgQBAAAAADcAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Bvc2VpZG9uJ3MgQ3Jvd24gaGF0LmFzc2V0ACAAAABlYTFiNmI0ZjQ4M2YyYzY0OGFjYjEwZDlhNzljMzVkZAA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Qb3NzaWJsZUJlYXIgaGF0IC5hc3NldAAgAAAANjRjYzY1M2Y0ZjkzMzFhNGU4OGJjZDA1OWIzY2Y2MzgAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUG90dGVyaGVhZCBoYXQuYXNzZXQAIAAAADVlODgxYTQxMGViOGNjNTQ3Yjk5MDE0NGU1NmM2NTJlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1ByZXNlbnQgaGF0IC5hc3NldAAgAAAAMjY5YmZhZTk0ZjE4OGQ3NGJhYzU3MjMwYjA5ODI2ZTcALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUHJlc3MgWCBoYXQuYXNzZXQAIAAAADlkMGU3NTNkYzVkZWM4NTRmYmNmMzFlN2E2MDAzMTkwADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1ByaW5jZXNzIFplYWNoIGhhdC5hc3NldAAgAAAAOGMwYWIxZGI5YTA4ZDk0NDNhMjNmNWQyOTJhMWE3ZTIALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUHVtcGtpbiBoYXQuYXNzZXQAIAAAADk4NmIyZGY1ZDY2MzM3YTRmYTBhNGU2MWYzYWVlMTQ0ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1B1cnBsZSBTaGFyayBoYXQuYXNzZXQAIAAAADIwMThmOTE3YTM3ODRhYTRmOGMwN2I0MzYyODkzOWNiAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1F0aHVsaHUgaGF0LmFzc2V0ACAAAAAwM2E5MTY3OTNhZjU0MTM0MmE3YjFjNWEwMTk4MWVlYwAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9RdWVlbiBNYWV2ZSBoYXQuYXNzZXQAIAAAAGQ5MGQwODMxOWYwNzA0NTQ5OTQ1OWQ3Mjg5MjM5ZDc5AC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3F1ZWVuaWVfaGF0LmFzc2V0ACAAAABhMTk1ODJjN2RjOTUzMGU0ZThmNGQxMTdiNDRhZDgyMwA4AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9RdWlydHlzUG9seXdoaXJsIGhhdCAuYXNzZXQAIAAAADRjNDRiMDE0MjJiNjg2ZTQwODVkNDc5NzU5MWMwMmU5ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1F1b25rIEd1biBoYXQuYXNzZXQAIAAAAGUzM2Y1ZDBkYzRiOGNmZDQ3OTNiZGIyZDg0ZTZlODBlAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3JhY29vbiBoYXQuYXNzZXQAIAAAADRiNGU0YWU2YTA0YTg2YzQ4YmI4N2NmMTg2ZTRjZTdiACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3JhZmxwIGhhdC5hc3NldAAgAAAAOGJlZGU5MDcwNGExZGRhNGQ4NjBiNWJmY2FhZDhlZmUAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUmFpbnkgRGF5IGhhdC5hc3NldAAgAAAAMGJlMDllMWI2MTI1YmRmNGZiNzFjNjc3ZWZhNjIxNjMANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUmFuZG9tIFJvbm5pZSBoYXQuYXNzZXQAIAAAAGUwNjJlNDExNGI1MzM5YzQ3YjM3OWFjNTA5NDg0YWFjAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JhcHRvciBoYXQuYXNzZXQAIAAAADdhNzk1ODI1MzNjMDk4NjQzYTgzMjA1MjY0YmQ0OTZiAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JhdmVuIGhhdCAuYXNzZXQAIAAAADJlMGVlNDZmNzI1MTJlMjRkYWVjZTExNWIzOWFkY2NjADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JhdmVuY2xhdyBoYXQuYXNzZXQAIAAAADFmMzRlNWI5MTkyNTVjNTQxYTQ1OWVjMWM5YjFmNjU0ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3JhdnMgaGF0LmFzc2V0ACAAAAA2ZDlhY2Q4OGU0MDcxZTU0MTg3NDc3YTlhMzNiMzdjMgAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9SYXdidWhidWggaGF0LmFzc2V0ACAAAABlNGFiYzU0YjczZWRhZmM0OWIzMTg2M2MzMzk1NWQwMQArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9yYXljIGhhdC5hc3NldAAgAAAAYjg0YTY3NzUwNTRhOThjNDVhOGNiNWMxZGI1YzFmM2IAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvcmF6emJvd3NraSBoYXQuYXNzZXQAIAAAAGE3MjJjOTUyN2Y4Yjg4ZTQyYWU1MWJhOTNkZGVmZDE2AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JlZCBCb2R5IGhhdC5hc3NldAAgAAAAOGQwZmVlMTU4NzJhZmIyNDc4NGM3MDcwZjMyYzY1NGUAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUmVkIEtydXphZGFyIGhhdC5hc3NldAAgAAAAYjhmZWJhNmQ0ODM1MGRkNDU5ZGMyMzdiMjU2NDJlZjMAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUmVkIFBhbmRhIGhhdC5hc3NldAAgAAAAMGE0MDQ4NjNkNjk1ZTY3NGY4MDExMTA1NTIzYTBlZDYALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUmVkbmVjayBoYXQuYXNzZXQAIAAAADQwYTFkODk3ZjMyYjAyMDRjYWZlOGNlNWYyODZmZTA4AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3JlZW55eSBoYXQuYXNzZXQAIAAAAGZiYmI0OWQxYWE4NGIyNjQzOTkxMWFkNGM5ZTc3Mzg4ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JlaW5kZWVyIGhhdCAuYXNzZXQAIAAAAGRjZDFiNmI1MDQ3ODFkYTQ4OWIyYTRmYzE3ZWJkMjI2ADcAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3Jldm1lZXJrYXRfZnJvbnQgaGF0LmFzc2V0ACAAAAA2OWEzYWJlZWQwMDNlZDk0YzllNDlhYzJmOWJmYmYwZAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9yaHl0aGlhbiBoYXQuYXNzZXQAIAAAADk2YWQ5ODUwNGFiMzNlNjQ1OTk3NDE1NGM0ZjI0MTE0ADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JpYmJvbm1hbiBoYXQuYXNzZXQAIAAAAGFlMWI4ZTc1MWRjMzQ4ZDRiYWZmMDFkMDgwMDEzNDIyAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1JpY0thZmUgaGF0LmFzc2V0ACAAAAA3YjU0Mzg0OGJlNzg3Mzg0MWI0MjA2OGYxYTcyMDEyOAAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9SaWNvJ3MgTmF2eSBoYXQuYXNzZXQAIAAAADA2OTIyNTQ4MDRhNTIwNDQ0OGIyMTM2YzFiYzZhY2NiADYAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Jpa2lpc25vdGFmZXJldCBoYXQuYXNzZXQAIAAAADQ2NjEyZDU2Mzk4ZGY4ZTRmOTYxZjAyMzk1NzYzYTBhADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Jpa2lzRmVycmV0IGhhdCAuYXNzZXQAIAAAAGZmMzE1OTA4YTczNjVhZDQ1OTlhZmQ1NDk2ZWI5MzM3ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3JvY2t5IGhhdC5hc3NldAAgAAAAYTZmYzhiNmE1NzA2NGY5NDY4OGRkMWQ3YzhkZjZhZjUALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvUm9tYW4gaGF0LmFzc2V0ACAAAAAyMTRjNzY4YTFjMDNhMWM0ZjgyZmI4OTU3NzI3MGJiYwAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9yb29zdGVyIGhhdC5hc3NldAAgAAAAZjUzZDk1YzQ1MDk0YmU5NGE5MmM0YTRlNzA3NjU0ZWMALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2FibGV5ZSBoYXQuYXNzZXQAIAAAAGIxOTYzMGFlNTRmYmNlMDQzYmMwZDkzZTk2OWUzM2Q1ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NhaWxvciBTdGV2ZSBoYXQuYXNzZXQAIAAAADI4Mzk1OTVmMzhkNjNmYTQ0YmFhZmU1ZDVkNjM4YmJmADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NhaWxvck1vb24gaGF0IC5hc3NldAAgAAAAYTkwMDM2ODNlNTkxNmM5NGU4ODkwNzIwMmJhNTczY2MAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2FsYW1lbmNlIGhhdCAuYXNzZXQAIAAAADVhN2NkNTM5MTI5MjM5ZDQ5OTg5M2VkMDE2ZDY0MGJmAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NhbG1vbiBoYXQgLmFzc2V0ACAAAAA3Mjc0YjliNWM5YzEyZWM0MWFhNTY0Yjk5NTM3NzhjOQArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9zYW5zIGhhdC5hc3NldAAgAAAAMDc2NGQzNjJlNjdjMmI5NDlhNDBmMzI2ZGMxNGU2YmIALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2FudGEgaGF0IC5hc3NldAAgAAAAYzg5NjQ4OGEzZmJjYjQ0NDVhZDY2MWZiMjYyNTBkYzEAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2F2IEJlYW5pZSBoYXQuYXNzZXQAIAAAAGQ5YjZkMmZlMjE4NjRmOTRjYWNjNWQ2N2Q2MDZhMDQ2ADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NjYXJmIEdhbmcgaGF0LmFzc2V0ACAAAABjZDQ0ZThiYmMxMWI3ZGI0MWE2YzAzNTQ1MTVmZjllZgATAAAAU2VsZWN0YWJsZUh5cGVybGluawAgAAAAMzFlNmVkMmRjZWVmNTQzNDg5NzM4MWNlNGNmMTJmM2QALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2VuZGl0IGhhdC5hc3NldAAgAAAAZGM0ZDZhMGZjODczOGNkNDE4OTk1ZTgyZGMzNzZiZGYALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2hhbWFuIGhhdC5hc3NldAAgAAAAY2I5OWMwNGFkNWE1ZGZhNGE5MjA0YTc2NjdlZTA1Y2UALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2hlcmlmZiBoYXQuYXNzZXQAIAAAAGI5ZjcyNGRlMWM0YjAzMjRjOGExYmVlYmQ4YzZmM2U3ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3NoaWtpIGhhdC5hc3NldAAgAAAAMzlhYzU2OTg3ZTE0ZTBlNGY5MTJhYTBhMTYwYzBiZTUANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2hpbnkgUHN5ZHVjayBoYXQuYXNzZXQAIAAAAGU1MTk3ZWZhMGEzZjJlNjQ5Yjg5MTE4MDY2YjU1NmUxADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NobXVlbHp5IGhhdCAuYXNzZXQAIAAAADZlMTE4NmVhMTZjYWNlNzRmYTIwMmYwOTc2ZDRiNzYyADwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NobXVlbHp5cyBQaXNzIEJ1Y2tldCBoYXQuYXNzZXQAIAAAADg3NDlhYTdkZjc3NzFkNDQ3YTE5MzAxZTEyMzZiN2Q1ACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3NocmVrIGhhdC5hc3NldAAgAAAAMzEzYzBlNTc4MmQ0ZWRlNDFiMzA4Zjk2MDcyZDY5NGEALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvc2hyaW1wX2hhdC5hc3NldAAgAAAAZjBhMzczMWQ4Mzk0MDAyNDZiNzFhYTNlOTc3NzExZjYALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvc2h1YmJsZSBoYXQuYXNzZXQAIAAAADNkNjI3YWM2YmE5YjM0ZjRjYTIxMmI3MGE3NTA2ZmExADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NpZGUgQXJtcyBoYXQgMiAuYXNzZXQAIAAAADUwOGEzMzhjNzFjNTAzNDRjOTEwNTViZjJlYmFjZjFlADcAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NpZGUgQXJtcyBoYXQgMiBhbHQgLmFzc2V0ACAAAAA3MTllMDNkMmZmYWI3MTg0OWFhZjg4MDk2NGZkMGU0OQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TaWRlIEFybXMgaGF0LmFzc2V0ACAAAAAwNGNjMTIyNTMwMDU0MWM0NmJmZDAzMzlkOWVkNWViOQArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9zaW1zX2hhdC5hc3NldAAgAAAAMDUwOTM2ODJiMGI5YzVhNGY5ZTNiZDZmMzJhYzllOTIAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvc2lwcyBoYXQuYXNzZXQAIAAAADBlZTQxN2Q5NzU5MTA2NDQ4OTFjNGY4OWY4MDc0MDI4ADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3NrYXRlcl9naXJsX2hhdC5hc3NldAAgAAAANTU4MWUzZGZjNzZiZDAyNDY5YTk2Nzg5MDA2ZTQ5OGQALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU2xhY2tBVEsgaGF0LmFzc2V0ACAAAABiM2Q3MWM4N2RiMDJiM2U0ZDgzYjgwZDY4YWE1OTZmNwAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TbGF5ZWQgaGF0LmFzc2V0ACAAAAA2ZWY4NmRhZjA5Y2UwNTA0OGIyODcxNDY3ZjlhMjBkMQApAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TbGF5ZWQuYXNzZXQAIAAAAGZkZTdjNDQ3NjliOGE5YzQ4YTc1MTgxYzcxYWExNTdhAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NsaXBweSBoYXQuYXNzZXQAIAAAADVhYTVmYzkzZjg4NmMwNTQ1OTQxNGQ2MWQ1MGMwZDQzAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3NsdXNoaWUgaGF0LmFzc2V0ACAAAABiNjQ3ZDVlODM0ZTI5N2E0ZWJjY2JiZjM5YWRlYzQ5YgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TbWFqb3IgaGF0LmFzc2V0ACAAAAAxZmVkMThkZGY3NWQxNTQ0Mzk3Nzk2MGYzMjA0NWVlZQAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TbmFwcGVyIGhhdC5hc3NldAAgAAAAMTNiNThhNTMxYzkxYmVlNGQ4YmZmNjRmYTE2MGNlOGEALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU25vcmxheCBoYXQuYXNzZXQAIAAAAGVmMmY3YjRiM2ZiYWMxODRjYTI2MmEzNjJjNmUzODA1ADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Nub3cgTGVvcGFyZCBoYXQuYXNzZXQAIAAAAGU4ODQ4OWFhYzc2ZTM1ODQxOTVjM2QyNzI0YmQ5ZGU0AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Nub3dtYW4gaGF0IC5hc3NldAAgAAAAYzc1ZTBhYWVhODY2NDIxNGZiNzAyMDI4MjBiZmU5ZjgAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU28gRGV2aWxpc2ggaGF0LmFzc2V0ACAAAAAyNTczNzJmMGI1ZDI3MTc0MGIwMzZlMzBhN2I3MTkwNwArAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Tb3JhIGhhdC5hc3NldAAgAAAAZDc2NDc0MGE4NWI4ZjE4NGRhOTlmYmNiZGY1YTE2ZjcALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU295Y2lldHkgaGF0LmFzc2V0ACAAAAA1YTQxMTZkYWUwNTkzZWE0NDk1ZWUzNzYwMjRmZGNhNQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TcGFya2xlcyEgaGF0LmFzc2V0ACAAAABlMzc0NGEyZjI5ODJmMzM0YTg3ZGIyNDQ5MzMxYTI3ZAA3AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TcGVjcyBuJyBBbnRsZXJzIGhhdC5hc3NldAAgAAAAMThjZGQwZGY3YTk4YTY5NDA5MTA4ZjhlMzk4M2Q0YjIAKQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3BlZWR5LmFzc2V0ACAAAABjNTM4Y2E0ZGY4NzFmYjU0N2E0N2E2MTEzMmMwMjkyMwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TcGljZVJhdCBoYXQuYXNzZXQAIAAAAGU5ODg5YjEyOTQwYmVhODRiYWQzZDJkZGJlMDM5Y2Q0ADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1NwaWNlc1Bhd21vbnQgaGF0IC5hc3NldAAgAAAAZmM5MWZiYjU0ODE5ZGJiNDBiZjFmNDM2ODYwY2JjYjQALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvc3BpZGVyIGhhdC5hc3NldAAgAAAAZTg5MDg1M2RjMmJhMjhiNGY5MTkwNDdiNjkyNGVhNTYAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3BpZGVyaG92IGhhdC5hc3NldAAgAAAANWUzNGUyOGYxMTFkMTY0NGI5MDQ5NWY4YjE3NjVjMGQAFAAAAFNwcml0ZUFuaW1Db250cm9sbGVyACAAAABkOGZhM2JlNWNiZmVmNDM0NTg0YWE2MzQ0MmEwYmQyMQAVAAAAU3ByaXRlQW5pbVBsYWNlaG9sZGVyACAAAAAyYTg3NDFkNGNjN2QxZDY0ZmI5YTU4ZGMwN2U5Y2FiMwAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TcXVpZCBoYXQuYXNzZXQAIAAAADVkODI0NzcxOTI2OGNhZDQ5YTQ3NWFhYTBlMjFlZDNlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3NxdWlycmVsIGhhdC5hc3NldAAgAAAANmUyZDVkODE4OWVhZTYxNGI5ZTMxMjVkMTNhMGVhYzAAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAwMS5hc3NldAAgAAAAZjgyMTg0NjJiNjgwZDMzNGY5YTQ0NGQwZDU4MTEzY2YAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAwMi5hc3NldAAgAAAANTA2ZWQ3ZjI3MTJjZjI2NDhhYzkyODc4YjM3MmYwN2MAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAwMy5hc3NldAAgAAAAYzY5OTVjOWQ5ZjYxMTAwNGViY2E4ZTY2NzZjNjdlMjkAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAwNC5hc3NldAAgAAAAZDVjMTE1MmZmZmQ1M2FiNGM5MWZmNWUxMTkzYTU2NTUAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAwNi5hc3NldAAgAAAAN2MyZWFmOWY5Zjc5NzI4NDQ4MTQ2YTVjNmM3MTViNzUAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAwOS5hc3NldAAgAAAANGI0ODBhOTQyOTM1ODJiNGM4MDg4ODQ1MTk4NmUwYmIAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxMS5hc3NldAAgAAAAMTAzMWYxM2Q1ZWU0Mzk3NGNiNWZiZmQ4MTBlY2MwYzYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxMi5hc3NldAAgAAAANjliZmI2ZTA1ODJhN2MwNDQ4NTY4OWI3OGQ4NjQzNzQAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxNC5hc3NldAAgAAAAMTkzZmFhZmI1NDI2YzU4NDU5YTFhNWI5MzVhYjJlOWMAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxNS5hc3NldAAgAAAANmUxNWYzYzNhODNjMDAwNDU5ZTAzYTg4M2IwNjRjYjgAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxNy5hc3NldAAgAAAANjUzYWEzN2I2YWYwMWM5NDRiNDMxODg1NGJkMTE2MDEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxOC5hc3NldAAgAAAAYzU2OTkzNTFmYzAxNjcwNDI5ZGVkNDRmZGRlZTM4OWYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAxOS5hc3NldAAgAAAAZGM1NGRiZjA3MGNmOGY2NGM5YzQyZmUzODQwZTk5YTUAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAyMC5hc3NldAAgAAAAY2UyNmZjZWYyODc1MTBjNDJiZDg3YzAwMmQxNDRlYzkAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAyMi5hc3NldAAgAAAAYjdjOWZmOTgzOWUzYjM1NDY4NWFlMjI4OTcyN2YwODkAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAyNC5hc3NldAAgAAAANmI1MWRkYTRmMTNmNTYzNGZhMDZiZjdmZTE4NWI5Y2IAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAyOC5hc3NldAAgAAAAYjk0Y2FkNTQwYmRiZmM4NGQ5YjFhMGZhNjQyZWY0YTEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAyOS5hc3NldAAgAAAAMTZiMzc5NDY5MjFhMGY3NGZiNjliZmY4NjZlZTZiOWEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzMC5hc3NldAAgAAAAYjRhYzhkM2EwMGM3NjNiNDVhNzA0ZGE3NzYxZjZhYTEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzMi5hc3NldAAgAAAANGEwMzJjM2EzYzIyMTk2NDJhZDBlNTczNjllN2VlZjQAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzNC5hc3NldAAgAAAANzQyZTUxMDY2ZDJkNmNiNDhiNDA4MWU0NTUzZjU1NDYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzNS5hc3NldAAgAAAANmE4MTMxMmVlZDI4YWYxNDM4YWIyNTNmNzIyODgxZGYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzNi5hc3NldAAgAAAANTA3ZmYzOTkyZDUzNDIwNDFhOWRkYWM2NDMyOGM0ZmIAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzOC5hc3NldAAgAAAANTUzZDNlYjYwNjY1MGZiNGZiNGQ4YzIxZmQ3M2M1OWYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDAzOS5hc3NldAAgAAAANTBiNzVkMzA5NDM0MDY1NDY4MDM2Y2I0NGM5NGNmMzAAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0MC5hc3NldAAgAAAAMTg4Zjc1ZjI2NTdhNTAzNGU5MDczMWNlYzA2NzU4ZTkAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0MS5hc3NldAAgAAAAYTY5ZmNjNDhlNGNhZmI3NDM5MTYyZDhjZGJkY2UzMzUAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0Mi5hc3NldAAgAAAAYmZjYjRmZGJiNmUyY2E4NDA5NzUxZjlmNWExZWI3OWQAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0My5hc3NldAAgAAAANTRjYzRhZGE2Yzk0OTZmNDliNzMxOTM1YjA5MzRjZmYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0NC5hc3NldAAgAAAAYzY2OTAzOGJiYTI4MjI0NDg5NzA0MWVmODNlYzNkNDYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0NS5hc3NldAAgAAAAMzM2NDk1Y2FmMGY5ZmY4NDE4ZDFjYTE4YzI5NzA0MDQAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0Ni5hc3NldAAgAAAANDFmYTM5YTczNTZiNzVlNGZhZjdlZWEwYjM5ZDQzZjgAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0Ny5hc3NldAAgAAAAYTQ4MjIzODE5NTE1OWU1NGQ4OTUyZjcyMDkwODAwY2EAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0OC5hc3NldAAgAAAANjU2YmM3ZWVmM2UxMjJhNGFhMDA3MzRkZjU1YjY3NDAAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA0OS5hc3NldAAgAAAANzdlNjA0NTJlYWRjN2E2NGViYzdkZGMzNjdiZmYwNWQAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA1MC5hc3NldAAgAAAAMGEwMzRkNWQ4NGE4ZmYxNGM5MTBhMWYyNjgzOTg5NWEAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA1MS5hc3NldAAgAAAAMDZkODI4YmJjN2IwNDQ3NDc4YzNiZjdmNjI5NmIwYzcAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA1Mi5hc3NldAAgAAAAYjE3MmFlYjEyNDNlNzQxNDQ4YzVkMTU0MWFiOTljMjIAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0YW5kYXJkMDA1My5hc3NldAAgAAAAYjlhODRjNTY1OGRlNjRhNDE5OTVkMmU0ZmZkMmU5ZTYAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3RhcmxpZ2h0IGhhdC5hc3NldAAgAAAAMTQzNmJkYWI3NWU4NmJhNDc5N2ExZmI2ZjEwM2Y5OGIAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3RlYW1wdW5rIGhhdC5hc3NldAAgAAAAYWIwOWQ5NGM0ZDhkYmY0NGM4MjIwZjZlN2IyODQyMzYANQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3RlYW1wdW5rIExvb2sgaGF0LmFzc2V0ACAAAAA5ZWYxZWU1Zjc5YTgyOGE0NDkwZDEyOTVjZTgwMmI0MQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9zdGVib25faGF0LmFzc2V0ACAAAAA5MTQ2NjA5ZmVlYTQ3Y2Y0Yzg1YjBjNGE1MGRjMWFhMQAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TdGV2ZSBoYXQuYXNzZXQAIAAAADhlNjQ0ZTkyMDJmMTQ0OTRmYWUyY2RiZDE3NGQ4NTZkAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9TdGljb2wuYXNzZXQAIAAAADViYmNmNTcxYWI1NTEwMDRmOTcyY2E2YzBiNDhjNzBhACkAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1N0aWNvbC5hc3NldAAgAAAAMjljMzM0YjFmNDdhYzFhNGQ4ZWI5MzUzNmRkMTFlNWIALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvc3RpdGNoIGhhdC5hc3NldAAgAAAAYTRmMWYzZTA4OGQ5YmRlNGViNDQzYzMxNTNhZTVhNDYAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3RyYXdiZXJyeSBoYXQgLmFzc2V0ACAAAAA4ZjQ3MDk0NTQxZjI0M2I0NzgzYzAwZjgxMDA3YzM1MQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAwMC5hc3NldAAgAAAAMjZjYTgzODNiMDgwM2U3NGZiNjkxYTBlMDQwNmY3NGIAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMDEuYXNzZXQAIAAAADQ2MGMwY2EzNzYyNDk2MDQyOWNmOTQ5NDY1ZjRjOTNlADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDAyLmFzc2V0ACAAAAA5YmUyOWU5MDRmMzc1YzY0MWFjMGZjZTY2MzI3ZjEzZQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAwMy5hc3NldAAgAAAAYzM0NDQ4NjEyNTNmNTRmNGI5NWEzM2JkMmE1MzA3OWMAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMDQuYXNzZXQAIAAAADY5YjFjOGQ2ZDczZjliMDQyODdlZGVjMjI3ZGE1MTliADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDA1LmFzc2V0ACAAAABlZTA5ZjMzNTBlY2QzZTI0OGI3ZTEzZDEwMGFmNmY1MwAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAwNi5hc3NldAAgAAAAZmM2NzBlNGEzOTkwMTlmNGQ4NmI3YThmNTk0NDM5MTMAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMDcuYXNzZXQAIAAAAGQxOGIwMzY4MzY0YzY2ODQyODc5NDMxNmE0ZWU3YThjADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDA4LmFzc2V0ACAAAABjOTFiMTUyOGRkNTlmYzI0YjljOWNlYWNjZmRkYTEzNgAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAwOS5hc3NldAAgAAAAODdhNWM0Mjc0NTVmNWRhNGY4ZDQ3YWNkOWIyMDU5NWEAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMTAuYXNzZXQAIAAAAGI1NGRkYTVmYWI2OGM3MzQ3OWFiNzZhYjZiMzI1MzE3ADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDExLmFzc2V0ACAAAABjY2YzODhmZmNkMTgxNzc0MmEwZWQyNzIyMjNlMmNkOAAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAxMi5hc3NldAAgAAAAYjVlMTg1ZTczNGEyOGUzNDNhN2E4ZjRkZWQ3N2VjMmUAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMTMuYXNzZXQAIAAAADA3OTZmYjFmOWE4Mjk3YjQwYTAwYzgzMGNlYTMyZTFhADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDE0LmFzc2V0ACAAAAA4YzViMjQ5MDU5MTdjNzA0OWE5ZDFlMmNmYjAzMDMzOAAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAxNS5hc3NldAAgAAAAODUwOTIxYzI1ZTMwYjlmNDBhNDhlODhhYzE5ZGRmNTUAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMTYuYXNzZXQAIAAAADMzZGVmOTlmMTBiNjdlODRiYjBhOGI4MmY5ZmRiZDEyADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDE3LmFzc2V0ACAAAABmNDMyMDVmNDgyYTBjY2I0MGI4YmMzNzgwYzQ2NTEzMQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAxOC5hc3NldAAgAAAANDg3NTQ1YWE1ZmRiNmVmNDFiMDE5N2MyNTE1MWRkMDkAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMTkuYXNzZXQAIAAAADEzNTM3MTVjYmE5NjE5NzQyOTQyOTZmZjc3NDdiODRkADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDIwLmFzc2V0ACAAAABlN2JiOWNhOGE3MzVmNmU0NGI1MzBhMDI3ZWY0NjVhMQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAyMS5hc3NldAAgAAAAMDg3ZGQ4MTU1ZTA2ZmIxNGU4ZjIwYTgzY2E5YzNkNjAAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMjIuYXNzZXQAIAAAADYyMzI3YzcxMjk5YWM0MTRiODc3NTExYTYyNDg4YjBkADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDIzLmFzc2V0ACAAAABlMjk1ZmU3ZGE4MDJlMTM0ZjhmMTExOWE2MGQ2MzZmZAAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAyNC5hc3NldAAgAAAAOGViMGU4YmQyNDZmMTRlNDdhZjdkZjRlM2U4ZjNjNTgAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdHZpZXdkYXRhL3N0cmVhbTAwMjUuYXNzZXQAIAAAADYxMGEyYTc3NDM0MzVkOTQyODkwZjMxYjNlM2U3YWRiADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9zdHJlYW0wMDI2LmFzc2V0ACAAAABiZjAxYTgyOTE2MmY5MDg0YTg1ODA5ZGRjODcyMTY0NgAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0dmlld2RhdGEvc3RyZWFtMDAyNy5hc3NldAAgAAAAODlkMTM0MGRmNTUyYjQ2NDViZDA2ZjFmYTgyZmE2MjkALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvc3R1bXB5IGhhdC5hc3NldAAgAAAAYjE1YzM1NzI0ODFmNTM1NDc5OTI4NWIyMWY3MDc0ODMANAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3R5bGlzaCBXaXRjaCBoYXQuYXNzZXQAIAAAAGQ0Y2Q0YWExOGM2ZTc5NjRkYjYyMjgyYjg5MmIyYzdlAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1N1Z2FyY2F0IGhhdC5hc3NldAAgAAAANTQ3MjZiZWZlYWIwMTdlNGRhMTJkMmYxNzdkM2FhNDAAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3VuZmxvd2VyIGhhdC5hc3NldAAgAAAAZGM3ZTkzMDJjZmRhNWMzNDA5ZTk3NDdkZDk3M2FiMzYAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3VzQ3Jvd24gaGF0IC5hc3NldAAgAAAAMzY1ZDE4Yjk0ZTE3M2JjNGRhMGI0YmVhMmUzMmNmZDEALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3VzaHViIGhhdC5hc3NldAAgAAAAZGM1OThhMjNiY2E2M2JlNGQ4MmIzNjMxYjljMDg2MzIALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvU3Vzb3Rpb24gaGF0LmFzc2V0ACAAAAA5YjM5ZTA2ZjMxMDQzZTg0YmIyNGZlNDQ4YjZjNTM5NQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Td2VldHJvbGwgaGF0LmFzc2V0ACAAAAA5NGU4MzBmYzAxMDc5MTY0NGIzZjMwODViNDYzYWY1MwAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9TeWx2ZW9uIGhhdC5hc3NldAAgAAAAODRmMDZiZWNjMDlmZjU2NDI4ODU2ODIyZTAzMmJiMzkAOAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVGFzdGUgVGhlIFJhaW5ib3cgaGF0LmFzc2V0ACAAAAA4Yzc1N2NhNzZiMTgxMzk0MWEzM2IxMjMyMWRkNjA2ZAAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UYXRzdWdpcmkgaGF0IC5hc3NldAAgAAAAZTEyN2Y0NTE3ZDRiOTk1NDliMWRmMTk1NGQ4YzQ3NDAAKwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVGF4aSBoYXQuYXNzZXQAIAAAAGJhNzkyOGUxN2JiYWU4OTQyODE5N2UxNmZiMTE2NDkyADUAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1RlY2huaWNhbE1vb24gaGF0IC5hc3NldAAgAAAAMGE4MDhkZjdkMjU4NDhkNDlhMjVjZDJmZWE3ZGJlZmMALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVGVldGggaGF0IC5hc3NldAAgAAAAODc4MTAwZjBkMDFiZDhiNDI5ZWY2MTQ1NjIxYTYyMWQALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvdGVubWEgaGF0LmFzc2V0ACAAAAAwMmE3MzIxNTkwNTRhYWQ0NmJiOTNlNzEzNjg0Yjk4OAAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UZXJteSBCb2kgaGF0LmFzc2V0ACAAAABiMTE3ZmQ2NGZmNzk1ZmY0N2EwMDZhY2VhNzM4OTMzMQA1AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UZXNzYW55IEJlYXV0eSBoYXQuYXNzZXQAIAAAADdlMjFmMGQzNmJlOTY4ZjQ5OTU5OTIwY2VhMDZiYjYzAD0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Rlc3NhbnkgQmVhdXR5IFdhcnJpb3IgaGF0LmFzc2V0ACAAAABkOWQxMTVjYzJmY2Q5OTQ0OThjODQxM2VmOWJkZTkwNwAYAAAAdGV4dHVyZXMvR3JpZEJveF9EZWZhdWx0ACAAAAA3Y2NkYTNlOWQxMjlmMWE0ZDhiODI1ZTU1ZmUzZGFlNAAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UaGFub3MgaGF0LmFzc2V0ACAAAABkNGExNmE1MDU0MzQxN2Y0NWJjMjU0YTljNzIwYTZjYQA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UaGUgVHJ1ZSBLaW5nIGhhdC5hc3NldAAgAAAAMzEzMTJhZDUwZjdhMDRjNDViNzA3ZTZmMjg5ODAzOWUAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVGhlIFdpdGNoZXIgaGF0LmFzc2V0ACAAAAA5Zjg2YzBiZGEwNDAyZGM0ODhjYzY3M2YxZTNiNWJhMgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UaGluZyBoYXQgLmFzc2V0ACAAAABmNmEwMGIwZTcxYWU5YjU0YzgwZWY5MDFkYTAwYjNkNwAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UaGlzSXNGaW5lIGhhdCAuYXNzZXQAIAAAADdmYWNkMjY5MmUwMDNjMDQxYTc4YWI3YTFmNDM1YTk3ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1Rpa2kgaGF0LmFzc2V0ACAAAABhMTMyNTc0NWY1ZTBiZGU0NWEwMGQ5NmExNDNmYTUxMAAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9UaW5rZXJiZWxsIGhhdCAuYXNzZXQAIAAAAGY4NzY3MjFiYjA2ZTg3YjQwODNhZWZjODM5YjM3NDFhACwAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1RpcHB5IGhhdC5hc3NldAAgAAAAMjAyZDE1ODY0NzdiZjA4NDE5NWU5OTIzMmViNzMzNDUAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvdGlzc3VlX2JveF9oYXQuYXNzZXQAIAAAADA0ZmEzOTFmNTdmNmMwMTQzOWM1MjgzZmQ5ODIxYTg4AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1RpdGFucyBoYXQuYXNzZXQAIAAAADZiZmE0MTZjN2FiMTAwZDQ1YjNlNDQ4MTFiZGE2ZjM2ACsAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3RvYnkgaGF0LmFzc2V0ACAAAAAzOTdlYTU5MTU0OWYyZTI0ZWI0YWY5ZDNiODA5NGQzOQAwAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS90b21jcmF2ZW4gaGF0LmFzc2V0ACAAAAA2MWY2NDYxMTAwZTk3OWQ0YWFlNTYwM2M1ZWY2ZDVjZgAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ub25ndWUgaGF0IC5hc3NldAAgAAAAMGFhNjY4ZDE2Yzc2ZTI4NDU5MGEyYTc2NDkxNDIzMWQALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvdHJhbnNfMSBoYXQuYXNzZXQAIAAAADhjODU0YWVhMDU1MTQ3MjQxYTNhZDc2NzY5NTI5YjdlAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3RyYW5zXzIgaGF0LmFzc2V0ACAAAAA4YjQ0MTM4ZjFiNDE5NzY0Yjg4ZTM0YWM5MWFiMzY1NAAuAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS90cmFuc18zIGhhdC5hc3NldAAgAAAAOWFjYTM4MTJkNTYwYTM4NDlhZmVjN2M3MjU2MTRmOWMALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvdHJhbnNfNCBoYXQuYXNzZXQAIAAAADc2ZjRlYzAwODNiMTU4NDQyOGFlOTM3NTQzMDI0NDhhADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1RyZW5jaGNvYXQgaGF0IC5hc3NldAAgAAAAM2IxNzYwYjcwY2U1Njc4NDY4MjRlOTI2MTc2ZDJiNDAALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVC1SZXggaGF0LmFzc2V0ACAAAAA1NjBlZDhhYTFkYjNmOGU0YmFiOWUyZTBmNmFlNDViZAAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ucm9waWMgQmVhY2ggaGF0LmFzc2V0ACAAAABkNTZkMTQ3ZWMzZGM5NDQ0ZmE0ZWIxNTViNTQ4ODcwMQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Ucm91YmVsbGEgaGF0IC5hc3NldAAgAAAAZWIxMWYzN2NjMDlmZGY0NDZhOTJjNWI2ZDNjZmJjOGUAMAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVHNlZHRhY2xlIGhhdC5hc3NldAAgAAAANDgzZGRkMDVhMWJjZDRhNDg4YWM3NDE4NjBmYTE2ODYAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVHVza3NwaWNpb3VzIGhhdC5hc3NldAAgAAAANGQxYTI0NGVjMDQ1MjY5NDFhNDJkMmU5NDE2MDY1YTUACAAAAFR1dG9yaWFsACAAAABlOTgzODJjNDlhMjUwOTQ0YmEyMjA4NmRhYTA0ZWMxOQQFAAAAACoAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1R1eCBoYXQuYXNzZXQAIAAAADQ3NTdhMjIyMzM3Njg5OTQwOTRiN2QxYjdmNmU1YzBiAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1VtYnJlb24gaGF0LmFzc2V0ACAAAAA0NTU1MWJmY2ZlYTBmMDI0MWEyNDRhZWRiNzVlZWM1MwAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9VbWJyZW9uIGhhdDEuYXNzZXQAIAAAADExY2VhNjZjZDgxMmQ5MjRmOGQ2OGQyNmJmY2MzZWFmADMAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1VuZGVhZCBNYXJhaCBoYXQuYXNzZXQAIAAAADg2NWY3OTI2N2FlODk0MDQ3YTA2Mjk3ZjE5ZWE0MGE4ADcAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1VuaWNvcm4gSGFpcmJhbmQgaGF0LmFzc2V0ACAAAABlZjllMWVmZWE2YWQ5OTU0ZDg5MzFhNmEyMzRjOTg5YgAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9WYWxhayBoYXQgLmFzc2V0ACAAAABjZDQ0NTFmMjNmNTVmNmI0NmExMGYyZjY0ODQzNzhjNAAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9WYXBvcmVvbiBoYXQuYXNzZXQAIAAAADU5Y2M4OWQ3ZDFhODkzMjQ3OTExZjcyMDY0YTNkNzkyAC4AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3ZHdW1paG8gaGF0LmFzc2V0ACAAAAAxNTE1MDE1NzhlMDZmMjg0ZWJkMmZiOWEzYTY5NmQ5OQAvAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS92aWtyYW1fMSBoYXQuYXNzZXQAIAAAADM3NzQ1MzU2ZGJjMjM3YjQ0OWU1MzUwY2U3NmIyMjdiAC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3Zpa3JhbV8yIGhhdC5hc3NldAAgAAAAOTA5NDBjMDVkMmQ3OWFkNDlhMjFhYWMzNmM3YzNhMzcANwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvdmluY2VfZm9vdF9mcm9udCBoYXQuYXNzZXQAIAAAADdiY2EwMGEzODJjOTRlZDQzODY1YTBmN2QyMmM5ZTM3ADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3ZpbmNlX2Zyb250IGhhdC5hc3NldAAgAAAAYTAxNzEwMjJhYzNjZjllNGRhOTFmMTM0YTAwOGVmODkALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVmlyZ2lsIGhhdC5hc3NldAAgAAAAMTY5MGNmZjZkZDk1YTc4NDk5ZTczYjk4ODk4Mjk0MGQALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvVm90ZW1lIGhhdC5hc3NldAAgAAAAMjY0MmE2ZThlZGZiMmE3NDQ4OGM5YTk4YjBlODkwN2UALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvd2FmZmxlIGhhdC5hc3NldAAgAAAAZDNlYzEzYmRkZTQ4NTUzNDY4ZGJmNWRmNDY3MjdlMTEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvV2FpbG9yZCBoYXQgLmFzc2V0ACAAAABkMDhjYTJmYzcxNzJmNmE0MGE1ZWJlNjA2YmI3MmZiMAAXAAAAV2FpdEZvckNvbm5lY3Rpb25EaWFsb2cAIAAAAGE3NmRjNWZmYjJkZmE3YzRiODFkMTdiYzQwNTE3NDg5AC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3dlYXNlbF9oYXQuYXNzZXQAIAAAAGFhZWJiYTQ5N2MwNDAwYzQ0YmFkZTdkNGRkMzMyZWEyADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1dlZG5lc2RheSBoYXQgLmFzc2V0ACAAAAA3MjAyMDkyNGI3N2Q5ODg0NzhjNWFhMmRmMmUxNTcxYQAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9XaGVlbGNoYWlyIGhhdC5hc3NldAAgAAAAMjYzNGM5ODAyOTk1NzAwNDNhOGEzMTZlMmUzYWJlNDUALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvV2hlZWxjaGFpci5hc3NldAAgAAAAZmRiMTM5N2ZiOWU0YWIwNDA4YWIyYmFlNzcxN2IxM2MALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvV2lsZGNhdCBoYXQuYXNzZXQAIAAAAGY2NGY0YThmOTVhZDczYTRhYjAzMTM0YmM5MzgwMjY1ACoAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1dpbGRjYXQuYXNzZXQAIAAAADFmZDNiOTViNDk3YjI3YTQ4YmVhNDg2M2JlMjNiNjVjADAAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1dpbXB5IEtpZCBoYXQuYXNzZXQAIAAAAGJlNjk0ZmM3ZTQ2MmFkODRkOWEwMTFjYWM3ZTA2NGMyADcAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1dpbmdzQm9keUJ1aWxkZXIgaGF0LmFzc2V0ACAAAABiZTY4NWYwMGQzNzA0NzM0ZmI4ZTU4Y2JiMzk5YTFiZAAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS93aXRjaCBoYXQuYXNzZXQAIAAAADM0OGI5ZmMyOWEwNTc2ZTQyOTI1MTJlYmNiMGJmYTMyAC0AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1dpemFyZCBoYXQuYXNzZXQAIAAAADkwNjhmNzg1MmJiNjhjODQ4YjRlMjY1MDBmNjFjZTZiADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3dvbGZhYmVsbGUgaGF0LmFzc2V0ACAAAAA2OWIxYTViNDdmNzQ3NWQ0OGI1OGZhNWU4ZTk0OTEzNwA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9Xb2x2c01pbWlreXUgaGF0IC5hc3NldAAgAAAAYzcxMzUxYzYxZDc4YmU3NDU5M2E2OGRmZjZjNTYzYWIALgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvV29udG9uIGhhdCAuYXNzZXQAIAAAADExMzcwOGFlNzdjM2VmOTQ5OThhZThhMzRjMzZlNjU1ACkAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1dvbnRvbi5hc3NldAAgAAAAZGM2MDdjNjAwY2U2YmQ3NDNhOWVhOWVjMjViYzQ5MjkALQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvV3JlYXRoIGhhdC5hc3NldAAgAAAAMDE4NmUxMjgyMDM0MjQ3NGZiM2RlOWY5OWFlNDk4OWEALwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvd3JlbmNoX2YgaGF0LmFzc2V0ACAAAAA0YThlNDdhNzMwNWEzMDE0NmJhYmU5NDVmMjRmYTE1MwAzAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9YYWxseXNhaG9uZXkgaGF0LmFzc2V0ACAAAAA0YjM2MTZlMDRlZWVmYjY0NDllOTcyYWFhN2QzNjEzYgAxAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS94Q2hvY29iYXJzIGhhdC5hc3NldAAgAAAAM2Q2NGY1N2Y5ODdiYWYyNDhiYzA2ZmFmYjNjYWJkYTkALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvWGVubyBoYXQgLmFzc2V0ACAAAAAxYjY3MDRhZmVkNzQwMDY0OWJlYzlkYTZmZjc1MWQzYwA3AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9YZW5vbW9ycGggUXVlZW4gaGF0IC5hc3NldAAgAAAAM2Y5YTcyMjQ3NGY5YzMzNDJiZTNjMTFmNDE0YTNkODQALAAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvWC1SYXkgaGF0LmFzc2V0ACAAAAA3NTFlM2FiMTMyY2I2MWY0YmI4OWMzYmQ0YmJiZDM0NQAyAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9ZZWxsb3cgQm9keSBoYXQuYXNzZXQAIAAAADliZjQ4NTA1MDljNDVhNDRmOTQ1NGNjYWNiNzM5MTM3ADYAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXR2aWV3ZGF0YS9ZZWxsb3cgU2tpdHRsZXMuYXNzZXQAIAAAAGVlMjRhNTVkNWE5ZjJkZTQyOGE3MzY2NjgwNDc0OWQyADIAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1llbGxvdyBTa2l0dGxlcy5hc3NldAAgAAAAMjA1MjFmOWIzMzFjMTFhNDRiY2I1ODkwNGJlZTg1ZjgAMQAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvWWV5IEJpbGx5IGhhdCAuYXNzZXQAIAAAADNkZGE2ODYwMjliOWFlMzRmOGYzNzUyYTZkNzk4Y2I1AC8AAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL3lvdXJfbW9tX2hhdC5hc3NldAAgAAAAMTAzZWY1MWVlNzBkMmVlNGJiZThkYzc0YTE1M2Y2YzcANwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvWW91J3JlIHNvIFNhbHR5ISBoYXQuYXNzZXQAIAAAAGQzMTNlNmRiZGU3OTIzYjRhYmJlNGI0OTk0OTVhMDg0ADEAAABBc3NldHMvVE9VL2dlbmVyYXRlZF9oYXRkYXRhL1phdnZ5Z2FtZXIgaGF0LmFzc2V0ACAAAAA2ZDgwYmNiNDc0MWYyZmY0NmE5ZGU3OGI1NmFiMDFhOQAlAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9aZS5hc3NldAAgAAAAYWZlZGRjNjBhMDM5ZGE3NDE4MDFkNmY1MTg0YjY1N2IAMwAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvWmVyb1hGdXNpb256IGhhdC5hc3NldAAgAAAAMjE2NzA5ZmFjZDMxZGZlNDY5Y2MxM2U4NDMxODNjZDQAPgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvemVyb3lhbHZpa2luZyBoYWxsb3dlZW4gaGF0LmFzc2V0ACAAAAAyYTNiMzk0NzY3OTE5NDg0YzljODM5ZmIxNWVhY2QxNAA0AAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS96ZXJveWFsdmlraW5nIGhhdC5hc3NldAAgAAAAMDI1MWMwOTU5ZDM3NWRhNGRhOTY1ZjJmOTY4YjQxYTMAMgAAAEFzc2V0cy9UT1UvZ2VuZXJhdGVkX2hhdGRhdGEvWmV0YSBNYXJrIFYgaGF0LmFzc2V0ACAAAABkM2JiYjZjODg0Yzk4NWQ0ODk5NWE3ODUyOGM5ZWJhNAAqAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9ab2QgaGF0LmFzc2V0ACAAAABlNTUwNzBhOWFlOGY0NjM0ZWE2YjM0YmUyZjEwZTQwZQAtAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS9ab21iaWUgaGF0LmFzc2V0ACAAAABlMjk3YjU0Mjc2OGQzYzA0MTlmOTVhZjNlZDgyNTRmZAAsAAAAQXNzZXRzL1RPVS9nZW5lcmF0ZWRfaGF0ZGF0YS96eWx1cyBoYXQuYXNzZXQAIAAAADllOGVlNmM1ZDAwZTdkZTRhYjY5NTdkMDUwMjZmMWJj","m_BucketDataString":"hg4AAAQAAAABAAAAAAAAADAAAAABAAAAAAAAAFUAAABGAgAAAAAAAAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAmAAAAJwAAACkAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAgAAAAIEAAACCAAAAgwAAAIQAAACFAAAAhgAAAIoAAACLAAAAjAAAAI0AAACOAAAAjwAAAJAAAACRAAAAkgAAAJMAAACUAAAAlQAAAJYAAACXAAAAmAAAAJkAAACaAAAAmwAAAJwAAACdAAAAngAAAJ8AAACgAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAArAAAAK4AAACvAAAAsAAAALEAAACyAAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAdAQAAHgEAAB8BAAAgAQAAIQEAACIBAAAjAQAAJAEAAI0HAACOBwAAjwcAAJAHAACRBwAAkgcAAJMHAACUBwAAlQcAAJYHAACXBwAAmQcAAJoHAACbBwAAnQcAAJ4HAACfBwAAoAcAAKEHAACiBwAAowcAAKQHAAClBwAApgcAAKcHAACoBwAAqQcAAKoHAACrBwAArAcAAK0HAACuBwAArwcAALAHAACxBwAAsgcAALMHAAC0BwAAtQcAALYHAAC3BwAAuAcAALkHAAC6BwAAuwcAALwHAAC9BwAAvgcAAL8HAADABwAAwgcAAMMHAADEBwAAxQcAAMYHAADHBwAAyAcAAMkHAADKBwAAywcAAMwHAADNBwAAzgcAAM8HAADQBwAA0QcAANIHAADTBwAA1AcAANUHAADWBwAA1wcAANgHAADZBwAA2gcAANsHAADeBwAA3wcAAOAHAADhBwAA4gcAAOMHAADkBwAA5QcAAOYHAADnBwAA6AcAAOkHAADqBwAA6wcAAOwHAADtBwAA7gcAAO8HAADwBwAA8QcAAPIHAADzBwAA9AcAAPUHAAD3BwAA+AcAAPkHAAD6BwAA+wcAAPwHAAD9BwAA/gcAAP8HAAAPCAAAEAgAABEIAAASCAAAFAgAABUIAAAWCAAAFwgAABgIAAAZCAAAJwgAACgIAAAqCAAAKwgAACwIAAAtCAAALggAAC8IAAAwCAAAMQgAADIIAAAzCAAANAgAADYIAAA3CAAAOAgAAEsIAABMCAAATQgAAE4IAABPCAAAUAgAAFEIAABSCAAAUwgAAFQIAABVCAAAVggAAFcIAABZCAAAWggAAFsIAABcCAAAXQgAAF4IAABfCAAAYAgAAGEIAABiCAAAYwgAAGQIAABlCAAAZggAAGcIAABoCAAAaQgAAGoIAABrCAAAbAgAAG0IAABuCAAAbwgAAHAIAABxCAAAcggAAHMIAAB0CAAAdQgAAHYIAAB3CAAAeAgAAHkIAAB6CAAAewgAAHwIAAB9CAAAfggAAH8IAACCCAAAgwgAAIQIAACFCAAAhggAAIcIAACICAAAiQgAAIoIAACLCAAAjAgAAI0IAACOCAAAjwgAAJAIAACRCAAAkggAAJMIAACUCAAAlQgAAJYIAACXCAAAmAgAAJkIAACaCAAAmwgAAJwIAACdCAAAnggAAJ8IAACgCAAAoQgAAKIIAACjCAAApAgAAKUIAACmCAAApwgAAKgIAACpCAAAqggAAKsIAACsCAAArQgAAK4IAACvCAAAsAgAALEIAACyCAAAtAgAALUIAAC2CAAAtwgAALgIAAC5CAAAuggAALsIAAC8CAAAvQgAAL4IAAC/CAAAwAgAAMEIAADCCAAAwwgAAMQIAADFCAAAxggAAMcIAADICAAAyQgAAMoIAADLCAAAzAgAAM0IAADOCAAAzwgAANAIAADRCAAA0ggAANMIAADUCAAA1QgAANYIAADXCAAA2ggAANsIAAADCQAABAkAAAUJAAAGCQAABwkAAAkJAAAKCQAACwkAACgJAAApCQAAKgkAACsJAAAsCQAALQkAAC4JAAAvCQAAMAkAADEJAAAyCQAAMwkAADQJAAA1CQAANgkAADcJAAA4CQAAOQkAADsJAAA8CQAAPQkAAD4JAAA/CQAAQAkAAEEJAABCCQAAQwkAAEQJAABFCQAARgkAAEcJAABICQAASQkAAEoJAABLCQAATAkAAE0JAABOCQAATwkAAFAJAABRCQAAUwkAAFQJAABVCQAAVgkAAFcJAABYCQAAWQkAAFoJAABbCQAAXAkAAF0JAABeCQAAXwkAAGAJAABhCQAAYgkAAGQJAABlCQAAZgkAAGcJAABoCQAAaQkAAGoJAABrCQAAbAkAAG0JAABuCQAAbwkAAHAJAABxCQAAcgkAAHMJAAB0CQAAdQkAAHYJAAB3CQAAeAkAAHkJAAB7CQAAfAkAAH0JAAB+CQAAfwkAAIAJAACBCQAAggkAAIMJAACECQAAhQkAAIYJAACHCQAAYQAAAAEAAAABAAAAqgAAAAEAAAACAAAA2QAAAAEAAAACAAAA/gAAAAEAAAADAAAAMwEAAAEAAAADAAAAWAEAAAEAAAAEAAAAjAEAAAEAAAAEAAAAsQEAAAEAAAAFAAAA5QEAAAEAAAAFAAAACgIAAAEAAAAGAAAAOwIAAAEAAAAGAAAAYAIAAAEAAAAHAAAAjwIAAAEAAAAHAAAAtAIAAEYCAAAHAAAAKAAAACoAAACrAAAAHAEAAKEFAACiBQAAowUAAKQFAAClBQAApgUAAKcFAACoBQAAqQUAAKoFAACrBQAArAUAAK0FAACuBQAArwUAALAFAACxBQAAsgUAALMFAAC0BQAAtQUAALYFAAC3BQAAuAUAALkFAAC6BQAAuwUAALwFAAC9BQAAvgUAAL8FAADABQAAwQUAAMIFAADDBQAAxAUAAMUFAADGBQAAxwUAAMgFAADJBQAAygUAAMsFAADMBQAAzQUAAM4FAADPBQAA0AUAANEFAADSBQAA0wUAANQFAADVBQAA1gUAANcFAADYBQAA2QUAANoFAADbBQAA3AUAAN0FAADeBQAA3wUAAOAFAADhBQAA4gUAAOMFAADkBQAA5QUAAOYFAADnBQAA6AUAAOkFAADqBQAA6wUAAOwFAADtBQAA7gUAAO8FAADwBQAA8QUAAPIFAADzBQAA9AUAAPUFAAD2BQAA9wUAAPgFAAD5BQAA+gUAAPsFAAD8BQAA/QUAAP4FAAD/BQAAAAYAAAEGAAACBgAAAwYAAAQGAAAFBgAABgYAAAcGAAAIBgAACQYAAAoGAAALBgAADAYAAA0GAAAOBgAADwYAABAGAAARBgAAEgYAABMGAAAUBgAAFQYAABYGAAAXBgAAGAYAABkGAAAaBgAAGwYAABwGAAAdBgAAHgYAAB8GAAAgBgAAIQYAACIGAAAjBgAAJAYAACUGAAAmBgAAJwYAACgGAAApBgAAKgYAACsGAAAsBgAALQYAAC4GAAAvBgAAMAYAADEGAAAyBgAAMwYAADQGAAA1BgAANgYAADcGAAA4BgAAOQYAADoGAAA7BgAAPAYAAD0GAAA+BgAAPwYAAEAGAABBBgAAQgYAAEMGAABEBgAARQYAAEYGAABHBgAASAYAAEkGAABKBgAASwYAAEwGAABNBgAATgYAAE8GAABQBgAAUQYAAFIGAABTBgAAVAYAAFUGAABWBgAAVwYAAFgGAABZBgAAWgYAAFsGAABcBgAAXQYAAF4GAABfBgAAYAYAAGEGAABiBgAAYwYAAGQGAABlBgAAZgYAAGcGAABoBgAAaQYAAGoGAABrBgAAbAYAAG0GAABuBgAAbwYAAHAGAABxBgAAcgYAAHMGAAB0BgAAdQYAAHYGAAB3BgAAeAYAAHkGAAB6BgAAewYAAHwGAAB9BgAAfgYAAH8GAACABgAAgQYAAIIGAACDBgAAhAYAAIUGAACGBgAAhwYAAIgGAACJBgAAigYAAIsGAACMBgAAjQYAAI4GAACPBgAAkAYAAJEGAACSBgAAkwYAAJQGAACVBgAAlgYAAJcGAACYBgAAmQYAAJoGAACbBgAAnAYAAJ0GAACeBgAAnwYAAKAGAAChBgAAogYAAKMGAACkBgAApQYAAKYGAACnBgAAqAYAAKkGAACqBgAAqwYAAKwGAACtBgAArgYAAK8GAACwBgAAsQYAALIGAACzBgAAtAYAALUGAAC2BgAAtwYAALgGAAC5BgAAugYAALsGAAC8BgAAvQYAAL4GAAC/BgAAwAYAAMEGAADCBgAAwwYAAMQGAADFBgAAxgYAAMcGAADIBgAAyQYAAMoGAADLBgAAzAYAAM0GAADOBgAAzwYAANAGAADRBgAA0gYAANMGAADUBgAA1QYAANYGAADXBgAA2AYAANkGAADaBgAA2wYAANwGAADdBgAA3gYAAN8GAADgBgAA4QYAAOIGAADjBgAA5AYAAOUGAADmBgAA5wYAAOgGAADpBgAA6gYAAOsGAADsBgAA7QYAAO4GAADvBgAA8AYAAPEGAADyBgAA8wYAAPQGAAD1BgAA9gYAAPcGAAD4BgAA+QYAAPoGAAD7BgAA/AYAAP0GAAD+BgAA/wYAAAAHAAABBwAAAgcAAAMHAAAEBwAABQcAAAYHAAAHBwAACAcAAAkHAAAKBwAACwcAAAwHAAANBwAADgcAAA8HAAAQBwAAEQcAABIHAAATBwAAFAcAABUHAAAWBwAAFwcAABgHAAAZBwAAGgcAABsHAAAcBwAAHQcAAB4HAAAfBwAAIAcAACEHAAAiBwAAIwcAACQHAAAlBwAAJgcAACcHAAAoBwAAKQcAACoHAAArBwAALAcAAC0HAAAuBwAALwcAADAHAAAxBwAAMgcAADMHAAA0BwAANQcAADYHAAA3BwAAOAcAADkHAAA6BwAAOwcAADwHAAA9BwAAPgcAAD8HAABABwAAQQcAAEIHAABDBwAARAcAAEUHAABGBwAARwcAAEgHAABJBwAASgcAAEsHAABMBwAATQcAAE4HAABPBwAAUAcAAFEHAABSBwAAUwcAAFQHAABVBwAAVgcAAFcHAABYBwAAWQcAAFoHAABbBwAAXAcAAF0HAABeBwAAXwcAAGAHAABhBwAAYgcAAGMHAABkBwAAZQcAAGYHAABnBwAAaAcAAGkHAABqBwAAawcAAGwHAABtBwAAbgcAAG8HAABwBwAAcQcAAHIHAABzBwAAdAcAAHUHAAB2BwAAdwcAAHgHAAB5BwAAegcAAHsHAAB8BwAAfQcAAH4HAAB/BwAAgAcAAIEHAACCBwAAgwcAAIQHAACFBwAAhgcAAIcHAACIBwAA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AQAAAAoHAADncQEAAQAAAAoHAAAMcgEAAQAAAAsHAABAcgEAAQAAAAsHAABlcgEAAQAAAAwHAACZcgEAAQAAAAwHAAC+cgEAAQAAAA0HAADycgEAAQAAAA0HAAAXcwEAAQAAAA4HAABLcwEAAQAAAA4HAABwcwEAAQAAAA8HAACkcwEAAQAAAA8HAADJcwEAAQAAABAHAAD9cwEAAQAAABAHAAAidAEAAQAAABEHAABWdAEAAQAAABEHAAB7dAEAAQAAABIHAACvdAEAAQAAABIHAADUdAEAAQAAABMHAAAIdQEAAQAAABMHAAAtdQEAAQAAABQHAABhdQEAAQAAABQHAACGdQEAAQAAABUHAAC6dQEAAQAAABUHAADfdQEAAQAAABYHAAATdgEAAQAAABYHAAA4dgEAAQAAABcHAABsdgEAAQAAABcHAACRdgEAAQAAABgHAADFdgEAAQAAABgHAADqdgEAAQAAABkHAAAedwEAAQAAABkHAABDdwEAAQAAABoHAAB3dwEAAQAAABoHAACcdwEAAQAAABsHAADQdwEAAQAAABsHAAD1dwEAAQAAABwHAAApeAEAAQAAABwHAABOeAEAAQAAAB0HAACCeAEAAQAAAB0HAACneAEAAQAAAB4HAADbeAEAAQAAAB4HAAAAeQEAAQAAAB8HAAA0eQEAAQAAAB8HAABZeQEAAQAAACAHAACNeQEAAQAAACAHAACyeQEAAQAAACEHAADmeQEAAQAAACEHAAALegEAAQAAACIHAAA/egEAAQAAACIHAABkegEAAQAAACMHAACYegEAAQAAACMHAAC9egEAAQAAACQHAADxegEAAQAAACQHAAAWewEAAQAAACUHAABKewEAAQAAACUHAABvewEAAQAAACYHAACjewEAAQAAACYHAADIewEAAQAAACcHAAD8ewEAAQAAACcHAAAhfAEAAQAAACgHAABVfAEAAQAAACgHAAB6fAEAAQAAACkHAACufAEAAQAAACkHAADTfAEAAQAAACoHAAAHfQEAAQAAACoHAAAsfQEAAQAAACsHAABgfQEAAQAAACsHAACFfQEAAQAAACwHAAC5fQEAAQAAACwHAADefQEAAQAAAC0HAAASfgEAAQAAAC0HAAA3fgEAAQAAAC4HAABrfgEAAQAAAC4HAACQfgEAAQAAAC8HAADEfgEA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AQAAAA8IAAD5ygEAAQAAAA8IAAAeywEAAQAAABAIAABPywEAAQAAABAIAAB0ywEAAQAAABEIAACoywEAAQAAABEIAADNywEAAQAAABIIAAD/ywEAAQAAABIIAAAkzAEAAQAAABMIAABVzAEAAQAAABMIAAB6zAEAAQAAABQIAACnzAEAAQAAABQIAADMzAEAAQAAABUIAAAGzQEAAQAAABUIAAArzQEAAQAAABYIAABhzQEAAQAAABYIAACGzQEAAQAAABcIAAC7zQEAAQAAABcIAADgzQEAAQAAABgIAAARzgEAAQAAABgIAAA2zgEAAQAAABkIAABwzgEAAQAAABkIAACVzgEAAQAAABoIAADJzgEAAQAAABoIAADuzgEAAQAAABsIAAAizwEAAQAAABsIAABHzwEAAQAAABwIAAB7zwEAAQAAABwIAACgzwEAAQAAAB0IAADUzwEAAQAAAB0IAAD5zwEAAQAAAB4IAAAt0AEAAQAAAB4IAABS0AEAAQAAAB8IAACG0AEAAQAAAB8IAACr0AEAAQAAACAIAADf0AEAAQAAACAIAAAE0QEAAQAAACEIAAA40QEAAQAAACEIAABd0QEAAQAAACIIAACR0QEAAQAAACIIAAC20QEAAQAAACMIAADq0QEAAQAAACMIAAAP0gEAAQAAACQIAABD0gEAAQAAACQIAABo0gEAAQAAACUIAACc0gEAAQAAACUIAADB0gEAAQAAACYIAAD10gEAAQAAACYIAAAa0wEAAQAAACcIAABQ0wEAAQAAACcIAAB10wEAAQAAACgIAACl0wEAAQAAACgIAADK0wEAAQAAACkIAADX0wEAAQAAACkIAAD80wEAAQAAACkIAAAB1AEAAQAAACoIAAAx1AEAAQAAACoIAABW1AEAAQAAACsIAACI1AEAAQAAACsIAACt1AEAAQAAACwIAADd1AEAAQAAACwIAAAC1QEAAQAAAC0IAAA11QEAAQAAAC0IAABa1QEAAQAAAC4IAACK1QEAAQAAAC4IAACv1QEAAQAAAC8IAADh1QEAAQAAAC8IAAAG1gEAAQAAADAIAAA31gEAAQAAADAIAABc1gEAAQAAADEIAACP1gEAAQAAADEIAAC01gEAAQAAADIIAADm1gEAAQAAADIIAAAL1wEAAQAAADMIAAA/1wEAAQAAADMIAABk1wEA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","m_EntryDataString":"iAkAAAAAAAAAAAAAAwAAAJfnPqL/////AAAAAAAAAAABAAAAAQAAAP////8AAAAAAAAAAAMAAAABAAAAAgAAAAAAAAADAAAAl+c+ov////8EAAAAAAAAAAMAAAAAAAAAAwAAAJfnPqL/////BgAAAAAAAAAEAAAAAAAAAAMAAACX5z6i/////wgAAAAAAAAABQAAAAAAAAADAAAAl+c+ov////8KAAAAAAAAAAYAAAAAAAAAAwAAAJfnPqL/////DAAAAAAAAAAHAAAAAAAAAAMAAACX5z6i/////w4AAAACAAAABwAAAAAAAAADAAAAl+c+ov////8RAAAAAAAAAAgAAAAAAAAAAwAAAJfnPqL/////EwAAAAAAAAAJAAAAAAAAAAMAAACX5z6i/////xUAAAAAAAAACgAAAAAAAAADAAAAl+c+ov////8XAAAAAAAAAAsAAAAAAAAAAwAAAJfnPqL/////GQAAAAAAAAAMAAAAAAAAAAMAAACX5z6i/////xsAAAAAAAAADQAAAAAAAAADAAAAl+c+ov////8dAAAAAAAAAA4AAAAAAAAAAwAAAJfnPqL/////HwAAAAAAAAAPAAAAAAAAAAMAAACX5z6i/////yEAAAAAAAAAEAAAAAAAAAADAAAAl+c+ov////8jAAAAAAAAABEAAAAAAAAAAwAAAJfnPqL/////JQAAAAAAAAASAAAAAAAAAAMAAACX5z6i/////ycAAAAAAAAAEwAAAAAAAAADAAAAl+c+ov////8pAAAAAAAAABQAAAAAAAAAAwAAAJfnPqL/////KwAAAAAAAAAVAAAAAAAAAAMAAACX5z6i/////y0AAAAAAAAAFgAAAAAAAAADAAAAl+c+ov////8vAAAAAAAAABcAAAAAAAAAAwAAAJfnPqL/////MQAAAAAAAAAYAAAAAAAAAAMAAACX5z6i/////zMAAAAAAAAAGQAAAAAAAAADAAAAl+c+ov////81AAAAAAAAABoAAAAAAAAAAwAAAJfnPqL/////NwAAAAAAAAAbAAAAAAAAAAMAAACX5z6i/////zkAAAAAAAAAHAAAAAAAAAADAAAAl+c+ov////87AAAAAAAAAB0AAAAAAAAAAwAAAJfnPqL/////PQAAAAAAAAAeAAAAAAAAAAMAAACX5z6i/////z8AAAAAAAAAHwAAAAAAAAADAAAAl+c+ov////9BAAAAAAAAACAAAAAAAAAAAwAAAJfnPqL/////QwAAAAAAAAAhAAAAAAAAAAMAAACX5z6i/////0UAAAAAAAAAIgAAAAAAAAADAAAAl+c+ov////9HAAAAAAAAACMAAAAAAAAAAwAAAJfnPqL/////SQAAAAAAAAAkAAAAAgAAAP////8AAAAA/////0sAAAADAAAAJQAAAAAAAAADAAAAl+c+ov////9NAAAAAAAAACYAAAAAAAAAAwAAAJfnPqL/////TwAAAAAAAAAnAAAAAAAAAAMAAACX5z6i/////1EAAAACAAAAJwAAAAAAAAADAAAAl+c+ov////9TAAAAAAAAACgAAAAAAAAAAwAAAJfnPqL/////VQAAAAIAAAAoAAAAAAAAAAMAAACX5z6i/////1cAAAAAAAAAKQAAAAAAAAADAAAAl+c+ov////9ZAAAAAAAAACoAAAAAAAAAAwAAAJfnPqL/////WwAAAAAAAAArAAAAAAAAAAMAAACX5z6i/////10AAAAAAAAALAAAAAAAAAADAAAAl+c+ov////9fAAAAAAAAAC0AAAAAAAAAAwAAAJfnPqL/////YQAAAAAAAAAuAAAAAAAAAAMAAACX5z6i/////2MAAAAAAAAALwAAAAAAAAADAAAAl+c+ov////9lAAAAAAAAADAAAAAAAAAAAwAAAJfnPqL/////ZwAAAAAAAAAxAAAAAAAAAAMAAACX5z6i/////2kAAAAAAAAAMgAAAAAAAAADAAAAl+c+ov////9rAAAAAAAAADMAAAAAAAAAAwAAAJfnPqL/////bQAAAAAAAAA0AAAAAAAAAAMAAACX5z6i/////28AAAAAAAAANQAAAAAAAAADAAAAl+c+ov////9xAAAAAAAAADYAAAAAAAAAAwAAAJfnPqL/////cwAAAAAAAAA3AAAAAAAAAAMAAACX5z6i/////3UAAAAAAAAAOAAAAAAAAAADAAAAl+c+ov////93AAAAAAAAADkAAAAAAAAAAwAAAJfnPqL/////eQAAAAAAAAA6AAAAAAAAAAMAAACX5z6i/////3sAAAAAAAAAOwAAAAAAAAADAAAAl+c+ov////99AAAAAAAAADwAAAAAAAAAAwAAAJfnPqL/////fwAAAAAAAAA9AAAAAAAAAAMAAACX5z6i/////4EAAAAAAAAAPgAAAAAAAAADAAAAl+c+ov////+DAAAAAAAAAD8AAAAAAAAAAwAAAJfnPqL/////hQAAAAAAAABAAAAAAAAAAAMAAACX5z6i/////4cAAAAAAAAAQQAAAAAAAAADAAAAl+c+ov////+JAAAAAAAAAEIAAAAAAAAAAwAAAJfnPqL/////iwAAAAAAAABDAAAAAAAAAAMAAACX5z6i/////40AAAAAAAAARAAAAAAAAAADAAAAl+c+ov////+PAAAAAAAAAEUAAAAAAAAAAwAAAJfnPqL/////kQAAAAAAAABGAAAAAAAAAAMAAACX5z6i/////5MAAAAAAAAARwAAAAAAAAADAAAAl+c+ov////+VAAAAAAAAAEgAAAAAAAAAAwAAAJfnPqL/////lwAAAAAAAABJAAAAAAAAAAMAAACX5z6i/////5kAAAAAAAAASgAAAAAAAAADAAAAl+c+ov////+bAAAAAAAAAEsAAAAAAAAAAwAAAJfnPqL/////nQAAAAAAAABMAAAAAAAAAAMAAACX5z6i/////58AAAAAAAAATQAAAAAAAAADAAAAl+c+ov////+hAAAAAAAAAE4AAAAAAAAAAwAAAJfnPqL/////owAAAAAAAABPAAAAAAAAAAMAAACX5z6i/////6UAAAAAAAAAUAAAAAAAAAADAAAAl+c+ov////+nAAAAAAAAAFEAAAAAAAAAAwAAAJfnPqL/////qQAAAAAAAABSAAAAAAAAAAMAAACX5z6i/////6sAAAAAAAAAUwAAAAAAAAADAAAAl+c+ov////+tAAAAAAAAAFQAAAAAAAAAAwAAAJfnPqL/////rwAAAAAAAABVAAAAAAAAAAMAAACX5z6i/////7EAAAAAAAAAVgAAAAAAAAADAAAAl+c+ov////+zAAAAAAAAAFcAAAAAAAAAAwAAAJfnPqL/////tQAAAAAAAABYAAAAAAAAAAMAAACX5z6i/////7cAAAAAAAAAWQAAAAAAAAADAAAAl+c+ov////+5AAAAAAAAAFoAAAAAAAAAAwAAAJfnPqL/////uwAAAAAAAABbAAAAAAAAAAMAAACX5z6i/////70AAAAAAAAAXAAAAAAAAAADAAAAl+c+ov////+/AAAAAAAAAF0AAAAAAAAAAwAAAJfnPqL/////wQAAAAAAAABeAAAAAAAAAAMAAACX5z6i/////8MAAAAAAAAAXwAAAAAAAAADAAAAl+c+ov/////FAAAAAAAAAGAAAAAAAAAAAwAAAJfnPqL/////xwAAAAAAAABhAAAAAAAAAAMAAACX5z6i/////8kAAAAAAAAAYgAAAAAAAAADAAAAl+c+ov/////LAAAAAAAAAGMAAAAAAAAAAwAAAJfnPqL/////zQAAAAAAAABkAAAAAAAAAAMAAACX5z6i/////88AAAAAAAAAZQAAAAAAAAADAAAAl+c+ov/////RAAAAAAAAAGYAAAAAAAAAAwAAAJfnPqL/////0wAAAAAAAABnAAAAAAAAAAMAAACX5z6i/////9UAAAAAAAAAaAAAAAAAAAADAAAAl+c+ov/////XAAAAAAAAAGkAAAAAAAAAAwAAAJfnPqL/////2QAAAAAAAABqAAAAAAAAAAMAAACX5z6i/////9sAAAAAAAAAawAAAAAAAAADAAAAl+c+ov/////dAAAAAAAAAGwAAAAAAAAAAwAAAJfnPqL/////3wAAAAAAAABtAAAAAAAAAAMAAACX5z6i/////+EAAAAAAAAAbgAAAAAAAAADAAAAl+c+ov/////jAAAAAAAAAG8AAAACAAAA/////wAAAAD/////5QAAAAQAAABvAAAAAgAAAP////8AAAAA/////+UAAAAFAAAAbwAAAAIAAAD/////AAAAAP/////lAAAABAAAAHAAAAACAAAA/////wAAAAD/////6AAAAAQAAABwAAAAAgAAAP////8AAAAA/////+gAAAAFAAAAcAAAAAIAAAD/////AAAAAP/////oAAAABAAAAHEAAAAAAAAAAwAAAJfnPqL/////6wAAAAAAAAByAAAAAAAAAAMAAACX5z6i/////+0AAAAAAAAAcwAAAAAAAAADAAAAl+c+ov/////vAAAAAAAAAHQAAAAAAAAAAwAAAJfnPqL/////8QAAAAAAAAB1AAAAAAAAAAMAAACX5z6i//////MAAAAAAAAAdgAAAAAAAAADAAAAl+c+ov/////1AAAAAAAAAHcAAAAAAAAAAwAAAJfnPqL/////9wAAAAAAAAB4AAAAAAAAAAMAAACX5z6i//////kAAAAAAAAAeQAAAAAAAAADAAAAl+c+ov/////7AAAAAAAAAHoAAAAAAAAAAwAAAJfnPqL//////QAAAAAAAAB7AAAAAAAAAAMAAACX5z6i//////8AAAAAAAAAfAAAAAAAAAADAAAAl+c+ov////8BAQAAAAAAAH0AAAAAAAAAAwAAAJfnPqL/////AwEAAAAAAAB+AAAAAAAAAAMAAACX5z6i/////wUBAAAAAAAAfwAAAAAAAAADAAAAl+c+ov////8HAQAAAAAAAIAAAAACAAAA/////wAAAAD/////CQEAAAQAAACAAAAAAgAAAP////8AAAAA/////wkBAAAFAAAAgAAAAAIAAAD/////AAAAAP////8JAQAABAAAAIEAAAAAAAAAAwAAAJfnPqL/////DAEAAAAAAACCAAAAAAAAAAMAAACX5z6i/////w4BAAAAAAAAgwAAAAAAAAADAAAAl+c+ov////8QAQAAAAAAAIQAAAAAAAAAAwAAAJfnPqL/////EgEAAAAAAACFAAAAAAAAAAMAAACX5z6i/////xQBAAAAAAAAhgAAAAAAAAADAAAAl+c+ov////8WAQAAAAAAAIcAAAAAAAAAAwAAAJfnPqL/////GAEAAAAAAACIAAAAAAAAAAMAAACX5z6i/////xoBAAAAAAAAiQAAAAAAAAADAAAAl+c+ov////8cAQAAAAAAAIoAAAAAAAAAAwAAAJfnPqL/////HgEAAAAAAACLAAAAAAAAAAMAAACX5z6i/////yABAAAAAAAAjAAAAAAAAAADAAAAl+c+ov////8iAQAAAAAAAI0AAAAAAAAAAwAAAJfnPqL/////JAEAAAAAAACOAAAAAAAAAAMAAACX5z6i/////yYBAAAAAAAAjwAAAAAAAAADAAAAl+c+ov////8oAQAAAAAAAJAAAAAAAAAAAwAAAJfnPqL/////KgEAAAAAAACRAAAAAAAAAAMAAACX5z6i/////ywBAAAAAAAAkgAAAAAAAAADAAAAl+c+ov////8uAQAAAAAAAJMAAAAAAAAAAwAAAJfnPqL/////MAEAAAAAAACUAAAAAAAAAAMAAACX5z6i/////zIBAAAAAAAAlQAAAAAAAAADAAAAl+c+ov////80AQAAAAAAAJYAAAAAAAAAAwAAAJfnPqL/////NgEAAAAAAACXAAAAAAAAAAMAAACX5z6i/////zgBAAAAAAAAmAAAAAMAAAD/////AAAAAP////86AQAABgAAAJkAAAAAAAAAAwAAAJfnPqL/////PQEAAAAAAACaAAAAAAAAAAMAAACX5z6i/////z8BAAAAAAAAmwAAAAAAAAADAAAAl+c+ov////9BAQAAAAAAAJwAAAAAAAAAAwAAAJfnPqL/////QwEAAAAAAACdAAAAAAAAAAMAAACX5z6i/////0UBAAAAAAAAngAAAAAAAAADAAAAl+c+ov////9HAQAAAAAAAJ8AAAAAAAAAAwAAAJfnPqL/////SQEAAAAAAACgAAAAAAAAAAMAAACX5z6i/////0sBAAAAAAAAoQAAAAAAAAADAAAAl+c+ov////9NAQAAAAAAAKIAAAAAAAAAAwAAAJfnPqL/////TwEAAAIAAACiAAAAAAAAAAMAAACX5z6i/////1EBAAAAAAAAowAAAAMAAAD/////AAAAAP////9TAQAABgAAAKQAAAAAAAAAAwAAAJfnPqL/////VgEAAAAAAAClAAAAAAAAAAMAAACX5z6i/////1gBAAAAAAAApgAAAAAAAAADAAAAl+c+ov////9aAQAAAAAAAKcAAAAAAAAAAwAAAJfnPqL/////XAEAAAAAAACoAAAAAAAAAAMAAACX5z6i/////14BAAAAAAAAqQAAAAIAAAD/////AAAAAP////9gAQAABQAAAKoAAAACAAAA/////wAAAAD/////YgEAAAcAAACrAAAAAgAAAP////8AAAAA/////2QBAAAFAAAArAAAAAIAAAD/////AAAAAP////9mAQAABwAAAK0AAAACAAAA/////wAAAAD/////aAEAAAcAAACuAAAAAgAAAP////8AAAAA/////2oBAAAFAAAArwAAAAIAAAD/////AAAAAP////9sAQAABwAAALAAAAACAAAA/////wAAAAD/////bgEAAAcAAACxAAAAAgAAAP////8AAAAA/////3ABAAAHAAAAsgAAAAIAAAD/////AAAAAP////9yAQAABwAAALMAAAACAAAA/////wAAAAD/////dAEAAAcAAAC0AAAAAgAAAP////8AAAAA/////3YBAAAHAAAAtQAAAAIAAAD/////AAAAAP////94AQAABwAAALYAAAACAAAA/////wAAAAD/////egEAAAcAAAC3AAAAAgAAAP////8AAAAA/////3wBAAAHAAAAuAAAAAIAAAD/////AAAAAP////9+AQAABwAAALkAAAACAAAA/////wAAAAD/////gAEAAAcAAAC6AAAAAgAAAP////8AAAAA/////4IBAAAHAAAAuwAAAAIAAAD/////AAAAAP////+EAQAABwAAALwAAAACAAAA/////wAAAAD/////hgEAAAcAAAC9AAAAAgAAAP////8AAAAA/////4gBAAAHAAAAvgAAAAIAAAD/////AAAAAP////+KAQAABwAAAL8AAAACAAAA/////wAAAAD/////jAEAAAcAAADAAAAAAgAAAP////8AAAAA/////44BAAAHAAAAwQAAAAIAAAD/////AAAAAP////+QAQAABwAAAMIAAAACAAAA/////wAAAAD/////kgEAAAcAAADDAAAAAgAAAP////8AAAAA/////5QBAAAHAAAAxAAAAAIAAAD/////AAAAAP////+WAQAABwAAAMUAAAACAAAA/////wAAAAD/////mAEAAAcAAADGAAAAAgAAAP////8AAAAA/////5oBAAAHAAAAxwAAAAIAAAD/////AAAAAP////+cAQAABwAAAMgAAAACAAAA/////wAAAAD/////ngEAAAUAAADJAAAAAgAAAP////8AAAAA/////6ABAAAFAAAAygAAAAIAAAD/////AAAAAP////+iAQAABwAAAMsAAAACAAAA/////wAAAAD/////pAEAAAcAAADMAAAAAgAAAP////8AAAAA/////6YBAAAHAAAAzQAAAAIAAAD/////AAAAAP////+oAQAABwAAAM4AAAACAAAA/////wAAAAD/////qgEAAAUAAADPAAAAAgAAAP////8AAAAA/////6wBAAAHAAAA0AAAAAIAAAD/////AAAAAP////+uAQAABQAAANEAAAACAAAA/////wAAAAD/////sAEAAAcAAADSAAAAAgAAAP////8AAAAA/////7IBAAAHAAAA0wAAAAIAAAD/////AAAAAP////+0AQAABwAAANQAAAACAAAA/////wAAAAD/////tgEAAAcAAADVAAAAAgAAAP////8AAAAA/////7gBAAAHAAAA1gAAAAIAAAD/////AAAAAP////+6AQAABwAAANcAAAACAAAA/////wAAAAD/////vAEAAAcAAADYAAAAAgAAAP////8AAAAA/////74BAAAHAAAA2QAAAAIAAAD/////AAAAAP/////AAQAABwAAANoAAAACAAAA/////wAAAAD/////wgEAAAUAAADbAAAAAgAAAP////8AAAAA/////8QBAAAHAAAA3AAAAAIAAAD/////AAAAAP/////GAQAABwAAAN0AAAACAAAA/////wAAAAD/////yAEAAAcAAADeAAAAAgAAAP////8AAAAA/////8oBAAAFAAAA3wAAAAIAAAD/////AAAAAP/////MAQAABwAAAOAAAAACAAAA/////wAAAAD/////zgEAAAUAAADhAAAAAgAAAP////8AAAAA/////9ABAAAHAAAA4gAAAAIAAAD/////AAAAAP/////SAQAABQAAAOMAAAACAAAA/////wAAAAD/////1AEAAAUAAADkAAAAAgAAAP////8AAAAA/////9YBAAAFAAAA5QAAAAIAAAD/////AAAAAP/////YAQAABwAAAOYAAAACAAAA/////wAAAAD/////2gEAAAUAAADnAAAAAgAAAP////8AAAAA/////9wBAAAHAAAA6AAAAAIAAAD/////AAAAAP/////eAQAABwAAAOkAAAACAAAA/////wAAAAD/////4AEAAAcAAADqAAAAAgAAAP////8AAAAA/////+IBAAAFAAAA6wAAAAIAAAD/////AAAAAP/////kAQAABwAAAOwAAAAAAAAAAwAAAJfnPqL/////5gEAAAAAAADtAAAAAAAAAAMAAACX5z6i/////+gBAAAAAAAA7gAAAAAAAAADAAAAl+c+ov/////qAQAAAAAAAO8AAAAAAAAAAwAAAJfnPqL/////7AEAAAAAAADwAAAAAAAAAAMAAACX5z6i/////+4BAAAAAAAA8QAAAAAAAAADAAAAl+c+ov/////wAQAAAAAAAPIAAAAAAAAAAwAAAJfnPqL/////8gEAAAAAAADzAAAAAAAAAAMAAACX5z6i//////QBAAAAAAAA9AAAAAAAAAADAAAAl+c+ov/////2AQAAAAAAAPUAAAAAAAAAAwAAAJfnPqL/////+AEAAAAAAAD2AAAAAAAAAAMAAACX5z6i//////oBAAAAAAAA9wAAAAAAAAADAAAAl+c+ov/////8AQAAAAAAAPgAAAAAAAAAAwAAAJfnPqL//////gEAAAAAAAD5AAAAAAAAAAMAAACX5z6i/////wACAAAAAAAA+gAAAAAAAAADAAAAl+c+ov////8CAgAAAAAAAPsAAAAAAAAAAwAAAJfnPqL/////BAIAAAAAAAD8AAAAAAAAAAMAAACX5z6i/////wYCAAAAAAAA/QAAAAAAAAADAAAAl+c+ov////8IAgAAAAAAAP4AAAAAAAAAAwAAAJfnPqL/////CgIAAAAAAAD/AAAAAAAAAAMAAACX5z6i/////wwCAAAAAAAAAAEAAAAAAAADAAAAl+c+ov////8OAgAAAAAAAAEBAAAAAAAAAwAAAJfnPqL/////EAIAAAAAAAACAQAAAAAAAAMAAACX5z6i/////xICAAAAAAAAAwEAAAAAAAADAAAAl+c+ov////8UAgAAAAAAAAQBAAAAAAAAAwAAAJfnPqL/////FgIAAAAAAAAFAQAAAAAAAAMAAACX5z6i/////xgCAAAAAAAABgEAAAAAAAADAAAAl+c+ov////8aAgAAAAAAAAcBAAAAAAAAAwAAAJfnPqL/////HAIAAAAAAAAIAQAAAAAAAAMAAACX5z6i/////x4CAAAAAAAACQEAAAAAAAADAAAAl+c+ov////8gAgAAAAAAAAoBAAAAAAAAAwAAAJfnPqL/////IgIAAAAAAAALAQAAAAAAAAMAAACX5z6i/////yQCAAAAAAAADAEAAAAAAAADAAAAl+c+ov////8mAgAAAAAAAA0BAAAAAAAAAwAAAJfnPqL/////KAIAAAAAAAAOAQAAAAAAAAMAAACX5z6i/////yoCAAAAAAAADwEAAAAAAAADAAAAl+c+ov////8sAgAAAAAAABABAAAAAAAAAwAAAJfnPqL/////LgIAAAAAAAARAQAAAAAAAAMAAACX5z6i/////zACAAAAAAAAEgEAAAAAAAADAAAAl+c+ov////8yAgAAAgAAABIBAAAAAAAAAwAAAJfnPqL/////NAIAAAAAAAATAQAAAAAAAAMAAACX5z6i/////zYCAAAAAAAAFAEAAAAAAAADAAAAl+c+ov////84AgAAAAAAABUBAAAAAAAAAwAAAJfnPqL/////OgIAAAAAAAAWAQAAAAAAAAMAAACX5z6i/////zwCAAAAAAAAFwEAAAAAAAADAAAAl+c+ov////8+AgAAAAAAABgBAAAAAAAAAwAAAJfnPqL/////QAIAAAAAAAAZAQAAAAAAAAMAAACX5z6i/////0ICAAAAAAAAGgEAAAIAAAD/////AAAAAP////9EAgAABQAAABoBAAACAAAA/////wAAAAD/////RAIAAAQAAAAbAQAAAgAAAP////8AAAAA/////0YCAAAFAAAAGwEAAAIAAAD/////AAAAAP////9GAgAABAAAABwBAAACAAAA/////wAAAAD/////SAIAAAUAAAAcAQAAAgAAAP////8AAAAA/////0gCAAAEAAAAHQEAAAIAAAD/////AAAAAP////9KAgAABQAAAB0BAAACAAAA/////wAAAAD/////SgIAAAQAAAAeAQAAAgAAAP////8AAAAA/////0wCAAAFAAAAHgEAAAIAAAD/////AAAAAP////9MAgAABAAAAB8BAAACAAAA/////wAAAAD/////TgIAAAUAAAAfAQAAAgAAAP////8AAAAA/////04CAAAEAAAAIAEAAAIAAAD/////AAAAAP////9QAgAABQAAACABAAACAAAA/////wAAAAD/////UAIAAAQAAAAhAQAAAgAAAP////8AAAAA/////1ICAAAFAAAAIQEAAAIAAAD/////AAAAAP////9SAgAABAAAACIBAAACAAAA/////wAAAAD/////VAIAAAUAAAAiAQAAAgAAAP////8AAAAA/////1QCAAAEAAAAIwEAAAIAAAD/////AAAAAP////9WAgAABQAAACMBAAACAAAA/////wAAAAD/////VgIAAAQAAAAkAQAAAgAAAP////8AAAAA/////1gCAAAFAAAAJAEAAAIAAAD/////AAAAAP////9YAgAABAAAACUBAAACAAAA/////wAAAAD/////WgIAAAUAAAAlAQAAAgAAAP////8AAAAA/////1oCAAAEAAAAJgEAAAIAAAD/////AAAAAP////9cAgAABQAAACYBAAACAAAA/////wAAAAD/////XAIAAAQAAAAnAQAAAgAAAP////8AAAAA/////14CAAAFAAAAJwEAAAIAAAD/////AAAAAP////9eAgAABAAAACgBAAACAAAA/////wAAAAD/////YAIAAAUAAAAoAQAAAgAAAP////8AAAAA/////2ACAAAEAAAAKQEAAAIAAAD/////AAAAAP////9iAgAABQAAACkBAAACAAAA/////wAAAAD/////YgIAAAQAAAAqAQAAAgAAAP////8AAAAA/////2QCAAAFAAAAKgEAAAIAAAD/////AAAAAP////9kAgAABAAAACsBAAACAAAA/////wAAAAD/////ZgIAAAUAAAArAQAAAgAAAP////8AAAAA/////2YCAAAEAAAALAEAAAIAAAD/////AAAAAP////9oAgAABQAAACwBAAACAAAA/////wAAAAD/////aAIAAAQAAAAtAQAAAgAAAP////8AAAAA/////2oCAAAFAAAALQEAAAIAAAD/////AAAAAP////9qAgAABAAAAC4BAAACAAAA/////wAAAAD/////bAIAAAUAAAAuAQAAAgAAAP////8AAAAA/////2wCAAAEAAAALwEAAAIAAAD/////AAAAAP////9uAgAABQAAAC8BAAACAAAA/////wAAAAD/////bgIAAAQAAAAwAQAAAgAAAP////8AAAAA/////3ACAAAFAAAAMAEAAAIAAAD/////AAAAAP////9wAgAABAAAADEBAAACAAAA/////wAAAAD/////cgIAAAUAAAAxAQAAAgAAAP////8AAAAA/////3ICAAAEAAAAMgEAAAIAAAD/////AAAAAP////90AgAABQAAADIBAAACAAAA/////wAAAAD/////dAIAAAQAAAAzAQAAAgAAAP////8AAAAA/////3YCAAAFAAAAMwEAAAIAAAD/////AAAAAP////92AgAABAAAADQBAAACAAAA/////wAAAAD/////eAIAAAUAAAA0AQAAAgAAAP////8AAAAA/////3gCAAAEAAAANQEAAAIAAAD/////AAAAAP////96AgAABQAAADUBAAACAAAA/////wAAAAD/////egIAAAQAAAA2AQAAAgAAAP////8AAAAA/////3wCAAAFAAAANgEAAAIAAAD/////AAAAAP////98AgAABAAAADcBAAACAAAA/////wAAAAD/////fgIAAAUAAAA3AQAAAgAAAP////8AAAAA/////34CAAAEAAAAOAEAAAIAAAD/////AAAAAP////+AAgAABQAAADgBAAACAAAA/////wAAAAD/////gAIAAAQAAAA5AQAAAgAAAP////8AAAAA/////4ICAAAFAAAAOQEAAAIAAAD/////AAAAAP////+CAgAABAAAADoBAAACAAAA/////wAAAAD/////hAIAAAUAAAA6AQAAAgAAAP////8AAAAA/////4QCAAAEAAAAOwEAAAIAAAD/////AAAAAP////+GAgAABQAAADsBAAACAAAA/////wAAAAD/////hgIAAAQAAAA8AQAAAgAAAP////8AAAAA/////4gCAAAFAAAAPAEAAAIAAAD/////AAAAAP////+IAgAABAAAAD0BAAACAAAA/////wAAAAD/////igIAAAUAAAA9AQAAAgAAAP////8AAAAA/////4oCAAAEAAAAPgEAAAIAAAD/////AAAAAP////+MAgAABQAAAD4BAAACAAAA/////wAAAAD/////jAIAAAQAAAA/AQAAAgAAAP////8AAAAA/////44CAAAFAAAAPwEAAAIAAAD/////AAAAAP////+OAgAABAAAAEABAAACAAAA/////wAAAAD/////kAIAAAUAAABAAQAAAgAAAP////8AAAAA/////5ACAAAEAAAAQQEAAAIAAAD/////AAAAAP////+SAgAABQAAAEEBAAACAAAA/////wAAAAD/////kgIAAAQAAABCAQAAAgAAAP////8AAAAA/////5QCAAAFAAAAQgEAAAIAAAD/////AAAAAP////+UAgAABAAAAEMBAAACAAAA/////wAAAAD/////lgIAAAUAAABDAQAAAgAAAP////8AAAAA/////5YCAAAEAAAARAEAAAIAAAD/////AAAAAP////+YAgAABQAAAEQBAAACAAAA/////wAAAAD/////mAIAAAQAAABFAQAAAgAAAP////8AAAAA/////5oCAAAFAAAARQEAAAIAAAD/////AAAAAP////+aAgAABAAAAEYBAAACAAAA/////wAAAAD/////nAIAAAUAAABGAQAAAgAAAP////8AAAAA/////5wCAAAEAAAARwEAAAIAAAD/////AAAAAP////+eAgAABQAAAEcBAAACAAAA/////wAAAAD/////ngIAAAQAAABIAQAAAgAAAP////8AAAAA/////6ACAAAFAAAASAEAAAIAAAD/////AAAAAP////+gAgAABAAAAEkBAAACAAAA/////wAAAAD/////ogIAAAUAAABJAQAAAgAAAP////8AAAAA/////6ICAAAEAAAASgEAAAIAAAD/////AAAAAP////+kAgAABQAAAEoBAAACAAAA/////wAAAAD/////pAIAAAQAAABLAQAAAgAAAP////8AAAAA/////6YCAAAFAAAASwEAAAIAAAD/////AAAAAP////+mAgAABAAAAEwBAAACAAAA/////wAAAAD/////qAIAAAUAAABMAQAAAgAAAP////8AAAAA/////6gCAAAEAAAATQEAAAIAAAD/////AAAAAP////+qAgAABQAAAE0BAAACAAAA/////wAAAAD/////qgIAAAQAAABOAQAAAgAAAP////8AAAAA/////6wCAAAFAAAATgEAAAIAAAD/////AAAAAP////+sAgAABAAAAE8BAAACAAAA/////wAAAAD/////rgIAAAUAAABPAQAAAgAAAP////8AAAAA/////64CAAAEAAAAUAEAAAIAAAD/////AAAAAP////+wAgAABQAAAFABAAACAAAA/////wAAAAD/////sAIAAAQAAABRAQAAAgAAAP////8AAAAA/////7ICAAAFAAAAUQEAAAIAAAD/////AAAAAP////+yAgAABAAAAFIBAAACAAAA/////wAAAAD/////tAIAAAUAAABSAQAAAgAAAP////8AAAAA/////7QCAAAEAAAAUwEAAAIAAAD/////AAAAAP////+2AgAABQAAAFMBAAACAAAA/////wAAAAD/////tgIAAAQAAABUAQAAAgAAAP////8AAAAA/////7gCAAAFAAAAVAEAAAIAAAD/////AAAAAP////+4AgAABAAAAFUBAAACAAAA/////wAAAAD/////ugIAAAUAAABVAQAAAgAAAP////8AAAAA/////7oCAAAEAAAAVgEAAAIAAAD/////AAAAAP////+8AgAABQAAAFYBAAACAAAA/////wAAAAD/////vAIAAAQAAABXAQAAAgAAAP////8AAAAA/////74CAAAFAAAAVwEAAAIAAAD/////AAAAAP////++AgAABAAAAFgBAAACAAAA/////wAAAAD/////wAIAAAUAAABYAQAAAgAAAP////8AAAAA/////8ACAAAEAAAAWQEAAAIAAAD/////AAAAAP/////CAgAABQAAAFkBAAACAAAA/////wAAAAD/////wgIAAAQAAABaAQAAAgAAAP////8AAAAA/////8QCAAAFAAAAWgEAAAIAAAD/////AAAAAP/////EAgAABAAAAFsBAAACAAAA/////wAAAAD/////xgIAAAUAAABbAQAAAgAAAP////8AAAAA/////8YCAAAEAAAAXAEAAAIAAAD/////AAAAAP/////IAgAABQAAAFwBAAACAAAA/////wAAAAD/////yAIAAAQAAABdAQAAAgAAAP////8AAAAA/////8oCAAAFAAAAXQEAAAIAAAD/////AAAAAP/////KAgAABAAAAF4BAAACAAAA/////wAAAAD/////zAIAAAUAAABeAQAAAgAAAP////8AAAAA/////8wCAAAEAAAAXwEAAAIAAAD/////AAAAAP/////OAgAABQAAAF8BAAACAAAA/////wAAAAD/////zgIAAAQAAABgAQAAAgAAAP////8AAAAA/////9ACAAAFAAAAYAEAAAIAAAD/////AAAAAP/////QAgAABAAAAGEBAAACAAAA/////wAAAAD/////0gIAAAUAAABhAQAAAgAAAP////8AAAAA/////9ICAAAEAAAAYgEAAAIAAAD/////AAAAAP/////UAgAABQAAAGIBAAACAAAA/////wAAAAD/////1AIAAAQAAABjAQAAAgAAAP////8AAAAA/////9YCAAAFAAAAYwEAAAIAAAD/////AAAAAP/////WAgAABAAAAGQBAAACAAAA/////wAAAAD/////2AIAAAUAAABkAQAAAgAAAP////8AAAAA/////9gCAAAEAAAAZQEAAAIAAAD/////AAAAAP/////aAgAABQAAAGUBAAACAAAA/////wAAAAD/////2gIAAAQAAABmAQAAAgAAAP////8AAAAA/////9wCAAAFAAAAZgEAAAIAAAD/////AAAAAP/////cAgAABAAAAGcBAAACAAAA/////wAAAAD/////3gIAAAUAAABnAQAAAgAAAP////8AAAAA/////94CAAAEAAAAaAEAAAIAAAD/////AAAAAP/////gAgAABQAAAGgBAAACAAAA/////wAAAAD/////4AIAAAQAAABpAQAAAgAAAP////8AAAAA/////+ICAAAFAAAAaQEAAAIAAAD/////AAAAAP/////iAgAABAAAAGoBAAACAAAA/////wAAAAD/////5AIAAAUAAABqAQAAAgAAAP////8AAAAA/////+QCAAAEAAAAawEAAAIAAAD/////AAAAAP/////mAgAABQAAAGsBAAACAAAA/////wAAAAD/////5gIAAAQAAABsAQAAAgAAAP////8AAAAA/////+gCAAAFAAAAbAEAAAIAAAD/////AAAAAP/////oAgAABAAAAG0BAAACAAAA/////wAAAAD/////6gIAAAUAAABtAQAAAgAAAP////8AAAAA/////+oCAAAEAAAAbgEAAAIAAAD/////AAAAAP/////sAgAABQAAAG4BAAACAAAA/////wAAAAD/////7AIAAAQAAABvAQAAAgAAAP////8AAAAA/////+4CAAAFAAAAbwEAAAIAAAD/////AAAAAP/////uAgAABAAAAHABAAACAAAA/////wAAAAD/////8AIAAAUAAABwAQAAAgAAAP////8AAAAA//////ACAAAEAAAAcQEAAAIAAAD/////AAAAAP/////yAgAABQAAAHEBAAACAAAA/////wAAAAD/////8gIAAAQAAAByAQAAAgAAAP////8AAAAA//////QCAAAFAAAAcgEAAAIAAAD/////AAAAAP/////0AgAABAAAAHMBAAACAAAA/////wAAAAD/////9gIAAAUAAABzAQAAAgAAAP////8AAAAA//////YCAAAEAAAAdAEAAAIAAAD/////AAAAAP/////4AgAABQAAAHQBAAACAAAA/////wAAAAD/////+AIAAAQAAAB1AQAAAgAAAP////8AAAAA//////oCAAAFAAAAdQEAAAIAAAD/////AAAAAP/////6AgAABAAAAHYBAAACAAAA/////wAAAAD//////AIAAAUAAAB2AQAAAgAAAP////8AAAAA//////wCAAAEAAAAdwEAAAIAAAD/////AAAAAP/////+AgAABQAAAHcBAAACAAAA/////wAAAAD//////gIAAAQAAAB4AQAAAgAAAP////8AAAAA/////wADAAAFAAAAeAEAAAIAAAD/////AAAAAP////8AAwAABAAAAHkBAAACAAAA/////wAAAAD/////AgMAAAUAAAB5AQAAAgAAAP////8AAAAA/////wIDAAAEAAAAegEAAAIAAAD/////AAAAAP////8EAwAABQAAAHoBAAACAAAA/////wAAAAD/////BAMAAAQAAAB7AQAAAgAAAP////8AAAAA/////wYDAAAFAAAAewEAAAIAAAD/////AAAAAP////8GAwAABAAAAHwBAAACAAAA/////wAAAAD/////CAMAAAUAAAB8AQAAAgAAAP////8AAAAA/////wgDAAAEAAAAfQEAAAIAAAD/////AAAAAP////8KAwAABQAAAH0BAAACAAAA/////wAAAAD/////CgMAAAQAAAB+AQAAAgAAAP////8AAAAA/////wwDAAAFAAAAfgEAAAIAAAD/////AAAAAP////8MAwAABAAAAH8BAAACAAAA/////wAAAAD/////DgMAAAUAAAB/AQAAAgAAAP////8AAAAA/////w4DAAAEAAAAgAEAAAIAAAD/////AAAAAP////8QAwAABQAAAIABAAACAAAA/////wAAAAD/////EAMAAAQAAACBAQAAAgAAAP////8AAAAA/////xIDAAAFAAAAgQEAAAIAAAD/////AAAAAP////8SAwAABAAAAIIBAAACAAAA/////wAAAAD/////FAMAAAUAAACCAQAAAgAAAP////8AAAAA/////xQDAAAEAAAAgwEAAAIAAAD/////AAAAAP////8WAwAABQAAAIMBAAACAAAA/////wAAAAD/////FgMAAAQAAACEAQAAAgAAAP////8AAAAA/////xgDAAAFAAAAhAEAAAIAAAD/////AAAAAP////8YAwAABAAAAIUBAAACAAAA/////wAAAAD/////GgMAAAUAAACFAQAAAgAAAP////8AAAAA/////xoDAAAEAAAAhgEAAAIAAAD/////AAAAAP////8cAwAABQAAAIYBAAACAAAA/////wAAAAD/////HAMAAAQAAACHAQAAAgAAAP////8AAAAA/////x4DAAAFAAAAhwEAAAIAAAD/////AAAAAP////8eAwAABAAAAIgBAAACAAAA/////wAAAAD/////IAMAAAUAAACIAQAAAgAAAP////8AAAAA/////yADAAAEAAAAiQEAAAIAAAD/////AAAAAP////8iAwAABQAAAIkBAAACAAAA/////wAAAAD/////IgMAAAQAAACKAQAAAgAAAP////8AAAAA/////yQDAAAFAAAAigEAAAIAAAD/////AAAAAP////8kAwAABAAAAIsBAAACAAAA/////wAAAAD/////JgMAAAUAAACLAQAAAgAAAP////8AAAAA/////yYDAAAEAAAAjAEAAAIAAAD/////AAAAAP////8oAwAABQAAAIwBAAACAAAA/////wAAAAD/////KAMAAAQAAACNAQAAAgAAAP////8AAAAA/////yoDAAAFAAAAjQEAAAIAAAD/////AAAAAP////8qAwAABAAAAI4BAAACAAAA/////wAAAAD/////LAMAAAUAAACOAQAAAgAAAP////8AAAAA/////ywDAAAEAAAAjwEAAAIAAAD/////AAAAAP////8uAwAABQAAAI8BAAACAAAA/////wAAAAD/////LgMAAAQAAACQAQAAAgAAAP////8AAAAA/////zADAAAFAAAAkAEAAAIAAAD/////AAAAAP////8wAwAABAAAAJEBAAACAAAA/////wAAAAD/////MgMAAAUAAACRAQAAAgAAAP////8AAAAA/////zIDAAAEAAAAkgEAAAIAAAD/////AAAAAP////80AwAABQAAAJIBAAACAAAA/////wAAAAD/////NAMAAAQAAACTAQAAAgAAAP////8AAAAA/////zYDAAAFAAAAkwEAAAIAAAD/////AAAAAP////82AwAABAAAAJQBAAACAAAA/////wAAAAD/////OAMAAAUAAACUAQAAAgAAAP////8AAAAA/////zgDAAAEAAAAlQEAAAIAAAD/////AAAAAP////86AwAABQAAAJUBAAACAAAA/////wAAAAD/////OgMAAAQAAACWAQAAAgAAAP////8AAAAA/////zwDAAAFAAAAlgEAAAIAAAD/////AAAAAP////88AwAABAAAAJcBAAACAAAA/////wAAAAD/////PgMAAAUAAACXAQAAAgAAAP////8AAAAA/////z4DAAAEAAAAmAEAAAIAAAD/////AAAAAP////9AAwAABQAAAJgBAAACAAAA/////wAAAAD/////QAMAAAQAAACZAQAAAgAAAP////8AAAAA/////0IDAAAFAAAAmQEAAAIAAAD/////AAAAAP////9CAwAABAAAAJoBAAACAAAA/////wAAAAD/////RAMAAAUAAACaAQAAAgAAAP////8AAAAA/////0QDAAAEAAAAmwEAAAIAAAD/////AAAAAP////9GAwAABQAAAJsBAAACAAAA/////wAAAAD/////RgMAAAQAAACcAQAAAgAAAP////8AAAAA/////0gDAAAFAAAAnAEAAAIAAAD/////AAAAAP////9IAwAABAAAAJ0BAAACAAAA/////wAAAAD/////SgMAAAUAAACdAQAAAgAAAP////8AAAAA/////0oDAAAEAAAAngEAAAIAAAD/////AAAAAP////9MAwAABQAAAJ4BAAACAAAA/////wAAAAD/////TAMAAAQAAACfAQAAAgAAAP////8AAAAA/////04DAAAFAAAAnwEAAAIAAAD/////AAAAAP////9OAwAABAAAAKABAAACAAAA/////wAAAAD/////UAMAAAUAAACgAQAAAgAAAP////8AAAAA/////1ADAAAEAAAAoQEAAAIAAAD/////AAAAAP////9SAwAABQAAAKEBAAACAAAA/////wAAAAD/////UgMAAAQAAACiAQAAAgAAAP////8AAAAA/////1QDAAAFAAAAogEAAAIAAAD/////AAAAAP////9UAwAABAAAAKMBAAACAAAA/////wAAAAD/////VgMAAAUAAACjAQAAAgAAAP////8AAAAA/////1YDAAAEAAAApAEAAAIAAAD/////AAAAAP////9YAwAABQAAAKQBAAACAAAA/////wAAAAD/////WAMAAAQAAAClAQAAAgAAAP////8AAAAA/////1oDAAAFAAAApQEAAAIAAAD/////AAAAAP////9aAwAABAAAAKYBAAACAAAA/////wAAAAD/////XAMAAAUAAACmAQAAAgAAAP////8AAAAA/////1wDAAAEAAAApwEAAAIAAAD/////AAAAAP////9eAwAABQAAAKcBAAACAAAA/////wAAAAD/////XgMAAAQAAACoAQAAAgAAAP////8AAAAA/////2ADAAAFAAAAqAEAAAIAAAD/////AAAAAP////9gAwAABAAAAKkBAAACAAAA/////wAAAAD/////YgMAAAUAAACpAQAAAgAAAP////8AAAAA/////2IDAAAEAAAAqgEAAAIAAAD/////AAAAAP////9kAwAABQAAAKoBAAACAAAA/////wAAAAD/////ZAMAAAQAAACrAQAAAgAAAP////8AAAAA/////2YDAAAFAAAAqwEAAAIAAAD/////AAAAAP////9mAwAABAAAAKwBAAACAAAA/////wAAAAD/////aAMAAAUAAACsAQAAAgAAAP////8AAAAA/////2gDAAAEAAAArQEAAAIAAAD/////AAAAAP////9qAwAABQAAAK0BAAACAAAA/////wAAAAD/////agMAAAQAAACuAQAAAgAAAP////8AAAAA/////2wDAAAFAAAArgEAAAIAAAD/////AAAAAP////9sAwAABAAAAK8BAAACAAAA/////wAAAAD/////bgMAAAUAAACvAQAAAgAAAP////8AAAAA/////24DAAAEAAAAsAEAAAIAAAD/////AAAAAP////9wAwAABQAAALABAAACAAAA/////wAAAAD/////cAMAAAQAAACxAQAAAgAAAP////8AAAAA/////3IDAAAFAAAAsQEAAAIAAAD/////AAAAAP////9yAwAABAAAALIBAAACAAAA/////wAAAAD/////dAMAAAUAAACyAQAAAgAAAP////8AAAAA/////3QDAAAEAAAAswEAAAIAAAD/////AAAAAP////92AwAABQAAALMBAAACAAAA/////wAAAAD/////dgMAAAQAAAC0AQAAAgAAAP////8AAAAA/////3gDAAAFAAAAtAEAAAIAAAD/////AAAAAP////94AwAABAAAALUBAAACAAAA/////wAAAAD/////egMAAAUAAAC1AQAAAgAAAP////8AAAAA/////3oDAAAEAAAAtgEAAAIAAAD/////AAAAAP////98AwAABQAAALYBAAACAAAA/////wAAAAD/////fAMAAAQAAAC3AQAAAgAAAP////8AAAAA/////34DAAAFAAAAtwEAAAIAAAD/////AAAAAP////9+AwAABAAAALgBAAACAAAA/////wAAAAD/////gAMAAAUAAAC4AQAAAgAAAP////8AAAAA/////4ADAAAEAAAAuQEAAAIAAAD/////AAAAAP////+CAwAABQAAALkBAAACAAAA/////wAAAAD/////ggMAAAQAAAC6AQAAAgAAAP////8AAAAA/////4QDAAAFAAAAugEAAAIAAAD/////AAAAAP////+EAwAABAAAALsBAAACAAAA/////wAAAAD/////hgMAAAUAAAC7AQAAAgAAAP////8AAAAA/////4YDAAAEAAAAvAEAAAIAAAD/////AAAAAP////+IAwAABQAAALwBAAACAAAA/////wAAAAD/////iAMAAAQAAAC9AQAAAgAAAP////8AAAAA/////4oDAAAFAAAAvQEAAAIAAAD/////AAAAAP////+KAwAABAAAAL4BAAACAAAA/////wAAAAD/////jAMAAAUAAAC+AQAAAgAAAP////8AAAAA/////4wDAAAEAAAAvwEAAAIAAAD/////AAAAAP////+OAwAABQAAAL8BAAACAAAA/////wAAAAD/////jgMAAAQAAADAAQAAAgAAAP////8AAAAA/////5ADAAAFAAAAwAEAAAIAAAD/////AAAAAP////+QAwAABAAAAMEBAAACAAAA/////wAAAAD/////kgMAAAUAAADBAQAAAgAAAP////8AAAAA/////5IDAAAEAAAAwgEAAAIAAAD/////AAAAAP////+UAwAABQAAAMIBAAACAAAA/////wAAAAD/////lAMAAAQAAADDAQAAAgAAAP////8AAAAA/////5YDAAAFAAAAwwEAAAIAAAD/////AAAAAP////+WAwAABAAAAMQBAAACAAAA/////wAAAAD/////mAMAAAUAAADEAQAAAgAAAP////8AAAAA/////5gDAAAEAAAAxQEAAAIAAAD/////AAAAAP////+aAwAABQAAAMUBAAACAAAA/////wAAAAD/////mgMAAAQAAADGAQAAAgAAAP////8AAAAA/////5wDAAAFAAAAxgEAAAIAAAD/////AAAAAP////+cAwAABAAAAMcBAAACAAAA/////wAAAAD/////ngMAAAUAAADHAQAAAgAAAP////8AAAAA/////54DAAAEAAAAyAEAAAIAAAD/////AAAAAP////+gAwAABQAAAMgBAAACAAAA/////wAAAAD/////oAMAAAQAAADJAQAAAgAAAP////8AAAAA/////6IDAAAFAAAAyQEAAAIAAAD/////AAAAAP////+iAwAABAAAAMoBAAACAAAA/////wAAAAD/////pAMAAAUAAADKAQAAAgAAAP////8AAAAA/////6QDAAAEAAAAywEAAAIAAAD/////AAAAAP////+mAwAABQAAAMsBAAACAAAA/////wAAAAD/////pgMAAAQAAADMAQAAAgAAAP////8AAAAA/////6gDAAAFAAAAzAEAAAIAAAD/////AAAAAP////+oAwAABAAAAM0BAAACAAAA/////wAAAAD/////qgMAAAUAAADNAQAAAgAAAP////8AAAAA/////6oDAAAEAAAAzgEAAAIAAAD/////AAAAAP////+sAwAABQAAAM4BAAACAAAA/////wAAAAD/////rAMAAAQAAADPAQAAAgAAAP////8AAAAA/////64DAAAFAAAAzwEAAAIAAAD/////AAAAAP////+uAwAABAAAANABAAACAAAA/////wAAAAD/////sAMAAAUAAADQAQAAAgAAAP////8AAAAA/////7ADAAAEAAAA0QEAAAIAAAD/////AAAAAP////+yAwAABQAAANEBAAACAAAA/////wAAAAD/////sgMAAAQAAADSAQAAAgAAAP////8AAAAA/////7QDAAAFAAAA0gEAAAIAAAD/////AAAAAP////+0AwAABAAAANMBAAACAAAA/////wAAAAD/////tgMAAAUAAADTAQAAAgAAAP////8AAAAA/////7YDAAAEAAAA1AEAAAIAAAD/////AAAAAP////+4AwAABQAAANQBAAACAAAA/////wAAAAD/////uAMAAAQAAADVAQAAAgAAAP////8AAAAA/////7oDAAAFAAAA1QEAAAIAAAD/////AAAAAP////+6AwAABAAAANYBAAACAAAA/////wAAAAD/////vAMAAAUAAADWAQAAAgAAAP////8AAAAA/////7wDAAAEAAAA1wEAAAIAAAD/////AAAAAP////++AwAABQAAANcBAAACAAAA/////wAAAAD/////vgMAAAQAAADYAQAAAgAAAP////8AAAAA/////8ADAAAFAAAA2AEAAAIAAAD/////AAAAAP/////AAwAABAAAANkBAAACAAAA/////wAAAAD/////wgMAAAUAAADZAQAAAgAAAP////8AAAAA/////8IDAAAEAAAA2gEAAAIAAAD/////AAAAAP/////EAwAABQAAANoBAAACAAAA/////wAAAAD/////xAMAAAQAAADbAQAAAgAAAP////8AAAAA/////8YDAAAFAAAA2wEAAAIAAAD/////AAAAAP/////GAwAABAAAANwBAAACAAAA/////wAAAAD/////yAMAAAUAAADcAQAAAgAAAP////8AAAAA/////8gDAAAEAAAA3QEAAAIAAAD/////AAAAAP/////KAwAABQAAAN0BAAACAAAA/////wAAAAD/////ygMAAAQAAADeAQAAAgAAAP////8AAAAA/////8wDAAAFAAAA3gEAAAIAAAD/////AAAAAP/////MAwAABAAAAN8BAAACAAAA/////wAAAAD/////zgMAAAUAAADfAQAAAgAAAP////8AAAAA/////84DAAAEAAAA4AEAAAIAAAD/////AAAAAP/////QAwAABQAAAOABAAACAAAA/////wAAAAD/////0AMAAAQAAADhAQAAAgAAAP////8AAAAA/////9IDAAAFAAAA4QEAAAIAAAD/////AAAAAP/////SAwAABAAAAOIBAAACAAAA/////wAAAAD/////1AMAAAUAAADiAQAAAgAAAP////8AAAAA/////9QDAAAEAAAA4wEAAAIAAAD/////AAAAAP/////WAwAABQAAAOMBAAACAAAA/////wAAAAD/////1gMAAAQAAADkAQAAAgAAAP////8AAAAA/////9gDAAAFAAAA5AEAAAIAAAD/////AAAAAP/////YAwAABAAAAOUBAAACAAAA/////wAAAAD/////2gMAAAUAAADlAQAAAgAAAP////8AAAAA/////9oDAAAEAAAA5gEAAAIAAAD/////AAAAAP/////cAwAABQAAAOYBAAACAAAA/////wAAAAD/////3AMAAAQAAADnAQAAAgAAAP////8AAAAA/////94DAAAFAAAA5wEAAAIAAAD/////AAAAAP/////eAwAABAAAAOgBAAACAAAA/////wAAAAD/////4AMAAAUAAADoAQAAAgAAAP////8AAAAA/////+ADAAAEAAAA6QEAAAIAAAD/////AAAAAP/////iAwAABQAAAOkBAAACAAAA/////wAAAAD/////4gMAAAQAAADqAQAAAgAAAP////8AAAAA/////+QDAAAFAAAA6gEAAAIAAAD/////AAAAAP/////kAwAABAAAAOsBAAACAAAA/////wAAAAD/////5gMAAAUAAADrAQAAAgAAAP////8AAAAA/////+YDAAAEAAAA7AEAAAIAAAD/////AAAAAP/////oAwAABQAAAOwBAAACAAAA/////wAAAAD/////6AMAAAQAAADtAQAAAgAAAP////8AAAAA/////+oDAAAFAAAA7QEAAAIAAAD/////AAAAAP/////qAwAABAAAAO4BAAACAAAA/////wAAAAD/////7AMAAAUAAADuAQAAAgAAAP////8AAAAA/////+wDAAAEAAAA7wEAAAIAAAD/////AAAAAP/////uAwAABQAAAO8BAAACAAAA/////wAAAAD/////7gMAAAQAAADwAQAAAgAAAP////8AAAAA//////ADAAAFAAAA8AEAAAIAAAD/////AAAAAP/////wAwAABAAAAPEBAAACAAAA/////wAAAAD/////8gMAAAUAAADxAQAAAgAAAP////8AAAAA//////IDAAAEAAAA8gEAAAIAAAD/////AAAAAP/////0AwAABQAAAPIBAAACAAAA/////wAAAAD/////9AMAAAQAAADzAQAAAgAAAP////8AAAAA//////YDAAAFAAAA8wEAAAIAAAD/////AAAAAP/////2AwAABAAAAPQBAAACAAAA/////wAAAAD/////+AMAAAUAAAD0AQAAAgAAAP////8AAAAA//////gDAAAEAAAA9QEAAAIAAAD/////AAAAAP/////6AwAABQAAAPUBAAACAAAA/////wAAAAD/////+gMAAAQAAAD2AQAAAgAAAP////8AAAAA//////wDAAAFAAAA9gEAAAIAAAD/////AAAAAP/////8AwAABAAAAPcBAAACAAAA/////wAAAAD//////gMAAAUAAAD3AQAAAgAAAP////8AAAAA//////4DAAAEAAAA+AEAAAIAAAD/////AAAAAP////8ABAAABQAAAPgBAAACAAAA/////wAAAAD/////AAQAAAQAAAD5AQAAAgAAAP////8AAAAA/////wIEAAAFAAAA+QEAAAIAAAD/////AAAAAP////8CBAAABAAAAPoBAAACAAAA/////wAAAAD/////BAQAAAUAAAD6AQAAAgAAAP////8AAAAA/////wQEAAAEAAAA+wEAAAIAAAD/////AAAAAP////8GBAAABQAAAPsBAAACAAAA/////wAAAAD/////BgQAAAQAAAD8AQAAAgAAAP////8AAAAA/////wgEAAAFAAAA/AEAAAIAAAD/////AAAAAP////8IBAAABAAAAP0BAAACAAAA/////wAAAAD/////CgQAAAUAAAD9AQAAAgAAAP////8AAAAA/////woEAAAEAAAA/gEAAAIAAAD/////AAAAAP////8MBAAABQAAAP4BAAACAAAA/////wAAAAD/////DAQAAAQAAAD/AQAAAgAAAP////8AAAAA/////w4EAAAFAAAA/wEAAAIAAAD/////AAAAAP////8OBAAABAAAAAACAAACAAAA/////wAAAAD/////EAQAAAUAAAAAAgAAAgAAAP////8AAAAA/////xAEAAAEAAAAAQIAAAIAAAD/////AAAAAP////8SBAAABQAAAAECAAACAAAA/////wAAAAD/////EgQAAAQAAAACAgAAAgAAAP////8AAAAA/////xQEAAAFAAAAAgIAAAIAAAD/////AAAAAP////8UBAAABAAAAAMCAAACAAAA/////wAAAAD/////FgQAAAUAAAADAgAAAgAAAP////8AAAAA/////xYEAAAEAAAABAIAAAIAAAD/////AAAAAP////8YBAAABQAAAAQCAAACAAAA/////wAAAAD/////GAQAAAQAAAAFAgAAAgAAAP////8AAAAA/////xoEAAAFAAAABQIAAAIAAAD/////AAAAAP////8aBAAABAAAAAYCAAACAAAA/////wAAAAD/////HAQAAAUAAAAGAgAAAgAAAP////8AAAAA/////xwEAAAEAAAABwIAAAIAAAD/////AAAAAP////8eBAAABQAAAAcCAAACAAAA/////wAAAAD/////HgQAAAQAAAAIAgAAAgAAAP////8AAAAA/////yAEAAAFAAAACAIAAAIAAAD/////AAAAAP////8gBAAABAAAAAkCAAACAAAA/////wAAAAD/////IgQAAAUAAAAJAgAAAgAAAP////8AAAAA/////yIEAAAEAAAACgIAAAIAAAD/////AAAAAP////8kBAAABQAAAAoCAAACAAAA/////wAAAAD/////JAQAAAQAAAALAgAAAgAAAP////8AAAAA/////yYEAAAFAAAACwIAAAIAAAD/////AAAAAP////8mBAAABAAAAAwCAAACAAAA/////wAAAAD/////KAQAAAUAAAAMAgAAAgAAAP////8AAAAA/////ygEAAAEAAAADQIAAAIAAAD/////AAAAAP////8qBAAABQAAAA0CAAACAAAA/////wAAAAD/////KgQAAAQAAAAOAgAAAgAAAP////8AAAAA/////ywEAAAFAAAADgIAAAIAAAD/////AAAAAP////8sBAAABAAAAA8CAAACAAAA/////wAAAAD/////LgQAAAUAAAAPAgAAAgAAAP////8AAAAA/////y4EAAAEAAAAEAIAAAIAAAD/////AAAAAP////8wBAAABQAAABACAAACAAAA/////wAAAAD/////MAQAAAQAAAARAgAAAgAAAP////8AAAAA/////zIEAAAFAAAAEQIAAAIAAAD/////AAAAAP////8yBAAABAAAABICAAACAAAA/////wAAAAD/////NAQAAAUAAAASAgAAAgAAAP////8AAAAA/////zQEAAAEAAAAEwIAAAIAAAD/////AAAAAP////82BAAABQAAABMCAAACAAAA/////wAAAAD/////NgQAAAQAAAAUAgAAAgAAAP////8AAAAA/////zgEAAAFAAAAFAIAAAIAAAD/////AAAAAP////84BAAABAAAABUCAAACAAAA/////wAAAAD/////OgQAAAUAAAAVAgAAAgAAAP////8AAAAA/////zoEAAAEAAAAFgIAAAIAAAD/////AAAAAP////88BAAABQAAABYCAAACAAAA/////wAAAAD/////PAQAAAQAAAAXAgAAAgAAAP////8AAAAA/////z4EAAAFAAAAFwIAAAIAAAD/////AAAAAP////8+BAAABAAAABgCAAACAAAA/////wAAAAD/////QAQAAAUAAAAYAgAAAgAAAP////8AAAAA/////0AEAAAEAAAAGQIAAAIAAAD/////AAAAAP////9CBAAABQAAABkCAAACAAAA/////wAAAAD/////QgQAAAQAAAAaAgAAAgAAAP////8AAAAA/////0QEAAAFAAAAGgIAAAIAAAD/////AAAAAP////9EBAAABAAAABsCAAACAAAA/////wAAAAD/////RgQAAAUAAAAbAgAAAgAAAP////8AAAAA/////0YEAAAEAAAAHAIAAAIAAAD/////AAAAAP////9IBAAABQAAABwCAAACAAAA/////wAAAAD/////SAQAAAQAAAAdAgAAAgAAAP////8AAAAA/////0oEAAAFAAAAHQIAAAIAAAD/////AAAAAP////9KBAAABAAAAB4CAAACAAAA/////wAAAAD/////TAQAAAUAAAAeAgAAAgAAAP////8AAAAA/////0wEAAAEAAAAHwIAAAIAAAD/////AAAAAP////9OBAAABQAAAB8CAAACAAAA/////wAAAAD/////TgQAAAQAAAAgAgAAAgAAAP////8AAAAA/////1AEAAAFAAAAIAIAAAIAAAD/////AAAAAP////9QBAAABAAAACECAAACAAAA/////wAAAAD/////UgQAAAUAAAAhAgAAAgAAAP////8AAAAA/////1IEAAAEAAAAIgIAAAIAAAD/////AAAAAP////9UBAAABQAAACICAAACAAAA/////wAAAAD/////VAQAAAQAAAAjAgAAAgAAAP////8AAAAA/////1YEAAAFAAAAIwIAAAIAAAD/////AAAAAP////9WBAAABAAAACQCAAACAAAA/////wAAAAD/////WAQAAAUAAAAkAgAAAgAAAP////8AAAAA/////1gEAAAEAAAAJQIAAAIAAAD/////AAAAAP////9aBAAABQAAACUCAAACAAAA/////wAAAAD/////WgQAAAQAAAAmAgAAAgAAAP////8AAAAA/////1wEAAAFAAAAJgIAAAIAAAD/////AAAAAP////9cBAAABAAAACcCAAACAAAA/////wAAAAD/////XgQAAAUAAAAnAgAAAgAAAP////8AAAAA/////14EAAAEAAAAKAIAAAIAAAD/////AAAAAP////9gBAAABQAAACgCAAACAAAA/////wAAAAD/////YAQAAAQAAAApAgAAAgAAAP////8AAAAA/////2IEAAAFAAAAKQIAAAIAAAD/////AAAAAP////9iBAAABAAAACoCAAACAAAA/////wAAAAD/////ZAQAAAUAAAAqAgAAAgAAAP////8AAAAA/////2QEAAAEAAAAKwIAAAIAAAD/////AAAAAP////9mBAAABQAAACsCAAACAAAA/////wAAAAD/////ZgQAAAQAAAAsAgAAAgAAAP////8AAAAA/////2gEAAAFAAAALAIAAAIAAAD/////AAAAAP////9oBAAABAAAAC0CAAACAAAA/////wAAAAD/////agQAAAUAAAAtAgAAAgAAAP////8AAAAA/////2oEAAAEAAAALgIAAAIAAAD/////AAAAAP////9sBAAABQAAAC4CAAACAAAA/////wAAAAD/////bAQAAAQAAAAvAgAAAgAAAP////8AAAAA/////24EAAAFAAAALwIAAAIAAAD/////AAAAAP////9uBAAABAAAADACAAACAAAA/////wAAAAD/////cAQAAAUAAAAwAgAAAgAAAP////8AAAAA/////3AEAAAEAAAAMQIAAAIAAAD/////AAAAAP////9yBAAABQAAADECAAACAAAA/////wAAAAD/////cgQAAAQAAAAyAgAAAgAAAP////8AAAAA/////3QEAAAFAAAAMgIAAAIAAAD/////AAAAAP////90BAAABAAAADMCAAACAAAA/////wAAAAD/////dgQAAAUAAAAzAgAAAgAAAP////8AAAAA/////3YEAAAEAAAANAIAAAIAAAD/////AAAAAP////94BAAABQAAADQCAAACAAAA/////wAAAAD/////eAQAAAQAAAA1AgAAAgAAAP////8AAAAA/////3oEAAAFAAAANQIAAAIAAAD/////AAAAAP////96BAAABAAAADYCAAACAAAA/////wAAAAD/////fAQAAAUAAAA2AgAAAgAAAP////8AAAAA/////3wEAAAEAAAANwIAAAIAAAD/////AAAAAP////9+BAAABQAAADcCAAACAAAA/////wAAAAD/////fgQAAAQAAAA4AgAAAgAAAP////8AAAAA/////4AEAAAFAAAAOAIAAAIAAAD/////AAAAAP////+ABAAABAAAADkCAAACAAAA/////wAAAAD/////ggQAAAUAAAA5AgAAAgAAAP////8AAAAA/////4IEAAAEAAAAOgIAAAIAAAD/////AAAAAP////+EBAAABQAAADoCAAACAAAA/////wAAAAD/////hAQAAAQAAAA7AgAAAgAAAP////8AAAAA/////4YEAAAFAAAAOwIAAAIAAAD/////AAAAAP////+GBAAABAAAADwCAAACAAAA/////wAAAAD/////iAQAAAUAAAA8AgAAAgAAAP////8AAAAA/////4gEAAAEAAAAPQIAAAIAAAD/////AAAAAP////+KBAAABQAAAD0CAAACAAAA/////wAAAAD/////igQAAAQAAAA+AgAAAgAAAP////8AAAAA/////4wEAAAFAAAAPgIAAAIAAAD/////AAAAAP////+MBAAABAAAAD8CAAACAAAA/////wAAAAD/////jgQAAAUAAAA/AgAAAgAAAP////8AAAAA/////44EAAAEAAAAQAIAAAIAAAD/////AAAAAP////+QBAAABQAAAEACAAACAAAA/////wAAAAD/////kAQAAAQAAABBAgAAAgAAAP////8AAAAA/////5IEAAAFAAAAQQIAAAIAAAD/////AAAAAP////+SBAAABAAAAEICAAACAAAA/////wAAAAD/////lAQAAAUAAABCAgAAAgAAAP////8AAAAA/////5QEAAAEAAAAQwIAAAIAAAD/////AAAAAP////+WBAAABQAAAEMCAAACAAAA/////wAAAAD/////lgQAAAQAAABEAgAAAgAAAP////8AAAAA/////5gEAAAFAAAARAIAAAIAAAD/////AAAAAP////+YBAAABAAAAEUCAAACAAAA/////wAAAAD/////mgQAAAUAAABFAgAAAgAAAP////8AAAAA/////5oEAAAEAAAARgIAAAIAAAD/////AAAAAP////+cBAAABQAAAEYCAAACAAAA/////wAAAAD/////nAQAAAQAAABHAgAAAgAAAP////8AAAAA/////54EAAAFAAAARwIAAAIAAAD/////AAAAAP////+eBAAABAAAAEgCAAACAAAA/////wAAAAD/////oAQAAAUAAABIAgAAAgAAAP////8AAAAA/////6AEAAAEAAAASQIAAAIAAAD/////AAAAAP////+iBAAABQAAAEkCAAACAAAA/////wAAAAD/////ogQAAAQAAABKAgAAAgAAAP////8AAAAA/////6QEAAAFAAAASgIAAAIAAAD/////AAAAAP////+kBAAABAAAAEsCAAACAAAA/////wAAAAD/////pgQAAAUAAABLAgAAAgAAAP////8AAAAA/////6YEAAAEAAAATAIAAAIAAAD/////AAAAAP////+oBAAABQAAAEwCAAACAAAA/////wAAAAD/////qAQAAAQAAABNAgAAAgAAAP////8AAAAA/////6oEAAAFAAAATQIAAAIAAAD/////AAAAAP////+qBAAABAAAAE4CAAACAAAA/////wAAAAD/////rAQAAAUAAABOAgAAAgAAAP////8AAAAA/////6wEAAAEAAAATwIAAAIAAAD/////AAAAAP////+uBAAABQAAAE8CAAACAAAA/////wAAAAD/////rgQAAAQAAABQAgAAAgAAAP////8AAAAA/////7AEAAAFAAAAUAIAAAIAAAD/////AAAAAP////+wBAAABAAAAFECAAACAAAA/////wAAAAD/////sgQAAAUAAABRAgAAAgAAAP////8AAAAA/////7IEAAAEAAAAUgIAAAIAAAD/////AAAAAP////+0BAAABQAAAFICAAACAAAA/////wAAAAD/////tAQAAAQAAABTAgAAAgAAAP////8AAAAA/////7YEAAAFAAAAUwIAAAIAAAD/////AAAAAP////+2BAAABAAAAFQCAAACAAAA/////wAAAAD/////uAQAAAUAAABUAgAAAgAAAP////8AAAAA/////7gEAAAEAAAAVQIAAAIAAAD/////AAAAAP////+6BAAABQAAAFUCAAACAAAA/////wAAAAD/////ugQAAAQAAABWAgAAAgAAAP////8AAAAA/////7wEAAAFAAAAVgIAAAIAAAD/////AAAAAP////+8BAAABAAAAFcCAAACAAAA/////wAAAAD/////vgQAAAUAAABXAgAAAgAAAP////8AAAAA/////74EAAAEAAAAWAIAAAIAAAD/////AAAAAP/////ABAAABQAAAFgCAAACAAAA/////wAAAAD/////wAQAAAQAAABZAgAAAgAAAP////8AAAAA/////8IEAAAFAAAAWQIAAAIAAAD/////AAAAAP/////CBAAABAAAAFoCAAACAAAA/////wAAAAD/////xAQAAAUAAABaAgAAAgAAAP////8AAAAA/////8QEAAAEAAAAWwIAAAIAAAD/////AAAAAP/////GBAAABQAAAFsCAAACAAAA/////wAAAAD/////xgQAAAQAAABcAgAAAgAAAP////8AAAAA/////8gEAAAFAAAAXAIAAAIAAAD/////AAAAAP/////IBAAABAAAAF0CAAACAAAA/////wAAAAD/////ygQAAAUAAABdAgAAAgAAAP////8AAAAA/////8oEAAAEAAAAXgIAAAIAAAD/////AAAAAP/////MBAAABQAAAF4CAAACAAAA/////wAAAAD/////zAQAAAQAAABfAgAAAgAAAP////8AAAAA/////84EAAAFAAAAXwIAAAIAAAD/////AAAAAP/////OBAAABAAAAGACAAACAAAA/////wAAAAD/////0AQAAAUAAABgAgAAAgAAAP////8AAAAA/////9AEAAAEAAAAYQIAAAIAAAD/////AAAAAP/////SBAAABQAAAGECAAACAAAA/////wAAAAD/////0gQAAAQAAABiAgAAAgAAAP////8AAAAA/////9QEAAAFAAAAYgIAAAIAAAD/////AAAAAP/////UBAAABAAAAGMCAAACAAAA/////wAAAAD/////1gQAAAUAAABjAgAAAgAAAP////8AAAAA/////9YEAAAEAAAAZAIAAAIAAAD/////AAAAAP/////YBAAABQAAAGQCAAACAAAA/////wAAAAD/////2AQAAAQAAABlAgAAAgAAAP////8AAAAA/////9oEAAAFAAAAZQIAAAIAAAD/////AAAAAP/////aBAAABAAAAGYCAAACAAAA/////wAAAAD/////3AQAAAUAAABmAgAAAgAAAP////8AAAAA/////9wEAAAEAAAAZwIAAAIAAAD/////AAAAAP/////eBAAABQAAAGcCAAACAAAA/////wAAAAD/////3gQAAAQAAABoAgAAAgAAAP////8AAAAA/////+AEAAAFAAAAaAIAAAIAAAD/////AAAAAP/////gBAAABAAAAGkCAAACAAAA/////wAAAAD/////4gQAAAUAAABpAgAAAgAAAP////8AAAAA/////+IEAAAEAAAAagIAAAIAAAD/////AAAAAP/////kBAAABQAAAGoCAAACAAAA/////wAAAAD/////5AQAAAQAAABrAgAAAgAAAP////8AAAAA/////+YEAAAFAAAAawIAAAIAAAD/////AAAAAP/////mBAAABAAAAGwCAAACAAAA/////wAAAAD/////6AQAAAUAAABsAgAAAgAAAP////8AAAAA/////+gEAAAEAAAAbQIAAAIAAAD/////AAAAAP/////qBAAABQAAAG0CAAACAAAA/////wAAAAD/////6gQAAAQAAABuAgAAAgAAAP////8AAAAA/////+wEAAAFAAAAbgIAAAIAAAD/////AAAAAP/////sBAAABAAAAG8CAAACAAAA/////wAAAAD/////7gQAAAUAAABvAgAAAgAAAP////8AAAAA/////+4EAAAEAAAAcAIAAAIAAAD/////AAAAAP/////wBAAABQAAAHACAAACAAAA/////wAAAAD/////8AQAAAQAAABxAgAAAgAAAP////8AAAAA//////IEAAAFAAAAcQIAAAIAAAD/////AAAAAP/////yBAAABAAAAHICAAACAAAA/////wAAAAD/////9AQAAAUAAAByAgAAAgAAAP////8AAAAA//////QEAAAEAAAAcwIAAAIAAAD/////AAAAAP/////2BAAABQAAAHMCAAACAAAA/////wAAAAD/////9gQAAAQAAAB0AgAAAgAAAP////8AAAAA//////gEAAAFAAAAdAIAAAIAAAD/////AAAAAP/////4BAAABAAAAHUCAAACAAAA/////wAAAAD/////+gQAAAUAAAB1AgAAAgAAAP////8AAAAA//////oEAAAEAAAAdgIAAAIAAAD/////AAAAAP/////8BAAABQAAAHYCAAACAAAA/////wAAAAD//////AQAAAQAAAB3AgAAAgAAAP////8AAAAA//////4EAAAFAAAAdwIAAAIAAAD/////AAAAAP/////+BAAABAAAAHgCAAACAAAA/////wAAAAD/////AAUAAAUAAAB4AgAAAgAAAP////8AAAAA/////wAFAAAEAAAAeQIAAAIAAAD/////AAAAAP////8CBQAABQAAAHkCAAACAAAA/////wAAAAD/////AgUAAAQAAAB6AgAAAgAAAP////8AAAAA/////wQFAAAFAAAAegIAAAIAAAD/////AAAAAP////8EBQAABAAAAHsCAAACAAAA/////wAAAAD/////BgUAAAUAAAB7AgAAAgAAAP////8AAAAA/////wYFAAAEAAAAfAIAAAIAAAD/////AAAAAP////8IBQAABQAAAHwCAAACAAAA/////wAAAAD/////CAUAAAQAAAB9AgAAAgAAAP////8AAAAA/////woFAAAFAAAAfQIAAAIAAAD/////AAAAAP////8KBQAABAAAAH4CAAACAAAA/////wAAAAD/////DAUAAAUAAAB+AgAAAgAAAP////8AAAAA/////wwFAAAEAAAAfwIAAAIAAAD/////AAAAAP////8OBQAABQAAAH8CAAACAAAA/////wAAAAD/////DgUAAAQAAACAAgAAAgAAAP////8AAAAA/////xAFAAAFAAAAgAIAAAIAAAD/////AAAAAP////8QBQAABAAAAIECAAACAAAA/////wAAAAD/////EgUAAAUAAACBAgAAAgAAAP////8AAAAA/////xIFAAAEAAAAggIAAAIAAAD/////AAAAAP////8UBQAABQAAAIICAAACAAAA/////wAAAAD/////FAUAAAQAAACDAgAAAgAAAP////8AAAAA/////xYFAAAFAAAAgwIAAAIAAAD/////AAAAAP////8WBQAABAAAAIQCAAACAAAA/////wAAAAD/////GAUAAAUAAACEAgAAAgAAAP////8AAAAA/////xgFAAAEAAAAhQIAAAIAAAD/////AAAAAP////8aBQAABQAAAIUCAAACAAAA/////wAAAAD/////GgUAAAQAAACGAgAAAgAAAP////8AAAAA/////xwFAAAFAAAAhgIAAAIAAAD/////AAAAAP////8cBQAABAAAAIcCAAACAAAA/////wAAAAD/////HgUAAAUAAACHAgAAAgAAAP////8AAAAA/////x4FAAAEAAAAiAIAAAIAAAD/////AAAAAP////8gBQAABQAAAIgCAAACAAAA/////wAAAAD/////IAUAAAQAAACJAgAAAgAAAP////8AAAAA/////yIFAAAFAAAAiQIAAAIAAAD/////AAAAAP////8iBQAABAAAAIoCAAACAAAA/////wAAAAD/////JAUAAAUAAACKAgAAAgAAAP////8AAAAA/////yQFAAAEAAAAiwIAAAIAAAD/////AAAAAP////8mBQAABQAAAIsCAAACAAAA/////wAAAAD/////JgUAAAQAAACMAgAAAgAAAP////8AAAAA/////ygFAAAFAAAAjAIAAAIAAAD/////AAAAAP////8oBQAABAAAAI0CAAACAAAA/////wAAAAD/////KgUAAAUAAACNAgAAAgAAAP////8AAAAA/////yoFAAAEAAAAjgIAAAIAAAD/////AAAAAP////8sBQAABQAAAI4CAAACAAAA/////wAAAAD/////LAUAAAQAAACPAgAAAgAAAP////8AAAAA/////y4FAAAFAAAAjwIAAAIAAAD/////AAAAAP////8uBQAABAAAAJACAAACAAAA/////wAAAAD/////MAUAAAUAAACQAgAAAgAAAP////8AAAAA/////zAFAAAEAAAAkQIAAAIAAAD/////AAAAAP////8yBQAABQAAAJECAAACAAAA/////wAAAAD/////MgUAAAQAAACSAgAAAgAAAP////8AAAAA/////zQFAAAFAAAAkgIAAAIAAAD/////AAAAAP////80BQAABAAAAJMCAAACAAAA/////wAAAAD/////NgUAAAUAAACTAgAAAgAAAP////8AAAAA/////zYFAAAEAAAAlAIAAAIAAAD/////AAAAAP////84BQAABQAAAJQCAAACAAAA/////wAAAAD/////OAUAAAQAAACVAgAAAgAAAP////8AAAAA/////zoFAAAFAAAAlQIAAAIAAAD/////AAAAAP////86BQAABAAAAJYCAAACAAAA/////wAAAAD/////PAUAAAUAAACWAgAAAgAAAP////8AAAAA/////zwFAAAEAAAAlwIAAAIAAAD/////AAAAAP////8+BQAABQAAAJcCAAACAAAA/////wAAAAD/////PgUAAAQAAACYAgAAAgAAAP////8AAAAA/////0AFAAAFAAAAmAIAAAIAAAD/////AAAAAP////9ABQAABAAAAJkCAAACAAAA/////wAAAAD/////QgUAAAUAAACZAgAAAgAAAP////8AAAAA/////0IFAAAEAAAAmgIAAAIAAAD/////AAAAAP////9EBQAABQAAAJoCAAACAAAA/////wAAAAD/////RAUAAAQAAACbAgAAAgAAAP////8AAAAA/////0YFAAAFAAAAmwIAAAIAAAD/////AAAAAP////9GBQAABAAAAJwCAAACAAAA/////wAAAAD/////SAUAAAUAAACcAgAAAgAAAP////8AAAAA/////0gFAAAEAAAAnQIAAAIAAAD/////AAAAAP////9KBQAABQAAAJ0CAAACAAAA/////wAAAAD/////SgUAAAQAAACeAgAAAgAAAP////8AAAAA/////0wFAAAFAAAAngIAAAIAAAD/////AAAAAP////9MBQAABAAAAJ8CAAACAAAA/////wAAAAD/////TgUAAAUAAACfAgAAAgAAAP////8AAAAA/////04FAAAEAAAAoAIAAAIAAAD/////AAAAAP////9QBQAABQAAAKACAAACAAAA/////wAAAAD/////UAUAAAQAAAChAgAAAgAAAP////8AAAAA/////1IFAAAFAAAAoQIAAAIAAAD/////AAAAAP////9SBQAABAAAAKICAAACAAAA/////wAAAAD/////VAUAAAUAAACiAgAAAgAAAP////8AAAAA/////1QFAAAEAAAAowIAAAIAAAD/////AAAAAP////9WBQAABQAAAKMCAAACAAAA/////wAAAAD/////VgUAAAQAAACkAgAAAgAAAP////8AAAAA/////1gFAAAFAAAApAIAAAIAAAD/////AAAAAP////9YBQAABAAAAKUCAAACAAAA/////wAAAAD/////WgUAAAUAAAClAgAAAgAAAP////8AAAAA/////1oFAAAEAAAApgIAAAIAAAD/////AAAAAP////9cBQAABQAAAKYCAAACAAAA/////wAAAAD/////XAUAAAQAAACnAgAAAgAAAP////8AAAAA/////14FAAAFAAAApwIAAAIAAAD/////AAAAAP////9eBQAABAAAAKgCAAACAAAA/////wAAAAD/////YAUAAAUAAACoAgAAAgAAAP////8AAAAA/////2AFAAAEAAAAqQIAAAIAAAD/////AAAAAP////9iBQAABQAAAKkCAAACAAAA/////wAAAAD/////YgUAAAQAAACqAgAAAgAAAP////8AAAAA/////2QFAAAFAAAAqgIAAAIAAAD/////AAAAAP////9kBQAABAAAAKsCAAACAAAA/////wAAAAD/////ZgUAAAUAAACrAgAAAgAAAP////8AAAAA/////2YFAAAEAAAArAIAAAIAAAD/////AAAAAP////9oBQAABQAAAKwCAAACAAAA/////wAAAAD/////aAUAAAQAAACtAgAAAgAAAP////8AAAAA/////2oFAAAFAAAArQIAAAIAAAD/////AAAAAP////9qBQAABAAAAK4CAAACAAAA/////wAAAAD/////bAUAAAUAAACuAgAAAgAAAP////8AAAAA/////2wFAAAEAAAArwIAAAIAAAD/////AAAAAP////9uBQAABQAAAK8CAAACAAAA/////wAAAAD/////bgUAAAQAAACwAgAAAgAAAP////8AAAAA/////3AFAAAFAAAAsAIAAAIAAAD/////AAAAAP////9wBQAABAAAALECAAACAAAA/////wAAAAD/////cgUAAAUAAACxAgAAAgAAAP////8AAAAA/////3IFAAAEAAAAsgIAAAIAAAD/////AAAAAP////90BQAABQAAALICAAACAAAA/////wAAAAD/////dAUAAAQAAACzAgAAAgAAAP////8AAAAA/////3YFAAAFAAAAswIAAAIAAAD/////AAAAAP////92BQAABAAAALQCAAACAAAA/////wAAAAD/////eAUAAAUAAAC0AgAAAgAAAP////8AAAAA/////3gFAAAEAAAAtQIAAAIAAAD/////AAAAAP////96BQAABQAAALUCAAACAAAA/////wAAAAD/////egUAAAQAAAC2AgAAAgAAAP////8AAAAA/////3wFAAAFAAAAtgIAAAIAAAD/////AAAAAP////98BQAABAAAALcCAAACAAAA/////wAAAAD/////fgUAAAUAAAC3AgAAAgAAAP////8AAAAA/////34FAAAEAAAAuAIAAAIAAAD/////AAAAAP////+ABQAABQAAALgCAAACAAAA/////wAAAAD/////gAUAAAQAAAC5AgAAAgAAAP////8AAAAA/////4IFAAAFAAAAuQIAAAIAAAD/////AAAAAP////+CBQAABAAAALoCAAACAAAA/////wAAAAD/////hAUAAAUAAAC6AgAAAgAAAP////8AAAAA/////4QFAAAEAAAAuwIAAAIAAAD/////AAAAAP////+GBQAABQAAALsCAAACAAAA/////wAAAAD/////hgUAAAQAAAC8AgAAAgAAAP////8AAAAA/////4gFAAAFAAAAvAIAAAIAAAD/////AAAAAP////+IBQAABAAAAL0CAAACAAAA/////wAAAAD/////igUAAAUAAAC9AgAAAgAAAP////8AAAAA/////4oFAAAEAAAAvgIAAAIAAAD/////AAAAAP////+MBQAABQAAAL4CAAACAAAA/////wAAAAD/////jAUAAAQAAAC/AgAAAgAAAP////8AAAAA/////44FAAAFAAAAvwIAAAIAAAD/////AAAAAP////+OBQAABAAAAMACAAACAAAA/////wAAAAD/////kAUAAAUAAADAAgAAAgAAAP////8AAAAA/////5AFAAAEAAAAwQIAAAIAAAD/////AAAAAP////+SBQAABQAAAMECAAACAAAA/////wAAAAD/////kgUAAAQAAADCAgAAAgAAAP////8AAAAA/////5QFAAAFAAAAwgIAAAIAAAD/////AAAAAP////+UBQAABAAAAMMCAAACAAAA/////wAAAAD/////lgUAAAUAAADDAgAAAgAAAP////8AAAAA/////5YFAAAEAAAAxAIAAAIAAAD/////AAAAAP////+YBQAABQAAAMQCAAACAAAA/////wAAAAD/////mAUAAAQAAADFAgAAAgAAAP////8AAAAA/////5oFAAAFAAAAxQIAAAIAAAD/////AAAAAP////+aBQAABAAAAMYCAAACAAAA/////wAAAAD/////nAUAAAUAAADGAgAAAgAAAP////8AAAAA/////5wFAAAEAAAAxwIAAAIAAAD/////AAAAAP////+eBQAABQAAAMcCAAACAAAA/////wAAAAD/////ngUAAAQAAADIAgAAAgAAAP////8AAAAA/////6AFAAAFAAAAyAIAAAIAAAD/////AAAAAP////+gBQAABAAAAMkCAAACAAAA/////wAAAAD/////ogUAAAUAAADJAgAAAgAAAP////8AAAAA/////6IFAAAEAAAAygIAAAIAAAD/////AAAAAP////+kBQAABQAAAMoCAAACAAAA/////wAAAAD/////pAUAAAQAAADLAgAAAgAAAP////8AAAAA/////6YFAAAFAAAAywIAAAIAAAD/////AAAAAP////+mBQAABAAAAMwCAAACAAAA/////wAAAAD/////qAUAAAUAAADMAgAAAgAAAP////8AAAAA/////6gFAAAEAAAAzQIAAAIAAAD/////AAAAAP////+qBQAABQAAAM0CAAACAAAA/////wAAAAD/////qgUAAAQAAADOAgAAAgAAAP////8AAAAA/////6wFAAAFAAAAzgIAAAIAAAD/////AAAAAP////+sBQAABAAAAM8CAAACAAAA/////wAAAAD/////rgUAAAUAAADPAgAAAgAAAP////8AAAAA/////64FAAAEAAAA0AIAAAIAAAD/////AAAAAP////+wBQAABQAAANACAAACAAAA/////wAAAAD/////sAUAAAQAAADRAgAAAgAAAP////8AAAAA/////7IFAAAFAAAA0QIAAAIAAAD/////AAAAAP////+yBQAABAAAANICAAACAAAA/////wAAAAD/////tAUAAAUAAADSAgAAAgAAAP////8AAAAA/////7QFAAAEAAAA0wIAAAIAAAD/////AAAAAP////+2BQAABQAAANMCAAACAAAA/////wAAAAD/////tgUAAAQAAADUAgAAAgAAAP////8AAAAA/////7gFAAAFAAAA1AIAAAIAAAD/////AAAAAP////+4BQAABAAAANUCAAACAAAA/////wAAAAD/////ugUAAAUAAADVAgAAAgAAAP////8AAAAA/////7oFAAAEAAAA1gIAAAIAAAD/////AAAAAP////+8BQAABQAAANYCAAACAAAA/////wAAAAD/////vAUAAAQAAADXAgAAAgAAAP////8AAAAA/////74FAAAFAAAA1wIAAAIAAAD/////AAAAAP////++BQAABAAAANgCAAACAAAA/////wAAAAD/////wAUAAAUAAADYAgAAAgAAAP////8AAAAA/////8AFAAAEAAAA2QIAAAIAAAD/////AAAAAP/////CBQAABQAAANkCAAACAAAA/////wAAAAD/////wgUAAAQAAADaAgAAAgAAAP////8AAAAA/////8QFAAAFAAAA2gIAAAIAAAD/////AAAAAP/////EBQAABAAAANsCAAACAAAA/////wAAAAD/////xgUAAAUAAADbAgAAAgAAAP////8AAAAA/////8YFAAAEAAAA3AIAAAIAAAD/////AAAAAP/////IBQAABQAAANwCAAACAAAA/////wAAAAD/////yAUAAAQAAADdAgAAAgAAAP////8AAAAA/////8oFAAAFAAAA3QIAAAIAAAD/////AAAAAP/////KBQAABAAAAN4CAAACAAAA/////wAAAAD/////zAUAAAUAAADeAgAAAgAAAP////8AAAAA/////8wFAAAEAAAA3wIAAAIAAAD/////AAAAAP/////OBQAABQAAAN8CAAACAAAA/////wAAAAD/////zgUAAAQAAADgAgAAAgAAAP////8AAAAA/////9AFAAAFAAAA4AIAAAIAAAD/////AAAAAP/////QBQAABAAAAOECAAACAAAA/////wAAAAD/////0gUAAAUAAADhAgAAAgAAAP////8AAAAA/////9IFAAAEAAAA4gIAAAIAAAD/////AAAAAP/////UBQAABQAAAOICAAACAAAA/////wAAAAD/////1AUAAAQAAADjAgAAAgAAAP////8AAAAA/////9YFAAAFAAAA4wIAAAIAAAD/////AAAAAP/////WBQAABAAAAOQCAAACAAAA/////wAAAAD/////2AUAAAUAAADkAgAAAgAAAP////8AAAAA/////9gFAAAEAAAA5QIAAAIAAAD/////AAAAAP/////aBQAABQAAAOUCAAACAAAA/////wAAAAD/////2gUAAAQAAADmAgAAAgAAAP////8AAAAA/////9wFAAAFAAAA5gIAAAIAAAD/////AAAAAP/////cBQAABAAAAOcCAAACAAAA/////wAAAAD/////3gUAAAUAAADnAgAAAgAAAP////8AAAAA/////94FAAAEAAAA6AIAAAIAAAD/////AAAAAP/////gBQAABQAAAOgCAAACAAAA/////wAAAAD/////4AUAAAQAAADpAgAAAgAAAP////8AAAAA/////+IFAAAFAAAA6QIAAAIAAAD/////AAAAAP/////iBQAABAAAAOoCAAACAAAA/////wAAAAD/////5AUAAAUAAADqAgAAAgAAAP////8AAAAA/////+QFAAAEAAAA6wIAAAIAAAD/////AAAAAP/////mBQAABQAAAOsCAAACAAAA/////wAAAAD/////5gUAAAQAAADsAgAAAgAAAP////8AAAAA/////+gFAAAFAAAA7AIAAAIAAAD/////AAAAAP/////oBQAABAAAAO0CAAACAAAA/////wAAAAD/////6gUAAAUAAADtAgAAAgAAAP////8AAAAA/////+oFAAAEAAAA7gIAAAIAAAD/////AAAAAP/////sBQAABQAAAO4CAAACAAAA/////wAAAAD/////7AUAAAQAAADvAgAAAgAAAP////8AAAAA/////+4FAAAFAAAA7wIAAAIAAAD/////AAAAAP/////uBQAABAAAAPACAAACAAAA/////wAAAAD/////8AUAAAUAAADwAgAAAgAAAP////8AAAAA//////AFAAAEAAAA8QIAAAIAAAD/////AAAAAP/////yBQAABQAAAPECAAACAAAA/////wAAAAD/////8gUAAAQAAADyAgAAAgAAAP////8AAAAA//////QFAAAFAAAA8gIAAAIAAAD/////AAAAAP/////0BQAABAAAAPMCAAACAAAA/////wAAAAD/////9gUAAAUAAADzAgAAAgAAAP////8AAAAA//////YFAAAEAAAA9AIAAAIAAAD/////AAAAAP/////4BQAABQAAAPQCAAACAAAA/////wAAAAD/////+AUAAAQAAAD1AgAAAgAAAP////8AAAAA//////oFAAAFAAAA9QIAAAIAAAD/////AAAAAP/////6BQAABAAAAPYCAAACAAAA/////wAAAAD//////AUAAAUAAAD2AgAAAgAAAP////8AAAAA//////wFAAAEAAAA9wIAAAIAAAD/////AAAAAP/////+BQAABQAAAPcCAAACAAAA/////wAAAAD//////gUAAAQAAAD4AgAAAgAAAP////8AAAAA/////wAGAAAFAAAA+AIAAAIAAAD/////AAAAAP////8ABgAABAAAAPkCAAACAAAA/////wAAAAD/////AgYAAAUAAAD5AgAAAgAAAP////8AAAAA/////wIGAAAEAAAA+gIAAAIAAAD/////AAAAAP////8EBgAABQAAAPoCAAACAAAA/////wAAAAD/////BAYAAAQAAAD7AgAAAgAAAP////8AAAAA/////wYGAAAFAAAA+wIAAAIAAAD/////AAAAAP////8GBgAABAAAAPwCAAACAAAA/////wAAAAD/////CAYAAAUAAAD8AgAAAgAAAP////8AAAAA/////wgGAAAEAAAA/QIAAAIAAAD/////AAAAAP////8KBgAABQAAAP0CAAACAAAA/////wAAAAD/////CgYAAAQAAAD+AgAAAgAAAP////8AAAAA/////wwGAAAFAAAA/gIAAAIAAAD/////AAAAAP////8MBgAABAAAAP8CAAACAAAA/////wAAAAD/////DgYAAAUAAAD/AgAAAgAAAP////8AAAAA/////w4GAAAEAAAAAAMAAAIAAAD/////AAAAAP////8QBgAABQAAAAADAAACAAAA/////wAAAAD/////EAYAAAQAAAABAwAAAgAAAP////8AAAAA/////xIGAAAFAAAAAQMAAAIAAAD/////AAAAAP////8SBgAABAAAAAIDAAACAAAA/////wAAAAD/////FAYAAAUAAAACAwAAAgAAAP////8AAAAA/////xQGAAAEAAAAAwMAAAIAAAD/////AAAAAP////8WBgAABQAAAAMDAAACAAAA/////wAAAAD/////FgYAAAQAAAAEAwAAAgAAAP////8AAAAA/////xgGAAAFAAAABAMAAAIAAAD/////AAAAAP////8YBgAABAAAAAUDAAACAAAA/////wAAAAD/////GgYAAAUAAAAFAwAAAgAAAP////8AAAAA/////xoGAAAEAAAABgMAAAIAAAD/////AAAAAP////8cBgAAAwAAAAcDAAACAAAA/////wAAAAD/////HgYAAAMAAAAIAwAAAgAAAP////8AAAAA/////yAGAAAFAAAACAMAAAIAAAD/////AAAAAP////8gBgAABAAAAAkDAAACAAAA/////wAAAAD/////IgYAAAUAAAAJAwAAAgAAAP////8AAAAA/////yIGAAAEAAAACgMAAAIAAAD/////AAAAAP////8kBgAABQAAAAoDAAACAAAA/////wAAAAD/////JAYAAAQAAAALAwAAAgAAAP////8AAAAA/////yYGAAAFAAAACwMAAAIAAAD/////AAAAAP////8mBgAABAAAAAwDAAACAAAA/////wAAAAD/////KAYAAAUAAAAMAwAAAgAAAP////8AAAAA/////ygGAAAEAAAADQMAAAIAAAD/////AAAAAP////8qBgAABQAAAA0DAAACAAAA/////wAAAAD/////KgYAAAQAAAAOAwAAAgAAAP////8AAAAA/////ywGAAAFAAAADgMAAAIAAAD/////AAAAAP////8sBgAABAAAAA8DAAACAAAA/////wAAAAD/////LgYAAAUAAAAPAwAAAgAAAP////8AAAAA/////y4GAAAEAAAAEAMAAAIAAAD/////AAAAAP////8wBgAABQAAABADAAACAAAA/////wAAAAD/////MAYAAAQAAAARAwAAAgAAAP////8AAAAA/////zIGAAAFAAAAEQMAAAIAAAD/////AAAAAP////8yBgAABAAAABIDAAACAAAA/////wAAAAD/////NAYAAAUAAAASAwAAAgAAAP////8AAAAA/////zQGAAAEAAAAEwMAAAIAAAD/////AAAAAP////82BgAABQAAABMDAAACAAAA/////wAAAAD/////NgYAAAQAAAAUAwAAAgAAAP////8AAAAA/////zgGAAAFAAAAFAMAAAIAAAD/////AAAAAP////84BgAABAAAABUDAAACAAAA/////wAAAAD/////OgYAAAUAAAAVAwAAAgAAAP////8AAAAA/////zoGAAAEAAAAFgMAAAIAAAD/////AAAAAP////88BgAABQAAABYDAAACAAAA/////wAAAAD/////PAYAAAQAAAAXAwAAAgAAAP////8AAAAA/////z4GAAAFAAAAFwMAAAIAAAD/////AAAAAP////8+BgAABAAAABgDAAACAAAA/////wAAAAD/////QAYAAAUAAAAYAwAAAgAAAP////8AAAAA/////0AGAAAEAAAAGQMAAAIAAAD/////AAAAAP////9CBgAABQAAABkDAAACAAAA/////wAAAAD/////QgYAAAQAAAAaAwAAAgAAAP////8AAAAA/////0QGAAAFAAAAGgMAAAIAAAD/////AAAAAP////9EBgAABAAAABsDAAACAAAA/////wAAAAD/////RgYAAAUAAAAbAwAAAgAAAP////8AAAAA/////0YGAAAEAAAAHAMAAAIAAAD/////AAAAAP////9IBgAABQAAABwDAAACAAAA/////wAAAAD/////SAYAAAQAAAAdAwAAAgAAAP////8AAAAA/////0oGAAAFAAAAHQMAAAIAAAD/////AAAAAP////9KBgAABAAAAB4DAAACAAAA/////wAAAAD/////TAYAAAUAAAAeAwAAAgAAAP////8AAAAA/////0wGAAAEAAAAHwMAAAIAAAD/////AAAAAP////9OBgAABQAAAB8DAAACAAAA/////wAAAAD/////TgYAAAQAAAAgAwAAAgAAAP////8AAAAA/////1AGAAAFAAAAIAMAAAIAAAD/////AAAAAP////9QBgAABAAAACEDAAACAAAA/////wAAAAD/////UgYAAAUAAAAhAwAAAgAAAP////8AAAAA/////1IGAAAEAAAAIgMAAAIAAAD/////AAAAAP////9UBgAABQAAACIDAAACAAAA/////wAAAAD/////VAYAAAQAAAAjAwAAAgAAAP////8AAAAA/////1YGAAAFAAAAIwMAAAIAAAD/////AAAAAP////9WBgAABAAAACQDAAACAAAA/////wAAAAD/////WAYAAAUAAAAkAwAAAgAAAP////8AAAAA/////1gGAAAEAAAAJQMAAAIAAAD/////AAAAAP////9aBgAABQAAACUDAAACAAAA/////wAAAAD/////WgYAAAQAAAAmAwAAAgAAAP////8AAAAA/////1wGAAAFAAAAJgMAAAIAAAD/////AAAAAP////9cBgAABAAAACcDAAACAAAA/////wAAAAD/////XgYAAAUAAAAnAwAAAgAAAP////8AAAAA/////14GAAAEAAAAKAMAAAIAAAD/////AAAAAP////9gBgAABQAAACgDAAACAAAA/////wAAAAD/////YAYAAAQAAAApAwAAAgAAAP////8AAAAA/////2IGAAAFAAAAKQMAAAIAAAD/////AAAAAP////9iBgAABAAAACoDAAACAAAA/////wAAAAD/////ZAYAAAUAAAAqAwAAAgAAAP////8AAAAA/////2QGAAAEAAAAKwMAAAIAAAD/////AAAAAP////9mBgAABQAAACsDAAACAAAA/////wAAAAD/////ZgYAAAQAAAAsAwAAAgAAAP////8AAAAA/////2gGAAAFAAAALAMAAAIAAAD/////AAAAAP////9oBgAABAAAAC0DAAACAAAA/////wAAAAD/////agYAAAUAAAAtAwAAAgAAAP////8AAAAA/////2oGAAAEAAAALgMAAAIAAAD/////AAAAAP////9sBgAABQAAAC4DAAACAAAA/////wAAAAD/////bAYAAAQAAAAvAwAAAgAAAP////8AAAAA/////24GAAAFAAAALwMAAAIAAAD/////AAAAAP////9uBgAABAAAADADAAACAAAA/////wAAAAD/////cAYAAAUAAAAwAwAAAgAAAP////8AAAAA/////3AGAAAEAAAAMQMAAAIAAAD/////AAAAAP////9yBgAABQAAADEDAAACAAAA/////wAAAAD/////cgYAAAQAAAAyAwAAAgAAAP////8AAAAA/////3QGAAAFAAAAMgMAAAIAAAD/////AAAAAP////90BgAABAAAADMDAAACAAAA/////wAAAAD/////dgYAAAUAAAAzAwAAAgAAAP////8AAAAA/////3YGAAAEAAAANAMAAAIAAAD/////AAAAAP////94BgAABQAAADQDAAACAAAA/////wAAAAD/////eAYAAAQAAAA1AwAAAgAAAP////8AAAAA/////3oGAAAFAAAANQMAAAIAAAD/////AAAAAP////96BgAABAAAADYDAAACAAAA/////wAAAAD/////fAYAAAUAAAA2AwAAAgAAAP////8AAAAA/////3wGAAAEAAAANwMAAAIAAAD/////AAAAAP////9+BgAABQAAADcDAAACAAAA/////wAAAAD/////fgYAAAQAAAA4AwAAAgAAAP////8AAAAA/////4AGAAAFAAAAOAMAAAIAAAD/////AAAAAP////+ABgAABAAAADkDAAACAAAA/////wAAAAD/////ggYAAAUAAAA5AwAAAgAAAP////8AAAAA/////4IGAAAEAAAAOgMAAAIAAAD/////AAAAAP////+EBgAABQAAADoDAAACAAAA/////wAAAAD/////hAYAAAQAAAA7AwAAAgAAAP////8AAAAA/////4YGAAAFAAAAOwMAAAIAAAD/////AAAAAP////+GBgAABAAAADwDAAACAAAA/////wAAAAD/////iAYAAAUAAAA8AwAAAgAAAP////8AAAAA/////4gGAAAEAAAAPQMAAAIAAAD/////AAAAAP////+KBgAABQAAAD0DAAACAAAA/////wAAAAD/////igYAAAQAAAA+AwAAAgAAAP////8AAAAA/////4wGAAAFAAAAPgMAAAIAAAD/////AAAAAP////+MBgAABAAAAD8DAAACAAAA/////wAAAAD/////jgYAAAUAAAA/AwAAAgAAAP////8AAAAA/////44GAAAEAAAAQAMAAAIAAAD/////AAAAAP////+QBgAABQAAAEADAAACAAAA/////wAAAAD/////kAYAAAQAAABBAwAAAgAAAP////8AAAAA/////5IGAAAFAAAAQQMAAAIAAAD/////AAAAAP////+SBgAABAAAAEIDAAACAAAA/////wAAAAD/////lAYAAAUAAABCAwAAAgAAAP////8AAAAA/////5QGAAAEAAAAQwMAAAIAAAD/////AAAAAP////+WBgAABQAAAEMDAAACAAAA/////wAAAAD/////lgYAAAQAAABEAwAAAgAAAP////8AAAAA/////5gGAAAFAAAARAMAAAIAAAD/////AAAAAP////+YBgAABAAAAEUDAAACAAAA/////wAAAAD/////mgYAAAUAAABFAwAAAgAAAP////8AAAAA/////5oGAAAEAAAARgMAAAIAAAD/////AAAAAP////+cBgAABQAAAEYDAAACAAAA/////wAAAAD/////nAYAAAQAAABHAwAAAgAAAP////8AAAAA/////54GAAAFAAAARwMAAAIAAAD/////AAAAAP////+eBgAABAAAAEgDAAACAAAA/////wAAAAD/////oAYAAAUAAABIAwAAAgAAAP////8AAAAA/////6AGAAAEAAAASQMAAAIAAAD/////AAAAAP////+iBgAABQAAAEkDAAACAAAA/////wAAAAD/////ogYAAAQAAABKAwAAAgAAAP////8AAAAA/////6QGAAAFAAAASgMAAAIAAAD/////AAAAAP////+kBgAABAAAAEsDAAACAAAA/////wAAAAD/////pgYAAAUAAABLAwAAAgAAAP////8AAAAA/////6YGAAAEAAAATAMAAAIAAAD/////AAAAAP////+oBgAABQAAAEwDAAACAAAA/////wAAAAD/////qAYAAAQAAABNAwAAAgAAAP////8AAAAA/////6oGAAAFAAAATQMAAAIAAAD/////AAAAAP////+qBgAABAAAAE4DAAACAAAA/////wAAAAD/////rAYAAAUAAABOAwAAAgAAAP////8AAAAA/////6wGAAAEAAAATwMAAAIAAAD/////AAAAAP////+uBgAABQAAAE8DAAACAAAA/////wAAAAD/////rgYAAAQAAABQAwAAAgAAAP////8AAAAA/////7AGAAAFAAAAUAMAAAIAAAD/////AAAAAP////+wBgAABAAAAFEDAAACAAAA/////wAAAAD/////sgYAAAUAAABRAwAAAgAAAP////8AAAAA/////7IGAAAEAAAAUgMAAAIAAAD/////AAAAAP////+0BgAABQAAAFIDAAACAAAA/////wAAAAD/////tAYAAAQAAABTAwAAAgAAAP////8AAAAA/////7YGAAAFAAAAUwMAAAIAAAD/////AAAAAP////+2BgAABAAAAFQDAAACAAAA/////wAAAAD/////uAYAAAUAAABUAwAAAgAAAP////8AAAAA/////7gGAAAEAAAAVQMAAAIAAAD/////AAAAAP////+6BgAABQAAAFUDAAACAAAA/////wAAAAD/////ugYAAAQAAABWAwAAAgAAAP////8AAAAA/////7wGAAAFAAAAVgMAAAIAAAD/////AAAAAP////+8BgAABAAAAFcDAAACAAAA/////wAAAAD/////vgYAAAUAAABXAwAAAgAAAP////8AAAAA/////74GAAAEAAAAWAMAAAIAAAD/////AAAAAP/////ABgAABQAAAFgDAAACAAAA/////wAAAAD/////wAYAAAQAAABZAwAAAAAAAAMAAACX5z6i/////8IGAAACAAAAWgMAAAAAAAADAAAAl+c+ov/////EBgAAAgAAAFsDAAAAAAAAAwAAAJfnPqL/////xgYAAAIAAABcAwAAAAAAAAMAAACX5z6i/////8gGAAACAAAAXQMAAAAAAAADAAAAl+c+ov/////KBgAAAgAAAF4DAAAAAAAAAwAAAJfnPqL/////zAYAAAIAAABfAwAAAAAAAAMAAACX5z6i/////84GAAACAAAAYAMAAAAAAAADAAAAl+c+ov/////QBgAAAgAAAGEDAAAAAAAAAwAAAJfnPqL/////0gYAAAIAAABiAwAAAAAAAAMAAACX5z6i/////9QGAAACAAAAYwMAAAAAAAADAAAAl+c+ov/////WBgAAAgAAAGQDAAAAAAAAAwAAAJfnPqL/////2AYAAAIAAABlAwAAAAAAAAMAAACX5z6i/////9oGAAACAAAAZgMAAAAAAAADAAAAl+c+ov/////cBgAAAgAAAGcDAAAAAAAAAwAAAJfnPqL/////3gYAAAIAAABoAwAAAAAAAAMAAACX5z6i/////+AGAAACAAAAaQMAAAAAAAADAAAAl+c+ov/////iBgAAAgAAAGoDAAAAAAAAAwAAAJfnPqL/////5AYAAAIAAABrAwAAAAAAAAMAAACX5z6i/////+YGAAACAAAAbAMAAAAAAAADAAAAl+c+ov/////oBgAAAgAAAG0DAAAAAAAAAwAAAJfnPqL/////6gYAAAIAAABuAwAAAAAAAAMAAACX5z6i/////+wGAAACAAAAbwMAAAAAAAADAAAAl+c+ov/////uBgAAAgAAAHADAAAAAAAAAwAAAJfnPqL/////8AYAAAIAAABxAwAAAAAAAAMAAACX5z6i//////IGAAACAAAAcgMAAAAAAAADAAAAl+c+ov/////0BgAAAgAAAHMDAAAAAAAAAwAAAJfnPqL/////9gYAAAIAAAB0AwAAAAAAAAMAAACX5z6i//////gGAAACAAAAdQMAAAAAAAADAAAAl+c+ov/////6BgAAAgAAAHYDAAAAAAAAAwAAAJfnPqL//////AYAAAIAAAB3AwAAAAAAAAMAAACX5z6i//////4GAAACAAAAeAMAAAAAAAADAAAAl+c+ov////8ABwAAAgAAAHkDAAAAAAAAAwAAAJfnPqL/////AgcAAAIAAAB6AwAAAAAAAAMAAACX5z6i/////wQHAAACAAAAewMAAAAAAAADAAAAl+c+ov////8GBwAAAgAAAHwDAAAAAAAAAwAAAJfnPqL/////CAcAAAIAAAB9AwAAAAAAAAMAAACX5z6i/////woHAAACAAAAfgMAAAAAAAADAAAAl+c+ov////8MBwAAAgAAAH8DAAAAAAAAAwAAAJfnPqL/////DgcAAAIAAACAAwAAAAAAAAMAAACX5z6i/////xAHAAACAAAAgQMAAAAAAAADAAAAl+c+ov////8SBwAAAgAAAIIDAAAAAAAAAwAAAJfnPqL/////FAcAAAIAAACDAwAAAAAAAAMAAACX5z6i/////xYHAAACAAAAhAMAAAAAAAADAAAAl+c+ov////8YBwAAAgAAAIUDAAAAAAAAAwAAAJfnPqL/////GgcAAAIAAACGAwAAAAAAAAMAAACX5z6i/////xwHAAACAAAAhwMAAAAAAAADAAAAl+c+ov////8eBwAAAgAAAIgDAAAAAAAAAwAAAJfnPqL/////IAcAAAIAAACJAwAAAAAAAAMAAACX5z6i/////yIHAAACAAAAigMAAAAAAAADAAAAl+c+ov////8kBwAAAgAAAIsDAAAAAAAAAwAAAJfnPqL/////JgcAAAIAAACMAwAAAAAAAAMAAACX5z6i/////ygHAAACAAAAjQMAAAAAAAADAAAAl+c+ov////8qBwAAAgAAAI4DAAAAAAAAAwAAAJfnPqL/////LAcAAAIAAACPAwAAAAAAAAMAAACX5z6i/////y4HAAACAAAAkAMAAAAAAAADAAAAl+c+ov////8wBwAAAgAAAJEDAAAAAAAAAwAAAJfnPqL/////MgcAAAIAAACSAwAAAAAAAAMAAACX5z6i/////zQHAAACAAAAkwMAAAAAAAADAAAAl+c+ov////82BwAAAgAAAJQDAAAAAAAAAwAAAJfnPqL/////OAcAAAIAAACVAwAAAAAAAAMAAACX5z6i/////zoHAAACAAAAlgMAAAAAAAADAAAAl+c+ov////88BwAAAgAAAJcDAAAAAAAAAwAAAJfnPqL/////PgcAAAIAAACYAwAAAAAAAAMAAACX5z6i/////0AHAAACAAAAmQMAAAAAAAADAAAAl+c+ov////9CBwAAAgAAAJoDAAAAAAAAAwAAAJfnPqL/////RAcAAAIAAACbAwAAAAAAAAMAAACX5z6i/////0YHAAACAAAAnAMAAAAAAAADAAAAl+c+ov////9IBwAAAgAAAJ0DAAAAAAAAAwAAAJfnPqL/////SgcAAAIAAACeAwAAAAAAAAMAAACX5z6i/////0wHAAACAAAAnwMAAAAAAAADAAAAl+c+ov////9OBwAAAgAAAKADAAAAAAAAAwAAAJfnPqL/////UAcAAAIAAAChAwAAAAAAAAMAAACX5z6i/////1IHAAACAAAAogMAAAAAAAADAAAAl+c+ov////9UBwAAAgAAAKMDAAAAAAAAAwAAAJfnPqL/////VgcAAAIAAACkAwAAAAAAAAMAAACX5z6i/////1gHAAACAAAApQMAAAAAAAADAAAAl+c+ov////9aBwAAAgAAAKYDAAAAAAAAAwAAAJfnPqL/////XAcAAAIAAACnAwAAAAAAAAMAAACX5z6i/////14HAAACAAAAqAMAAAAAAAADAAAAl+c+ov////9gBwAAAgAAAKkDAAAAAAAAAwAAAJfnPqL/////YgcAAAIAAACqAwAAAAAAAAMAAACX5z6i/////2QHAAACAAAAqwMAAAAAAAADAAAAl+c+ov////9mBwAAAgAAAKwDAAAAAAAAAwAAAJfnPqL/////aAcAAAIAAACtAwAAAAAAAAMAAACX5z6i/////2oHAAACAAAArgMAAAAAAAADAAAAl+c+ov////9sBwAAAgAAAK8DAAAAAAAAAwAAAJfnPqL/////bgcAAAIAAACwAwAAAAAAAAMAAACX5z6i/////3AHAAACAAAAsQMAAAAAAAADAAAAl+c+ov////9yBwAAAgAAALIDAAAAAAAAAwAAAJfnPqL/////dAcAAAIAAACzAwAAAAAAAAMAAACX5z6i/////3YHAAACAAAAtAMAAAAAAAADAAAAl+c+ov////94BwAAAgAAALUDAAAAAAAAAwAAAJfnPqL/////egcAAAIAAAC2AwAAAAAAAAMAAACX5z6i/////3wHAAACAAAAtwMAAAAAAAADAAAAl+c+ov////9+BwAAAgAAALgDAAAAAAAAAwAAAJfnPqL/////gAcAAAIAAAC5AwAAAAAAAAMAAACX5z6i/////4IHAAACAAAAugMAAAAAAAADAAAAl+c+ov////+EBwAAAgAAALsDAAAAAAAAAwAAAJfnPqL/////hgcAAAIAAAC8AwAAAAAAAAMAAACX5z6i/////4gHAAACAAAAvQMAAAAAAAADAAAAl+c+ov////+KBwAAAgAAAL4DAAAAAAAAAwAAAJfnPqL/////jAcAAAIAAAC/AwAAAAAAAAMAAACX5z6i/////44HAAACAAAAwAMAAAAAAAADAAAAl+c+ov////+QBwAAAgAAAMEDAAAAAAAAAwAAAJfnPqL/////kgcAAAIAAADCAwAAAAAAAAMAAACX5z6i/////5QHAAACAAAAwwMAAAAAAAADAAAAl+c+ov////+WBwAAAgAAAMQDAAAAAAAAAwAAAJfnPqL/////mAcAAAIAAADFAwAAAAAAAAMAAACX5z6i/////5oHAAACAAAAxgMAAAAAAAADAAAAl+c+ov////+cBwAAAgAAAMcDAAAAAAAAAwAAAJfnPqL/////ngcAAAIAAADIAwAAAAAAAAMAAACX5z6i/////6AHAAACAAAAyQMAAAAAAAADAAAAl+c+ov////+iBwAAAgAAAMoDAAAAAAAAAwAAAJfnPqL/////pAcAAAIAAADLAwAAAAAAAAMAAACX5z6i/////6YHAAACAAAAzAMAAAAAAAADAAAAl+c+ov////+oBwAAAgAAAM0DAAAAAAAAAwAAAJfnPqL/////qgcAAAIAAADOAwAAAAAAAAMAAACX5z6i/////6wHAAACAAAAzwMAAAAAAAADAAAAl+c+ov////+uBwAAAgAAANADAAAAAAAAAwAAAJfnPqL/////sAcAAAIAAADRAwAAAAAAAAMAAACX5z6i/////7IHAAACAAAA0gMAAAAAAAADAAAAl+c+ov////+0BwAAAgAAANMDAAAAAAAAAwAAAJfnPqL/////tgcAAAIAAADUAwAAAAAAAAMAAACX5z6i/////7gHAAACAAAA1QMAAAAAAAADAAAAl+c+ov////+6BwAAAgAAANYDAAAAAAAAAwAAAJfnPqL/////vAcAAAIAAADXAwAAAAAAAAMAAACX5z6i/////74HAAACAAAA2AMAAAAAAAADAAAAl+c+ov/////ABwAAAgAAANkDAAAAAAAAAwAAAJfnPqL/////wgcAAAIAAADaAwAAAAAAAAMAAACX5z6i/////8QHAAACAAAA2wMAAAAAAAADAAAAl+c+ov/////GBwAAAgAAANwDAAAAAAAAAwAAAJfnPqL/////yAcAAAIAAADdAwAAAAAAAAMAAACX5z6i/////8oHAAACAAAA3gMAAAAAAAADAAAAl+c+ov/////MBwAAAgAAAN8DAAAAAAAAAwAAAJfnPqL/////zgcAAAIAAADgAwAAAAAAAAMAAACX5z6i/////9AHAAACAAAA4QMAAAAAAAADAAAAl+c+ov/////SBwAAAgAAAOIDAAAAAAAAAwAAAJfnPqL/////1AcAAAIAAADjAwAAAAAAAAMAAACX5z6i/////9YHAAACAAAA5AMAAAAAAAADAAAAl+c+ov/////YBwAAAgAAAOUDAAAAAAAAAwAAAJfnPqL/////2gcAAAIAAADmAwAAAAAAAAMAAACX5z6i/////9wHAAACAAAA5wMAAAAAAAADAAAAl+c+ov/////eBwAAAgAAAOgDAAAAAAAAAwAAAJfnPqL/////4AcAAAIAAADpAwAAAAAAAAMAAACX5z6i/////+IHAAACAAAA6gMAAAAAAAADAAAAl+c+ov/////kBwAAAgAAAOsDAAAAAAAAAwAAAJfnPqL/////5gcAAAIAAADsAwAAAAAAAAMAAACX5z6i/////+gHAAACAAAA7QMAAAAAAAADAAAAl+c+ov/////qBwAAAgAAAO4DAAAAAAAAAwAAAJfnPqL/////7AcAAAIAAADvAwAAAAAAAAMAAACX5z6i/////+4HAAACAAAA8AMAAAAAAAADAAAAl+c+ov/////wBwAAAgAAAPEDAAAAAAAAAwAAAJfnPqL/////8gcAAAIAAADyAwAAAAAAAAMAAACX5z6i//////QHAAACAAAA8wMAAAAAAAADAAAAl+c+ov/////2BwAAAgAAAPQDAAAAAAAAAwAAAJfnPqL/////+AcAAAIAAAD1AwAAAAAAAAMAAACX5z6i//////oHAAACAAAA9gMAAAAAAAADAAAAl+c+ov/////8BwAAAgAAAPcDAAAAAAAAAwAAAJfnPqL//////gcAAAIAAAD4AwAAAAAAAAMAAACX5z6i/////wAIAAACAAAA+QMAAAAAAAADAAAAl+c+ov////8CCAAAAgAAAPoDAAAAAAAAAwAAAJfnPqL/////BAgAAAIAAAD7AwAAAAAAAAMAAACX5z6i/////wYIAAACAAAA/AMAAAAAAAADAAAAl+c+ov////8ICAAAAgAAAP0DAAAAAAAAAwAAAJfnPqL/////CggAAAIAAAD+AwAAAAAAAAMAAACX5z6i/////wwIAAACAAAA/wMAAAAAAAADAAAAl+c+ov////8OCAAAAgAAAAAEAAAAAAAAAwAAAJfnPqL/////EAgAAAIAAAABBAAAAAAAAAMAAACX5z6i/////xIIAAACAAAAAgQAAAAAAAADAAAAl+c+ov////8UCAAAAgAAAAMEAAAAAAAAAwAAAJfnPqL/////FggAAAIAAAAEBAAAAAAAAAMAAACX5z6i/////xgIAAACAAAABQQAAAAAAAADAAAAl+c+ov////8aCAAAAgAAAAYEAAAAAAAAAwAAAJfnPqL/////HAgAAAIAAAAHBAAAAAAAAAMAAACX5z6i/////x4IAAACAAAACAQAAAAAAAADAAAAl+c+ov////8gCAAAAgAAAAkEAAAAAAAAAwAAAJfnPqL/////IggAAAIAAAAKBAAAAAAAAAMAAACX5z6i/////yQIAAACAAAACwQAAAAAAAADAAAAl+c+ov////8mCAAAAgAAAAwEAAAAAAAAAwAAAJfnPqL/////KAgAAAIAAAANBAAAAAAAAAMAAACX5z6i/////yoIAAACAAAADgQAAAAAAAADAAAAl+c+ov////8sCAAAAgAAAA8EAAAAAAAAAwAAAJfnPqL/////LggAAAIAAAAQBAAAAAAAAAMAAACX5z6i/////zAIAAACAAAAEQQAAAAAAAADAAAAl+c+ov////8yCAAAAgAAABIEAAAAAAAAAwAAAJfnPqL/////NAgAAAIAAAATBAAAAAAAAAMAAACX5z6i/////zYIAAACAAAAFAQAAAAAAAADAAAAl+c+ov////84CAAAAgAAABUEAAAAAAAAAwAAAJfnPqL/////OggAAAIAAAAWBAAAAAAAAAMAAACX5z6i/////zwIAAACAAAAFwQAAAAAAAADAAAAl+c+ov////8+CAAAAgAAABgEAAAAAAAAAwAAAJfnPqL/////QAgAAAIAAAAZBAAAAAAAAAMAAACX5z6i/////0IIAAACAAAAGgQAAAAAAAADAAAAl+c+ov////9ECAAAAgAAABsEAAAAAAAAAwAAAJfnPqL/////RggAAAIAAAAcBAAAAAAAAAMAAACX5z6i/////0gIAAACAAAAHQQAAAAAAAADAAAAl+c+ov////9KCAAAAgAAAB4EAAAAAAAAAwAAAJfnPqL/////TAgAAAIAAAAfBAAAAAAAAAMAAACX5z6i/////04IAAACAAAAIAQAAAAAAAADAAAAl+c+ov////9QCAAAAgAAACEEAAAAAAAAAwAAAJfnPqL/////UggAAAIAAAAiBAAAAAAAAAMAAACX5z6i/////1QIAAACAAAAIwQAAAAAAAADAAAAl+c+ov////9WCAAAAgAAACQEAAAAAAAAAwAAAJfnPqL/////WAgAAAIAAAAlBAAAAAAAAAMAAACX5z6i/////1oIAAACAAAAJgQAAAAAAAADAAAAl+c+ov////9cCAAAAgAAACcEAAAAAAAAAwAAAJfnPqL/////XggAAAIAAAAoBAAAAAAAAAMAAACX5z6i/////2AIAAACAAAAKQQAAAAAAAADAAAAl+c+ov////9iCAAAAgAAACoEAAAAAAAAAwAAAJfnPqL/////ZAgAAAIAAAArBAAAAAAAAAMAAACX5z6i/////2YIAAACAAAALAQAAAAAAAADAAAAl+c+ov////9oCAAAAgAAAC0EAAAAAAAAAwAAAJfnPqL/////aggAAAIAAAAuBAAAAAAAAAMAAACX5z6i/////2wIAAACAAAALwQAAAAAAAADAAAAl+c+ov////9uCAAAAgAAADAEAAAAAAAAAwAAAJfnPqL/////cAgAAAIAAAAxBAAAAAAAAAMAAACX5z6i/////3IIAAACAAAAMgQAAAAAAAADAAAAl+c+ov////90CAAAAgAAADMEAAAAAAAAAwAAAJfnPqL/////dggAAAIAAAA0BAAAAAAAAAMAAACX5z6i/////3gIAAACAAAANQQAAAAAAAADAAAAl+c+ov////96CAAAAgAAADYEAAAAAAAAAwAAAJfnPqL/////fAgAAAIAAAA3BAAAAAAAAAMAAACX5z6i/////34IAAACAAAAOAQAAAAAAAADAAAAl+c+ov////+ACAAAAgAAADkEAAAAAAAAAwAAAJfnPqL/////gggAAAIAAAA6BAAAAAAAAAMAAACX5z6i/////4QIAAACAAAAOwQAAAAAAAADAAAAl+c+ov////+GCAAAAgAAADwEAAAAAAAAAwAAAJfnPqL/////iAgAAAIAAAA9BAAAAAAAAAMAAACX5z6i/////4oIAAACAAAAPgQAAAAAAAADAAAAl+c+ov////+MCAAAAgAAAD8EAAAAAAAAAwAAAJfnPqL/////jggAAAIAAABABAAAAAAAAAMAAACX5z6i/////5AIAAACAAAAQQQAAAAAAAADAAAAl+c+ov////+SCAAAAgAAAEIEAAAAAAAAAwAAAJfnPqL/////lAgAAAIAAABDBAAAAAAAAAMAAACX5z6i/////5YIAAACAAAARAQAAAAAAAADAAAAl+c+ov////+YCAAAAgAAAEUEAAAAAAAAAwAAAJfnPqL/////mggAAAIAAABGBAAAAAAAAAMAAACX5z6i/////5wIAAACAAAARwQAAAAAAAADAAAAl+c+ov////+eCAAAAgAAAEgEAAAAAAAAAwAAAJfnPqL/////oAgAAAIAAABJBAAAAAAAAAMAAACX5z6i/////6IIAAACAAAASgQAAAAAAAADAAAAl+c+ov////+kCAAAAgAAAEsEAAAAAAAAAwAAAJfnPqL/////pggAAAIAAABMBAAAAAAAAAMAAACX5z6i/////6gIAAACAAAATQQAAAAAAAADAAAAl+c+ov////+qCAAAAgAAAE4EAAAAAAAAAwAAAJfnPqL/////rAgAAAIAAABPBAAAAAAAAAMAAACX5z6i/////64IAAACAAAAUAQAAAAAAAADAAAAl+c+ov////+wCAAAAgAAAFEEAAAAAAAAAwAAAJfnPqL/////sggAAAIAAABSBAAAAAAAAAMAAACX5z6i/////7QIAAACAAAAUwQAAAAAAAADAAAAl+c+ov////+2CAAAAgAAAFQEAAAAAAAAAwAAAJfnPqL/////uAgAAAIAAABVBAAAAAAAAAMAAACX5z6i/////7oIAAACAAAAVgQAAAAAAAADAAAAl+c+ov////+8CAAAAgAAAFcEAAAAAAAAAwAAAJfnPqL/////vggAAAIAAABYBAAAAAAAAAMAAACX5z6i/////8AIAAACAAAAWQQAAAAAAAADAAAAl+c+ov/////CCAAAAgAAAFoEAAAAAAAAAwAAAJfnPqL/////xAgAAAIAAABbBAAAAAAAAAMAAACX5z6i/////8YIAAACAAAAXAQAAAAAAAADAAAAl+c+ov/////ICAAAAgAAAF0EAAAAAAAAAwAAAJfnPqL/////yggAAAIAAABeBAAAAAAAAAMAAACX5z6i/////8wIAAACAAAAXwQAAAAAAAADAAAAl+c+ov/////OCAAAAgAAAGAEAAAAAAAAAwAAAJfnPqL/////0AgAAAIAAABhBAAAAAAAAAMAAACX5z6i/////9IIAAACAAAAYgQAAAAAAAADAAAAl+c+ov/////UCAAAAgAAAGMEAAAAAAAAAwAAAJfnPqL/////1ggAAAIAAABkBAAAAAAAAAMAAACX5z6i/////9gIAAACAAAAZQQAAAAAAAADAAAAl+c+ov/////aCAAAAgAAAGYEAAAAAAAAAwAAAJfnPqL/////3AgAAAIAAABnBAAAAAAAAAMAAACX5z6i/////94IAAACAAAAaAQAAAAAAAADAAAAl+c+ov/////gCAAAAgAAAGkEAAAAAAAAAwAAAJfnPqL/////4ggAAAIAAABqBAAAAAAAAAMAAACX5z6i/////+QIAAACAAAAawQAAAAAAAADAAAAl+c+ov/////mCAAAAgAAAGwEAAAAAAAAAwAAAJfnPqL/////6AgAAAIAAABtBAAAAAAAAAMAAACX5z6i/////+oIAAACAAAAbgQAAAAAAAADAAAAl+c+ov/////sCAAAAgAAAG8EAAAAAAAAAwAAAJfnPqL/////7ggAAAIAAABwBAAAAAAAAAMAAACX5z6i//////AIAAACAAAAcQQAAAAAAAADAAAAl+c+ov/////yCAAAAgAAAHIEAAAAAAAAAwAAAJfnPqL/////9AgAAAIAAABzBAAAAAAAAAMAAACX5z6i//////YIAAACAAAAdAQAAAAAAAADAAAAl+c+ov/////4CAAAAgAAAHUEAAAAAAAAAwAAAJfnPqL/////+ggAAAIAAAB2BAAAAAAAAAMAAACX5z6i//////wIAAACAAAAdwQAAAAAAAADAAAAl+c+ov/////+CAAAAgAAAHgEAAAAAAAAAwAAAJfnPqL/////AAkAAAIAAAB5BAAAAAAAAAMAAACX5z6i/////wIJAAACAAAAegQAAAAAAAADAAAAl+c+ov////8ECQAAAgAAAHsEAAAAAAAAAwAAAJfnPqL/////BgkAAAIAAAB8BAAAAAAAAAMAAACX5z6i/////wgJAAACAAAAfQQAAAAAAAADAAAAl+c+ov////8KCQAAAgAAAH4EAAAAAAAAAwAAAJfnPqL/////DAkAAAIAAAB/BAAAAAAAAAMAAACX5z6i/////w4JAAACAAAAgAQAAAAAAAADAAAAl+c+ov////8QCQAAAgAAAIEEAAAAAAAAAwAAAJfnPqL/////EgkAAAIAAACCBAAAAAAAAAMAAACX5z6i/////xQJAAACAAAAgwQAAAAAAAADAAAAl+c+ov////8WCQAAAgAAAIQEAAAAAAAAAwAAAJfnPqL/////GAkAAAIAAACFBAAAAAAAAAMAAACX5z6i/////xoJAAACAAAAhgQAAAAAAAADAAAAl+c+ov////8cCQAAAgAAAIcEAAAAAAAAAwAAAJfnPqL/////HgkAAAIAAACIBAAAAAAAAAMAAACX5z6i/////yAJAAACAAAAiQQAAAAAAAADAAAAl+c+ov////8iCQAAAgAAAIoEAAAAAAAAAwAAAJfnPqL/////JAkAAAIAAACLBAAAAAAAAAMAAACX5z6i/////yYJAAACAAAAjAQAAAAAAAADAAAAl+c+ov////8oCQAAAgAAAI0EAAAAAAAAAwAAAJfnPqL/////KgkAAAIAAACOBAAAAAAAAAMAAACX5z6i/////ywJAAACAAAAjwQAAAAAAAADAAAAl+c+ov////8uCQAAAgAAAJAEAAAAAAAAAwAAAJfnPqL/////MAkAAAIAAACRBAAAAAAAAAMAAACX5z6i/////zIJAAACAAAAkgQAAAAAAAADAAAAl+c+ov////80CQAAAgAAAJMEAAAAAAAAAwAAAJfnPqL/////NgkAAAIAAACUBAAAAAAAAAMAAACX5z6i/////zgJAAACAAAAlQQAAAAAAAADAAAAl+c+ov////86CQAAAgAAAJYEAAAAAAAAAwAAAJfnPqL/////PAkAAAIAAACXBAAAAAAAAAMAAACX5z6i/////z4JAAACAAAAmAQAAAAAAAADAAAAl+c+ov////9ACQAAAgAAAJkEAAAAAAAAAwAAAJfnPqL/////QgkAAAIAAACaBAAAAAAAAAMAAACX5z6i/////0QJAAACAAAAmwQAAAAAAAADAAAAl+c+ov////9GCQAAAgAAAJwEAAAAAAAAAwAAAJfnPqL/////SAkAAAIAAACdBAAAAAAAAAMAAACX5z6i/////0oJAAACAAAAngQAAAAAAAADAAAAl+c+ov////9MCQAAAgAAAJ8EAAAAAAAAAwAAAJfnPqL/////TgkAAAIAAACgBAAAAAAAAAMAAACX5z6i/////1AJAAACAAAAoQQAAAAAAAADAAAAl+c+ov////9SCQAAAgAAAKIEAAAAAAAAAwAAAJfnPqL/////VAkAAAIAAACjBAAAAAAAAAMAAACX5z6i/////1YJAAACAAAApAQAAAAAAAADAAAAl+c+ov////9YCQAAAgAAAKUEAAAAAAAAAwAAAJfnPqL/////WgkAAAIAAACmBAAAAAAAAAMAAACX5z6i/////1wJAAACAAAApwQAAAAAAAADAAAAl+c+ov////9eCQAAAgAAAKgEAAAAAAAAAwAAAJfnPqL/////YAkAAAIAAACpBAAAAAAAAAMAAACX5z6i/////2IJAAACAAAAqgQAAAAAAAADAAAAl+c+ov////9kCQAAAgAAAKsEAAAAAAAAAwAAAJfnPqL/////ZgkAAAIAAACsBAAAAAAAAAMAAACX5z6i/////2gJAAACAAAArQQAAAAAAAADAAAAl+c+ov////9qCQAAAgAAAK4EAAAAAAAAAwAAAJfnPqL/////bAkAAAIAAACvBAAAAAAAAAMAAACX5z6i/////24JAAACAAAAsAQAAAAAAAADAAAAl+c+ov////9wCQAAAgAAALEEAAAAAAAAAwAAAJfnPqL/////cgkAAAIAAACyBAAAAAAAAAMAAACX5z6i/////3QJAAACAAAAswQAAAAAAAADAAAAl+c+ov////92CQAAAgAAALQEAAAAAAAAAwAAAJfnPqL/////eAkAAAIAAAC1BAAAAAAAAAMAAACX5z6i/////3oJAAACAAAAtgQAAAAAAAADAAAAl+c+ov////98CQAAAgAAALcEAAAAAAAAAwAAAJfnPqL/////fgkAAAIAAAC4BAAAAAAAAAMAAACX5z6i/////4AJAAACAAAAuQQAAAAAAAADAAAAl+c+ov////+CCQAAAgAAALoEAAAAAAAAAwAAAJfnPqL/////hAkAAAIAAAC7BAAAAAAAAAMAAACX5z6i/////4YJAAACAAAAvAQAAAAAAAADAAAAl+c+ov////+ICQAAAgAAAL0EAAAAAAAAAwAAAJfnPqL/////igkAAAIAAAC+BAAAAAAAAAMAAACX5z6i/////4wJAAACAAAAvwQAAAAAAAADAAAAl+c+ov////+OCQAAAgAAAMAEAAAAAAAAAwAAAJfnPqL/////kAkAAAIAAADBBAAAAAAAAAMAAACX5z6i/////5IJAAACAAAAwgQAAAAAAAADAAAAl+c+ov////+UCQAAAgAAAMMEAAAAAAAAAwAAAJfnPqL/////lgkAAAIAAADEBAAAAAAAAAMAAACX5z6i/////5gJAAACAAAAxQQAAAAAAAADAAAAl+c+ov////+aCQAAAgAAAMYEAAAAAAAAAwAAAJfnPqL/////nAkAAAIAAADHBAAAAAAAAAMAAACX5z6i/////54JAAACAAAAyAQAAAAAAAADAAAAl+c+ov////+gCQAAAgAAAMkEAAAAAAAAAwAAAJfnPqL/////ogkAAAIAAADKBAAAAAAAAAMAAACX5z6i/////6QJAAACAAAAywQAAAAAAAADAAAAl+c+ov////+mCQAAAgAAAMwEAAAAAAAAAwAAAJfnPqL/////qAkAAAIAAADNBAAAAAAAAAMAAACX5z6i/////6oJAAACAAAAzgQAAAAAAAADAAAAl+c+ov////+sCQAAAgAAAM8EAAAAAAAAAwAAAJfnPqL/////rgkAAAIAAADQBAAAAAAAAAMAAACX5z6i/////7AJAAACAAAA0QQAAAAAAAADAAAAl+c+ov////+yCQAAAgAAANIEAAAAAAAAAwAAAJfnPqL/////tAkAAAIAAADTBAAAAAAAAAMAAACX5z6i/////7YJAAACAAAA1AQAAAAAAAADAAAAl+c+ov////+4CQAAAgAAANUEAAAAAAAAAwAAAJfnPqL/////ugkAAAIAAADWBAAAAAAAAAMAAACX5z6i/////7wJAAACAAAA1wQAAAAAAAADAAAAl+c+ov////++CQAAAgAAANgEAAAAAAAAAwAAAJfnPqL/////wAkAAAIAAADZBAAAAAAAAAMAAACX5z6i/////8IJAAACAAAA2gQAAAAAAAADAAAAl+c+ov/////ECQAAAgAAANsEAAAAAAAAAwAAAJfnPqL/////xgkAAAIAAADcBAAAAAAAAAMAAACX5z6i/////8gJAAACAAAA3QQAAAAAAAADAAAAl+c+ov/////KCQAAAgAAAN4EAAAAAAAAAwAAAJfnPqL/////zAkAAAIAAADfBAAAAAAAAAMAAACX5z6i/////84JAAACAAAA4AQAAAAAAAADAAAAl+c+ov/////QCQAAAgAAAOEEAAAAAAAAAwAAAJfnPqL/////0gkAAAIAAADiBAAAAAAAAAMAAACX5z6i/////9QJAAACAAAA4wQAAAAAAAADAAAAl+c+ov/////WCQAAAgAAAOQEAAAAAAAAAwAAAJfnPqL/////2AkAAAIAAADlBAAAAAAAAAMAAACX5z6i/////9oJAAACAAAA5gQAAAAAAAADAAAAl+c+ov/////cCQAAAgAAAOcEAAAAAAAAAwAAAJfnPqL/////3gkAAAIAAADoBAAAAAAAAAMAAACX5z6i/////+AJAAACAAAA6QQAAAAAAAADAAAAl+c+ov/////iCQAAAgAAAOoEAAAAAAAAAwAAAJfnPqL/////5AkAAAIAAADrBAAAAAAAAAMAAACX5z6i/////+YJAAACAAAA7AQAAAAAAAADAAAAl+c+ov/////oCQAAAgAAAO0EAAAAAAAAAwAAAJfnPqL/////6gkAAAIAAADuBAAAAAAAAAMAAACX5z6i/////+wJAAACAAAA7wQAAAAAAAADAAAAl+c+ov/////uCQAAAgAAAPAEAAAAAAAAAwAAAJfnPqL/////8AkAAAIAAADxBAAAAAAAAAMAAACX5z6i//////IJAAACAAAA8gQAAAAAAAADAAAAl+c+ov/////0CQAAAgAAAPMEAAAAAAAAAwAAAJfnPqL/////9gkAAAIAAAD0BAAAAAAAAAMAAACX5z6i//////gJAAACAAAA9QQAAAAAAAADAAAAl+c+ov/////6CQAAAgAAAPYEAAAAAAAAAwAAAJfnPqL//////AkAAAIAAAD3BAAAAAAAAAMAAACX5z6i//////4JAAACAAAA+AQAAAAAAAADAAAAl+c+ov////8ACgAAAgAAAPkEAAAAAAAAAwAAAJfnPqL/////AgoAAAIAAAD6BAAAAAAAAAMAAACX5z6i/////wQKAAACAAAA+wQAAAAAAAADAAAAl+c+ov////8GCgAAAgAAAPwEAAAAAAAAAwAAAJfnPqL/////CAoAAAIAAAD9BAAAAAAAAAMAAACX5z6i/////woKAAACAAAA/gQAAAAAAAADAAAAl+c+ov////8MCgAAAgAAAP8EAAAAAAAAAwAAAJfnPqL/////DgoAAAIAAAAABQAAAAAAAAMAAACX5z6i/////xAKAAACAAAAAQUAAAAAAAADAAAAl+c+ov////8SCgAAAgAAAAIFAAAAAAAAAwAAAJfnPqL/////FAoAAAIAAAADBQAAAAAAAAMAAACX5z6i/////xYKAAACAAAABAUAAAAAAAADAAAAl+c+ov////8YCgAAAgAAAAUFAAAAAAAAAwAAAJfnPqL/////GgoAAAIAAAAGBQAAAAAAAAMAAACX5z6i/////xwKAAACAAAABwUAAAAAAAADAAAAl+c+ov////8eCgAAAgAAAAgFAAAAAAAAAwAAAJfnPqL/////IAoAAAIAAAAJBQAAAAAAAAMAAACX5z6i/////yIKAAACAAAACgUAAAAAAAADAAAAl+c+ov////8kCgAAAgAAAAsFAAAAAAAAAwAAAJfnPqL/////JgoAAAIAAAAMBQAAAAAAAAMAAACX5z6i/////ygKAAACAAAADQUAAAAAAAADAAAAl+c+ov////8qCgAAAgAAAA4FAAAAAAAAAwAAAJfnPqL/////LAoAAAIAAAAPBQAAAAAAAAMAAACX5z6i/////y4KAAACAAAAEAUAAAAAAAADAAAAl+c+ov////8wCgAAAgAAABEFAAAAAAAAAwAAAJfnPqL/////MgoAAAIAAAASBQAAAAAAAAMAAACX5z6i/////zQKAAACAAAAEwUAAAAAAAADAAAAl+c+ov////82CgAAAgAAABQFAAAAAAAAAwAAAJfnPqL/////OAoAAAIAAAAVBQAAAAAAAAMAAACX5z6i/////zoKAAACAAAAFgUAAAAAAAADAAAAl+c+ov////88CgAAAgAAABcFAAAAAAAAAwAAAJfnPqL/////PgoAAAIAAAAYBQAAAAAAAAMAAACX5z6i/////0AKAAACAAAAGQUAAAAAAAADAAAAl+c+ov////9CCgAAAgAAABoFAAAAAAAAAwAAAJfnPqL/////RAoAAAIAAAAbBQAAAAAAAAMAAACX5z6i/////0YKAAACAAAAHAUAAAAAAAADAAAAl+c+ov////9ICgAAAgAAAB0FAAAAAAAAAwAAAJfnPqL/////SgoAAAIAAAAeBQAAAAAAAAMAAACX5z6i/////0wKAAACAAAAHwUAAAAAAAADAAAAl+c+ov////9OCgAAAgAAACAFAAAAAAAAAwAAAJfnPqL/////UAoAAAIAAAAhBQAAAAAAAAMAAACX5z6i/////1IKAAACAAAAIgUAAAAAAAADAAAAl+c+ov////9UCgAAAgAAACMFAAAAAAAAAwAAAJfnPqL/////VgoAAAIAAAAkBQAAAAAAAAMAAACX5z6i/////1gKAAACAAAAJQUAAAAAAAADAAAAl+c+ov////9aCgAAAgAAACYFAAAAAAAAAwAAAJfnPqL/////XAoAAAIAAAAnBQAAAAAAAAMAAACX5z6i/////14KAAACAAAAKAUAAAAAAAADAAAAl+c+ov////9gCgAAAgAAACkFAAAAAAAAAwAAAJfnPqL/////YgoAAAIAAAAqBQAAAAAAAAMAAACX5z6i/////2QKAAACAAAAKwUAAAAAAAADAAAAl+c+ov////9mCgAAAgAAACwFAAAAAAAAAwAAAJfnPqL/////aAoAAAIAAAAtBQAAAAAAAAMAAACX5z6i/////2oKAAACAAAALgUAAAAAAAADAAAAl+c+ov////9sCgAAAgAAAC8FAAAAAAAAAwAAAJfnPqL/////bgoAAAIAAAAwBQAAAAAAAAMAAACX5z6i/////3AKAAACAAAAMQUAAAAAAAADAAAAl+c+ov////9yCgAAAgAAADIFAAAAAAAAAwAAAJfnPqL/////dAoAAAIAAAAzBQAAAAAAAAMAAACX5z6i/////3YKAAACAAAANAUAAAAAAAADAAAAl+c+ov////94CgAAAgAAADUFAAAAAAAAAwAAAJfnPqL/////egoAAAIAAAA2BQAAAAAAAAMAAACX5z6i/////3wKAAACAAAANwUAAAAAAAADAAAAl+c+ov////9+CgAAAgAAADgFAAAAAAAAAwAAAJfnPqL/////gAoAAAIAAAA5BQAAAAAAAAMAAACX5z6i/////4IKAAACAAAAOgUAAAAAAAADAAAAl+c+ov////+ECgAAAgAAADsFAAAAAAAAAwAAAJfnPqL/////hgoAAAIAAAA8BQAAAAAAAAMAAACX5z6i/////4gKAAACAAAAPQUAAAAAAAADAAAAl+c+ov////+KCgAAAgAAAD4FAAAAAAAAAwAAAJfnPqL/////jAoAAAIAAAA/BQAAAAAAAAMAAACX5z6i/////44KAAACAAAAQAUAAAAAAAADAAAAl+c+ov////+QCgAAAgAAAEEFAAAAAAAAAwAAAJfnPqL/////kgoAAAIAAABCBQAAAAAAAAMAAACX5z6i/////5QKAAACAAAAQwUAAAAAAAADAAAAl+c+ov////+WCgAAAgAAAEQFAAAAAAAAAwAAAJfnPqL/////mAoAAAIAAABFBQAAAAAAAAMAAACX5z6i/////5oKAAAAAAAARgUAAAAAAAADAAAAl+c+ov////+cCgAAAAAAAEcFAAAAAAAAAwAAAJfnPqL/////ngoAAAAAAABIBQAAAAAAAAMAAACX5z6i/////6AKAAAAAAAASQUAAAAAAAADAAAAl+c+ov////+iCgAAAAAAAEoFAAAAAAAAAwAAAJfnPqL/////pAoAAAAAAABLBQAAAAAAAAMAAACX5z6i/////6YKAAAAAAAATAUAAAAAAAADAAAAl+c+ov////+oCgAAAAAAAE0FAAAAAAAAAwAAAJfnPqL/////qgoAAAAAAABOBQAAAAAAAAMAAACX5z6i/////6wKAAAAAAAATwUAAAAAAAADAAAAl+c+ov////+uCgAAAAAAAFAFAAADAAAA/////wAAAAD/////sAoAAAYAAABRBQAAAAAAAAMAAACX5z6i/////7MKAAAAAAAAUgUAAAAAAAADAAAAl+c+ov////+1CgAAAAAAAFMFAAAAAAAAAwAAAJfnPqL/////twoAAAAAAABUBQAAAgAAAP////8AAAAA/////7kKAAADAAAAVQUAAAAAAAADAAAAl+c+ov////+7CgAAAAAAAFYFAAAAAAAAAwAAAJfnPqL/////vQoAAAAAAABXBQAAAAAAAAMAAACX5z6i/////78KAAAAAAAAWAUAAAAAAAADAAAAl+c+ov/////BCgAAAAAAAFkFAAAAAAAAAwAAAJfnPqL/////wwoAAAAAAABaBQAAAAAAAAMAAACX5z6i/////8UKAAAAAAAAWwUAAAAAAAADAAAAl+c+ov/////HCgAAAAAAAFwFAAAAAAAAAwAAAJfnPqL/////yQoAAAAAAABdBQAAAAAAAAMAAACX5z6i/////8sKAAAAAAAAXgUAAAAAAAADAAAAl+c+ov/////NCgAAAAAAAF8FAAAAAAAAAwAAAJfnPqL/////zwoAAAAAAABgBQAAAAAAAAMAAACX5z6i/////9EKAAAAAAAAYQUAAAAAAAADAAAAl+c+ov/////TCgAAAAAAAGIFAAAAAAAAAwAAAJfnPqL/////1QoAAAAAAABjBQAAAAAAAAMAAACX5z6i/////9cKAAAAAAAAZAUAAAAAAAADAAAAl+c+ov/////ZCgAAAAAAAGUFAAAAAAAAAwAAAJfnPqL/////2woAAAAAAABmBQAAAAAAAAMAAACX5z6i/////90KAAAAAAAAZwUAAAAAAAADAAAAl+c+ov/////fCgAAAAAAAGgFAAAAAAAAAwAAAJfnPqL/////4QoAAAAAAABpBQAAAAAAAAMAAACX5z6i/////+MKAAAAAAAAagUAAAAAAAADAAAAl+c+ov/////lCgAAAAAAAGsFAAAAAAAAAwAAAJfnPqL/////5woAAAAAAABsBQAAAAAAAAMAAACX5z6i/////+kKAAAAAAAAbQUAAAAAAAADAAAAl+c+ov/////rCgAAAAAAAG4FAAAAAAAAAwAAAJfnPqL/////7QoAAAAAAABvBQAAAAAAAAMAAACX5z6i/////+8KAAAAAAAAcAUAAAAAAAADAAAAl+c+ov/////xCgAAAAAAAHEFAAAAAAAAAwAAAJfnPqL/////8woAAAAAAAByBQAAAAAAAAMAAACX5z6i//////UKAAAAAAAAcwUAAAAAAAADAAAAl+c+ov/////3CgAAAAAAAHQFAAAAAAAAAwAAAJfnPqL/////+QoAAAAAAAB1BQAAAAAAAAMAAACX5z6i//////sKAAAAAAAAdgUAAAAAAAADAAAAl+c+ov/////9CgAAAAAAAHcFAAAAAAAAAwAAAJfnPqL//////woAAAAAAAB4BQAAAAAAAAMAAACX5z6i/////wELAAAAAAAAeQUAAAAAAAADAAAAl+c+ov////8DCwAAAgAAAHkFAAAAAAAAAwAAAJfnPqL/////BQsAAAAAAAB6BQAAAAAAAAMAAACX5z6i/////wcLAAAAAAAAewUAAAAAAAADAAAAl+c+ov////8JCwAAAAAAAHwFAAAAAAAAAwAAAJfnPqL/////CwsAAAAAAAB9BQAAAAAAAAMAAACX5z6i/////w0LAAAAAAAAfgUAAAAAAAADAAAAl+c+ov////8PCwAAAAAAAH8FAAAAAAAAAwAAAJfnPqL/////EQsAAAAAAACABQAAAAAAAAMAAACX5z6i/////xMLAAAAAAAAgQUAAAAAAAADAAAAl+c+ov////8VCwAAAAAAAIIFAAAAAAAAAwAAAJfnPqL/////FwsAAAAAAACDBQAAAAAAAAMAAACX5z6i/////xkLAAAAAAAAhAUAAAAAAAADAAAAl+c+ov////8bCwAAAAAAAIUFAAAAAAAAAwAAAJfnPqL/////HQsAAAAAAACGBQAAAAAAAAMAAACX5z6i/////x8LAAAAAAAAhwUAAAAAAAADAAAAl+c+ov////8hCwAAAAAAAIgFAAAAAAAAAwAAAJfnPqL/////IwsAAAAAAACJBQAAAAAAAAMAAACX5z6i/////yULAAAAAAAAigUAAAAAAAADAAAAl+c+ov////8nCwAAAAAAAIsFAAAAAAAAAwAAAJfnPqL/////KQsAAAAAAACMBQAAAAAAAAMAAACX5z6i/////ysLAAAAAAAAjQUAAAAAAAADAAAAl+c+ov////8tCwAAAAAAAI4FAAAAAAAAAwAAAJfnPqL/////LwsAAAAAAACPBQAAAAAAAAMAAACX5z6i/////zELAAAAAAAAkAUAAAAAAAADAAAAl+c+ov////8zCwAAAAAAAJEFAAAAAAAAAwAAAJfnPqL/////NQsAAAAAAACSBQAAAAAAAAMAAACX5z6i/////zcLAAAAAAAAkwUAAAIAAAD/////AAAAAP////85CwAAAwAAAJQFAAACAAAA/////wAAAAD/////OwsAAAMAAACVBQAAAAAAAAMAAACX5z6i/////z0LAAAAAAAAlgUAAAAAAAADAAAAl+c+ov////8/CwAAAAAAAJcFAAAAAAAAAwAAAJfnPqL/////QQsAAAAAAACYBQAAAAAAAAMAAACX5z6i/////0MLAAAAAAAAmQUAAAAAAAADAAAAl+c+ov////9FCwAAAAAAAJoFAAAAAAAAAwAAAJfnPqL/////RwsAAAAAAACbBQAAAAAAAAMAAACX5z6i/////0kLAAAAAAAAnAUAAAAAAAADAAAAl+c+ov////9LCwAAAAAAAJ0FAAAAAAAAAwAAAJfnPqL/////TQsAAAAAAACeBQAAAAAAAAMAAACX5z6i/////08LAAAAAAAAnwUAAAAAAAADAAAAl+c+ov////9RCwAAAAAAAKAFAAAAAAAAAwAAAJfnPqL/////UwsAAAAAAAChBQAAAAAAAAMAAACX5z6i/////1ULAAAAAAAAogUAAAAAAAADAAAAl+c+ov////9XCwAAAAAAAKMFAAAAAAAAAwAAAJfnPqL/////WQsAAAAAAACkBQAAAAAAAAMAAACX5z6i/////1sLAAAAAAAApQUAAAAAAAADAAAAl+c+ov////9dCwAAAAAAAKYFAAAAAAAAAwAAAJfnPqL/////XwsAAAAAAACnBQAAAAAAAAMAAACX5z6i/////2ELAAAAAAAAqAUAAAAAAAADAAAAl+c+ov////9jCwAAAAAAAKkFAAAAAAAAAwAAAJfnPqL/////ZQsAAAAAAACqBQAAAAAAAAMAAACX5z6i/////2cLAAAAAAAAqwUAAAAAAAADAAAAl+c+ov////9pCwAAAAAAAKwFAAAAAAAAAwAAAJfnPqL/////awsAAAAAAACtBQAAAwAAAP////8AAAAA/////20LAAAGAAAArgUAAAAAAAADAAAAl+c+ov////9wCwAAAAAAAK8FAAAAAAAAAwAAAJfnPqL/////cgsAAAAAAACwBQAAAAAAAAMAAACX5z6i/////3QLAAAAAAAAsQUAAAAAAAADAAAAl+c+ov////92CwAAAAAAALIFAAAAAAAAAwAAAJfnPqL/////eAsAAAAAAACzBQAAAAAAAAMAAACX5z6i/////3oLAAAAAAAAtAUAAAAAAAADAAAAl+c+ov////98CwAAAAAAALUFAAAAAAAAAwAAAJfnPqL/////fgsAAAAAAAC2BQAAAAAAAAMAAACX5z6i/////4ALAAAAAAAAtwUAAAMAAAD/////AAAAAP////+CCwAABgAAALgFAAACAAAA/////wAAAAD/////hQsAAAcAAAC5BQAAAgAAAP////8AAAAA/////4cLAAAHAAAAugUAAAIAAAD/////AAAAAP////+JCwAABwAAALsFAAACAAAA/////wAAAAD/////iwsAAAcAAAC8BQAAAgAAAP////8AAAAA/////40LAAAHAAAAvQUAAAIAAAD/////AAAAAP////+PCwAABwAAAL4FAAACAAAA/////wAAAAD/////kQsAAAcAAAC/BQAAAgAAAP////8AAAAA/////5MLAAAHAAAAwAUAAAIAAAD/////AAAAAP////+VCwAABwAAAMEFAAACAAAA/////wAAAAD/////lwsAAAcAAADCBQAAAgAAAP////8AAAAA/////5kLAAAHAAAAwwUAAAIAAAD/////AAAAAP////+bCwAABwAAAMQFAAACAAAA/////wAAAAD/////nQsAAAcAAADFBQAAAgAAAP////8AAAAA/////58LAAAHAAAAxgUAAAAAAAADAAAAl+c+ov////+hCwAAAAAAAMcFAAAAAAAAAwAAAJfnPqL/////owsAAAAAAADIBQAAAAAAAAMAAACX5z6i/////6ULAAAAAAAAyQUAAAAAAAADAAAAl+c+ov////+nCwAAAAAAAMoFAAAAAAAAAwAAAJfnPqL/////qQsAAAIAAADKBQAAAAAAAAMAAACX5z6i/////6sLAAAAAAAAywUAAAAAAAADAAAAl+c+ov////+tCwAAAAAAAMwFAAAAAAAAAwAAAJfnPqL/////rwsAAAAAAADNBQAAAAAAAAMAAACX5z6i/////7ELAAAAAAAAzgUAAAAAAAADAAAAl+c+ov////+zCwAAAAAAAM8FAAAAAAAAAwAAAJfnPqL/////tQsAAAAAAADQBQAAAAAAAAMAAACX5z6i/////7cLAAACAAAA0QUAAAAAAAADAAAAl+c+ov////+5CwAAAgAAANIFAAAAAAAAAwAAAJfnPqL/////uwsAAAIAAADTBQAAAAAAAAMAAACX5z6i/////70LAAACAAAA1AUAAAAAAAADAAAAl+c+ov////+/CwAAAgAAANUFAAAAAAAAAwAAAJfnPqL/////wQsAAAIAAADWBQAAAAAAAAMAAACX5z6i/////8MLAAACAAAA1wUAAAAAAAADAAAAl+c+ov/////FCwAAAgAAANgFAAAAAAAAAwAAAJfnPqL/////xwsAAAIAAADZBQAAAAAAAAMAAACX5z6i/////8kLAAACAAAA2gUAAAAAAAADAAAAl+c+ov/////LCwAAAgAAANsFAAAAAAAAAwAAAJfnPqL/////zQsAAAIAAADcBQAAAAAAAAMAAACX5z6i/////88LAAACAAAA3QUAAAAAAAADAAAAl+c+ov/////RCwAAAAAAAN4FAAAAAAAAAwAAAJfnPqL/////0wsAAAAAAADfBQAAAwAAAP////8AAAAA/////9ULAAAGAAAA4AUAAAAAAAADAAAAl+c+ov/////YCwAAAAAAAOEFAAAAAAAAAwAAAJfnPqL/////2gsAAAAAAADiBQAAAAAAAAMAAACX5z6i/////9wLAAAAAAAA4wUAAAAAAAADAAAAl+c+ov/////eCwAAAAAAAOQFAAAAAAAAAwAAAJfnPqL/////4AsAAAAAAADlBQAAAAAAAAMAAACX5z6i/////+ILAAAAAAAA5gUAAAAAAAADAAAAl+c+ov/////kCwAAAAAAAOcFAAAAAAAAAwAAAJfnPqL/////5gsAAAAAAADoBQAAAAAAAAMAAACX5z6i/////+gLAAAAAAAA6QUAAAAAAAADAAAAl+c+ov/////qCwAAAAAAAOoFAAAAAAAAAwAAAJfnPqL/////7AsAAAAAAADrBQAAAAAAAAMAAACX5z6i/////+4LAAACAAAA7AUAAAAAAAADAAAAl+c+ov/////wCwAAAAAAAO0FAAAAAAAAAwAAAJfnPqL/////8gsAAAAAAADuBQAAAAAAAAMAAACX5z6i//////QLAAAAAAAA7wUAAAIAAAD/////AAAAAP/////2CwAABQAAAO8FAAACAAAA/////wAAAAD/////9gsAAAQAAADwBQAAAgAAAP////8AAAAA//////gLAAAFAAAA8AUAAAIAAAD/////AAAAAP/////4CwAABAAAAPEFAAACAAAA/////wAAAAD/////+gsAAAUAAADxBQAAAgAAAP////8AAAAA//////oLAAAEAAAA8gUAAAIAAAD/////AAAAAP/////8CwAABQAAAPIFAAACAAAA/////wAAAAD//////AsAAAQAAADzBQAAAgAAAP////8AAAAA//////4LAAAFAAAA8wUAAAIAAAD/////AAAAAP/////+CwAABAAAAPQFAAACAAAA/////wAAAAD/////AAwAAAUAAAD0BQAAAgAAAP////8AAAAA/////wAMAAAEAAAA9QUAAAIAAAD/////AAAAAP////8CDAAABQAAAPUFAAACAAAA/////wAAAAD/////AgwAAAQAAAD2BQAAAgAAAP////8AAAAA/////wQMAAAFAAAA9gUAAAIAAAD/////AAAAAP////8EDAAABAAAAPcFAAACAAAA/////wAAAAD/////BgwAAAUAAAD3BQAAAgAAAP////8AAAAA/////wYMAAAEAAAA+AUAAAAAAAADAAAAl+c+ov////8IDAAAAAAAAPkFAAAAAAAAAwAAAJfnPqL/////CgwAAAAAAAD6BQAAAAAAAAMAAACX5z6i/////wwMAAAAAAAA+wUAAAAAAAADAAAAl+c+ov////8ODAAAAAAAAPwFAAAAAAAAAwAAAJfnPqL/////EAwAAAAAAAD9BQAAAAAAAAMAAACX5z6i/////xIMAAAAAAAA/gUAAAAAAAADAAAAl+c+ov////8UDAAAAAAAAP8FAAAAAAAAAwAAAJfnPqL/////FgwAAAAAAAAABgAAAAAAAAMAAACX5z6i/////xgMAAAAAAAAAQYAAAAAAAADAAAAl+c+ov////8aDAAAAAAAAAIGAAAAAAAAAwAAAJfnPqL/////HAwAAAAAAAADBgAAAAAAAAMAAACX5z6i/////x4MAAAAAAAABAYAAAAAAAADAAAAl+c+ov////8gDAAAAAAAAAUGAAADAAAA/////wAAAAD/////IgwAAAYAAAAGBgAAAAAAAAMAAACX5z6i/////yUMAAAAAAAABwYAAAAAAAADAAAAl+c+ov////8nDAAAAAAAAAgGAAAAAAAAAwAAAJfnPqL/////KQwAAAAAAAAJBgAAAAAAAAMAAACX5z6i/////ysMAAAAAAAACgYAAAAAAAADAAAAl+c+ov////8tDAAAAAAAAAsGAAAAAAAAAwAAAJfnPqL/////LwwAAAAAAAAMBgAAAAAAAAMAAACX5z6i/////zEMAAAAAAAADQYAAAAAAAADAAAAl+c+ov////8zDAAAAAAAAA4GAAAAAAAAAwAAAJfnPqL/////NQwAAAAAAAAPBgAAAAAAAAMAAACX5z6i/////zcMAAAAAAAAEAYAAAAAAAADAAAAl+c+ov////85DAAAAAAAABEGAAAAAAAAAwAAAJfnPqL/////OwwAAAAAAAASBgAAAAAAAAMAAACX5z6i/////z0MAAAAAAAAEwYAAAAAAAADAAAAl+c+ov////8/DAAAAAAAABQGAAAAAAAAAwAAAJfnPqL/////QQwAAAAAAAAVBgAAAAAAAAMAAACX5z6i/////0MMAAAAAAAAFgYAAAAAAAADAAAAl+c+ov////9FDAAAAAAAABcGAAAAAAAAAwAAAJfnPqL/////RwwAAAAAAAAYBgAAAAAAAAMAAACX5z6i/////0kMAAAAAAAAGQYAAAAAAAADAAAAl+c+ov////9LDAAAAAAAABoGAAAAAAAAAwAAAJfnPqL/////TQwAAAAAAAAbBgAAAAAAAAMAAACX5z6i/////08MAAAAAAAAHAYAAAAAAAADAAAAl+c+ov////9RDAAAAAAAAB0GAAAAAAAAAwAAAJfnPqL/////UwwAAAAAAAAeBgAAAAAAAAMAAACX5z6i/////1UMAAAAAAAAHwYAAAAAAAADAAAAl+c+ov////9XDAAAAAAAACAGAAAAAAAAAwAAAJfnPqL/////WQwAAAAAAAAhBgAAAAAAAAMAAACX5z6i/////1sMAAAAAAAAIgYAAAAAAAADAAAAl+c+ov////9dDAAAAAAAACMGAAAAAAAAAwAAAJfnPqL/////XwwAAAAAAAAkBgAAAAAAAAMAAACX5z6i/////2EMAAAAAAAAJQYAAAAAAAADAAAAl+c+ov////9jDAAAAAAAACYGAAAAAAAAAwAAAJfnPqL/////ZQwAAAAAAAAnBgAAAAAAAAMAAACX5z6i/////2cMAAAAAAAAKAYAAAAAAAADAAAAl+c+ov////9pDAAAAAAAACkGAAAAAAAAAwAAAJfnPqL/////awwAAAAAAAAqBgAAAAAAAAMAAACX5z6i/////20MAAAAAAAAKwYAAAAAAAADAAAAl+c+ov////9vDAAAAAAAACwGAAAAAAAAAwAAAJfnPqL/////cQwAAAAAAAAtBgAAAwAAAP////8AAAAA/////3MMAAAGAAAALgYAAAMAAAD/////AAAAAP////92DAAABgAAAC8GAAAAAAAAAwAAAJfnPqL/////eQwAAAAAAAAwBgAAAAAAAAMAAACX5z6i/////3sMAAAAAAAAMQYAAAAAAAADAAAAl+c+ov////99DAAAAAAAADIGAAAAAAAAAwAAAJfnPqL/////fwwAAAAAAAAzBgAAAAAAAAMAAACX5z6i/////4EMAAAAAAAANAYAAAAAAAADAAAAl+c+ov////+DDAAAAAAAADUGAAAAAAAAAwAAAJfnPqL/////hQwAAAAAAAA2BgAAAAAAAAMAAACX5z6i/////4cMAAAAAAAANwYAAAAAAAADAAAAl+c+ov////+JDAAAAAAAADgGAAAAAAAAAwAAAJfnPqL/////iwwAAAAAAAA5BgAAAAAAAAMAAACX5z6i/////40MAAAAAAAAOgYAAAAAAAADAAAAl+c+ov////+PDAAAAAAAADsGAAAAAAAAAwAAAJfnPqL/////kQwAAAAAAAA8BgAAAAAAAAMAAACX5z6i/////5MMAAAAAAAAPQYAAAAAAAADAAAAl+c+ov////+VDAAAAAAAAD4GAAAAAAAAAwAAAJfnPqL/////lwwAAAAAAAA/BgAAAAAAAAMAAACX5z6i/////5kMAAAAAAAAQAYAAAAAAAADAAAAl+c+ov////+bDAAAAAAAAEEGAAAAAAAAAwAAAJfnPqL/////nQwAAAAAAABCBgAAAAAAAAMAAACX5z6i/////58MAAAAAAAAQwYAAAAAAAADAAAAl+c+ov////+hDAAAAAAAAEQGAAAAAAAAAwAAAJfnPqL/////owwAAAAAAABFBgAAAAAAAAMAAACX5z6i/////6UMAAAAAAAARgYAAAAAAAADAAAAl+c+ov////+nDAAAAAAAAEcGAAAAAAAAAwAAAJfnPqL/////qQwAAAAAAABIBgAAAAAAAAMAAACX5z6i/////6sMAAAAAAAASQYAAAAAAAADAAAAl+c+ov////+tDAAAAAAAAEoGAAAAAAAAAwAAAJfnPqL/////rwwAAAAAAABLBgAAAAAAAAMAAACX5z6i/////7EMAAAAAAAATAYAAAAAAAADAAAAl+c+ov////+zDAAAAAAAAE0GAAAAAAAAAwAAAJfnPqL/////tQwAAAAAAABOBgAAAAAAAAMAAACX5z6i/////7cMAAAAAAAATwYAAAAAAAADAAAAl+c+ov////+5DAAAAAAAAFAGAAAAAAAAAwAAAJfnPqL/////uwwAAAAAAABRBgAAAAAAAAMAAACX5z6i/////70MAAAAAAAAUgYAAAAAAAADAAAAl+c+ov////+/DAAAAAAAAFMGAAAAAAAAAwAAAJfnPqL/////wQwAAAAAAABUBgAAAAAAAAMAAACX5z6i/////8MMAAAAAAAAVQYAAAAAAAADAAAAl+c+ov/////FDAAAAAAAAFYGAAAAAAAAAwAAAJfnPqL/////xwwAAAAAAABXBgAAAAAAAAMAAACX5z6i/////8kMAAAAAAAAWAYAAAAAAAADAAAAl+c+ov/////LDAAAAAAAAFkGAAAAAAAAAwAAAJfnPqL/////zQwAAAAAAABaBgAAAAAAAAMAAACX5z6i/////88MAAAAAAAAWwYAAAAAAAADAAAAl+c+ov/////RDAAAAAAAAFwGAAAAAAAAAwAAAJfnPqL/////0wwAAAAAAABdBgAAAAAAAAMAAACX5z6i/////9UMAAAAAAAAXgYAAAAAAAADAAAAl+c+ov/////XDAAAAAAAAF8GAAAAAAAAAwAAAJfnPqL/////2QwAAAAAAABgBgAAAgAAAP////8AAAAA/////9sMAAAIAAAAYQYAAAAAAAADAAAAl+c+ov/////dDAAAAAAAAGIGAAAAAAAAAwAAAJfnPqL/////3wwAAAAAAABjBgAAAAAAAAMAAACX5z6i/////+EMAAAAAAAAZAYAAAAAAAADAAAAl+c+ov/////jDAAAAAAAAGUGAAAAAAAAAwAAAJfnPqL/////5QwAAAAAAABmBgAAAAAAAAMAAACX5z6i/////+cMAAAAAAAAZwYAAAAAAAADAAAAl+c+ov/////pDAAAAAAAAGgGAAAAAAAAAwAAAJfnPqL/////6wwAAAAAAABpBgAAAAAAAAMAAACX5z6i/////+0MAAAAAAAAagYAAAAAAAADAAAAl+c+ov/////vDAAAAAAAAGsGAAAAAAAAAwAAAJfnPqL/////8QwAAAAAAABsBgAAAAAAAAMAAACX5z6i//////MMAAAAAAAAbQYAAAAAAAADAAAAl+c+ov/////1DAAAAAAAAG4GAAAAAAAAAwAAAJfnPqL/////9wwAAAAAAABvBgAAAAAAAAMAAACX5z6i//////kMAAAAAAAAcAYAAAAAAAADAAAAl+c+ov/////7DAAAAAAAAHEGAAAAAAAAAwAAAJfnPqL//////QwAAAAAAAByBgAAAAAAAAMAAACX5z6i//////8MAAAAAAAAcwYAAAAAAAADAAAAl+c+ov////8BDQAAAAAAAHQGAAAAAAAAAwAAAJfnPqL/////Aw0AAAAAAAB1BgAAAAAAAAMAAACX5z6i/////wUNAAAAAAAAdgYAAAAAAAADAAAAl+c+ov////8HDQAAAAAAAHcGAAAAAAAAAwAAAJfnPqL/////CQ0AAAAAAAB4BgAAAAAAAAMAAACX5z6i/////wsNAAAAAAAAeQYAAAAAAAADAAAAl+c+ov////8NDQAAAAAAAHoGAAAAAAAAAwAAAJfnPqL/////Dw0AAAAAAAB7BgAAAAAAAAMAAACX5z6i/////xENAAAAAAAAfAYAAAAAAAADAAAAl+c+ov////8TDQAAAAAAAH0GAAAAAAAAAwAAAJfnPqL/////FQ0AAAAAAAB+BgAAAAAAAAMAAACX5z6i/////xcNAAAAAAAAfwYAAAAAAAADAAAAl+c+ov////8ZDQAAAAAAAIAGAAAAAAAAAwAAAJfnPqL/////Gw0AAAAAAACBBgAAAAAAAAMAAACX5z6i/////x0NAAAAAAAAggYAAAAAAAADAAAAl+c+ov////8fDQAAAAAAAIMGAAAAAAAAAwAAAJfnPqL/////IQ0AAAAAAACEBgAAAAAAAAMAAACX5z6i/////yMNAAAAAAAAhQYAAAIAAAD/////AAAAAP////8lDQAACQAAAIYGAAACAAAA/////wAAAAD/////Jw0AAAoAAACHBgAAAAAAAAMAAACX5z6i/////ykNAAAAAAAAiAYAAAAAAAADAAAAl+c+ov////8rDQAAAAAAAIkGAAAAAAAAAwAAAJfnPqL/////LQ0AAAIAAACKBgAAAAAAAAMAAACX5z6i/////y8NAAACAAAAiwYAAAAAAAADAAAAl+c+ov////8xDQAAAgAAAIwGAAAAAAAAAwAAAJfnPqL/////Mw0AAAIAAACNBgAAAAAAAAMAAACX5z6i/////zUNAAACAAAAjgYAAAAAAAADAAAAl+c+ov////83DQAAAgAAAI8GAAAAAAAAAwAAAJfnPqL/////OQ0AAAIAAACQBgAAAAAAAAMAAACX5z6i/////zsNAAACAAAAkQYAAAAAAAADAAAAl+c+ov////89DQAAAgAAAJIGAAAAAAAAAwAAAJfnPqL/////Pw0AAAIAAACTBgAAAAAAAAMAAACX5z6i/////0ENAAACAAAAlAYAAAAAAAADAAAAl+c+ov////9DDQAAAgAAAJUGAAAAAAAAAwAAAJfnPqL/////RQ0AAAIAAACWBgAAAAAAAAMAAACX5z6i/////0cNAAACAAAAlwYAAAAAAAADAAAAl+c+ov////9JDQAAAgAAAJgGAAAAAAAAAwAAAJfnPqL/////Sw0AAAIAAACZBgAAAAAAAAMAAACX5z6i/////00NAAACAAAAmgYAAAAAAAADAAAAl+c+ov////9PDQAAAgAAAJsGAAAAAAAAAwAAAJfnPqL/////UQ0AAAIAAACcBgAAAAAAAAMAAACX5z6i/////1MNAAACAAAAnQYAAAAAAAADAAAAl+c+ov////9VDQAAAgAAAJ4GAAAAAAAAAwAAAJfnPqL/////Vw0AAAIAAACfBgAAAAAAAAMAAACX5z6i/////1kNAAACAAAAoAYAAAAAAAADAAAAl+c+ov////9bDQAAAgAAAKEGAAAAAAAAAwAAAJfnPqL/////XQ0AAAIAAACiBgAAAAAAAAMAAACX5z6i/////18NAAACAAAAowYAAAAAAAADAAAAl+c+ov////9hDQAAAgAAAKQGAAAAAAAAAwAAAJfnPqL/////Yw0AAAIAAAClBgAAAAAAAAMAAACX5z6i/////2UNAAACAAAApgYAAAAAAAADAAAAl+c+ov////9nDQAAAgAAAKcGAAAAAAAAAwAAAJfnPqL/////aQ0AAAIAAACoBgAAAAAAAAMAAACX5z6i/////2sNAAACAAAAqQYAAAAAAAADAAAAl+c+ov////9tDQAAAgAAAKoGAAAAAAAAAwAAAJfnPqL/////bw0AAAIAAACrBgAAAAAAAAMAAACX5z6i/////3ENAAACAAAArAYAAAAAAAADAAAAl+c+ov////9zDQAAAgAAAK0GAAAAAAAAAwAAAJfnPqL/////dQ0AAAIAAACuBgAAAAAAAAMAAACX5z6i/////3cNAAACAAAArwYAAAAAAAADAAAAl+c+ov////95DQAAAgAAALAGAAAAAAAAAwAAAJfnPqL/////ew0AAAAAAACxBgAAAAAAAAMAAACX5z6i/////30NAAAAAAAAsgYAAAAAAAADAAAAl+c+ov////9/DQAAAAAAALMGAAAAAAAAAwAAAJfnPqL/////gQ0AAAAAAAC0BgAAAAAAAAMAAACX5z6i/////4MNAAAAAAAAtQYAAAAAAAADAAAAl+c+ov////+FDQAAAgAAALUGAAAAAAAAAwAAAJfnPqL/////hw0AAAAAAAC2BgAAAAAAAAMAAACX5z6i/////4kNAAAAAAAAtwYAAAAAAAADAAAAl+c+ov////+LDQAAAAAAALgGAAAAAAAAAwAAAJfnPqL/////jQ0AAAIAAAC5BgAAAAAAAAMAAACX5z6i/////48NAAACAAAAugYAAAAAAAADAAAAl+c+ov////+RDQAAAgAAALsGAAAAAAAAAwAAAJfnPqL/////kw0AAAIAAAC8BgAAAAAAAAMAAACX5z6i/////5UNAAACAAAAvQYAAAAAAAADAAAAl+c+ov////+XDQAAAgAAAL4GAAAAAAAAAwAAAJfnPqL/////mQ0AAAIAAAC/BgAAAAAAAAMAAACX5z6i/////5sNAAACAAAAwAYAAAAAAAADAAAAl+c+ov////+dDQAAAgAAAMEGAAAAAAAAAwAAAJfnPqL/////nw0AAAIAAADCBgAAAAAAAAMAAACX5z6i/////6ENAAACAAAAwwYAAAAAAAADAAAAl+c+ov////+jDQAAAgAAAMQGAAAAAAAAAwAAAJfnPqL/////pQ0AAAIAAADFBgAAAAAAAAMAAACX5z6i/////6cNAAACAAAAxgYAAAAAAAADAAAAl+c+ov////+pDQAAAgAAAMcGAAAAAAAAAwAAAJfnPqL/////qw0AAAIAAADIBgAAAAAAAAMAAACX5z6i/////60NAAACAAAAyQYAAAAAAAADAAAAl+c+ov////+vDQAAAgAAAMoGAAAAAAAAAwAAAJfnPqL/////sQ0AAAIAAADLBgAAAAAAAAMAAACX5z6i/////7MNAAACAAAAzAYAAAAAAAADAAAAl+c+ov////+1DQAAAgAAAM0GAAAAAAAAAwAAAJfnPqL/////tw0AAAIAAADOBgAAAAAAAAMAAACX5z6i/////7kNAAACAAAAzwYAAAAAAAADAAAAl+c+ov////+7DQAAAgAAANAGAAAAAAAAAwAAAJfnPqL/////vQ0AAAIAAADRBgAAAAAAAAMAAACX5z6i/////78NAAACAAAA0gYAAAAAAAADAAAAl+c+ov/////BDQAAAgAAANMGAAAAAAAAAwAAAJfnPqL/////ww0AAAIAAADUBgAAAAAAAAMAAACX5z6i/////8UNAAAAAAAA1QYAAAAAAAADAAAAl+c+ov/////HDQAAAAAAANYGAAAAAAAAAwAAAJfnPqL/////yQ0AAAAAAADXBgAAAAAAAAMAAACX5z6i/////8sNAAAAAAAA2AYAAAAAAAADAAAAl+c+ov/////NDQAAAAAAANkGAAAAAAAAAwAAAJfnPqL/////zw0AAAAAAADaBgAAAAAAAAMAAACX5z6i/////9ENAAAAAAAA2wYAAAAAAAADAAAAl+c+ov/////TDQAAAAAAANwGAAAAAAAAAwAAAJfnPqL/////1Q0AAAAAAADdBgAAAAAAAAMAAACX5z6i/////9cNAAAAAAAA3gYAAAAAAAADAAAAl+c+ov/////ZDQAAAAAAAN8GAAAAAAAAAwAAAJfnPqL/////2w0AAAAAAADgBgAAAAAAAAMAAACX5z6i/////90NAAAAAAAA4QYAAAAAAAADAAAAl+c+ov/////fDQAAAAAAAOIGAAAAAAAAAwAAAJfnPqL/////4Q0AAAAAAADjBgAAAAAAAAMAAACX5z6i/////+MNAAAAAAAA5AYAAAAAAAADAAAAl+c+ov/////lDQAAAAAAAOUGAAAAAAAAAwAAAJfnPqL/////5w0AAAAAAADmBgAAAgAAAP////8AAAAA/////+kNAAAFAAAA5wYAAAAAAAADAAAAl+c+ov/////rDQAAAAAAAOgGAAAAAAAAAwAAAJfnPqL/////7Q0AAAAAAADpBgAAAAAAAAMAAACX5z6i/////+8NAAAAAAAA6gYAAAAAAAADAAAAl+c+ov/////xDQAAAAAAAOsGAAAAAAAAAwAAAJfnPqL/////8w0AAAAAAADsBgAAAAAAAAMAAACX5z6i//////UNAAAAAAAA7QYAAAAAAAADAAAAl+c+ov/////3DQAAAAAAAO4GAAAAAAAAAwAAAJfnPqL/////+Q0AAAAAAADvBgAAAAAAAAMAAACX5z6i//////sNAAAAAAAA8AYAAAAAAAADAAAAl+c+ov/////9DQAAAAAAAPEGAAAAAAAAAwAAAJfnPqL//////w0AAAAAAADyBgAAAAAAAAMAAACX5z6i/////wEOAAAAAAAA8wYAAAAAAAADAAAAl+c+ov////8DDgAAAAAAAPQGAAAAAAAAAwAAAJfnPqL/////BQ4AAAAAAAD1BgAAAAAAAAMAAACX5z6i/////wcOAAAAAAAA9gYAAAAAAAADAAAAl+c+ov////8JDgAAAAAAAPcGAAAAAAAAAwAAAJfnPqL/////Cw4AAAAAAAD4BgAAAAAAAAMAAACX5z6i/////w0OAAAAAAAA+QYAAAAAAAADAAAAl+c+ov////8PDgAAAAAAAPoGAAAAAAAAAwAAAJfnPqL/////EQ4AAAAAAAD7BgAAAAAAAAMAAACX5z6i/////xMOAAAAAAAA/AYAAAAAAAADAAAAl+c+ov////8VDgAAAAAAAP0GAAAAAAAAAwAAAJfnPqL/////Fw4AAAAAAAD+BgAAAwAAAP////8AAAAA/////xkOAAAGAAAA/wYAAAAAAAADAAAAl+c+ov////8cDgAAAAAAAAAHAAAAAAAAAwAAAJfnPqL/////Hg4AAAAAAAABBwAAAAAAAAMAAACX5z6i/////yAOAAAAAAAAAgcAAAAAAAADAAAAl+c+ov////8iDgAAAAAAAAMHAAAAAAAAAwAAAJfnPqL/////JA4AAAAAAAAEBwAAAAAAAAMAAACX5z6i/////yYOAAAAAAAABQcAAAAAAAADAAAAl+c+ov////8oDgAAAAAAAAYHAAAAAAAAAwAAAJfnPqL/////Kg4AAAAAAAAHBwAAAAAAAAMAAACX5z6i/////ywOAAAAAAAACAcAAAAAAAADAAAAl+c+ov////8uDgAAAAAAAAkHAAAAAAAAAwAAAJfnPqL/////MA4AAAAAAAAKBwAAAAAAAAMAAACX5z6i/////zIOAAAAAAAACwcAAAAAAAADAAAAl+c+ov////80DgAAAAAAAAwHAAAAAAAAAwAAAJfnPqL/////Ng4AAAAAAAANBwAAAAAAAAMAAACX5z6i/////zgOAAAAAAAADgcAAAAAAAADAAAAl+c+ov////86DgAAAAAAAA8HAAACAAAA/////wAAAAD/////PA4AAAgAAAAQBwAAAAAAAAMAAACX5z6i/////z4OAAAAAAAAEQcAAAAAAAADAAAAl+c+ov////9ADgAAAAAAABIHAAAAAAAAAwAAAJfnPqL/////Qg4AAAAAAAATBwAAAAAAAAMAAACX5z6i/////0QOAAAAAAAAFAcAAAAAAAADAAAAl+c+ov////9GDgAAAAAAABUHAAAAAAAAAwAAAJfnPqL/////SA4AAAAAAAAWBwAAAAAAAAMAAACX5z6i/////0oOAAAAAAAAFwcAAAAAAAADAAAAl+c+ov////9MDgAAAAAAABgHAAAAAAAAAwAAAJfnPqL/////Tg4AAAAAAAAZBwAAAAAAAAMAAACX5z6i/////1AOAAAAAAAAGgcAAAAAAAADAAAAl+c+ov////9SDgAAAAAAABsHAAAAAAAAAwAAAJfnPqL/////VA4AAAAAAAAcBwAAAAAAAAMAAACX5z6i/////1YOAAAAAAAAHQcAAAAAAAADAAAAl+c+ov////9YDgAAAAAAAB4HAAAAAAAAAwAAAJfnPqL/////Wg4AAAAAAAAfBwAAAAAAAAMAAACX5z6i/////1wOAAAAAAAAIAcAAAAAAAADAAAAl+c+ov////9eDgAAAAAAACEHAAAAAAAAAwAAAJfnPqL/////YA4AAAAAAAAiBwAAAAAAAAMAAACX5z6i/////2IOAAAAAAAAIwcAAAAAAAADAAAAl+c+ov////9kDgAAAAAAACQHAAAAAAAAAwAAAJfnPqL/////Zg4AAAAAAAAlBwAAAAAAAAMAAACX5z6i/////2gOAAAAAAAAJgcAAAAAAAADAAAAl+c+ov////9qDgAAAgAAACYHAAAAAAAAAwAAAJfnPqL/////bA4AAAAAAAAnBwAAAAAAAAMAAACX5z6i/////24OAAAAAAAAKAcAAAAAAAADAAAAl+c+ov////9wDgAAAAAAACkHAAAAAAAAAwAAAJfnPqL/////cg4AAAAAAAAqBwAAAAAAAAMAAACX5z6i/////3QOAAAAAAAAKwcAAAAAAAADAAAAl+c+ov////92DgAAAAAAACwHAAAAAAAAAwAAAJfnPqL/////eA4AAAAAAAAtBwAAAAAAAAMAAACX5z6i/////3oOAAAAAAAALgcAAAAAAAADAAAAl+c+ov////98DgAAAAAAAC8HAAAAAAAAAwAAAJfnPqL/////fg4AAAAAAAAwBwAAAAAAAAMAAACX5z6i/////4AOAAAAAAAAMQcAAAAAAAADAAAAl+c+ov////+CDgAAAAAAADIHAAAAAAAAAwAAAJfnPqL/////hA4AAAAAAAA=","m_ExtraDataString":"B0xVbml0eS5SZXNvdXJjZU1hbmFnZXIsIFZlcnNpb249MC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsSlVuaXR5RW5naW5lLlJlc291cmNlTWFuYWdlbWVudC5SZXNvdXJjZVByb3ZpZGVycy5Bc3NldEJ1bmRsZVJlcXVlc3RPcHRpb25zsAIAAHsAIgBtAF8ASABhAHMAaAAiADoAIgA4ADkAMgA2AGQANAAxAGMANAAxADQAOAAyAGUAZAA4ADAAZABkADQAYgBkADEAMAA1AGIAOABkAGYAOQAyAGEAIgAsACIAbQBfAEMAcgBjACIAOgA4ADUAOQAwADUAMwAyADMAOQAsACIAbQBfAFQAaQBtAGUAbwB1AHQAIgA6ADAALAAiAG0AXwBDAGgAdQBuAGsAZQBkAFQAcgBhAG4AcwBmAGUAcgAiADoAZgBhAGwAcwBlACwAIgBtAF8AUgBlAGQAaQByAGUAYwB0AEwAaQBtAGkAdAAiADoALQAxACwAIgBtAF8AUgBlAHQAcgB5AEMAbwB1AG4AdAAiADoAMAAsACIAbQBfAEIAdQBuAGQAbABlAE4AYQBtAGUAIgA6ACIAYQBlAGUAZAA3ADUAZABiADcAMgBkAGIAOQBkAGEAOAA1AGYANQA2AGMANQBjAGMANgA0ADYAYQBmADMANABhACIALAAiAG0AXwBBAHMAcwBlAHQATABvAGEAZABNAG8AZABlACIAOgAxACwAIgBtAF8AQgB1AG4AZABsAGUAUwBpAHoAZQAiADoAMgAxADAAMwA4ADIAMgA5ACwAIgBtAF8AVQBzAGUAQwByAGMARgBvAHIAQwBhAGMAaABlAGQAQgB1AG4AZABsAGUAcwAiADoAdAByAHUAZQAsACIAbQBfAFUAcwBlAFUAVwBSAEYAbwByAEwAbwBjAGEAbABCAHUAbgBkAGwAZQBzACIAOgBmAGEAbABzAGUALAAiAG0AXwBDAGwAZQBhAHIATwB0AGgAZQByAEMAYQBjAGgAZQBkAFYAZQByAHMAaQBvAG4AcwBXAGgAZQBuAEwAbwBhAGQAZQBkACIAOgBmAGEAbABzAGUAfQA=","m_resourceTypes":[{"m_AssemblyName":"Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"HatData"},{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.IAssetBundleResource"},{"m_AssemblyName":"Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"HatViewData"},{"m_AssemblyName":"UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.TextAsset"},{"m_AssemblyName":"UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.Sprite"},{"m_AssemblyName":"UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.Texture2D"},{"m_AssemblyName":"Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.ResourceManagement.ResourceProviders.SceneInstance"},{"m_AssemblyName":"UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.Material"},{"m_AssemblyName":"UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.GameObject"},{"m_AssemblyName":"UnityEngine.AnimationModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.RuntimeAnimatorController"},{"m_AssemblyName":"UnityEngine.AnimationModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null","m_ClassName":"UnityEngine.AnimationClip"}],"m_InternalIdPrefixes":[]} \ No newline at end of file diff --git a/source/TownOfUs.cs b/source/TownOfUs.cs index a5b2f8eed..973e62eb3 100644 --- a/source/TownOfUs.cs +++ b/source/TownOfUs.cs @@ -30,7 +30,7 @@ namespace TownOfUs public class TownOfUs : BasePlugin { public const string Id = "com.slushiegoose.townofus"; - public const string VersionString = "5.1.2"; + public const string VersionString = "5.2.0"; public static System.Version Version = System.Version.Parse(VersionString); public const string VersionTag = ""; @@ -41,7 +41,6 @@ public class TownOfUs : BasePlugin public static Sprite SwapperSwitch; public static Sprite SwapperSwitchDisabled; public static Sprite Footprint; - public static Sprite NormalKill; public static Sprite MedicSprite; public static Sprite SeerSprite; public static Sprite SampleSprite; @@ -106,12 +105,10 @@ public class TownOfUs : BasePlugin public static Sprite CollectSprite; public static Sprite ReapSprite; public static Sprite SoulSprite; + public static Sprite WatchSprite; + public static Sprite CampSprite; + public static Sprite ShootSprite; - public static Sprite SettingsButtonSprite; - public static Sprite CrewSettingsButtonSprite; - public static Sprite NeutralSettingsButtonSprite; - public static Sprite ImposterSettingsButtonSprite; - public static Sprite ModifierSettingsButtonSprite; public static Sprite ToUBanner; public static Sprite UpdateTOUButton; public static Sprite UpdateSubmergedButton; @@ -125,13 +122,12 @@ public class TownOfUs : BasePlugin private static DLoadImage _iCallLoadImage; - private Harmony _harmony; public static ConfigEntry DeadSeeGhosts { get; set; } public static string RuntimeLocation; - + public override void Load() { RuntimeLocation = Path.GetDirectoryName(Assembly.GetAssembly(typeof(TownOfUs)).Location); @@ -149,7 +145,6 @@ public override void Load() SwapperSwitch = CreateSprite("TownOfUs.Resources.SwapperSwitch.png"); SwapperSwitchDisabled = CreateSprite("TownOfUs.Resources.SwapperSwitchDisabled.png"); Footprint = CreateSprite("TownOfUs.Resources.Footprint.png"); - NormalKill = CreateSprite("TownOfUs.Resources.NormalKill.png"); MedicSprite = CreateSprite("TownOfUs.Resources.Medic.png"); SeerSprite = CreateSprite("TownOfUs.Resources.Seer.png"); SampleSprite = CreateSprite("TownOfUs.Resources.Sample.png"); @@ -214,12 +209,10 @@ public override void Load() CollectSprite = CreateSprite("TownOfUs.Resources.Collect.png"); ReapSprite = CreateSprite("TownOfUs.Resources.Reap.png"); SoulSprite = CreateSprite("TownOfUs.Resources.Soul.png"); + WatchSprite = CreateSprite("TownOfUs.Resources.Watch.png"); + CampSprite = CreateSprite("TownOfUs.Resources.Camp.png"); + ShootSprite = CreateSprite("TownOfUs.Resources.Shoot.png"); - SettingsButtonSprite = CreateSprite("TownOfUs.Resources.SettingsButton.png"); - CrewSettingsButtonSprite = CreateSprite("TownOfUs.Resources.Crewmate.png"); - NeutralSettingsButtonSprite = CreateSprite("TownOfUs.Resources.Neutral.png"); - ImposterSettingsButtonSprite = CreateSprite("TownOfUs.Resources.Impostor.png"); - ModifierSettingsButtonSprite = CreateSprite("TownOfUs.Resources.Modifiers.png"); ToUBanner = CreateSprite("TownOfUs.Resources.TownOfUsBanner.png"); UpdateTOUButton = CreateSprite("TownOfUs.Resources.UpdateToUButton.png"); UpdateSubmergedButton = CreateSprite("TownOfUs.Resources.UpdateSubmergedButton.png"); @@ -234,6 +227,21 @@ public override void Load() ClassInjector.RegisterTypeInIl2Cpp(); ClassInjector.RegisterTypeInIl2Cpp(); + for (int i = 1; i <= 5; i++) + { + try + { + var filePath = Application.persistentDataPath; + var file = filePath + $"/GameSettings-Slot{i}"; + if (File.Exists(file)) + { + string newFile = Path.Combine(filePath, $"Saved Settings {i}.txt"); + File.Move(file, newFile); + } + } + catch { } + } + // RegisterInIl2CppAttribute.Register(); DeadSeeGhosts = Config.Bind("Settings", "Dead See Other Ghosts", true, "Whether you see other dead player's ghosts while your dead"); diff --git a/source/TownOfUs.csproj b/source/TownOfUs.csproj index 273a41cf7..7b3bb98fd 100644 --- a/source/TownOfUs.csproj +++ b/source/TownOfUs.csproj @@ -1,7 +1,7 @@  net6.0 - 5.1.2 + 5.2.0 embedded latest @@ -19,7 +19,7 @@ - + diff --git a/source/Versioning.json b/source/Versioning.json index 751d0137c..d700b6301 100644 --- a/source/Versioning.json +++ b/source/Versioning.json @@ -29,5 +29,11 @@ "50614900": "2024.10.29" }, "ModVersion": "5.1.2" + }, + { + "InternalVersions": { + "50614900": "2024.10.29" + }, + "ModVersion": "5.2.0" } ] \ No newline at end of file