From 6b1f2067276d8268653511ed093eb97129f928de Mon Sep 17 00:00:00 2001 From: jonomon Date: Mon, 8 Jul 2013 10:57:29 -0400 Subject: [PATCH 001/238] Added creepTracker --- sc2reader/events/tracker.py | 1 + sc2reader/plugins/replay.py | 232 ++++++++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 9fa702db..626dedfa 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -10,6 +10,7 @@ class TrackerEvent(object): def __init__(self, frames): #: The frame of the game this event was applied self.frame = frames + self.second = frames >>4 def load_context(self, replay): pass diff --git a/sc2reader/plugins/replay.py b/sc2reader/plugins/replay.py index 6279bb73..e820585e 100644 --- a/sc2reader/plugins/replay.py +++ b/sc2reader/plugins/replay.py @@ -118,6 +118,238 @@ def APMTracker(replay): return replay +@plugin +def CreepTracker(replay): + from itertools import izip_longest, dropwhile + from random import random + from math import sqrt, pi + + def add_to_list(control_pid,unit_id,unit_location,\ + unit_type,event_time, creep_generating_units_list): + length_cgu_list = len(creep_generating_units_list[control_pid]) + if length_cgu_list==0: + creep_generating_units_list[control_pid].append([(unit_id, unit_location,unit_type,event_time)]) + else: + previous_list = creep_generating_units_list[control_pid][length_cgu_list-1][:] + previous_list.append((unit_id, unit_location,unit_type,event_time)) + creep_generating_units_list[control_pid].append(previous_list) + + def in_circles(point_x,point_y,cgu_radius): + for cgu in cgu_radius: + circle_x = cgu[0][0] + circle_y = cgu[0][1] + radius = cgu[1] + distance = (circle_x-point_x)**2 + (circle_y-point_y)**2 + if distance < (radius*radius): + return 1 + return 0 + + def distance(point1,point2): + distance = (point1[0]-point2[0])**2 + (point1[1]-point2[1])**2 + return distance + + def calculate_area(cgu_radius): + if len(cgu_radius)==1: + print "Area Calculated",pi*(cgu_radius[0][1]**2) + return pi*(cgu_radius[0][1]**2) + + # from cgu_radius get a square which surrounds maximum + # possible area that the creep lies in + max_x = max(cgu_radius, key=lambda x: x[0][0]+x[1]) + max_y = max(cgu_radius, key=lambda x: x[0][1]+x[1]) + min_x = min(cgu_radius, key=lambda x: x[0][0] - x[1]) + min_y = min(cgu_radius, key=lambda x: x[0][1] - x[1]) + + max_x = max_x[0][0] + max_x[1] + max_y = max_y[0][1] + max_y[1] + min_x = min_x[0][0] - min_x[1] + min_y = min_y[0][1] - min_y[1] + + area = 0 + for x in range(min_x,max_x): + for y in range(min_y,max_y): + if in_circles(x,y,cgu_radius): + area+=1 + return area + + + def single_linkage_clustering(cgu_points, maxR,labels=0,cgu_length = 0): + inf = -1000 + if labels==0: + labels = [0 for x in cgu_points] + cgu_length = len(cgu_points) + if len(cgu_points) ==1: + return [0] + + # calculate distance array + distance_array = list() + for i in range (len(cgu_points)): + i_lengths = list() + for j in range(len(cgu_points)): + if i !=j: + if cgu_points[i][0] == inf and cgu_points [j][0] == inf: + i_lengths.append(-inf) + else: + i_lengths.append(distance(cgu_points[i], cgu_points[j])) + + distance_array.append(i_lengths) + + #Find closest point distance for each point + min_array = map(lambda x:min(x), distance_array) + + #combine 2 points with smallest distance + min_distance = min(min_array) + if min_distance < maxR: + point1 = min_array.index(min_distance) + point2 = min_array[point1+1:].index(min_distance)+point1+1 + #label each cgu points + current_label = max(labels)+1 if labels[point1] ==0 and\ + labels[point2] ==0 else max(labels[point1],labels[point2]) + labels[point1] = current_label + labels[point2] = current_label + labels.append(current_label) + + new_x = (cgu_points[point1][0] + cgu_points[point2][0])/2 + new_y = (cgu_points[point1][1] + cgu_points[point2][1])/2 + cgu_points[point1]=(inf,inf) + cgu_points[point2]=(inf,inf) + cgu_points.append((new_x,new_y)) + + labels = single_linkage_clustering(cgu_points,maxR,labels,cgu_length) + return labels[0:cgu_length] + else: + return_value = labels[0:cgu_length] + return return_value + + + #Get Map Size + mapinfo = replay.map.archive.read_file('MapInfo') + mapSizeX = ord(mapinfo[16]) + mapSizeY = ord(mapinfo[20]) + mapSize = mapSizeX * mapSizeX/100 + + creep_generating_units_list = dict() + + for player in replay.players: + player.creep_spread_by_minute = defaultdict(int) + player.max_creep_spread = int() + creep_generating_units_list[player.pid] = list() + try: + replay.tracker_events + except AttributeError: + print "Replay does not have tracker events" + return replay + + for tracker_event,game_event in izip_longest(replay.tracker_events,replay.game_events): + + # First search things that generate creep + # Tumor, hatcheries, nydus and overlords generating creep + + if tracker_event and tracker_event.name == "UnitInitEvent": + units = ["CreepTumor", "Hatchery","Nydus"] # check nydus name + if tracker_event.unit_type_name in units: + add_to_list(tracker_event.control_pid,tracker_event.unit_id,\ + (tracker_event.x, tracker_event.y), \ + tracker_event.unit_type_name,\ + tracker_event.second,\ + creep_generating_units_list) + + if game_event and game_event.name == "AbilityEvent": + + if game_event.ability_name == "GenerateCreep": + add_to_list(game_event.control_pid,game_event.unit_id,\ + (game_event.x, game_event.y), \ + game_event.unit_type_name,\ + game_event.second,\ + creep_generating_units_list) + + # # Removes creep generating units that were destroyed + if tracker_event and tracker_event.name == "UnitDiedEvent": + for player in creep_generating_units_list: + length_cgu_list = len(creep_generating_units_list[player]) + if length_cgu_list ==0: + break + cgu_per_player = creep_generating_units_list[player][length_cgu_list-1] + creep_generating_died = dropwhile(lambda x: x[0] != tracker_event.unit_id, \ + cgu_per_player) + for creep_generating_died_unit in creep_generating_died: + + cgu_per_player.remove(creep_generating_died_unit) + creep_generating_units_list[player].append(cgu_per_player) + + #reduce all events to last event in the minute + last_minute_found = 0 + for player in replay.player: + cgu_per_player_new = list() + for cgu_per_player in creep_generating_units_list[player]: + if len(cgu_per_player) ==0: + continue + cgu_last_event_time = cgu_per_player[-1][3] + + if (cgu_last_event_time/60)>last_minute_found: + last_minute_found = cgu_last_event_time/60 + cgu_per_player_new.append(cgu_per_player) + cgu_per_player = cgu_per_player_new + + + max_creep_spread=defaultdict() + for player in replay.player: + # convert cg u list into centre of circles and radius + unit_name_to_radius = {'CreepTumor': 15, "Hatchery":17,\ + "GenerateCreep": 10, "Nydus": 5 } + + max_creep_spread[player] = 0 + + for index,cgu_per_player in enumerate(creep_generating_units_list[player]): + + cgu_radius = map(lambda x: (x[1], unit_name_to_radius[x[2]]),\ + cgu_per_player) + cgu_points = map(lambda x: x[0],cgu_radius) + + if cgu_points: + labels = single_linkage_clustering(cgu_points,350) + else: + if index != 0: + replay.player[player].creep_spread_by_minute[cgu_last_event_time+1] = 0 + continue + + area = 0 + #if all labels 0 (all separate clusters) calculate it separately + if max(labels) ==0: + for cgu_radi in cgu_radius: + area+= pi * cgu_radi[1]**2 + + cgu_last_event_time = cgu_per_player[-1][3]/60 + replay.player[player].creep_spread_by_minute[cgu_last_event_time] = area/mapSize + continue + + count =0 + while True: + clusters = filter(lambda x : True if x[0] == count else\ + False , zip(labels,cgu_radius) ) + + cgu_clusters = map(lambda x:x[1], clusters) + if count==0: + for cgu_radi in cgu_clusters: + area+= pi * cgu_radi[1]**2 + count+=1 + continue + if len(clusters) ==0: + break + count+=1 + area += calculate_area(cgu_clusters) + cgu_last_event_time = cgu_per_player[-1][3]/60 + replay.player[player].creep_spread_by_minute[cgu_last_event_time] = area/mapSize + + if area>max_creep_spread[player]: + max_creep_spread[player] =area + + + for player in replay.player: + replay.player[player].max_creep_spread = max_creep_spread[player]/mapSize + + return replay + @plugin def SelectionTracker(replay): From e4b5bccf77ddc89b16695f5f73a6b257f25206cd Mon Sep 17 00:00:00 2001 From: jonomon Date: Wed, 31 Jul 2013 12:07:45 -0400 Subject: [PATCH 002/238] Added supply tracker --- sc2reader/engine/plugins/supply.py | 73 ++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 sc2reader/engine/plugins/supply.py diff --git a/sc2reader/engine/plugins/supply.py b/sc2reader/engine/plugins/supply.py new file mode 100644 index 00000000..535d190c --- /dev/null +++ b/sc2reader/engine/plugins/supply.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, print_function, unicode_literals, division + +from collections import defaultdict + +class SupplyTracker(object): + def add_to_units_alive(self,event,replay): + try: ## see if the unit takes supply + supplyCount = self.unit_name_to_supply[event.unit_type_name] + new_unit = (supplyCount, event.unit_id) + self.units_alive[event.control_pid].append(new_unit) + total_supply = sum([x[0] for x in self.units_alive[event.control_pid]]) + replay.players[event.control_pid-1].current_food_used[event.second]= total_supply + print("SECOND",event.second, "Player",replay.players[event.control_pid-1],"SUPPLY",replay.players[event.control_pid-1].current_food_used[event.second]) + except KeyError: + try: ## see if the unit provides supply + supply_gen_count = (self.supply_gen_unit[event.unit_type_name]) + supply_gen_unit = (supply_gen_count,event.unit_id) + self.supply_gen[event.control_pid].append(supply_gen_unit) + total_supply_gen = sum([x[0] for x in self.units_alive[event.control_pid]]) + replay.players[event.control_pid-1].current_food_made[event.second]= total_supply_gen + except KeyError: + print("Unit name {0} does not exist".format(event.unit_type_name)) + return + + def remove_from_units_alive(self,event,replay): + died_unit_id = event.unit_id + for player in replay.player: + dead_unit = filter(lambda x:x[1]==died_unit_id, self.units_alive[player]) + if dead_unit: + self.units_alive[player].remove(dead_unit[0]) + total_supply = sum([x[0] for x in self.units_alive[player]]) + replay.players[player-1].current_food_used[event.second] = total_supply + print("Second", event.second, "Killed", event.unit.name,"SUPPLY",replay.players[player-1].current_food_used[event.second]) + + dead_supply_gen = filter(lambda x:x[1]==died_unit_id, self.supply_gen[player]) + if dead_supply_gen: + self.supply_gen[player].remove(dead_supply_gen[0]) + total_supply_gen = sum([x[0] for x in self.supply_gen[player]]) + replay.players[player-1].current_food_made[event.second] = total_supply_gen + print("Second", event.second, "Killed", event.unit.name,"SUPPLY",replay.players[player-1].current_food_made[event.second]) + + def handleInitGame(self, event, replay): + ## This dictionary contains te supply of every unit + self.unit_name_to_supply = { "Drone":1,"Zergling":1,"Baneling":1,\ + "Queen":2,\ + "SCV":1,"Marine":1,"Marauder":2,"SiegeTank":2} + self.supply_gen_unit = {"Overlord":8, "SupplyDepot":8,"Pylon":8} + ## This list contains a turple of the units supply and unit ID. + self.units_alive = dict() + self.supply_gen = dict() + for player in replay.players: + self.supply_gen[player.pid] = list() + self.units_alive[player.pid] = list() + player.current_food_used = defaultdict(int) + player.current_food_made = defaultdict(int) + player.time_supply_capped = int() + + def handleUnitInitEvent(self,event,replay): + print ("Init",event.unit_type_name, event.unit_id) + self.add_to_units_alive(event,replay) + + def handleUnitBornEvent(self,event,replay): + print ("Born",event.unit_type_name,event.unit_id) + self.add_to_units_alive(event,replay) + + def handleUnitDiedEvent(self,event,replay): + if event.unit.name not in self.unit_name_to_supply: + return + self.remove_from_units_alive(event,replay) + + def handleEndGame(self, event, replay): + pass From 7191a76839fc9eb073dba8047e52428f2337df1d Mon Sep 17 00:00:00 2001 From: jonomon Date: Wed, 31 Jul 2013 13:03:39 -0400 Subject: [PATCH 003/238] Added Creep Tracker Class --- sc2reader/engine/plugins/creeptracker.py | 40 +++ sc2reader/engine/plugins/creeptrackerClass.py | 238 ++++++++++++++++++ 2 files changed, 278 insertions(+) create mode 100644 sc2reader/engine/plugins/creeptracker.py create mode 100644 sc2reader/engine/plugins/creeptrackerClass.py diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py new file mode 100644 index 00000000..e70efea5 --- /dev/null +++ b/sc2reader/engine/plugins/creeptracker.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, print_function, unicode_literals, division + +from collections import defaultdict +from sc2reader.engine.plugins.creeptrackerClass import creep_tracker + +class CreepTracker(object): + ''' + The Creep tracker populates player.max_creep_spread and + player.creep_spread by minute + This uses the creep_tracker class to calculate the features + ''' + def handleInitGame(self, event, replay): + try: + replay.tracker_events + except AttributeError: + print("Replay does not have tracker events") + return + try: + replay.map.minimap + except AttributeError: + print("Map was not loaded") + return + self.creepTracker = creep_tracker(replay) + for player in replay.players: + self.creepTracker.init_cgu_lists(player.pid) + + def handleEvent(self, event, replay): + self.creepTracker.add_event(event) + + def handleEndGame(self, event, replay): + for player_id in replay.player: + self.creepTracker.reduce_cgu_per_minute(player_id) + for player in replay.players: + player.creep_spread_by_minute = self.creepTracker.get_creep_spread_area(player.pid) + for player in replay.players: + if player.creep_spread_by_minute: + player.max_creep_spread = max(player.creep_spread_by_minute.items(),key=lambda x:x[1]) + else: + player.max_creep_spread =0 diff --git a/sc2reader/engine/plugins/creeptrackerClass.py b/sc2reader/engine/plugins/creeptrackerClass.py new file mode 100644 index 00000000..cf69e837 --- /dev/null +++ b/sc2reader/engine/plugins/creeptrackerClass.py @@ -0,0 +1,238 @@ +from __future__ import absolute_import + +from itertools import dropwhile +from sets import Set +from Image import open as PIL_open +from Image import ANTIALIAS +from StringIO import StringIO +from collections import defaultdict + +class creep_tracker(): + def __init__(self,replay): + #if the debug option is selected, minimaps will be printed to a file + ##and a stringIO containing the minimap image will be saved for + ##every minite in the game and the minimap with creep highlighted + ## will be printed out. + self.debug = replay.opt.debug + ##This list contains creep spread area for each player + self.creep_spread_by_minute = dict() + ## this list contains a minimap highlighted with creep spread for each player + if self.debug: + self.creep_spread_image_by_minute = dict() + ## This list contains all the active cgus in every time frame + self.creep_gen_units = dict() + ## Thist list corresponds to creep_gen_units storing the time of each CGU + self.creep_gen_units_times= dict() + ## convert all possible cgu radii into a sets of coordinates centred around the origin, + ## in order to use this with the CGUs, the centre point will be + ## subtracted with coordinates of cgus created in game + self.unit_name_to_radius = {'CreepTumor': 10, "Hatchery":8,\ + "NydusCanal": 5 } + self.radius_to_coordinates= dict() + for x in self.unit_name_to_radius: + self.radius_to_coordinates[self.unit_name_to_radius[x]] =\ + self.radius_to_map_positions(self.unit_name_to_radius[x]) + + #Get map information + replayMap = replay.map + # extract image from replay package + mapsio = StringIO(replayMap.minimap) + im = PIL_open(mapsio) + mapinfo = replay.map.archive.read_file('MapInfo') + ##remove black box around minimap + cropped = im.crop(im.getbbox()) + cropsize = cropped.size + self.map_height = 100.0 + # resize height to MAPHEIGHT, and compute new width that + # would preserve aspect ratio + self.map_width = int(cropsize[0] * (float(self.map_height) / cropsize[1])) + self.mapSize =self.map_height * self.map_width + ## the following parameters are only needed if minimaps have to be printed + minimapSize = ( self.map_width,int(self.map_height) ) + self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) + mapOffsetX, mapOffsetY = self.cameraOffset(mapinfo) + mapCenter = [mapOffsetX + cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] + # this is the center of the minimap image, in pixel coordinates + imageCenter = [(self.map_width/2), self.map_height/2] + # this is the scaling factor to go from the SC2 coordinate + # system to pixel coordinates + self.image_scale = float(self.map_height) / cropsize[0] + self.transX =imageCenter[0] + self.image_scale * (mapCenter[0]) + self.transY = imageCenter[1] + self.image_scale * (mapCenter[1]) + + def radius_to_map_positions(self,radius): + ## this function converts all radius into map coordinates + ## centred around the origin that the creep can exist + ## the cgu_radius_to_map_position function will simply + ## substract every coordinate with the centre point of the tumour + output_coordinates = list() + # Sample a square area using the radius + for x in range (-radius,radius): + for y in range (-radius, radius): + if (x**2 + y**2) <= (radius * radius): + output_coordinates.append((x,y)) + return output_coordinates + + def init_cgu_lists(self, player_id): + self.creep_spread_by_minute[player_id] = defaultdict(int) + if self.debug: + self.creep_spread_image_by_minute[player_id] = defaultdict(StringIO) + self.creep_gen_units[player_id] = list() + self.creep_gen_units_times[player_id] = list() + + def add_to_list(self,player_id,unit_id,unit_location,unit_type,event_time): + # This functions adds a new time frame to creep_generating_units_list + # Each time frame contains a list of all CGUs that are alive + length_cgu_list = len(self.creep_gen_units[player_id]) + if length_cgu_list==0: + self.creep_gen_units[player_id].append([(unit_id, unit_location,unit_type)]) + self.creep_gen_units_times[player_id].append(event_time) + else: + #if the list is not empty, take the previous time frame, + # add the new CGU to it and append it as a new time frame + previous_list = self.creep_gen_units[player_id][length_cgu_list-1][:] + previous_list.append((unit_id, unit_location,unit_type)) + self.creep_gen_units[player_id].append(previous_list) + self.creep_gen_units_times[player_id].append(event_time) + + def remove_from_list(self,unit_id,time_frame): + ## This function searches is given a unit ID for every unit who died + ## the unit id will be searched in cgu_gen_units for matches + ## if there are any, that unit will be removed from active CGUs + ## and appended as a new time frame + for player_id in self.creep_gen_units: + length_cgu_list = len(self.creep_gen_units[player_id]) + if length_cgu_list ==0: + break + cgu_per_player = self.creep_gen_units[player_id]\ + [length_cgu_list-1] + creep_generating_died = dropwhile(lambda x: x[0] != \ + unit_id, cgu_per_player) + for creep_generating_died_unit in creep_generating_died: + cgu_per_player.remove(creep_generating_died_unit) + self.creep_gen_units[player_id].append(cgu_per_player) + self.creep_gen_units_times[player_id].append(time_frame) + + def add_event(self,event): + # Search things that generate creep + # Tumor, hatcheries, nydus + if event.name == "UnitBornEvent": + if event.unit_type_name== "Hatchery": + self.add_to_list(event.control_pid, event.unit_id,\ + (event.x,event.y),event.unit_type_name,event.second) + if event.name == "UnitInitEvent": + units = ["CreepTumor", "Hatchery","NydusCanal"] + if event.unit_type_name in units: + self.add_to_list(event.control_pid,event.unit_id,\ + (event.x, event.y), event.unit_type_name,event.second) + # Removes creep generating units that were destroyed + if event.name == "UnitDiedEvent": + self.remove_from_list(event.unit_id,event.second) + + def reduce_cgu_per_minute(self,player_id): + #the creep_gen_units_lists contains every single time frame + #where a CGU is added, + #To reduce the calculations required, the time frame containing + #the most cgus every minute will be used to represent that minute + last_minute_found = 0 + cgu_per_player_new = list() + cgu_time_per_player_new = list() + cgu_last_minute_list = list() + for index,cgu_time in enumerate(self.creep_gen_units_times[player_id]): + cgu_last_minute_list.append(self.creep_gen_units[player_id][index]) + if (cgu_time/60) ==0: + cgu_per_player_new.append(self.creep_gen_units[player_id][0]) + cgu_time_per_player_new.append(0) + cgu_last_minute_list = list() + if (cgu_time/60)>last_minute_found: + cgu_max_in_min = max(cgu_last_minute_list,key = len) + cgu_per_player_new.append(cgu_max_in_min) + cgu_max_in_min_index = self.creep_gen_units[player_id].index(cgu_max_in_min) + cgu_time_per_player_new.append(self.creep_gen_units_times[player_id][cgu_max_in_min_index]) + last_minute_found = cgu_time/60 + cgu_last_minute_list=list() + + self.creep_gen_units[player_id] = cgu_per_player_new + self.creep_gen_units_times[player_id] = cgu_time_per_player_new + + def get_creep_spread_area(self,player_id): + ## iterates through all cgus and and calculate the area + for index,cgu_per_player in enumerate(self.creep_gen_units[player_id]): + # convert cgu list into centre of circles and radius + cgu_radius = map(lambda x: (x[1], self.unit_name_to_radius[x[2]]),\ + cgu_per_player) + # convert event coords to minimap coords + cgu_radius = self.convert_cgu_radius_event_to_map_coord(cgu_radius) + creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) + cgu_last_event_time = self.creep_gen_units_times[player_id][index]/60 + if self.debug: + self.print_image(creep_area_positions,player_id,cgu_last_event_time) + creep_area = len(creep_area_positions) + self.creep_spread_by_minute[player_id][cgu_last_event_time]=\ + float(creep_area)/self.mapSize*100 + return self.creep_spread_by_minute[player_id] + + def cgu_radius_to_map_positions(self,cgu_radius,radius_to_coordinates): + ## This function uses the output of radius_to_map_positions + total_points_on_map = Set() + if len(cgu_radius)==0: + return [] + for cgu in cgu_radius: + point = cgu[0] + radius = cgu[1] + ## subtract all radius_to_coordinates with centre of + ## cgu radius to change centre of circle + cgu_map_position = map( lambda x:(x[0]+point[0],x[1]+point[1])\ + ,self.radius_to_coordinates[radius]) + total_points_on_map= total_points_on_map | Set(cgu_map_position) + return total_points_on_map + + def print_image(self,total_points_on_map,player_id,time_stamp): + minimap_copy = self.minimap_image.copy() + # Convert all creeped points to white + for points in total_points_on_map: + x = points[0] + y = points[1] + x,y = self.check_image_pixel_within_boundary(x,y) + minimap_copy.putpixel((x,y) , (255, 255, 255)) + creeped_image = minimap_copy + # write creeped minimap image to a string as a png + creeped_imageIO = StringIO() + creeped_image.save(creeped_imageIO, "png") + self.creep_spread_image_by_minute[player_id][time_stamp]=creeped_imageIO + ##debug for print out the images + f = open(str(player_id)+'image'+str(time_stamp)+'.png','w') + f.write(creeped_imageIO.getvalue()) + creeped_imageIO.close() + f.close() + + def check_image_pixel_within_boundary(self,pointX, pointY): + pointX = 0 if pointX <0 else pointX + pointY=0 if pointY <0 else pointY + # put a minus 1 to make sure the pixel is not directly on the edge + pointX = int(self.map_width-1 if pointX >= self.map_width else pointX) + pointY = int(self.map_height-1 if pointY >= self.map_height else pointY) + return pointX,pointY + + def convert_cgu_radius_event_to_map_coord(self,cgu_radius): + cgu_radius_new = list() + for cgu in cgu_radius: + x = cgu[0][0] + y = cgu[0][1] + (x,y) = self.convert_event_coord_to_map_coord(x,y) + cgu = ((x,y),cgu[1]) + cgu_radius_new.append(cgu) + return cgu_radius_new + + def convert_event_coord_to_map_coord(self,x,y): + imageX = int(self.map_height - self.transX + self.image_scale * x) + imageY = int(self.transY - self.image_scale * y) + return imageX, imageY + + def cameraOffset(self,mapinfo): + fogOfWarStart = mapinfo.find('Dark') + textureEnd = mapinfo[fogOfWarStart + 5:-1].find('\0') + rest = mapinfo[fogOfWarStart + 5 + textureEnd + 1: -1] + return ord(rest[0]), ord(rest[4]) + + From 38e51d569ea777a13ae31476a50a5fda7dc94ab5 Mon Sep 17 00:00:00 2001 From: jonomon Date: Wed, 31 Jul 2013 22:04:36 -0400 Subject: [PATCH 004/238] added new creepTracker, supplyTracker and tests --- sc2reader/engine/__init__.py | 2 + sc2reader/engine/plugins/__init__.py | 2 + sc2reader/engine/plugins/creeptracker.py | 242 +++++++++++++++++- sc2reader/engine/plugins/supply.py | 82 ++++-- sc2reader/factories/plugins/replay.py | 233 ----------------- .../2.0.8.25605/ggtracker_3621322.SC2Replay | Bin 0 -> 46503 bytes .../2.0.8.25605/ggtracker_3621402.SC2Replay | Bin 0 -> 79299 bytes .../2.0.8.25605/ggtracker_3663861.SC2Replay | Bin 0 -> 23933 bytes .../2.0.8.25605/ggtracker_3695400.SC2Replay | Bin 0 -> 41347 bytes test_replays/test_all.py | 28 +- 10 files changed, 320 insertions(+), 269 deletions(-) create mode 100644 test_replays/2.0.8.25605/ggtracker_3621322.SC2Replay create mode 100644 test_replays/2.0.8.25605/ggtracker_3621402.SC2Replay create mode 100644 test_replays/2.0.8.25605/ggtracker_3663861.SC2Replay create mode 100644 test_replays/2.0.8.25605/ggtracker_3695400.SC2Replay diff --git a/sc2reader/engine/__init__.py b/sc2reader/engine/__init__.py index 41757f0f..9a27a9c5 100644 --- a/sc2reader/engine/__init__.py +++ b/sc2reader/engine/__init__.py @@ -6,6 +6,8 @@ from sc2reader.engine.plugins.apm import APMTracker from sc2reader.engine.plugins.selection import SelectionTracker from sc2reader.engine.plugins.context import ContextLoader +from sc2reader.engine.plugins.supply import SupplyTracker +from sc2reader.engine.plugins.creeptracker import CreepTracker def setGameEngine(engine): diff --git a/sc2reader/engine/plugins/__init__.py b/sc2reader/engine/plugins/__init__.py index 8a26014b..2f978deb 100644 --- a/sc2reader/engine/plugins/__init__.py +++ b/sc2reader/engine/plugins/__init__.py @@ -4,3 +4,5 @@ from sc2reader.engine.plugins.apm import APMTracker from sc2reader.engine.plugins.selection import SelectionTracker from sc2reader.engine.plugins.context import ContextLoader +from sc2reader.engine.plugins.supply import SupplyTracker +from sc2reader.engine.plugins.creeptracker import CreepTracker diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index e70efea5..bda1c1da 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -1,9 +1,14 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division +from itertools import dropwhile +from sets import Set +from Image import open as PIL_open +from Image import ANTIALIAS +from StringIO import StringIO from collections import defaultdict -from sc2reader.engine.plugins.creeptrackerClass import creep_tracker +# The creep tracker plugin class CreepTracker(object): ''' The Creep tracker populates player.max_creep_spread and @@ -11,22 +16,26 @@ class CreepTracker(object): This uses the creep_tracker class to calculate the features ''' def handleInitGame(self, event, replay): - try: - replay.tracker_events - except AttributeError: - print("Replay does not have tracker events") - return - try: - replay.map.minimap - except AttributeError: - print("Map was not loaded") + if len( replay.tracker_events) ==0 : return + if replay.map is None: + replay.load_map() self.creepTracker = creep_tracker(replay) for player in replay.players: self.creepTracker.init_cgu_lists(player.pid) - def handleEvent(self, event, replay): - self.creepTracker.add_event(event) + def handleUnitDiedEvent(self, event, replay): + self.creepTracker.remove_from_list(event.unit_id,event.second) + + def handleUnitInitEvent(self,event,replay): + if event.unit_type_name in ["CreepTumor", "Hatchery","NydusCanal"] : + self.creepTracker.add_to_list(event.control_pid,event.unit_id,\ + (event.x, event.y), event.unit_type_name,event.second) + + def handleUnitBornEvent(self,event,replay): + if event.unit_type_name== "Hatchery": + self.creepTracker.add_to_list(event.control_pid, event.unit_id,\ + (event.x,event.y),event.unit_type_name,event.second) def handleEndGame(self, event, replay): for player_id in replay.player: @@ -38,3 +47,212 @@ def handleEndGame(self, event, replay): player.max_creep_spread = max(player.creep_spread_by_minute.items(),key=lambda x:x[1]) else: player.max_creep_spread =0 + +## The class used to used to calculate the creep spread +class creep_tracker(): + def __init__(self,replay): + #if the debug option is selected, minimaps will be printed to a file + ##and a stringIO containing the minimap image will be saved for + ##every minite in the game and the minimap with creep highlighted + ## will be printed out. + self.debug = replay.opt.debug + ##This list contains creep spread area for each player + self.creep_spread_by_minute = dict() + ## this list contains a minimap highlighted with creep spread for each player + if self.debug: + self.creep_spread_image_by_minute = dict() + ## This list contains all the active cgus in every time frame + self.creep_gen_units = dict() + ## Thist list corresponds to creep_gen_units storing the time of each CGU + self.creep_gen_units_times= dict() + ## convert all possible cgu radii into a sets of coordinates centred around the origin, + ## in order to use this with the CGUs, the centre point will be + ## subtracted with coordinates of cgus created in game + self.unit_name_to_radius={'CreepTumor': 10,"Hatchery":8,"NydusCanal": 5} + self.radius_to_coordinates= dict() + for x in self.unit_name_to_radius: + self.radius_to_coordinates[self.unit_name_to_radius[x]] =\ + self.radius_to_map_positions(self.unit_name_to_radius[x]) + + #Get map information + replayMap = replay.map + # extract image from replay package + mapsio = StringIO(replayMap.minimap) + im = PIL_open(mapsio) + ##remove black box around minimap + cropped = im.crop(im.getbbox()) + cropsize = cropped.size + self.map_height = 100.0 + # resize height to MAPHEIGHT, and compute new width that + # would preserve aspect ratio + self.map_width = int(cropsize[0] * (float(self.map_height) / cropsize[1])) + self.mapSize =self.map_height * self.map_width + ## the following parameters are only needed if minimaps have to be printed + minimapSize = ( self.map_width,int(self.map_height) ) + self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) + mapOffsetX= replayMap.map_info.camera_left + mapOffsetY = replayMap.map_info.camera_bottom + mapCenter = [mapOffsetX + cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] + # this is the center of the minimap image, in pixel coordinates + imageCenter = [(self.map_width/2), self.map_height/2] + # this is the scaling factor to go from the SC2 coordinate + # system to pixel coordinates + self.image_scale = float(self.map_height) / cropsize[0] + self.transX =imageCenter[0] + self.image_scale * (mapCenter[0]) + self.transY = imageCenter[1] + self.image_scale * (mapCenter[1]) + + def radius_to_map_positions(self,radius): + ## this function converts all radius into map coordinates + ## centred around the origin that the creep can exist + ## the cgu_radius_to_map_position function will simply + ## substract every coordinate with the centre point of the tumour + output_coordinates = list() + # Sample a square area using the radius + for x in range (-radius,radius): + for y in range (-radius, radius): + if (x**2 + y**2) <= (radius * radius): + output_coordinates.append((x,y)) + return output_coordinates + + def init_cgu_lists(self, player_id): + self.creep_spread_by_minute[player_id] = defaultdict(int) + if self.debug: + self.creep_spread_image_by_minute[player_id] = defaultdict(StringIO) + self.creep_gen_units[player_id] = list() + self.creep_gen_units_times[player_id] = list() + + def add_to_list(self,player_id,unit_id,unit_location,unit_type,event_time): + # This functions adds a new time frame to creep_generating_units_list + # Each time frame contains a list of all CGUs that are alive + length_cgu_list = len(self.creep_gen_units[player_id]) + if length_cgu_list==0: + self.creep_gen_units[player_id].append([(unit_id, unit_location,unit_type)]) + self.creep_gen_units_times[player_id].append(event_time) + else: + #if the list is not empty, take the previous time frame, + # add the new CGU to it and append it as a new time frame + previous_list = self.creep_gen_units[player_id][length_cgu_list-1][:] + previous_list.append((unit_id, unit_location,unit_type)) + self.creep_gen_units[player_id].append(previous_list) + self.creep_gen_units_times[player_id].append(event_time) + + def remove_from_list(self,unit_id,time_frame): + ## This function searches is given a unit ID for every unit who died + ## the unit id will be searched in cgu_gen_units for matches + ## if there are any, that unit will be removed from active CGUs + ## and appended as a new time frame + for player_id in self.creep_gen_units: + length_cgu_list = len(self.creep_gen_units[player_id]) + if length_cgu_list ==0: + break + cgu_per_player = self.creep_gen_units[player_id]\ + [length_cgu_list-1] + creep_generating_died = dropwhile(lambda x: x[0] != \ + unit_id, cgu_per_player) + for creep_generating_died_unit in creep_generating_died: + cgu_per_player.remove(creep_generating_died_unit) + self.creep_gen_units[player_id].append(cgu_per_player) + self.creep_gen_units_times[player_id].append(time_frame) + + def reduce_cgu_per_minute(self,player_id): + #the creep_gen_units_lists contains every single time frame + #where a CGU is added, + #To reduce the calculations required, the time frame containing + #the most cgus every minute will be used to represent that minute + last_minute_found = 0 + cgu_per_player_new = list() + cgu_time_per_player_new = list() + cgu_last_minute_list = list() + for index,cgu_time in enumerate(self.creep_gen_units_times[player_id]): + cgu_last_minute_list.append(self.creep_gen_units[player_id][index]) + if (cgu_time/60) ==0: + cgu_per_player_new.append(self.creep_gen_units[player_id][0]) + cgu_time_per_player_new.append(0) + cgu_last_minute_list = list() + if (cgu_time/60)>last_minute_found: + cgu_max_in_min = max(cgu_last_minute_list,key = len) + cgu_per_player_new.append(cgu_max_in_min) + cgu_max_in_min_index = self.creep_gen_units[player_id].index(cgu_max_in_min) + cgu_time_per_player_new.append(self.creep_gen_units_times[player_id][cgu_max_in_min_index]) + last_minute_found = cgu_time/60 + cgu_last_minute_list=list() + + self.creep_gen_units[player_id] = cgu_per_player_new + self.creep_gen_units_times[player_id] = cgu_time_per_player_new + + def get_creep_spread_area(self,player_id): + ## iterates through all cgus and and calculate the area + for index,cgu_per_player in enumerate(self.creep_gen_units[player_id]): + # convert cgu list into centre of circles and radius + cgu_radius = map(lambda x: (x[1], self.unit_name_to_radius[x[2]]),\ + cgu_per_player) + # convert event coords to minimap coords + cgu_radius = self.convert_cgu_radius_event_to_map_coord(cgu_radius) + creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) + cgu_last_event_time = self.creep_gen_units_times[player_id][index]/60 + if self.debug: + self.print_image(creep_area_positions,player_id,cgu_last_event_time) + creep_area = len(creep_area_positions) + self.creep_spread_by_minute[player_id][cgu_last_event_time]=\ + float(creep_area)/self.mapSize*100 + return self.creep_spread_by_minute[player_id] + + def cgu_radius_to_map_positions(self,cgu_radius,radius_to_coordinates): + ## This function uses the output of radius_to_map_positions + total_points_on_map = Set() + if len(cgu_radius)==0: + return [] + for cgu in cgu_radius: + point = cgu[0] + radius = cgu[1] + ## subtract all radius_to_coordinates with centre of + ## cgu radius to change centre of circle + cgu_map_position = map( lambda x:(x[0]+point[0],x[1]+point[1])\ + ,self.radius_to_coordinates[radius]) + total_points_on_map= total_points_on_map | Set(cgu_map_position) + return total_points_on_map + + def print_image(self,total_points_on_map,player_id,time_stamp): + minimap_copy = self.minimap_image.copy() + # Convert all creeped points to white + for points in total_points_on_map: + x = points[0] + y = points[1] + x,y = self.check_image_pixel_within_boundary(x,y) + minimap_copy.putpixel((x,y) , (255, 255, 255)) + creeped_image = minimap_copy + # write creeped minimap image to a string as a png + creeped_imageIO = StringIO() + creeped_image.save(creeped_imageIO, "png") + self.creep_spread_image_by_minute[player_id][time_stamp]=creeped_imageIO + ##debug for print out the images + f = open(str(player_id)+'image'+str(time_stamp)+'.png','w') + f.write(creeped_imageIO.getvalue()) + creeped_imageIO.close() + f.close() + + def check_image_pixel_within_boundary(self,pointX, pointY): + pointX = 0 if pointX <0 else pointX + pointY=0 if pointY <0 else pointY + # put a minus 1 to make sure the pixel is not directly on the edge + pointX = int(self.map_width-1 if pointX >= self.map_width else pointX) + pointY = int(self.map_height-1 if pointY >= self.map_height else pointY) + return pointX,pointY + + def convert_cgu_radius_event_to_map_coord(self,cgu_radius): + cgu_radius_new = list() + for cgu in cgu_radius: + x = cgu[0][0] + y = cgu[0][1] + (x,y) = self.convert_event_coord_to_map_coord(x,y) + cgu = ((x,y),cgu[1]) + cgu_radius_new.append(cgu) + return cgu_radius_new + + def convert_event_coord_to_map_coord(self,x,y): + imageX = int(self.map_height - self.transX + self.image_scale * x) + imageY = int(self.transY - self.image_scale * y) + return imageX, imageY + + + diff --git a/sc2reader/engine/plugins/supply.py b/sc2reader/engine/plugins/supply.py index 535d190c..394a3a64 100644 --- a/sc2reader/engine/plugins/supply.py +++ b/sc2reader/engine/plugins/supply.py @@ -5,35 +5,44 @@ class SupplyTracker(object): def add_to_units_alive(self,event,replay): - try: ## see if the unit takes supply - supplyCount = self.unit_name_to_supply[event.unit_type_name] + unit_name = event.unit_type_name + if unit_name in self.unit_name_to_supply: + supplyCount = self.unit_name_to_supply[event.unit_type_name][0] + buildTime = self.unit_name_to_supply[event.unit_type_name][1] + time_built = event.second - buildTime + time_built= 0 if time_built < 0 else time_built new_unit = (supplyCount, event.unit_id) self.units_alive[event.control_pid].append(new_unit) total_supply = sum([x[0] for x in self.units_alive[event.control_pid]]) - replay.players[event.control_pid-1].current_food_used[event.second]= total_supply - print("SECOND",event.second, "Player",replay.players[event.control_pid-1],"SUPPLY",replay.players[event.control_pid-1].current_food_used[event.second]) - except KeyError: - try: ## see if the unit provides supply - supply_gen_count = (self.supply_gen_unit[event.unit_type_name]) - supply_gen_unit = (supply_gen_count,event.unit_id) - self.supply_gen[event.control_pid].append(supply_gen_unit) - total_supply_gen = sum([x[0] for x in self.units_alive[event.control_pid]]) - replay.players[event.control_pid-1].current_food_made[event.second]= total_supply_gen - except KeyError: - print("Unit name {0} does not exist".format(event.unit_type_name)) - return + replay.players[event.control_pid-1].current_food_used[time_built]= total_supply + print("Second",time_built,replay.players[event.control_pid-1],"SUPPLY",replay.players[event.control_pid-1].current_food_used[time_built]) + + elif unit_name in self.supply_gen_unit: + ## see if the unit provides supply + supply_gen_count = self.supply_gen_unit[event.unit_type_name][0] + build_time = self.supply_gen_unit[event.unit_type_name][1] + time_complete = event.second+ build_time + supply_gen_unit = (supply_gen_count,event.unit_id) + self.supply_gen[event.control_pid].append(supply_gen_unit) + total_supply_gen = sum([x[0] for x in self.supply_gen[event.control_pid]]) + replay.players[event.control_pid-1].current_food_made[time_complete]= total_supply_gen + print("Second",time_complete, replay.players[event.control_pid-1],"Built",replay.players[event.control_pid-1].current_food_made[time_complete]) + else: + print("Unit name {0} does not exist".format(event.unit_type_name)) + return def remove_from_units_alive(self,event,replay): died_unit_id = event.unit_id for player in replay.player: - dead_unit = filter(lambda x:x[1]==died_unit_id, self.units_alive[player]) + dead_unit = filter(lambda x:x[1]==died_unit_id,self.units_alive[player]) if dead_unit: self.units_alive[player].remove(dead_unit[0]) total_supply = sum([x[0] for x in self.units_alive[player]]) + replay.players[player-1].current_food_used[event.second] = total_supply print("Second", event.second, "Killed", event.unit.name,"SUPPLY",replay.players[player-1].current_food_used[event.second]) - dead_supply_gen = filter(lambda x:x[1]==died_unit_id, self.supply_gen[player]) + dead_supply_gen=filter(lambda x:x[1]==died_unit_id, self.supply_gen[player]) if dead_supply_gen: self.supply_gen[player].remove(dead_supply_gen[0]) total_supply_gen = sum([x[0] for x in self.supply_gen[player]]) @@ -42,12 +51,37 @@ def remove_from_units_alive(self,event,replay): def handleInitGame(self, event, replay): ## This dictionary contains te supply of every unit - self.unit_name_to_supply = { "Drone":1,"Zergling":1,"Baneling":1,\ - "Queen":2,\ - "SCV":1,"Marine":1,"Marauder":2,"SiegeTank":2} - self.supply_gen_unit = {"Overlord":8, "SupplyDepot":8,"Pylon":8} + self.unit_name_to_supply = { + #Zerg + "Drone":(1,17),"Zergling":(1,25),"Baneling":(0,20),"Queen":(2,50),\ + "Hydralisk":(2,33),"Roach":(2,27),"Infestor":(2,50),"Mutalisk":(2,33),\ + "Corruptor":(2,40),"Utralisk":(6,55),"Broodlord":(2,34),\ + "SwarmHost":(3,40), "Viper":(3,40),\ + #Terran + "SCV":(1,17),"Marine":(1,25),"Marauder":(2,30),"SiegeTank":(2,45),\ + "Reaper":(1,45),"Ghost":(2,40),"Hellion":(2,30),"Thor":(6,60),\ + "Viking":(2,42),"Medivac":(2,42),"Raven":(2,60), "Banshee":(3,60),\ + "Battlecruiser":(6,90), "Hellbat":(2,30),"WidowMine":(2,40),\ + #Protoss + "Probe":(1,17),"Zealot":(2,38),"Stalker":(2,42),"Sentry":(2,42),\ + "Observer":(1,30), "Immortal":(4,55),"WarpPrism":(2,50),\ + "Colossus":(6,75), "Phoenix":(2,35),"VoidRay":(4,60), \ + "HighTemplar":(2,55),"DarkTemplar":(2,55), "Archon":(4,12),\ + "Carrier":(6,120), "Mothership":(6,100),"MothershipCore":(2,30),\ + "Oracle":(3,50),"Tempest":(4,60)} + + self.supply_gen_unit = { + #overlord build time is zero because event for units are made when + # it is born not when it's created + "Overlord":(8,0),"Hatchery":(2,100), \ + "SupplyDepot":(8,30),"CommandCenter":(11,100),\ + "Pylon":(8,25),"Nexus":(10,100) + } ## This list contains a turple of the units supply and unit ID. + ## the purpose of the list is to know which user owns which unit + ## so that when a unit dies, that self.units_alive = dict() + ## self.supply_gen = dict() for player in replay.players: self.supply_gen[player.pid] = list() @@ -57,11 +91,11 @@ def handleInitGame(self, event, replay): player.time_supply_capped = int() def handleUnitInitEvent(self,event,replay): - print ("Init",event.unit_type_name, event.unit_id) + #print ("Init",event.unit_type_name, event.unit_id) self.add_to_units_alive(event,replay) def handleUnitBornEvent(self,event,replay): - print ("Born",event.unit_type_name,event.unit_id) + #print ("Born",event.unit_type_name,event.unit_id) self.add_to_units_alive(event,replay) def handleUnitDiedEvent(self,event,replay): @@ -70,4 +104,6 @@ def handleUnitDiedEvent(self,event,replay): self.remove_from_units_alive(event,replay) def handleEndGame(self, event, replay): - pass + for player in replay.players: + player.current_food_used = sorted(player.current_food_used.iteritems(), key=lambda x: x[0]) + player.current_food_made = sorted(player.current_food_made.iteritems(), key=lambda x:x[0]) diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index f1c3d38b..8267dff3 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -120,239 +120,6 @@ def APMTracker(replay): return replay -@plugin -def CreepTracker(replay): - from itertools import izip_longest, dropwhile - from random import random - from math import sqrt, pi - - def add_to_list(control_pid,unit_id,unit_location,\ - unit_type,event_time, creep_generating_units_list): - length_cgu_list = len(creep_generating_units_list[control_pid]) - if length_cgu_list==0: - creep_generating_units_list[control_pid].append([(unit_id, unit_location,unit_type,event_time)]) - else: - previous_list = creep_generating_units_list[control_pid][length_cgu_list-1][:] - previous_list.append((unit_id, unit_location,unit_type,event_time)) - creep_generating_units_list[control_pid].append(previous_list) - - def in_circles(point_x,point_y,cgu_radius): - for cgu in cgu_radius: - circle_x = cgu[0][0] - circle_y = cgu[0][1] - radius = cgu[1] - distance = (circle_x-point_x)**2 + (circle_y-point_y)**2 - if distance < (radius*radius): - return 1 - return 0 - - def distance(point1,point2): - distance = (point1[0]-point2[0])**2 + (point1[1]-point2[1])**2 - return distance - - def calculate_area(cgu_radius): - if len(cgu_radius)==1: - print "Area Calculated",pi*(cgu_radius[0][1]**2) - return pi*(cgu_radius[0][1]**2) - - # from cgu_radius get a square which surrounds maximum - # possible area that the creep lies in - max_x = max(cgu_radius, key=lambda x: x[0][0]+x[1]) - max_y = max(cgu_radius, key=lambda x: x[0][1]+x[1]) - min_x = min(cgu_radius, key=lambda x: x[0][0] - x[1]) - min_y = min(cgu_radius, key=lambda x: x[0][1] - x[1]) - - max_x = max_x[0][0] + max_x[1] - max_y = max_y[0][1] + max_y[1] - min_x = min_x[0][0] - min_x[1] - min_y = min_y[0][1] - min_y[1] - - area = 0 - for x in range(min_x,max_x): - for y in range(min_y,max_y): - if in_circles(x,y,cgu_radius): - area+=1 - return area - - - def single_linkage_clustering(cgu_points, maxR,labels=0,cgu_length = 0): - inf = -1000 - if labels==0: - labels = [0 for x in cgu_points] - cgu_length = len(cgu_points) - if len(cgu_points) ==1: - return [0] - - # calculate distance array - distance_array = list() - for i in range (len(cgu_points)): - i_lengths = list() - for j in range(len(cgu_points)): - if i !=j: - if cgu_points[i][0] == inf and cgu_points [j][0] == inf: - i_lengths.append(-inf) - else: - i_lengths.append(distance(cgu_points[i], cgu_points[j])) - - distance_array.append(i_lengths) - - #Find closest point distance for each point - min_array = map(lambda x:min(x), distance_array) - - #combine 2 points with smallest distance - min_distance = min(min_array) - if min_distance < maxR: - point1 = min_array.index(min_distance) - point2 = min_array[point1+1:].index(min_distance)+point1+1 - #label each cgu points - current_label = max(labels)+1 if labels[point1] ==0 and\ - labels[point2] ==0 else max(labels[point1],labels[point2]) - labels[point1] = current_label - labels[point2] = current_label - labels.append(current_label) - - new_x = (cgu_points[point1][0] + cgu_points[point2][0])/2 - new_y = (cgu_points[point1][1] + cgu_points[point2][1])/2 - cgu_points[point1]=(inf,inf) - cgu_points[point2]=(inf,inf) - cgu_points.append((new_x,new_y)) - - labels = single_linkage_clustering(cgu_points,maxR,labels,cgu_length) - return labels[0:cgu_length] - else: - return_value = labels[0:cgu_length] - return return_value - - - #Get Map Size - mapinfo = replay.map.archive.read_file('MapInfo') - mapSizeX = ord(mapinfo[16]) - mapSizeY = ord(mapinfo[20]) - mapSize = mapSizeX * mapSizeX/100 - - creep_generating_units_list = dict() - - for player in replay.players: - player.creep_spread_by_minute = defaultdict(int) - player.max_creep_spread = int() - creep_generating_units_list[player.pid] = list() - try: - replay.tracker_events - except AttributeError: - print "Replay does not have tracker events" - return replay - - for tracker_event,game_event in izip_longest(replay.tracker_events,replay.game_events): - - # First search things that generate creep - # Tumor, hatcheries, nydus and overlords generating creep - - if tracker_event and tracker_event.name == "UnitInitEvent": - units = ["CreepTumor", "Hatchery","Nydus"] # check nydus name - if tracker_event.unit_type_name in units: - add_to_list(tracker_event.control_pid,tracker_event.unit_id,\ - (tracker_event.x, tracker_event.y), \ - tracker_event.unit_type_name,\ - tracker_event.second,\ - creep_generating_units_list) - - if game_event and game_event.name == "AbilityEvent": - - if game_event.ability_name == "GenerateCreep": - add_to_list(game_event.control_pid,game_event.unit_id,\ - (game_event.x, game_event.y), \ - game_event.unit_type_name,\ - game_event.second,\ - creep_generating_units_list) - - # # Removes creep generating units that were destroyed - if tracker_event and tracker_event.name == "UnitDiedEvent": - for player in creep_generating_units_list: - length_cgu_list = len(creep_generating_units_list[player]) - if length_cgu_list ==0: - break - cgu_per_player = creep_generating_units_list[player][length_cgu_list-1] - creep_generating_died = dropwhile(lambda x: x[0] != tracker_event.unit_id, \ - cgu_per_player) - for creep_generating_died_unit in creep_generating_died: - - cgu_per_player.remove(creep_generating_died_unit) - creep_generating_units_list[player].append(cgu_per_player) - - #reduce all events to last event in the minute - last_minute_found = 0 - for player in replay.player: - cgu_per_player_new = list() - for cgu_per_player in creep_generating_units_list[player]: - if len(cgu_per_player) ==0: - continue - cgu_last_event_time = cgu_per_player[-1][3] - - if (cgu_last_event_time/60)>last_minute_found: - last_minute_found = cgu_last_event_time/60 - cgu_per_player_new.append(cgu_per_player) - cgu_per_player = cgu_per_player_new - - - max_creep_spread=defaultdict() - for player in replay.player: - # convert cg u list into centre of circles and radius - unit_name_to_radius = {'CreepTumor': 15, "Hatchery":17,\ - "GenerateCreep": 10, "Nydus": 5 } - - max_creep_spread[player] = 0 - - for index,cgu_per_player in enumerate(creep_generating_units_list[player]): - - cgu_radius = map(lambda x: (x[1], unit_name_to_radius[x[2]]),\ - cgu_per_player) - cgu_points = map(lambda x: x[0],cgu_radius) - - if cgu_points: - labels = single_linkage_clustering(cgu_points,350) - else: - if index != 0: - replay.player[player].creep_spread_by_minute[cgu_last_event_time+1] = 0 - continue - - area = 0 - #if all labels 0 (all separate clusters) calculate it separately - if max(labels) ==0: - for cgu_radi in cgu_radius: - area+= pi * cgu_radi[1]**2 - - cgu_last_event_time = cgu_per_player[-1][3]/60 - replay.player[player].creep_spread_by_minute[cgu_last_event_time] = area/mapSize - continue - - count =0 - while True: - clusters = filter(lambda x : True if x[0] == count else\ - False , zip(labels,cgu_radius) ) - - cgu_clusters = map(lambda x:x[1], clusters) - if count==0: - for cgu_radi in cgu_clusters: - area+= pi * cgu_radi[1]**2 - count+=1 - continue - if len(clusters) ==0: - break - count+=1 - area += calculate_area(cgu_clusters) - cgu_last_event_time = cgu_per_player[-1][3]/60 - replay.player[player].creep_spread_by_minute[cgu_last_event_time] = area/mapSize - - if area>max_creep_spread[player]: - max_creep_spread[player] =area - - - for player in replay.player: - replay.player[player].max_creep_spread = max_creep_spread[player]/mapSize - - return replay - - @plugin def SelectionTracker(replay): debug = replay.opt.debug diff --git a/test_replays/2.0.8.25605/ggtracker_3621322.SC2Replay b/test_replays/2.0.8.25605/ggtracker_3621322.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..3ee9b5ea06a210bfc8267440c72c1e26079f7203 GIT binary patch literal 46503 zcmeFYRZwL?(=B*_!@=DT(zv@d&_Ltv?(W^VyE`=Q?(XhRpe0Du4h@4p5b763`F>}2R5>|ki-L@X&u>|kp5 z)6gBCg#{8C5da4X2?qqi0YGr*uyDhvQ1Ea&!B9XrAP6oj;6E(?E&pwS|F*#Yhb$ng zpa`D%_q`=`000yK8n9dq04&!60L1@vNdLz={)73C3{?H!t@ZzG|401zr}_`i|1M(x zvjc?qpAP~6fMOVj6--pA*_Bb4A=((PbMiCLpz2OR$9q^e;>VjC_5VKqKhHkynI>1+ z(z@gGO_)@o{9c^(Y`{OjG!9*$0zD+aE?}ZZqC=-tVJp|eUrR5H+4KLL|KI)pw!nW| z;Qv1sfF=g~3pYS$OaLUJx`e#Ef->a4EzQ4e3k(3D%nF2qgoTTWHv~e$YMDBigZ?x0 z0R;(n3<-pz2Ep;d!U5so0EloS5Xf)ds} z!NJhxf3X38a6u5Df5iWT4)TA|LH>sh5)zVH+Sb9s@F%hI4|ifo$Df8aCd4wLKu7=x z8WI4BEo*6GX>Dl7=wxmP3xa@$t4#LqyV&cPfQRu)*wnGZR>AWJ7t-{X5`58CW0=_n z9Z4T>Xy`HdR}ZRmd?S7vj@My;aCpEO@T5!w>H*O)>F+%#FsmvV($ zoLqRsut5M^I9MBa>Uf z^w7N0+1SBBFrvJ~-~%fwUMUzinmL3d=mCr(BMbbGinG9!kEraFP4ZamLA*(}^j&f{ zfPyj|U|H<<@2@HVkqcn|=Yi~CRtt-V|G44|0Q^q}06+jNEM}0PND7EeMxbC#X4q!{ zBdmyiPyph8c(4TkF#8`A0D^*i%p~p9iZekb4T*g=cQkCaI2sIqC=eDFu*{vA7hs>U zKtlTWA}E0wkbf>jE-19n@^@|RR8L5#3(1?1pe{8bwR5kEN=ihYWj;ux*t`yV>`J7Cl`0BT4{v`Od_Cuoxo`*$ z3UUqyV;^ic)tPPHM`1rW+Wuu2=YOkw^p7&e9cGELp%~J@U{gZlD_bX;D6A3MS(O&g{Qr8P|jllH{S!H9eXuLxXs0}Sj(%l*Vq()au&(KHL+9?Ep71V!Ya&7 z4$MVo!jYg8H$!f;iJABalgBCAaiI<8ehC942eRtL01JObBLtE2oVL_C8BDe06FXYg>os;T1>bc0blV^Hg&yU5!i2M$GSgrF zncpna2V!%tXJ1A?S|RAu?8pWrwkG($59R*8NAc(6Op?YUjZmPXyLvLYy0eUjl%A{mOC z5lbayX_8cCk7`gZy1#}W=ESG0U472_JL|fU5MyC+`jj>?cSj4vC{C5bAu;Soxk+I; zfZ@$xDS)Y1imxd>H?HK$!EneXcP7N|(Df0eTyNCVx7_o(#af>Ko71AuXvLD~AF49PQItUfb=7;%7AW^3SnZ=^v{2)yX(wHfWXGZ45 z;u_g!%Z^#7VrMMN{45skf%9M)Tw?Z_!FgpoR#wY+GnIERb2K|12zG>n4+_;%urxdu z(#XP!Pexv>q;!!tTegh1q&VHmIyZHpPx+mLO_s8F9x_{bp16-$R<>B#%2QcneqL6* z^wtV@URilG@y$<+5;1_PiK^^?cfnoc1`IZtUnEiID+XUC9bUrU`AkY!F+HsX`T zC!slYm)$K1NmpJKn`IF{UL;c7wLFoxGFezxd8fp@?~U7^mq|BD<0~tD;8mVvPtTUz zANo=#Ue?4XPyWEBJZ3E(;gd&HoQ|>x3LC)?q(nth+$||CIpx3$$j(kQfE}he0L4gN z(42ye6%%B?E2M*>*&mn}EJjAd8>vbkpk$%}tR8_Ff?+fF91sbpgJxkSGhifk5mNRM z`Od@G#6} zw@|iLo?qm}kXI~FzKu#Sl*c3@pQJkBQ#`e14++T@OU=EFE?f&r>u5l#n5YtZ7-P{z zKuQ`f2Ks^U01S||fL^11bPQ(kB8WeEO6XEugKdH1UB8?82{#42Z2HWM$k8PnY-ppa zny^2~jsuJ){p0c{Ar&b5NGHRuM@9CJ#{}pzB$ZOjz=f`J&w9FOR}mB=dF=iWEA+No8mgtoqnCyn58Q}8@aAB*Rs>WB`>@axpu0A&W(M8q zB-!IS(nmX57*term{pYz6cIC4_ouIV7Ajwm54?b}hNV!_LHpVnLcP>eDoQEqmItod zRWsdN)lbe=FDuO&ikwpSN-CV|){RI94y$b-(S$wuonyebfs6-T%CP8+o!h6;miS9c^t8>R=-vMQ6g?K#cs9(d)k zl&D+cS%luyyNU|Q9bPPOmgbdbE$bd~&a`IYH<&eT9hFmhC4OTQ&S?@9q*7Z7BJw8o zgT2r;fHmU1sO0zvE2)!mzZ)YBf}<%o9lt{xtiJgCO2Sxd=Xon_aPhD~HVpfnKXAue zLvp20E=G!U-C`wyAx`>NO$mOz{@OaeA=^EclMuQG;-+kk+_eC59-r6{%AW)AD0P*T z1eH>tuaO#eSTYESCBhX_JbB*oo9FlzVLqeI8ab-cF2W8jUhv77pH#(K3oiv&?Uy=- zt@6mCFTZ0^$#;9_m^rV>l-p}|KY}|k5rjePygJTcY)wj*flLT?p-^)A2F!U7OJT40 z`3z~ks=_J`;>k}hD~|SGmq$~#9x?h?>ktOZt(HYWy&N)#Vivl$Lb~5j6~b}ikkCEd zCFqZWh0r1AQJ@rVt#(+W`Tv}mrbgxsxnTU3ZyeuT8S&(7Q@Jx^0gS-qU*4kOs0-!F z{FJOKp2v{pN}r% z3v)P)KSb$HQwki=2phMO=A^_yGh^X1P)k!#v|U|Y??oELtiLk%ah7*Y8{<8%A`Rel zwj{|Dp_quw^Dy;!+`vC%;D+Kgl@42jaEyNH>Owal6PB$okvN1yI^{8_auTQeL5Z0i zT;h{K^zM&Bk=}Dc{rx5zQkTimiKm)d_CrCIJ^?5KZ6+EfbjBnlv_h`VoP3w-G&s{A zA%#i4F`^kcI1Ut1?dY#kx(0G2L;({VJ(wq9kpQ9EoJt>BH>OTFc2o5a2~>zC13y-Q0P4Jvyfd^tTow{e2;vbbh&)jMvrNIPh&upxXo3jVA}K<)%ZU2AmW89d($G8v znFJETOEm-bFPs7B<*pmZz(q7NYs>uxo39@tlwwCCvkY-h+u*$PBi6oeGE;tY>?Vio z3x(Bfo0A+A1upYRN;!<>Da@S2F(}QT04A`!HHi#JVYyZ-tJQczniwZ7G3<#KbfSnV zUuh6WiSBqm3rM~b7s+M^BX0Tzr7D@56Jz!$Umvm5!RyVB${BGVYP8KLViB1`@%jh_ zPUoBuHJcX3;xq&_R8tV-)}Y=eLf9lxmPx?z1`5Ha)(4~ri#+zPa~Z81sQ-yx)4z`p zRFjQV5S8c%gS)6`vzZl86IMl3Pm6e0C3&(Ik}3|6z2nM!8cWX6x7InRCBFC~FdTgM z1p8BJ{N}?JN0P~^6N6*@pxu14$j~A4HQ2&h<2{(@E6%5yi$WT#6O+Hv1ZO6t<>nQm z(9dx+U*bG`8i5AyO~OYexF1mYB{a)@6BW(18K_q-*Wo%tC&HFunBNBn$=K3}C?n41 zn(-;a71|c&ES}pV%%#lTGojk6XWWYdXD>WZgfF?RN;#?);`cD{@7YY?4y;aou|HRI zM%Hh%1oI$|oAL>HXgxKw^+jq;cDpW}_RU%?j-NNI*Dc=QOW3~4TxQ`9XNX=}*6`)e zlB7Uo{@LcB!I4;WJ73KeJZ%U7M*O{El{+=KOAA2tqZ|ofqqP1zjf+sVpg|E7H5VSQ zGn8GYBd}8&iKX@j6V%{)zQuz2r_*c@EupR3aAK86s>*`y>`#})%TJC#Q+kZ9%1Y6% z98T+O8%_J{lE2AMNs1>se9?WYCm*h!+dqAXSe}%C==p;VK@?`I#;K| z(biR;=KMB1JTcy;Wql++c<)s_-Flf{3Rad}jBTk`)mRgcpzq6cLSD+=#m5>sCo|0@ z&#<7TP&XN)w$t*sNv-7<@ zt*HSvMl|u8RP90QG@61i*&xZT8DFqU(1wd}QIuM2k%|b>q7gnb1IIJGwRvi+6=xy4 z)kbGypAx2k(qbSa{SrIrp9oIczr^`4!i=aGYIT&=cJhNkU%#Zyc%CLgH*4%b0tz8o zxuGPFA45Z-V5^plF{uM zC+uiyb*H7I(N;H?ZsP14Gyc_IaZQGK;sq(;@l8j#r(nm08tgGWd1#~Hr504R7MSs_ zVn?)J)GxD=*9J5IiwePgV;5)DXzFcp-#Zwa5A0rS=hB^TEDSK0;%U6bWLGMb30J)O zQqGm|;pB(eq8CF<-~cA5zcnia-5r$JxZQe?(|>UmDZxrW@qFMDPGKH_5%3NnJX$_b zRQ*S~@7l`$N?=VE``igEC)qKofuoD(u-HGnLFY4L7~jL(i0W;fq1El>Nk}_R38-U%goMcdk4Rzr8%s9 zOH!Cno1kN{{!_XjQ)MzJ-G0j)iB2eqJ{N>vGBJH zI*2JdS96s7F2~eZ(KocBRA4wu_iFZiuF0Hmz$!2?`kTlXROB@^$^c`fQ$uo9rJ(S{ zr7vH!EoZ@*qDE_Rc_2~=k^~rE)GNB%qAl0zHjNe$wN{UG+-)4bsXkhbB?b9{kjimH ziNBiXDR_-B`JBguYfePMj5!7q;?t(0vQ&&}9`?nNzZ{&WyzU{QQ=tLI9VVy--H#&f za2T^ftZtQu&+zoFuzxgcu_kmLjCOQu>c^Xwza7i}Ue7n61e4Kyqm&*Wpq^=D%9I=( z3=5@N;1S65;s0i-G1+d(yuslxwjcI2+L;NeJ2E0K7ox7W<-(HnQ9k4Pww8Jhq6&$zUc51F;~0hXhA*yLk6rHJ_ z$OX1p!M#tYki;ZMl;w=b%ijoN4{T>)5}AJ;^uR#(&osjm)_8W-25j3_nTER(MMNvw z5nJ+jBrnH;f{BsWQDaeb{H#ao8a~B59Q1T9HKp1l%KTo|s$d@)ml)Fj8Rbs2}Pk#{_Qk3PY{XPpyr|lgqEuUqhQZr6HOtWQAiJlB6(sy2A1@H$3lF2Z(QZ&-qMR z4{xi^^QUuGFZ7qzF?{l$#NGx*f15{b_Zf5AET5Lj2}St2P|x*$g>I;7NGiXMtk@p7 zw#RnhjVMLFa&5m4PG&9lCg%87kw2NwiNU%r`rT&f+*JI}-}Tr+%CJ(|Q6=RDb>p|? z)=-^@&B$2nZ_KNQ_Mp=W{bl_E9=TPQP%hLTadM2fwBiSVV$ElKvJHo(L(Os!eu;vEXs6%3SrT>M$}m z6nG&|-t3Ta|FX4Od=rFZN3JE&6wp-)Hew$ZCH7RO?G>6oYJliFoJYe9Cxf)(rsor# z%V%Gc{dLNghP=%11?ui&Lf@eSdAyW*8_)4L&W`r{8vO+hQQrquNI-H_LfJwP_NE99 zw8hxi5mQ>ZI(x`Y=Xu@S>NxLp7IU&oVcp#oGR0$uUQOv7R{3M$qv&rnyge?3o?;-J zsEEe`(rMc_qh9psI#Sw6og41X&^4c{vc`JGq{zMbEjY=$Qbv4yFayC!*Xz;~adTR$ z1W;?zU}SjV^topAu#xoi=tnFh^j8>;F60dF7?xd$ub)FOrmu$N0sXicdUxkvct72Y z-fa>DEDu2XdClFNnOlNz`t0iWhQ5)aNFWXZ&t1E&Am8HW+_g^>+j}?I3yOginpe|3HRlxL ztE0h&6jQ4Z~9SAQc=jZ|=w3MLK zaq{xbcZRk(#*&Z@)g3qX9G|+IPy1Joe7XyQ*X=F`y_q;2rk>V<@YXja9}N^&&O%9%+80%HWIvqP_Cu9mkJT?^zR8acw6OBNo!oa2d@?*3 zt9W{ruV2PLo@AdL6Q1c4?fH(96IVt6Ttun&zbCj^?)$}W8a}gUz(R^pGHDxObm{Zw z)4MPD0*w{~2gk4~3v}Y~SC#6(Xs>LZZH_o;+&~W^@dP1OcM=MKSPDyFF2CzuaLU_t z;B8|Ed`#NvTSdo1*8y@%tW#)@>=8wBlzFT7Jr|J4PVo?It&^;Gyxqio4UmVZ+1^J?;@Sr*M(nl^67TrqUBoF~c?tO#YpDupd1G zc7qo_Bc0K8Ds7-iW16B0~C`8o$ zBkpk^vS-JiAB5z4SJAYN;q4Z?k~rrn(gu+B^IK|zXB+#R;);c<&bRj`%)ajicvXA<`xj`KE6P*%5qm8mli zTuf+TAn_r3xCK5^98}a0R53qq-7U)jh)w?bS8yn)(Lz#Py$<%4j-ip=@q&kzWumWS z&@wIYEVBx8t+23oz@HPMt+%T=3Zb_5_AheYRero1P@UK3s{Ssv*kik1{mC*a`VsB4 z-fTQ#m3JzYS;DfOUKje`=jztZ-+x{tqzcwdIDCt6;=(CiKQtEi-niG)i9m2&rnJX$ z;?2nl!2{z?Ki@PL#y#SV@VC5rwVy7>*%$7{z!cJFtJ4LiXG?PgzB|BqI_Ymx+dPM+ z&lqUOn%tOTUm*pAVf~H^a8mX=XK?Y-|6+O~P${&!F_kF-dQmUKh3#_a9oC1R?n(5L zX3Q6FpXJKIQhTKn9Pk)lZWg#A`@44Tv*{Q`hFhe9TCl?;;U}ziX)1>xJ;jz`>?mYo$#P?kh4X%J3gW7rEq+Qy-vDY7N4;mu- zwIGzKe)1xH@BXBt^nQ6s6V5%6jZ^PBD}0pXa^T$PH5aIR=hk~&Ip7FE1cl5Y0Be_o zcTGOn-Hsjhj9BNV8wiXUuToiNMniV(zljwwR=K9(nv2frlemaqLo{76LwdAsWu&9C zm?onB`KRWoIjuFSzL7;CD`NSR^ua2oc?9Op3oyJXelUyr2$$oadX{j(7v zXe&ZeXvJt#EkuS=Jt9esvA3_z=+y)vxeB-Qs|u07s@>;YsiC3vRM)lT>r1vWzpiUhJZ?1q*9Wf?|`&!@dyUDzW3-IAahi!B2ou|h$0 z7@jBsUCxkT5Wtel6wsaO_0r>zx%y>2;7n>&udZ1~v;gIm-?)x9H_vJ|y84`3|5VF1 zvX7^qLnZBJ^TtkBV6mOSoHepM*T8el!*?e0#X@u5>TW^v!MA!y|B&G@Vh{U8b!V$y z>KOh&)-;|!-smoPjD(qgBfe+V`F82=E*Q;{sy2~nHLu%goUB*;Zj90xaCbnS^<-4w zb+U<|i|{2S7c?+Rr)S@PhKs_OlWH(?QG-d|{5ZvI4)~J$mDzKkL_|n0pctK=6xmb+ zLQPf$%BtuPw~n|H$Ts*vM2qQABmjdME@HaGT_Pa{mH?uKQ@;&2{{lB7?8}p{rck4z z1~tssvTSsV%?Iqs1G$INtm7i%`go{AgEr(qbj!G-6qNobQb^kSzn)EgDEhRX2U8rQ zrh+CxyORlE?#EF-vfw!~ut-tugavmq0aL1C@KCEi$mCB#0kD(yVHA>DXm9Kl6C%sI z6y#Q>D5;TXMLPtoUgNY_Qmhd;`@X#61@3{VuN~+24c(Q_hq&{PWMp<%`F9HtDGEXC zglc?`_+UP12Y&sz!eR+z4QQmyH&1@78J^zTxa4Txhwls5`s6e@M~1;5u8lAEsTl^t4Po z4LG=|ab2KfpwJ}$>F%>E;{N^2neg?)NgKJ*RSD*IZdLaW&&mU%UMu3`n=c!l@oKU* zyjes_?`lYn`U);?enJ;KkF8%E`BPY}?&_BYYY8&NOSIQ3%g|G%kHY5C7UO znVN%mmlkt-mCKrbebIQ@W}v9;+*vOr6(|dY7nn2~>_5n^y4+LUD>g83_ove12hPVFSsAPuh|#pB~U`Xng(k(Df=W0&pb z!maWBac`$MhV{_YISKQefNV7}XrGe=+d{w})(9?l^Y+&mP4$4iIx0x-v*rdd$G;E6 z(|=7JE#M%+J$y-XPglRGW1|KoN)jhtpDL^iV;NI>!yZd4df^x}0hkqC0dhWiIxbCL z^tm&wbz!yGh7WLiYYwyPF5M_q7J@K^S`LP$FMlwHK z^(OxI!#riNPt|M~1(r!m77Y-U!$eZDI^mcOC^5ZIDLu)rhctK|v{`b9jr~P;y@rMK zozyRBurCW7CPnROpKqw1qnm$|4}wh0Rb`fKIcRATVB268U7Yz%8&G7Q1&R343rRnr zE4sloM6vPGKK*)O)V^Ons-?ppP*gCS2| zt1{AjMbKzgsMmFkO8==}rLh!`qu!&jh|oPu9((fg$nzIkm@2-oAW%GnP44@3Me%@8 zoeZJcFG&x0n7G(`x9{*_kl+>zYg%GfpJAoMuVr6aJ5@aM+y_n%6loZwxelsAf(>Ng zD!!W>`yAnHqcUQKhBdBFS`ASgTMqh-2SrT3NY?Rwy=|`(B{T}B+t4}1k+Um3=Si<_ zexR4XtFp3qG4gJHn0g%bLhzAn>}$?2ma&emD`soC<>sAmNSf>${#_KDB;PXv5Af1~ z{SKucIXX10A`O`P!W?G3HbIiZMWB~rv18E;0zT_nw)yI9tk?#P8Z8seIRwe8ZTB73 zL?3-1xsY_OKC=$^oY5PK*%>SO{}iiY^#fB5b+I$DgblCS$G;m(msx(nKx_MP>%33? zizPb)I~AoK;;PJLvm0vWN*=?| zURJ%i=S0Eprw~?nElnxp;9Af_d|N^wYn8=xBL-O$kT?E0}i~JVKgBlu=hMz{k=gTp^)p&rM zqQj1TE4q|!iu`7q(*NYz#gx?4Nm;oFhGsdcr{yM7g)~6fhbtD$i=r<6?eosweN7BO z7=C6T2BMK$$=yHLgF+;hEU?7D7jXA-?;S{&5fqmoFS*}Ah`qB`HJxH~>aQ_f#%@$M zI{Qd%I&t1YZOwD-oGxWx=x*~lccx0#bl2_X2{Tqz6wU6|#9(8!Ir)3SOl!#jdhqAH zn7+H*4>ewU#b0&P%Cr`M^AwH_J1dEDMOwB~kG@s3?OP+%n)7QS^@CZvZ+rJyD-Lut zPUSZ!SW$GNn%rx1?ku)@^uJNWl=|aj7F3axZ5Gr(W@PGr%B)TvZi6`J+RX-6g`}}kpqcQ##KMk)!?Q_&Ggvgd6>0wVC3px>?$oP#B8W5{)##=Y; z+ldvQQ-GH*;>}K0fc>hsr0GnyfoLU5kc_pw^1PZWS4JRj@-nnt6tqi!XWXrM?+ThQ z?n47qMB|Y~@^A{VW4~c4&<%UVGVE?0F>BO%eCXo`Mn?T;)=M7unvMLreV2MTpD*=Z zK%h+`KteE+8eH&na^JizgSU;aJYL0^*&F-d^KA>^4#6)6L!d?I)NWdvCL|$$L+~)> zTk!c&(R;X-O^T_pg+{W@3zAogf|h|Me&9kf6g~rGOCW+V5t|KZVcwz<4YRC$b;{2^ z3Qn1dKl(V~5IOgVq~%-7R-KD@r(7TCS3e7pgOOPgpqjBwZMr*)-x+Lp>pwF!O&SX? ztK#F+Wt3-5J+Yo*zE<};wJI>5FF>d(vh|y`l5Twe0a0D7K>iqNU*jEeqV;Y6=lpy0 z9o6U?&jfhO*4^8frf1-$Nx8+mu9&I5$wscb#q#lKKi1A}Y5qYh=jp}r`M3R6CrmTp zH2dy$C+YyLgg?Z*$N|61% zO4VfN(QA8%VdK)-<1?GKfBD>wPo$h*|Mf{*ml9ALYz$QE=fWYt!sWuTUUt>& z@w=&KWeKqk#KS;*!!@uNr?uJt5XgUuCDBOj{_gdz!O%-AE&aoD-$jp>#;gaaz~dnM zoCUcqNRc&Ps1l>EXCBc+=5RohYnQZ&5CeO<yA=uvB9PKGw$eq{xhE#cq-5T*|hiBc_dPA&i>=Z)T;L`gqF7mi@k`ttW z8$UK)iy^#wCiKAg2h7d56U%vkhB43|7Zli`IlsSinu=!^AzV3u7^~GU2gT#uR#m~j zyXt$izD+koViXkXXx%(Xwmz{%hna^4Ne}=6kC<8pvaf56dtdWOcPOG0P$p2Ax4mDH z;uXVoAfjWM{w-%4^H9@whwVVBI%E~<|EZ(SWLaPy$g%%GQ~tB*-SzBO^9m_LQPp?R zgZ(FbCaSf5jZF4D{wD!0pT28>_pdU8YtpJpcQW2D5Gt-&!o{U z;P7x*pBa1e=F=^_WlJ|U8@>sxj;2`RHz}N1aH_9@9);xsB($iH20?vb{Xivua6!QXFSO zgu&#lBFwOp8xyr@3AHO7MVq*?R!RP33jmR`g5i&e6bp{ zUCL!%*LixYXW5FWSbglcwNfx720I*um$8gmt(6vD-UE!B7qX_(?~6=hc{NWBdjv<| zIU?2~7Jx^<(V1w%&v*>)NXwOc+oh7yrV-qb?7%nLW47&8nJMJSC|GuH5LN*^4pzTI_&xKOSZzfkYmk|q7rKfC8CJF@$QZ+X!%MO#&5Y4Xl&1;(LQD38$J$X2E$=DP}g{d?e3s4 zjV7>LMXX&X-TNV){C?UthI+VV2N2z!pdIG*k)d5P$v;-{M&wQPiMXS@ZC7smE%ZEh zb)A-Fb=O5CnaSX}3^Nzhg{+2f5u;xe7)4UApMDxxbc%!JaOXWe%B14?aUk)F+%Vra zmEY~R>gh*g@S&@NE-2sdwNfHMY4mvgN`y$T**#TVOu-hE9V&6alq7{HePLYVTt^q$J$E2iqF z)OZI6QkMJL>?*21oE9fTMZR#la?}-H{!4Wu;ivGVuCt0Gl^+?E(Q=?~D!52^;UUku z>@oCF*lJ7W-gbrT=QYQfRpK5q#p$#yiSzS_`FOPg7sTy_x!r$(CXn}^_+A86w(EL# z2Hi8?wSKtUhYM@UuKoc#DJnj(tyxVN+ zyK9pT-QUM<7$cr5egX}wr6nTJEt`hpLx5YnC5KM$qKT0L>b${)7) z5b}x&HOAs~O&!;p+f&=(*$ftc=%jcM+6gY+&Buq-1Ee-uUnU`dlim%#S?s^NY84up zHdTplfFE8L{23RVM2Dh-MkE9x1Y9abt1{QNilQ1DeJpFYdg)IV4DRJE+B*S1ZIz*g z9a&B3P^j|o_+MRCnM8l~Cjbzoo|XB=V1Bh^`dTzC2{&m&K>T4v+WH0+|8R9u9k}4i zhGr3Wxxm;(Nrr8nT6@@5N zIdgz$IQppsw-BY(jL~Al^UWE1YVw7(z`10p&?710(Mp*VydGo%1yAh6B15nPl*0mD zXh4La$y}B{fzc6uPsrz5GPdy$=dgKWkSR{2Y!G~5QhQy9Ve8Lv`uum&=$~o409|>I z;#iO}y4m99ywWR#1phKarK!J2&4BT=8>Hz9oh)cHeD3Ri!K?g=4YrO#GSG>5n1kVAWun5BD#@hYQTRUgdkUm>iWzY?i?oL5;kX>l9_!i1ArmosNn;GWb4TOuh50fp!t;GAL!z?OLJd0iz zSdC5MQOvLyOEnz>)7&IL5rLc(4Nd1#EdN(tAZI?l^S(jumV?$qmBu!B8UEmo^k-rY z)uUl#q3)2S<-lYx22 zV-|s^I}a{!ZUVnZxB2yBxe|6ZCZZf(j$O4t&JWd>Z?EZ|4>rW^VoMv6I5JY;5qNz3 zSiKn3YV6M@HTNVQ-$Le9Y8#)|f2X`GFiMdE%)efAA9Wn6o}X%|aoj z*B`KTn8R$tgZ-xO+Fn!&i8KrlB=N(Dwe1(NX&R`XO&r<~zMzkfgP@+58^ugs;eKe- zTxRhPGTGZj`O%J1e(OFQ!M`{b!s|wVKSifCG4?*=xeoe5zwyCcmIcZo^QJqB`A0|~*gZXp z4H^o!>U_N*5&}4SAywM>zvZptk$%qv0RH~JB(47&-r?Ei-_|$YWD3n2q0@Sdu!F8j zUeB1^LYP3$Re%>|%oR4L6^4~mLPX!rw>ikHUhTS%%)44p#yGXIR zs%2(>j*=2A;CJJgci{s-m7{QD=H|j=LJTU-c8~Ib zLhLhJN*)+vD2m~^D05bxQi!rB3u90VGqbtIizt?|QDw4{0%&*5UUHv3*EBJpMJ%OF zxzY+)CJNZLU^wh_Bn+uNq%TSC&MXG1um!frJh>%=hatXG-)rdZ(jVJuO$4178ZcmI=kVhVa zaR{V8z95#vg~;qkD$ffR(TLb6Q<3whN%+$$QOl1&hm}Y9zP4G-1{eis8+y!%hs@H+ z)b@)FcSct{>c8LSBG}HEupXqIXJf^o@m-0rka{o^^yV@dmkQy6P4r9f)|IZjGjx{j zgNIe3X9-3x?TC}_XBb@cy>TrB3<@?~7Vj*enx1nOBv8?AWq%iYgq#84{n&c!_KC;7 z&u}*8QFxMjYFRixT%ql%eP;u=GRlM$1#ghzacasc6t^}l%E>8StE++wi8MTI(ZXSF zDROoLg5Tf#5r@zL(4&)+a6l2gD=z0LWXj)xc&4wBjY^`e6L?yW^(W(}v20P{`KSlx z`d@~ycOIN|1(Qg{5i;QW?@4WSpPil}=NspaP1Zb8@;dAhrsE1Cq!O)l6R(6;Y_RmQ zPK(ea@3OP9)HS`-plwx+zLA^>1DO;;|E2ZMy;iMo)#D#5+G^oR1W+z#5bs|hBdPSxuGaeAgPK~^op!{s%1&vd0kJ8w5lK( zidtm9!vG27mGlz;rRaK?XXWo+3**z6DG8w-ho!_>2?k(?`I8sHxZuYaBeY;VqX48) z==I|eNL^k4&>U^*=>`+(i@E|83c2muu~I{6uu`GC7MZpCL9wD|{`9mn5aboce_QUR znV%doj#yr_s|R$TIqn2{p~wTln~%+P?J6ziM>BeZ%C*{(?7R$qtG`GPW0CD~k^k+C zpG;VCU6nN50X)DxdJAkjjc=qo8|u0e#wBQM;(X(X8Jt1bF1m1-a^U3HQ&YWjV~ifd zl*ZbLi!h5xy9117>?G2D8yH8W;RHmEk;`9e_%rR-93lX}r(%JiDDPw4sJ?LqP?1nW z61=L9cRSO1A|yr!?J)|?O6Qoo)^hH)roO@~Z`v!q$4{uajyjRS-CT^LAOu=uDkP z{8C`)d&}$XcINQJ#gZpIgLh$sJp!MajF>~Q8LH|>8 zzN%VPEke%0wL22Et!#FdECTbCs3`lc;Y#{6boaEIWxVYB+2n=k>@}UOV}Jv44APBW ztkcL&m-ndHM0ruomPwM`dF#r6=u`?bPRq(n_sQyPoW3r8v4_pNb=S@E>1%M>Qmi7W zJ&dK#@_>Fbq->C%z{>N#i)L=@9xOmu^bnu(KM zF_`*ng`4Z!)<`KTc0(=0{?^5Ds5ezKR!a&>hngG)_5VsXRJvq%nF9jC(1ehrLQ^Y3 zuuNGgq~ka$f+px7F(Mk-78bKhWvvbpxlt1qh%b{2!`M(4?Jj3Y%}7b&%uQLsdi`Wk zr~~$xP(Rxoo4hkkBQywRZ~JSPh4D5GCbRT3K#T%)xkjXYQYJGdW%ej}3pn9${z;m4 zIty)f28+c_q2ZE=wA8fq=}ofGrx&Gy+4C7KLa-dZSr4854Ud=N z0ef<$^gP-`)<{alHw~QR=Tl$>d$49<3RY63tAi*#1iqBHa);U(agC$my_4DFly6|s z_JXQxNh?drvX@IB)cM4hnA!7G^XHENw)hhyxK!6~coJvINyd6)AFP>Nu3|(g34$B9EDKDt)T2?h~zhcil;7{xe zb*J?Pcufn6SG*ovP8jV?UTBT6PgdQ67;7Aj4cCes0^vD{g)CRtrR&>N8c=EbT|?c~ zh^z1~F64W=D4U@3%xylGsOCJPt``(%UPSkzW1@yj7$bc-dz%12?ce?#Jkd8CCQx%N?wF6xdDG#UDNcUrtps|2NF*to8!f|KzHM_b%~U&w%*;kIzkMsaURs_$ z@h;tyBy+pwdYN^(VA|GVs{n`a}!FM(_en4Ngsy$H)O^aGLdv^me02;)aCP z$WQm!rg9ITNaG8FE#NXDu>bkO3y1jA1M~|+rdas}^y1|FPIisyFG4nxDGfVBa%uGx zgGgz9-+Fqv`i3C_J5+}>8L&b$%8?d4Qk$$MIwtDfYpWY94R|sxP;e;$!g128P-=E} z%#WzTr%IZYWu_qap>XCNe5sATG+6o(3FU2-xG>_l#y6ztzcb)}4H*K623OkKiU!f3 z2nAx|BPkGb73nG@n=%PV5XCEZwLliIKJ9dUR6;0mxuNjKIrI9xB_R}Jv7`y9)30r} zGR0p0TNch5($a$jdR*GK-Ro&}5DKJ)O42k$-JlHENpKLkVK@}J;V-$Eu3?^Wy@Z(5 z9AOa=V%R(eG-QCBu&;b6I#MWFtS}U8nXoqFa95HDI8rTA$ z->#db04G2!-?^sm)z2fQ*4-)ewO5h|R6BSg06w|@a?3v&MQ!BuomB%OX_Cf0cV%y>Kjn}hMlfP z$s%6r)%bxi5Q+lsINNOz;`|PR40o_-r|6w#HDv)T0@l>Uhi*R|&h(M~ia?3@xIPUl z?81~sYm6?k`wp6|Nuw&;RK=>153t9fT9vD~*aOOP?l-9FI{20T-Umnl)QU3`*pzEg zdc50$fQqgf8;p!h&FHFtoqg?@c$&Wt8a$myDd+*q{qkrr4KdfWggO-w#9+SL^+%3P29#OX^>=*A|6t;9UOUNg?pa=#8_`}t~HGT6&)uv7(tMBKB%X#VL zP)UbYEXL9fpAK!rv0t{9o;IMhWfuQghga&L%xJ3-w1+u!ldlQt)l3jhR&gu^3Ey;F zbBf}v$pIpug~h)m#RYB?nhQutmAZ8A?AX8aU zlg02L3l#*B&q5Edu{+z1tKco(?!EI}?#%=kJbk219@1q$m7ra!u}=^a$_~athmlfp z@(Mu1%3X30IDFSd@n~Dvqi4_Ok0ta2i(zJBage3^{eE@FR_tU_unJGv86k;>7eNle zMUALfNL>~~_?6IGEn6fa;lkUe;7rqYvVP$Vd7)@Aaow5mA}yM1e^ zcPHUnXm#%NRgjQ1*f29>!?Bdu5KgHU3%deYr=i~{@{F&;^DLsLDK@;)` zzfQ`z`-X;GM?xK}{dyszih^}s0tDT>EaXwHI9-i17iN%pl@y|+{&3adqlr(m>W6S7 zf(W!%2i>x}CsD87>vN(sQ%{=a$S!QaqYOmGY{chtuWA)ApD+p1(#6aD$-!;~&9@WC zar>!LZ$4~>DVZN8K5@Vs@zN|40cor8ipqa$S5+y+mOOx8_+WE9^!(pgft*RVbAd1l z=~v;7g#Hp+Z%DMz3`BRyy4yWMYJRk0GyJ1}#NSMc$o;bmDeqaDOW~uAgnbIuWaX%9 zYAQfmILj013^d$M)N+o(rb>Y`%IML1dac@`!(N9@$N#=*y~0GF@Ei&j>k2k=-ODMJ z2rM@V1x<%fx76;z%q1bQgmSA>={&woz5QaZO!rlD|AT+Nn!=BqPm0m0iJ%pnu4JTT ziE-Dn-AWD zTP=V012w$M5$~Laep+?)zB4lws|*;IuJ>;<8x1h`jL(_}&eEi%eLHSr&wYH@cy|Sd zHg9%p;X5&2qDr_>4$YC4fzXEib6PKIuaPtW>@HCk&xxlF&Bmq1=No{rFif6`u~@S_ z?|e*VEA?c~O|>9yqcA_S^-wQsE{a-puhwfI#OUeyW{-tK!cN@6<3iGLhO0_f(M71~ zT!tK5H!9?Z`j1jJ4Xs61NAz0LGIr^+u#Q<3a5?lx)kR6n^93_ja%w|;B8=i94VH~s z%|9J27Yz+f?KTXD$0ReiM2Gr{@_lE-gI9rKVLB3u3HoJDN0~+agiABU5J$Y?LQwov7z)RaxCicByzLGG6jkS}$ zqOK39M9g_nv!%X?RZvu{1voWArZgoYa8ASZ-srO(?-*}#89I8>Duep zAK|%D168V6*5rijQp86LWD=LA$i0cW!U_^86zh^ACj9uqNEE8@g+vjFMTE(>tGC92 zv#U!vq*M!iu?BjEG2tz;E&Slv+yPkk%5DsHrpBJP!aO89-!G5efxgZ(Ck*FIm)8&) ze*!60g&b+x-8Q;^QhMVeI;#otg~d&76;|7QfpmM|*w|`V^yhHs%%do=dk6b?r#uWL;!o1WNJ4fy`~Hg-N6f_kjgMhTOH z*WeepStce|On2{7xmFh_{qmCO!CN9Elt^IU0WgX`V9Sajjm@FO3pvs4{+ZPDryE;b zb$K%1l~K{e?m#9@mikR|Nx3L}9}H7i)k0!<8P(N%f`2H+b1;0&@=OcLg!3lpn<{_A zr6|$2F9IR@q(|peSGhto|Ds?0rWDy;ZuWi)qw-o1{IO+>`Iw*%(ptah(tKs3`*CM~ zKi>;yVnak4SY~dZ`wy`rq0WTqj&7{EGBMgnt~%a3#B8Fc5fQF%cqPl~idKm0@n=o1 z!aR;ie}^t~uZJ?L>PE*rHuL&rah9tOYS9;;)VV{4qvq;1xkh7cuJX*u!^LiGb$bMe z!lNgk{~IxvOD_D;zzP}-+#CCeRvY>C+$FNUF*`(v6_N^2LGg=;#_MsTUId|rdJbFgTk%%coiOgv}+sIVnA^^sa#Xv zg0}Q!pbq4q=mnC~y!OF{F>zf~52R!}!&nyZQ1W0X4age`rSFrE8t%$qVKGW&U6-^* zQ;%)sgxk)W%^7j+wJI4ZF(irdctK{u^F)+pBwO|7v*I>K`7>#lb#LF90MmzMbTZPv z7?+&~kI8*^TJ{G7z;e*Ub2o}7iiw`RtuEcZTR$<&e~&b@(oI0XLBWUR@*8r^4*xtkgmEj?He58;ddwZKZ zJrvg2YNv$1Bc%A>VQ5`B%~YwM6ayvg6o{$*6A}?1fkJ~65v#x;A&ymLP^P4W^&3zPDNuz63NXqk>JRAV z<&hdLSM_Yf>ukArl{cPnEj;l-sCzDXzTdH6JUgER-;b}RZ7gB7-P9_72wKU8VYHE< zd#a!sM}rR@1lFpl~;t1l9lD`(%2&Pqk z+9{ax%TS5b%j0K9t3d@27vRg05K?ZvYS8J48+8C&833i}U#gHP6wXnJgrb#h|VFRFV zve|+(ec(|HZEFn@4Sz0Fdo$GBy=K$38(aE-JjAeA;^1(T++3suiCjk|{_rs&6!E>h z#%VlhT7^7kdtdRy1^>-rnvwHl2?@9J3B<;#CkfY{e!=e8&;!E&Mqn{BLmG>?Z`Y57 zhuTLL8(755mF*hgPH12W?5e5o1dr zMfC*51Wm6Z#p{cS3~ZU+*jI^~?mgB&x}CkniN5`)`xW1Y{d7EEf0!7eC~PlS8k~Uj zO}nqB1tOU7-SpzvM0;`1f829kX5S2m5#-anPLrT)Rdt0-6Y^&%xWLVfvN-s=EFSDDKi6BW^BYo+crTrO+pY}~!VeL&y@)h1% z`3v1<d^2g5Avp4W{I1*_I48w+!`#K~ZoU_of>S^#f<9Uwwe3u8VWQep z9p9X!M(NM`l%&ClQzn%V6xt&>^esVNuehqB7EjZm%tUa-^%FldPt3|v7koQF-I*Jl zd-O{0=G8((z#=wBXR^8YucU^j{y}JU?B(t|s)suh#UgGR{l7ZfS)etyN)9ysj=l9t zX<(5g3g{>&fd~*lm;jJ~1u;<;0CatFgbDrloy=LlDEVVR#4#`}aV2rEutH%a1LDL# z#~NWn{2~1SelcMHK0$CUIeACJEUzLN_D2@773)iZ)+p}u{^>z4NilGsj3aot4rzO} z=!#nE^2U9e?H~QZA4-LFoC&e#*|KXm|2PyN#ybJ*Qdn~^w>iA;B|io1O#QOKs2(Dy z;#V%smo+4zVyNQF1-_UR33-&!y?EypzluV9UI-hnDPW?D4=q*Z$?hM`_K<5@lVxtX zC2EWzi{r{zxda#gDlrFJ5+>e?=NHSO9JMO7)E1Kl$o7cXH)Q;V z=0d%E(+e+J-TwE8K@4F)Ol`Dqhw%wt_$K#rl!r1aZnxlXuyLaWmW(a+KsAE1I3$&P zK+)@#=t-p(=2)U6_|ML`zs=FVboA7xu8gY6hITi&>4Sp6YuC!yCt+7Z>bTp<=HLAr((XxP3!i}wBvM|TW&iU*4kL_sA& zPRZZh&0`Nu&7I_@!OVHUM%oa=hla3jPejg=hIJ2_YKaTFJHoBZ>CaLniH4>0r?5T4 z1-bJ+0Kk{@Rvv_na!ZW0i%DG4>kmVCU)y>sCw}#uA9f0{`oxU1=<)sFsm1QezJ0vd zu_3ylUG$Ft(1)3i+zH$KgC~1#`Iaf>qT1L5T{zdfmstnDeyWc80tCP3<}oQiWeWU;&GF@X=5Vlob_5FK?vMMoy;t6_#h){ z&HZYL`Or(L4e=nbNoE*niv4itIVLC=xn4@&TvW3{$~D^2PGUXIL#RLw(F0w zvu*RHi}n^tZxha9^)lTnPgNExPz{Kvw1;rG-TPF5*sh-N-Tp?P&j;2KM5?yHAj)42 z#>j63X!g?!!oi?HJhwmm^|H@EC*=G(5Ir?+^o1yS(T%V@q=OriSL%XXf&+UcH&b~MdPAnOC8K}XQV;a(8pL%<~3=09L zKNuYBU(&V9u1w3`%cS<}$TN(#rz{ckcEiVs7Yi$y$TR+iJf=+*tR`(G9}U^zzg`j+<g#A~%OJgx zS6uP3)V6kaBts{MjWG}SRa1~tWen`ecR&IazQB*+*QDnCZ3<|6QE|)j#ztcfjy>s? zn)}UN?fHc!_Q;IlmNB&Z*b$pkui&_En=kK(L2iWFmIO;7K8%{0?Bd`bUiOeOMKGCh zRL`7Nssnq-(fhlzq-)O(P}$B97)v-YsD_}}ZZB4*{78raf#NEp>w0so+Ag|rADVKt^_XYz1HZE(k-=bao~OX_oWvsm%PJjo||eH(tN-j9%{RPx+Rin z$*MyP+kRjDugVN2NqXstdr5bg614IfWJ)HEdw8A2YU8=T($(u2`M-Z-fCj4j@7?q)Qx?m+~BxXqz@K@w&3`B#GC>zJ$MkYF^*5 z;hnvh!((w7T0$u$I&0D)4V$g8goM9nH5h{tA{`Hh^LLLRJ2YWMN(k3QgJ|LG#(yv` z&rKX;adT-CLtTe0s*DOq2^VJuviF)9+e`Vzo=FHz`*-WY#Wj&|<7z0SX5qXdC6(Mx z_b0oC7yd2oOvHWXe=1Ei|CBBF>%)(U<)ToDclpE~kQSMZ$7mV5g@|7}Jvjwq?8Nz6 zK*-;Ae(xN(9(mdwb0CzjmtBpl9$kBMS;eXdkiu6al4uPkjwttlYHQ+iQMt+VVI{tO zQZ<&_7!Pz+CWxGHr|hdNhbZc+tx+*ejyofx7s7?A= z?5{cW8pDHAPBHgV6)?_zu0kko}LU!}gx};s#CR@MN zv3Ovd=#eG4cv`W47#5hbd}cH83e;Z1arnd1{5F2ZCm7`>qPivow^gR&HYVMdfIm5| zp6d%?)1sr4W<{l3Au(FrC|Fe?$C?5aE){H`P|R{V#r+dcfoP$>BKhDCgYnOSQ*_ro zZ|!D_tQl@SC`Q)hp`6vnsq-}x3(~af_Nt)LEf{rqEC-hdQ4-b5*$r<3O$nXdddoTkm zwh1ZfD(zj#-|zFZgp(5+g8a_MEtzEaB6kJ*PrTDnbPY)*6;vZK`@3ka2c8x^eo&ON zp_bbL2h{?Q{Rv{>ZZe2z2aJoAcjr8knntR@GU0KQNKx2^En}sRr)f?WX*?9RHfm<6 z^O@o7@WQa^;{<wNlLjAqYHQ}X3$p;dz{F2nk$yrQ zYl+U>rNjfSatW3Xm{wAdAXR%2?Jcn!-G9N;RX%fxw$I==L~UmQgXv1p&SRkZP2lwN z=<*b0xfW|jE{gTL1zT!x|cM3Vh;F^)Ua0*H8w_!Cd1e#;!4>9U1?Y(Fan zrbnc)9T4Rp2^piXV39CO7%Kr(dRLJSt%9oWB(+sk@=}rTRlv+)P-Zpe$bOg&2_2ZS zabHRrv&^(OeRTkP3q{bypYlpaW^`ywjf~|~jnQ633qW7CUk&ME%V^$A*hbcdq3&Su z??2!NWMHSxb!QFT7Ps`9JrhucYXGYiHYay&87*jw_2laI4_yrORekp!ze%ha9LO0bzU->A4l#16A;{|d{Jil#S<7Nt3{qEwqD!3$GY*I1?dYCufs(C8GQ!@wLK zRyGb@xo4(B)crmStJ;bnd1OY;iNo>Bt=!J58S`O4)-zefpxW?9it^QD))pL?L*O^1 zqVlekPwAtggo=(QlA-#spb_Q@J?sht(cRVSasm%LY0ERiy#Z`ekU}alh>ss@Eu-OW zRn;IGx@|S~Tk&y;V2*uh90r-Yw9XVnQA5jY84v1uW;jS2Dzf{a8)F8hXe^N3XIiE^&Fz>DliAaPw)M9#?dD097v)Hpl{%!|9+?zky71B zyttxRt0KZ6QgjU~Hu>-m&S0r>1|=nA6*Fl2xuN=7IT}g+9h0mC_DrSy-Lqb9Hikg@ z@TH4)f$=UErX{RnPllojY&uI+FBl6XB$l5i3#yp%#1+zgkTKX~-iTXO7JQho=*z$$ zl9{@Xzyv9@uyEnQKh--EOpnCqT#{&d?ie3}ULIIlMAO;HQgmnRgXbUEzLpqE*q zF%hWJ$=RcNBpH{#%x2&R;5b!3X`;9e->3vb-q%nN))76Nn>Sx!p!3-ZqkEoo$EMY1 zYb(*1wyItuyA`C7GsOc0P&@Hilr_L#AkCT?^jYlXzYU$2AC|#>%NL>XnD2+)H$|D1 z?Nr}K34sB`g3}=cn@|=-aF21H5gFbl4d)%7f1!y~PdQuCLtRIu}r8(^& z8a}0{zaMz6XuF(s@fdnkRy$*2jBV_HpWAtrA)()Ajbhd5o(mUk_~&r3MTkJ_a{`KD zcJ^Q_hYE-roP>X~-~c!;ib=q~{*Zr;smojEI{vP@>(o+lH5o5^7uUY=LAS|_c;2cr zx^TvxwI;*7H^LU6EYHCbB02s;9Hjy!@)!C9z5LkyTGjT2Wq;$;DW}^AK4Q3*#A8^4 zxRUFy3eiEOh&5dnxv7AfP5u?djjkeLl(%aGt_Z*0wGJ?3mhV^r5QN5HO(5ifj|L%; zISCG@^cP1P1T+7R?AUqx^j7^T_m;aR&%yPh&^i+2g|5$l79VKeL4G^|!z1vL z!9nHu+51LI&e33q$SbhLN6{g{@1)bA%zCiA+kBZ364Ys9NPkim364)hGI&IuX^mNb zx4|b5+r4kkHd}M?=P}!H4KKe`QdWub*Kk=@88T^{7-=kZ2q`K?a8JwE90zI2FYKE% zjovnc-aW^q{Bl&YdXqWjO^0BIb1sozrBn(tuPEYIcwP6YBn*_s`9`=^=|cdk|W+rizAuo#=uT=4QVIwXA)382}zCch*@oc+gYPPwHa+!ElTx< zQ58Xd1X3wI%>*+ClTrXlDP8R1W6S$=i%@sNnWm}b4Hi)_6yz5t5|AUW7NR+{X6iWM zoXp`KH|Dg=#~{iiEQL6Tcn$K;dUt18VF8++F^?F*`I8Dk2~7uMeGiP~c8Xo)=&VbPP!EfU7oqa!qR2?>VeuE6G%FZw89n*7 zCR}>?ZtcR|Wp~`9j^AH7z>232H>rsMi9lpP+QwBV7^u&>aCX0gUIoqs54Qph8~L|h zyD-dSVMs8Q!l};GHb6bZcwcLS8c$Ju7w(jkS!kz8!&b-kCswc3dG)FZb0%zp=CezYwr^@gK_ZCX2rMYj% zSvM(3trI(6QFF-C@*lNVPE#74VaKph;rBQ`a=UC#s_ev|Oju`(OBC-oJF@xX2A<3+ zA|i?o&}6C?Ig4P$63;Y=D?5eP8*^}B{-rn5Z~+6%eayI!7;Zlo@|It4pB+!vm31{M z!;`|!tb<Hp*0^OzfB_AE1wKvp$2}ayeRD(~>+bYc9?4zLqmcb;`R{ z9w@i^Adt7OXq?zKg(?nUWik1_2|)Ms=OdKAM@9XpEJ?m~Y`%?WSbbtFZ1Z81ij5w8 zN#l^2SQ$|5y13=AmVP18UooG`&fU+VALq4QSkThEmN(Bg9^Lb_yO;~H{C5c=Df2&e&~ScppHCT(wbjQxd8?R zIR!qOLp8B=Ahevm8`>bVg0uK3Y7i5w2chlYomY8uPdB zK)2|IDt#wI%!iY{zq!SLYHc<{CT9HcV=1XWj_+z`qRY(S0IsO>dv$s}G;kCU(@I=MB?Uw)kd;$XqU14T#T?wp{u(_k@;KSUSrXb*+NPm*Y{OT% z{}3^$PSU^yBW)E%^$Yq3*cn;qxV1^jyoeSU>&LzGtaiVrReKAYJitDBP@00|+A35R z64==IzJ>-6Mm2aXJoh|VM4gFg* zy7V*J%}re*T2)x(8g{3fo2zr_lNCgb`T^yJSA^RkdMXvYK_tHImQXVlf{jGGjYLe+ z83I}Qiv2qtDVPKkXvLrSv1`-*NFqD<$?m>dkk3tqyWguV;Wrs~Wyp|6m-T*D{*}?n zb2%~7P4{eX*ZVnWRlnh7zF80N>Lbo*eEV)T0?e04FrCFp6{wFZFvHR+8PD4fj>^69 z{t5Bk^g_=rxP0~WDT*y;KXv@eSY=wtmJLtKnU{yR>9*tjop#NMTTXRR(}{o`_V;)w zPS#yOuHRF@BT*4TXG%*2u_PEgtv~Si`J-g33G<)Z@E>HN%8&b(%SYpgs(7*@z4gf6 z*RG$hn@#;C=ZC}2zO4RdZ5Ka}^VrWtQY|{HmOD+=M3S?c_g+ZNbUoNeR0Kb4aUIRi z0(LVdf8D)Bp;;Sr!`Ko|&Ajq((s8|4Uk2rGnehB}`OIL-IHNU{>F>I7pPNNU{&)CP zWmcp*AY|-hRBD1@`(PTkR3+|AIy3tu(j#5Gff0T!F5&)myc(IeBMlRL3@0-@ zNs-XW%FjKGX!$L&Xufc)(ksy>X-%pszV!xQ&*)z&In|y~s@{wA8q@{gS8$`aT_I*o z%}*t4o;FYBP|jY&zEX473{$Td-(`g^4M({Ktd*pJmDZEsktv$bF>m)Hn}htJXw6f) zR4?nI+J%RU8x8tDr*~Zsd~BZO<*aT`?(UJp-6y3M@wKNjm3LE%-WpL3IcTHsQDh8) z+v0$3l15e-VIPa!AE$>#-cl^FDrM)8!zH-;Cj#D}yf2U)DI9AguSYc^EDR1RKuL&S z2?|*iHdd@GA|wJ$Q4R@B1Rge44q2E4*#HfLxFoC$s2l!OTP~>(LKlXV{)U)=SrqRi zPL`qP)V((gM0r#Zt((N^#P!F~e`Kfoavl5zxTSNJgt7cf;TUdJ_@OaG`GwrK? zompm{JQxSF6mG_o0$h8{L|RG--@t2EfBsn*_uFzX45LYe#rf?A6up@(H9o9;7g)W_ z`U}T1x)ZloWZ%ssPp5^hliLS#-jPYZS9exyL)&&kc0q>QujJ=uNg%Th}nL2EQk}{_T-B1Wko)$TzxO>k*bM&O?yUP*9 zGM^h~<9xc8?C|?rTlji1IJ`asuf9NIw1?}V)6^_IGDJ^~0cflPuQTs(C-!FFg3C7g zR~H10>^)%plK5J*O!d9B%)>42ex~_FxY*1K{3XXv$y|`fj*mw&h&7}oF~wTWPYb3@ z?mY!@O@>OGtWgF^AOCVI3#8%b>Dyqc9C3ZA>Gk-9DzfI=Zh3hVa?5xVhR zkTL5wmS@;k5pYN_CHxH$v52pFTeaH5$2Ei*A|PKVDs$Qojgw`8ks1t+rA0sw=4UFo z^z4vXI@6$RX*%_I6+FBG_nR_xk*k?%9U6)RaKVjS81i>k!u%|~66;glVYkoFu>kGF zZw=^tKd>^9keTnccDl6jNNb8WUd*{0i)n5|QFg$M#$ulrF}3a*2pP zqIeG?mH36`(mE*C-YJ-+-2ofxOS^VJ&2N0X$L8{m3GxHDrHYgx1rbh5W|yyC48zAQ zXD>_J3fVuUvlcOm?@5CjV&4)E-R_TXbh_tFm>vjaTpL#$v(iwF`6+xklxXF}@@NRd z{Q4;K0^||U6~kbC$^`2rRK>vkKqRm|K0ZUDdfRuKa2G17^+rP}fWMn#?F@-JGP(hO ze$q#8NIm3xIXvk&`OF!!^U{u6xP1I9g@MVwV_V9SW~@wq2%4=4Jgtb1F=U41(IE7N zz254|BgT*n=!O~VPKNb;7~)0K@{rFM+fbgi;(~6RI3wP$ZAaX6zF^`L?DU;OHFtbT zC1;T2A3l+g(v<4|v)}OJ+wi4hJAH2rtQA8agG8$hF=`E%sw>3Yy4s$(XY%)uti$A~ zDHYlB4HGeMgwaqJolpnHtH*whM+F;n0J9{LoTRP3!DsQ;$<=Z943R}*;1agw1B5lNhQ6G2lmoQ`&0Jv}n=(e|d< zJTYpqyB>TDkr7g_BY~eVA%jeG6ftG~_7C3V2j4MjcgX-F^K~w%kOB53c6VFo*C73Q z-Es(|W+L)q6|r5}p5R5@98HYx-#Y)%74mGm7Vyu;1>hG@&HOOhu?{$JgFW2dQ<>#J z#OTWrgG5-diTUpCxqs0)uN9^8tnI#^J2E{#Dne27Du)GS&1bZeP;G#?9E>~JwVY?@ zq8JPR%aOD@7J7`x)bV3ZQX-qCPGq=#Nk*?-=4X8Wc-{yg;~|Cp4h}I?ciudrpdOR2 zh>fw6a$b(hpyZS~FAN*naK?mqJ0Q%%cCwTs2}L|K6i`gf!GllnNEc-gUEQI)lLPqh znCA6)sbo%BTi45$Y0BH5*K+SYex*2XgoRA4<1;D${p^RNR&nVZV|#f-mWTBjKX$D@ zx7a>tMELq10FXwKi#htCQsA)#VfmM$n-m-(c0kYg>gvVrGQ``9w&pCj z3NVLWq4op#Mr?_-lX3!Q6uI~Z0jDp<#xi^&#r>DEX2z+LCP8QV6X14 zaJ@yaJkAHX&7wAaPrQcu{5K3byE}n0eeWnwS9b`|9o}Y3_=Dr zTL!Iq8+{caAuOD_nmJd5{ykBV0Q!_dRphlPxnW92;tehPDqcnqwUu#S90B+(6d5|8 zHS+VMs#Lctia(uo_7YqrY94^3%Zueo41NmDy%f8xOWW#f@22tur~g_YOqTRWKWA^-u|Wv(tZYZkIDl5JPT zuCiIs+8}#<|GqD_0Ll}LlzK9xCmW5W?pJsrqPF~Pvu_`lOs}sjdwRi=81zMv%@9&1 z0#RS%`Y>&kDEBDdgf@)l36HQdK7r@t2B~u+6}ki{0KzK5dbGn6X6=%}X|cvBiG~qY zc)BXBtA7x{5E7X6%IYbH26A+Z*s_#y%;g!&4=hTevPeMZF*H^891lmG=!h`95D4I;HvVDo1phW=L1pNeQU4YR#8J-9LFXC1s-{KKB$ zn$dZ~etlyP>KcKMXI*9~{Zz>BcNVy>ujtiw`T=)!zutSR4W z2e}m0UTP|3VI4#C`F}VHq8)yy0RRXtAYDKVsSz0=00bZeFiHXd6SC9Laq~m$TUtC6 zF#sfr%G)`(M!M?oR^kjwG10c~6+X^qe)VkqDh#M`kc$&~C2i%r}BT)?SrIl$4n4X@Vi3hQm;+R7F#z6bVo`B`X zfaQP{iTnlNm=$4@gP^lQ2&YX)rl(D(0nkC@J}fga({mz%{5d!Pw=`Z5%RM#=lj*dZ z)Yq0rus}F0ZvNs0MQM`A@n4(>W;kv#3gm!kRM@-7f|;0mmT5B|0C`XfWKWu*9wQ=- z*)byGcLhmQBbI@FRtc(jBvYI(Sx-|pAG2c|M3@pLL>5FG007$O{|RZ2U=tLV5Rw!{ z>@nV&Ot_ldHm6opgGcDgiGZa#Ujc|iF!J`~Yhufy!|7 z{OkM+J?LmCJYWs6aJ{vkkB8DhkMH(G)|v3i;;e zyV0%zulh8bna8wo)bDdER862De!g?&ZK@G%UD_luLI4kl(j9%YZ1EIO1}gLi8wo1R%HW1IyKKxf;L4`S)%)#axp*d#BJXznoUc z-5W+UzjbW`N2sRh0U>nadtQ%tV9c?!ejHYh<#5_nA^4c3Fb!s2v#<+x3DpiYZU$8W zzc|V#hMe56zl4JVE7H28oRGCeg!h{CRYLR~Q$WuVH60|TTA(Cx*fLgvzP}MZe>=fC zWek+WNkOoDioz{}Bc!@!g-ErZa_r1szod+DE$bUIvccx9*kxzopB-$Kyr_0CZig zv4vmS9?ehPV^K$TX?TBSNXB%H!nc~ZuDgNqm@4av1PFcMk;!!{Mv(R9< z|FQ(A4X$5m-&m70(N#va^`ezG;S^Hav$Ao@QSj$r^z?-0f-#{Y0$9u#Sj>1OB}J&x zNW_n%7}KO6B~xm&_!vy z$T?;?U+)6ouuKDeOcB4L6|6W;URdl1V$r zZGEs9$d*m~xLP*U>*2~`7zHs&V9ZRYL^uil2yuHpK}K*fK@6#MusOm2RRm&xQ;8T^ z4E1GYc<|mPp@vaqu_{m;P1tA@y(q3>QrYMi)Kw0q-8L~SW}^zlX$ecsE>{#H`a1WFUq(KS~ibbgXh{;1RF*I7z&80@tayIp@D<7Owfgw zgyb-SAk^@+gu+y5Sjr0l0CqS%)dC1bHiq7+%927WCs+%cbVPk$A=cT`5a=~Ww6Y;p zWg4`6x!>rau%{?J{RLlqa;rCmNkS`G?T?P~}$q8>>eZH_J<@N`kgyCO zLU4X$p;$<{2r&IuT-2TWPW9qyKI_4)4{sR%>$k3j&tFhaE-fzI4>B;AGjZ&Gd~>7y z|MqsT?Oa+pe_d8b4~{-4?ccb%dSq$q{5&4Bc)0%9>W&`X+wc8rx6)_oZ*!?ZL`W0l zxSD8>(y0#=U;MWyIcF#Uh5|90kURj$lcNIpBqm>04tEq5kr3vmE~R8Ak_*((2v!Aw z8MoP>hfWXz03y9SJpf1u+7}BO>)%cPlBz{?4Xas5mHZ%K^B_@(E{;t{vB4B|1x8UY z#C*_E!UhDHhth5`hLGbDas>L)Mi6rIgJWGd%QnKD77)e?;;7IHCEmxO=7UBm#s5=PtWkg6xUBM427V(8Qs}lAKe|-tmK0^Q{bu1dho?(X> zFs%Z{<%Yt4)ICdjwESJV+teC&FcQk>aeS1FS5s|Ka4on~9ja%T1N&Pqd=2cC%^r0x z1Bp-UzJ@QY8f7SxI=Ui!l$v>x9|S5|(_c+0$~qQP!T}LQQ-hFw5_lo~K_fD-7RiQG zHQgUSmY(rGaW6j+u3mY%{hzv{2QNLeKmTAZe7t`b?H`W+EJ@)qK z?DaV`^yNIo^)is!Y99#U6NW?t1n}ppX=tJ; z3Y7{g#Vxb7CL_rSi{%Wl&7jNb@-_2g6IyNpqYc#5gj zs8Szo5(H40iZB|LWq_bYJ5ywNs0lJeZt$GeGs-BTfD~mmF4#yY{W^Fdfu3+8{{78s zdD8vGNmEBF04ONT&)iw6S&ZK)BuR!%yM;s2pag2Lg^vZma@3Q`uc!`gH0!YuhObp zE&I%BqXvw6<3FXt_M5cT4z`=z!-<7fdT!@o|JT=7Mzs~R-6kP{AfbWc)cz*d9TKJSn1eCRZi)2Y0N-&_1}VT zwBAc|;?hCRj-GQq=^W453|@*)rdV$$Z@nCEda6~)Z_s17yHYZ3kbEYP!$<7FAy>hg ztVukls*_ihdCIAFpL+q_l+8;O^yJsQtDtBzua5MUnALT&gX+0?N?6{q4#cF?@?-E$ zj?}Q0#k$-d}p&LwOuG8DB^K$UuBjAOwFPiVR} zzR~c~<14OmvwgGBmOMfGZOpLD1h(|ky>km>#_Ltl4wc^0HmA)t$^TPG$D6$(+{Mhm zO|ow*>_#s6cvIcqqxXQ*Cbo}r_f-VH-^!`QSNfOJ{~nNj3TizKz76_E;I;6xy?teM z-L~_>@6zTrX!YA+*I#?TKX1N%@@ssuSM>dER8X4V&s%f)+z0Hx4ecJYRZ`Hsm94n( zrqbLRtGPV-WN2~p&3SI)efOfc<^0!`_TN%cQXI%@ZMn;hu26hHZ+0zJ0E8Nofk?liT`f&5anMa8hTOc?rYhj4z=37^+i=Klp|6sGmmOQULG5ZDVUP4z$(xTLRlE)RBgeyI(krAc@rF~XdLOrMl`}I1qeUHEw33AVOTz1IkL^LEt)@EIygC4 zX?$H#aOdVYRr{JLD$%Xfjbuf{6~Wh@m6f^On%H(?j9bL^t2BKztXy^Z^4|2FR-&7Q z>DT$1)iQ>$fyOf3(svw9+cQ-a%?q*+avixeyf;uDB*K0C%tnd91C!FCafmgBQB4_#@^x}!}R8NmqKA+b%DulLx#d9BWG3y6y=$V#em zwAE*CLHUolIi-gmWfT{wb8UZN$$f)hX9fb;an~Q z)w!jEyRMgy+r@sv5sp-i>v0x4ciQ|-%SzzN*BZv9+%LhJ^k*|FC$nqcOBFk2*Y#XY zCi`rDWpQSG{JluIR5kd^V=9J{a$sCAX@9(bj>mzE-VC=oF!IrD@ACF!UABw*tuk%9 zv`DsJ>*QXWe482Ci|>aYH{Y46d{{Chdj#@QhCD94bbeS>&_JV3V6S9asEF^{dZ4^C zL$N5%RaaG4>x_vrf)IgMywjLDX+DX*QxZaaVkGFve~Ko)(!)57Omgt~szJoqV5YGO zo?t?j95Z3NX%}wz0ey8Uni#(|Nx#r#OVYx%b32&#aBt;R(0i@Lea>Qrg7~TgvQ^6% z#Qmk-fb)BjgJ;)f79*o`ds}VTn)Q%MH8gnvBLDlMJ*RgkQ#rsEFQxI|e&fOK2NfEY zBkggx2!!@q7Y5WAm+h>Br_)FPa}*k=Mm_;b6P#|^NA&@%y0(zDhW0W4<9SW zQ8~~u$G+JoC#GCflVs)K*(r^X@Ow4*Qr+jnuS}tkds3}_6&_pV4?nJVM6!ZGEX3U(MlSsOHx0#hAk*H1+j{}6~_KUcAhvSWs0b%=?e z7u`CakB-JIp1^-8&tLpy`>7xbeHUxD_^<>{;7ZC^6g*p$nT+3O~!ZMbYTYSeCmIdsj0NFfaq=HQe!m75~ zmc&jl!efXbR1QIoDZ3dGlq_=spAiBcFgBPybhm4zje<9oWDGRy!XA~{<<}{Jgy;qo ztOlW9Y7?@jInm{9mD!Npj!N3o@>|nmh2X<+(@umZh?^|rzhps zBKD5Y=lfx+AEQpGN>pg9e?;G}7r`LmGN4-%)iFPCDf;Q=Eyw!z;3r-`O>ghD{#@-E zxs|UiUD0{2;A*(|Cd5vdoD~kRV#Qhc`ReG?j59|>&97&MjAgG9b0O%i4!1o6g`wfQ zW*Icox~ghy6y-(e5FjCtPztL82t!FF$-aIIUVEP3rrk$k-}vdKd05r4!lq@Q+IuL# zq&`-vxuSYJ(`u119+WeUJo>Fmv%}(_FpMD>o+}`~T^^)bUM+~acs^_2WFeCT)o=Jl3imPqE-f6~h$)oKYrQ-7egVS7KzD>n9E#F}!ib%s47#~s>7$6+ zTncIl0aZzfYv9i+!hT^^!RB&!*@)6d7;!a(6X4?%b149SQ zou3G#5a5h*&p(~go`vfXVZ^}NXJ`u`GIy^n?y7zTfZ`67X-9D*M2lq5aJTT<+ zDAZO@sqC#CLGM$tus$syKJ$+gefW>RKc_M#v@{{3P)I2E)|Y66&Q-L zCk(~;J)?*!UaHoS`_qblsbM6QHVK@c=^mBlqsK^1dCjhHhMoT z_$$HGBpjCN{)_iF4pg2`MHVcj6+%a`F(>VO$W^fW_W}RnpU6YFmoq@_@Th%!C)C}`>~j!o88_GmDAyw!OaR#&VU)#97or?fzCCyvR5R9T zox?TgnWm?5k&zc@GRC0?n=RSbe9y&|p%(#W)rE7CP%mg$^LS3ZX8`${fZzZSf&$Ph zOBIU%yQ}MZie|5UN5^EG>`rb<(bz4_GD%Vf-8 zKKzde{Nq zlQ^cZ-Y8`_*k&UUtl)DyCOiiHloI+jYH3~lOilX*0C1^~nGn z>tTLSrj(?~9^!K3D_u%-PEwJv{z1{yeP41;6OHz(8C)Eye>~HSJwB4maBiKoIoixI zbgN#dhne_~Y(tfbO8R<;H-zSt7K$(w$C8q2Kg}d9)QjRWi?WES@=oK@8O@J}+ciHx z`gMbY`Mb>hor-jpJ32bP_}1Ei@>nCjB}q=8%PaHyV=KL0BgdQ>W`mbt4L>}~?Lmj$ zsm(7~gY3C|xJ^vdv}f8ib1NpFi(J~zV7OnQ4!&ZJDXJ+sV^Q`*=`1WV2gV|hkx3qT zaSLk(dWKVO!9I~EM!YMv**B2^`Suf}ZcW9>`eLV>uSBh}Fc8{S@#CcR2c;HU+K zj3@iBAzOYPG%|>Y4Ut8RCvw0yK_D=!C;g#KB@>7j45fbqo(E1Nw9$>;1)LPL4@v7f z5;y3F6;A zQZDPbSLw}ILd${@75rlL`R)7d58H+NSP1Vfo(r?z^hn6bWn-F`eSBPqzr|y6Qo|I& z%h?N^k7`XN37ptJ-+RP}b(VmB2W$u}qqOd<7Gd5ReXkj2NW$-9=7xQ1)YFZh0R``) zhzz+-bR~)75+Wl%GW&|Hy0GoQam*o=`j}*PLcBWAJ2p;8`&}ST1u5(!rjX- zSdI-3rq`jk7)MAb#OD$fV7U%$V93u%E@m_msH2U<9Ps&3aX$|j2X~swKBYpq$j8!u z48seJkawah|LS)SObVcC0>>+dQQ_6TbThKkASc0)#j4L2e2@qGW){_`C+F4^If8}m zqxj`Y@>P-*lESB>fD>A7Q13nF{w=2{rK&nSIOlmE381S&(CKr&wi*Zy8#T0x(mdwl z3;)1Wr0s0MhsNQ$s~R1~#|5m&*}d23r$nokIbC4h2hmQzS_MgMSkDJ7If~K)WGrNh zq5>dtBIe?*@VWo~Lq24tE;vC@O&@yzDUbAKqs5m~Epnl!ii;?q5G&>K@Gs~e_b)?f zF`&gfjoc4%u1@W+>w55}7?-WU{&(IL%kt z3w#W7s$ns19b)hhFt=*h!ZMH&C}^xiiqR{GRPOC$mC|7i>*W*%by-|>HTn49kyQl) z@`QAMMY*blcaukFX5to>4QvcZI?`_k?jxf5N@uD8O)h)*WMUU`5(c16jIe?BU-m5n%AVX$IMgOJ{7{dM!P;kV-E1aPV*OPK(I~mK zd|>`ZzC|24sYhjfp*^;u_tURGAHNyZzgP)$=ACO3C?EbF@4$tmA_ zXvZ8|&Ps>3Swlywc*4|Qa^IXdQ6JDNDs!Dr^>eUUbj@-~IEAk1d-kfHNdlhP=xTFE@Rii1tKSR5Z2iMDVM!jiS#3C)Pq9ndO#RYyM%^wekA@-vZ!o_bFaVVp#l;EB z=1=yNdfsDoTb0}lzT>M;zNs5j-fn(yQ(1VOK)5L@T|!YWD4k-KO44$}N3|(PuKS3F zhysaUu3nyPbv5k%>MIgb7k3yG`l9{t_)1cBE!M2YJYI#cM-d=m{cEF)BkjoNhbl+P zmY?Kq(H2Ex{jOQ<14Q)2AKG`$MNPkd4}+3dBr7(6ahb6Er*#|?j zxZ*ZrU3@2ZjLpAPRMM7?fE_q7kAIVM^?bN!>cfV+dftk9tw=^{P;XFe zgv=8ZF3x-aP|4I!EUP|nk8~+lQhrf*zD8+E$$t+wf37yPbSYUMlc2dSwN%&hpSv}UGo(w3gT zuGc_^FPNEl0m*DL;i?;!88a&b0vvFJDq3cG(b6OVY9Ym%D9s~V0Zt$&K3b^ke~ad%#31iQ!ezsb&u-1!}^pp3-GngIYeLZjh(NXR=6! zeyy;TkCErGRAKz(rC+QWJH@h_Kp)bF48+nw-MR_ny>na5rtzTOEn7Pz5!+@m;rXjM z`-oc{FeHqm8I_;XOSvMn+kz@QHOEcD#@n6OyLsl&nk`D zRsD>+JCt!#gT->m`ouAwmOtL;CW(`A!e)nyDcpgGCQ!aUw24d(2sh@@fp()N zbklXnyUEBCFNy{5+4D7_Z@^eEJiq5n&{2ZTG~}$SdJ|8sJ%y0P5l!E=CAk)RIr-l6 z0S&g7R3W7xoS>Z+4!0qpQB`cxk1#gW6@+T2g}=+>Neb(bFBE}XBSJH2(^NFjmLDp! znETh*%{Vv8Oz^@Y^0gz5>_A9TeX0b2U12jA5euh6)K^fdfhgngx$*`{q86D|iAL}R zjE9S5z2L1HrFv{QlKZlC5y}0@1U_eAF0F_SB9JQJI}kgWjcK5y_PJExZ67`RF;D>7 z8U-2#+Ak1qa#qicJTjl;OuMU2`jCx)OLe5!k3Jp0jG%)7)?Op_<;?#($0v_nZYiq1 zCABRV-uk&0bS@uQG&g`FNnH~2lqJvgliusk2Sk~RRI1;Z$KhLl6OmwETAHxLDlh#k ziPznxAB(jx)@Rlqyf~)r?t>IAJIgJ-bD`UIRihJ$T(QRUGy6shV?axRz$qR6@MmhnCMAg`a>{fK#qsMNQJa^$=*0677jl8N+v<#c zjUNCXo6Z;OYd+JFQquEDwXsL(!Q3aneVO#*c~!o%ZRR%=rx&h}SDcre4^gta6y|8@ z1IP~|=irdYez9zzHYFv#8tuytf*bu=;-7J7#*~x1J%u`g5R&L2(1jtsX_5O=eWKTE zHL~))++V!s@EV46GHY@59Y9~l(;k1TR>reP=i0wdrfFJYv3^=-`rEBr5&+^5K66p` z$5**iqRfemGK?^^8508GjDtI`tMp~aAe?w<*p{_#_$dMKS~kMIbPD3 zd}x;D<~WZ`^b@3>b@vWX|6f_pnbyqHYyGfbJ$Jx)KEav3yoN~0)Uzn33_uGv;f=g@ zvp-L|HWg!iLE}Ah4I^ma0e<%v(!=b3n}~$S>{I8$bbvVgM#W$Z~K}F>6K8zfu*yI~<&SPG%>+2ZP2z z1LYM6PDoK5E1~LJ<}{| z!b7xe$GAf*u=?c%?gxsztj^r-NCgm-zXSk3|Mr16TJ#>_mrH!Bbz3A1ZElMD5#~ia{aYn-8%wrn_=~Y~%cwK*np~A=KGFdU(?~2rb$s})Z^UvE zKUI0fME8c|hW3ddY2(Z}z*o|sQ2U;$R>gfss+;gD{jhyyg#@&|6g)1Tf8kW0BG}Hwby^1`+r_eYW>job~}On93ZbG&#nXo*ufsz z2?+v=G??@0Kngk#>HE(2rvqX4m7x7rfcxz7>}2^?8Xzk`77ZEZd4yB{NI@xds{dRr z5;M~vv^rGckX$fxAXLB6mq4D^!mD=nd?Ef<9x+E$2V1cme88+vS7aK;FY#+YM#7bd ziayn@pCx2SDPQsHyEuZV=>ZT;#LAa7%W$HC^BBT@(aUcYZ_L^$bQx#)HnVA3gvd26M`NmSe;`FMz>_zIE&2+&(S?w{*g{%!t+B~3 zC8!f><4hwB^I@aGY*KkL3;WJ?RVmdRNgvBaVJbMeu6qQR~C>1nQaPjTa@+5d1 zk`dHCjTB@xayISks_dYoD~T*>ghSkfi_>YT-cOqM5`qx;tZABGH^U_xE#0@D$f?P` z`i$XCkkT2ltkBov92wRvP|VWirRfQ2dRXU|A)CnpF2<20mFyEH0Z?d(LJ4%3?{0_Y z6hzr+#=ctiKo}+xOY5>5_R4>d@~*a#Gkip~qSQvg5t*zYl-s03p`&S&RSql8&zi~4 z3!_0D*)>0u4bZh=B1EO>YGBJ$Ao4nS9-3H?cA%`zBO=)WIH5L(XNw^djTL|r!BJQq zHL$poAh?0t9Hmf?WcR~3&{>kXZ%U9Z<39xoL~M$&joOeigHBn|49Uz=sEAWKbip{L zdjLSmCOFyCEeqGqm16Zx7+LcP?NAhJxXSz~=AYsG3F)-k^FX37ISQJC{b8yvh$tym zr{sk)baUD$R4~i=NAty~s5&ChIKNc1yD6%&^7BF*h55={V|f@qH^7ii)hx6hLPiwF zmX5_5&>H7QLKU~l)Kbu%pb`na@Oa1BmuqGnL3j^DY==;Zf;E!E%q(M;)W-`qSb#^V z6$52t#E~QTDnq|?L;E-&=&D(UBli~eCT+2jN%efJO4iZ5Mvp9yV4kYLoeCF9Q<>c{ zC_s>_EKUZb!)2Cb2XFP#?6tJKUsCvi`Ad=k-@Q+a5JE+aDw28hYLsS5VP1$sNtXAA zpBcE>S>CvditC>uD`$@ik4!c@#RW^NN%L=VT9e;ew)H+Vp`G%^YlmeMYzzueaD*{0 zm#e1;J83WO%Vy{k^9!n(vv0lX>EOJKQ8li$8)VmYSu6?6ddHZ8x{sOq2|)Pn_{dv^*WU~>%$8Q~Xyxil z8ckPkrBQWK!5fAjvF>==PXJY($qO7f`_wt!tqR50(kPSu{my)#Y)n$^)Q0^>)C)P| zD!NNq8LvB&(VXhf6o3F?9Ngg1YK|^Vms$9f>|#w5gLL zIx30(sp}hLPLGpIGJG`QgYS?ydUV=G>74U&M%8uyyCLw6P5wYMT@l5M^0eyRKa@jQY3ItJnTw6E zDztoXGCn(i{nk-@ot)JNeBwSqeiAS;$}Wp#iiibVm`TwsO4y{*8==7Z2-vHr1Q!S^ zz8m-t?GF6c*H8AZ>@D*@v=smlas~(;7uWy;1b|s^h_gJ-6Yxv3 z-eIom*^6s|-&;c|d@jH0UMw|}x~=7@e5T4A9alFnux_01nU82Y5t@xMlN#8`{i-g$ z;#!aR4ZvsNM7_O-8~DE>Wu3d+P_BVkuFBZn;J*=2qvOcwc{^TJ{0kQj1rVVXlsOG% z*S+v$xkR%%$Igx}BPHnLO2gP0328n~esJBMjO>kw$WO9{&z{hZMwTx*Zfs8WyU~Z^?Cur=XI@Hs)Q6Q*jr=Rp zQ3}vk_M#n`zcA@F-qG40O)dX35U!M6P6Z^%jS{b*erclW=oIMZvDQlq z>=L29lb`&AAUHb(8{P2N%?q|D@oooV**Ttgh&T zr5wG*+YWdx^ahHo^Ao!gBv;$kb`oqW%ZmJqIJ||0Vp)yAKd(d@9)mZ*S;7`zZ5|N7 z9V7QYvtHlL>gA{+?L7+}EuR;@_8<~FCEC&Ik0+g%YY>Xu)kOL`N{}8>Y>qT3)gUqr?whWWXxl#_P&WxC@TEdyz0KGf}lB}hpGuQ*Ts`@1|&(L;3lcBxgx!irnHv-`)-@C+~`q>G6BbE)()UE?>j#iGlNR zO%@$r=B|o^%Z}Qls^xsfZ@$Yji!G&hg-K>&tqzpAvea2ME+@9ajs>W$2iL<5J4iZN zJ3h$0=6KJd;o`8((fZo===y}AR(5E^36yM@;C=kome%6eCwz04v|YLJ50lG*<^0r- zyJe|h7yENZyz{(72WqsSZhL|UNAsuV%fnk9I$vdo{Z0L|o@Bpagzdp4Md!n-dn0xS zPF7u(J=N^AQY-YnrI3RG2j876&LZ=}IMkZR;YL}n7Y(_Lte(}`$Zq6O`jV%j>@weS z?Wt?PFDOeU*rQ0yxs(+`lTG&4V0le6z1+nHW0kMhsvdXG{}HMn?%6x|2^)jz4qS({ z3R4$#+Mr}JahvLYsvd7L8hs!VeH_^-W96OG`Q&K-J87k+?&Q=VtE(U08K>AZ$4dSb zbS}8!_ggbt73p_N(9v*1k?Zp^<-=JO=@wNtrVOOY9_xHN6zR;m@rmQ^33dvK=lyjW4sytPdXlZo3;H5 zogrZzT^H!CeiWUT|JdPYLEXb~?K7O+B{UUG+5A9NqF%tPH>rEAZKiBl(UqpZ=nc<4T0*jfMnVBVvnbBfqW{a7bEM}H0X4d+f-JO48_Fhz))@Xz9sGak|FM4jv;PO@e-*L+ zs{{LguMC0!fW}|((ZD3)G19UsBvgX%j49p7QyNb7eG>i;$VKW(pF>(%nx zhCg>NCN@65o47d|*dTTx(%E$(6zG8fhrmmmwNApBjLFZZxm3H@blLws{=fVGoq_+( z!2f?T07(ph00TfkVgP`I+QKqgx_r(KOacmqF2)wXe`lM2=ND)IK$#T+76=17c$x(j z@_z!0dRW?+nt1&`pcAh@|3SlOnL3&OPhbE9Y%mzqzjyo(WZ?fq2L1;b2n6D&TUa{T zxLewp5X*={00B^tKmZU+*3!<>*3f~`#oQ1E3JeamYT(!G=0V3aI09^df6PrC3=$B4 z0tBD|0T}-#jsR3}X0+3f>voFOiiZe<@s}K=A^~95b3`>&0x7$(Snt)zB)X7{C_W8 z_EiUT9qI&)F>jS-$th?-{Ff&`g$|5lJ5U%_=MAyGjH$t#`J_rW&;Duf)5j!2$b$U8 zJWXSj;EK1J!p%15Nb1Pe$_o;@Wp0^PmqW(QZ#>Xx!~V-ttka5pcaCTa=~tRwNk6Rg zeX-&s2y=&<*^NkDZUih43krY(3xfv>MF0UHgasteC@YrSn7R~(BK?Fa9h5{7*0SJc z5z?eo)=XUm{@a{B{Jy@vUj4qjzK)-4zkYo^UVVMu)qQGT`EL8&Up!o$er@*xbr6?% zh^>@lLS^}7GE9t>0VWHA=9YKk{w7{QBIsfP|3(nOW&hy~;sHQ_Sv=4v zxS0R!KX62FQ#|}ur_=S(_C18Ti8s}MCRpyV3_H3C|#A;EB2k_ntW7v+Gw z&`Oeo`Vvwy_nrb~F&C9aUOfe03$5;JE;LZ>2ym#IRL-0vhf9eVnE#4d`;75h0tXr+ zzQ6e-xvBDgHbuWu6H;o>6GsYvNE6UsqsrG&Q}&FacNNmQLZ71M#QI4&4THWD)gI<8Ovzb!_ANi`|l%ySf7* z)1VA=uphDh!Zm3ifC{)!JlI#>nIIC~7z`yPZZ=igcnNg^$+m@pxuDOqucu-jjj?O4 zA&jLLrr2tOI|*$N1{ehz?MRbU=3^x^7Wb?FU%JhMA!tDWl&Ox85RtbIs+MF3keM+F9HI0|=m**F3c_Dtmtv6YHu2>TU(|Z<`G&!>1G}qX4x$1pk)_+#? zY-lk_v)(?vSSeK<&kIsijw%h!~=p$e$_W6S0wv1>L98zr|L-V8CYu&hm-ei zij+8iVLOR(Da8M$2&>A?a~PhVF|z!0-&sFXOaGS|#Y^?01t2B=E7AWK*&*xkp)FjX z5xv*Ig*aY{0}yt5Z|>x8J-H8DKGdRdHg@@L`qHgES@^`39O2hyo>O;inLHUcnEI~U zxHi`k+3sVvaA;evZ#~(j(aFM9DAZ(B%$1$vCE!s~rh`T)Ez&3{(IFlX{;3R;v0#wN zSkYRBF)Tk=@@;7b&1>=p)a<-1$YM&CIfI=qX)e$*BGN0Tv_uvcDg!h)YMEbtD36W^ zqDA~6iw87>%}6izrz$c;l$TMq^1>-CnUzIgXT{|QS|;D%8Oat>E-p}&4O%u+=EUcg zB$QTo7Al6%?MXIxS@I>Bkl*u@$&{Yu%&~gq6v~t)KXAmU;04OEnzG<|r9nlP=B3kg zflHniS)N(qAuE$v@ymj4gD4lLU{6BjC1w{$NA3O9!;V!JFk)bAP}`@L9gs$L|UkJH*`yM~~m z`Hp6|+CH`X!dcY8@?`qZ*^C?Y<27|rxdBbG;B z^5RYc30$pg3B0tm)etN&?7Tl5TNUggKq%}8R_Q@IzGxiG70^dG&q5nc~bknF)7|i!6*}*=pV&YfTSUPuEVbTqUT2L{?wPm z{2=KBiT>@5wGta?O;(DovmoqbQbJ%cNdm-ACOCp@6mSSUMmkj@;UM+&ayRxh7&NDJ zn{kKsF)0ld7f$S5z0)k(FQSOpi=)FeJG&7m(ivl>BKCp%z|(<5MYA6cGj)oZ%$FmB{PqIzCj0 zC*OKfl3OD)0u_!NJ-Kht#`iBPG4gF^Dic6SpJ|i+5laR-X$xx-3=0$oi(yv-l@lk~ zgIKiC!`vmarWCQw>JV;CoFjo8UwUD9rwf!=vZP?qWw-)kBiR^^vh>84?+FUI z@kw$KVNy!G7|!|`BC3R#(C!Bdy|(fLGe${=h!GL1f%`EMX& z)Bz+>#-5go2D^PLt75+?1{Kh3WLkqE1sFGgS&)>D!U_co7(>trRJQ%GA4C-do*+%C zNb|d?<5qv#NWTCrZEh1Z$IQ5AFJZ)wXes^Yh-sLiNJK)MHwve$a{Amplg-xH*fy0%)a-|U78)B^ ze9D`9MS%D0!S*ea+Mq!rluIKhuNVv=G|wXrEuPAGy{e(^)J0nJY?HR;Tbv@=(MmaO zG#X+*8HQ?o8~E6IXF}8;usuW^m(t{L{c}F~UD#_pV)puCxf$XGXg+Pvly^U}afOuX zvP3x&2UVWtg=|7(3#0)F{C|fRlfeSKb&q+J@K6W}hT<_|4K5~rEOPpHYVaQq?pl>7 z$~t|d8q%eEKY)73MO9r`nUcasD&hQp!Q^j!*)2F=<%TB1FIK&gWi{%CbHIJ_*OcRk z8uNY0p%{oeFVSKYy3oEs&NaeP8J??<7w>^!n)9aN63qXcgp9YdSUsw4j(Gh_j)JH| zH`Y z9&w=i{H;pZ`oxlfa!agePFuwSam(wtO?BQ%Oll~dEeThwBJkeJY#_GY113oT$w2a3 zquu4V5K4TmXnvYd%#>-4VCViz9aaX6(PZ8VW*;R~WzX~}Xm2NWP|Q}fHto~G$x&B8 z$_ieN8W~d|9j{zwOK9s|j6h*!aRAE^p&D8RQ0dYDaYII}&XKW8d62g&Wc)X@2Rq;jfUvr&6m$nnYPQ${IR zNj~iks`%rt5w?~Uy7sb`7AyR;)EF_O9ml4BJC!BY;F4wBQhSfn;c=)3?xhh%({Zh$ zJ`y?o6O~k+r@N?KjQJ1pMQ&-6ztNjRDkHGPZc)rmjG2QB2p{5 zD+*A%S$k!R&#KnL?0=u97E=Q@mbX9|4DIRK!}y0eH$C{ggc2rE#<^e?dpo&7SoCSE z_6;8qq#Jn8r)jb1ir9!bqe>SYNJXjpv%|U5d#gEJ?c!_~>ZM>2w)5>$%WBQquWy}P zqZSug&E;LHF*pyK)$FF(p{FzEF;{PLKc#X)J#|@X>i2oV$?2KCiOeeo5!;Or#CWcx z*Q`kiYD3%>ZV(Twl=<8jC)2STxoSo*3Z0U0gf3h0X0W{cBzp6GEV>-Wa$$!1ojP<( zH9&{U5{fY_%cV+c-C!JkolU8v=um6GK03naXj)_!x$&4^Ijyf$q|kLy=Iv3VRT?cd zpT9A&l?0)3g%lCqNU>BgS~r{4agD$sV`3wXrKC>M&Izj#s{u+N!Y%G23?Ow3-%zY+ z_fNoSOu(CMB*<9g(?_j&AUNIksAbW9)4RrO#5)mcC@Ju@mVSy@= zg-*N1Lu6>M;k^uHjJox&^{rIv(_r%Qes6Mlm0ev-b*)TRryD`(Mh!?FBt__r@T!|{ zDmPr!8yvAXNJToqm+pGJI<8>bHdTrynD8dm;qh)UM)s8XOL3AdjS*6NIbfAmz;695 z33~s-uJq1l;)?D=rlXW4^$dC(lcCeRwc4+6>~)RbQMtPDlIP4W^4NH#=M3YChv2Gu z@AB{N`H_Z$hQO9$VlFo{;+k!&TCMHH^*4uF$|+|tJ)gi6=qmDw*xIE>jw#(7s;wFK zc@0W6%91dKjiGBCMMBt->p5NH1_lgQej302S}c5< zs?U*y)9xgIzFBzZl+6j&^g zG!!XaY@`b+8B$+t)=C8y>B!6>- zuiP*|Gob0FBMJR;nfT@Mh;?Z|5ZpMx*dZ8FPxop#-0T`K_}4s`v^eV=enT?#ia$>F zxAuv~`kM0nN^5Wx^2{Y@e-6d?q*MztClzS zT`6WAQ7!^YpMHp6)~iqto!8{cjLX1aM`N1s37g@F4EE+v1y# zz*pNA?LyO$`Kv+$Yua%@4RqN{^(4h>4PI;0Ox4V zlxYfZ=WpsXVj*GEnl1n7@Tn?kQ4e0-3>1&w(p%Ny_R;|-sEDeMly5!nCCh`xIxNTkEJjX6_?Z?OJb%L$q{=S zLXWd|oZ2WqEbbZ<8@(-?z1rlaS-T}fE4}>bx%v2rttqcJng(M9(STQwcr9jBZA;uK zH|0N}+$Ks;h*RIB*(sAlc1+NPEA<_V-v^uSTbwj*%w0&<+v!O7^^moIk&cxJmbxu9 z1u^xZM7{~J6U*iXvIHOXIyEiJZAW(1=o8#b^Iz+{&qXtPkMy3AgL{5YI(}WepMB*! z))|-rM92nw=XGs$oAjAjtl9t9+0Lc{vpno zWJAc8%D-+r{9e87PWT-eAJMl8ciFTB;g}G#u7 zCc%rqnE<}Eub<_T)eYm>1NTfF?BZ%$H$D_uV=HOQCGUlmT6DicOMY$IY`pu|i}luP z&e-KGMB=n`m5r4O!BR%0^@G*(o#LBLeW*+_8v)pg;QvzeJ;Kd<5EGCV2EZ?l>4viiNDffSstQU8T+&*YleZ%r**bv93 zNSj|&^ubS651y11UgqjZOoc-FQEl#U%~zw&7*CeH1!m=2#)r`G^_` z!<_g-l}hF&-*zfU*5_! z+r4xUIJYFsR%-nkbdsFPr2ieS7%BoPzz(+D*?#C6^)oDhcZ5bO8h%Z~ZR#Jti(ACv z3Z0iqQhH~FQ=5j-yAb$dhx(i*e>Bvo@3p(a)SzXxV}LT!4Vl)W5tGY3&DD>?%=No| zG@2xs5wmrizh8`)yRAhEwxQR)l677ZJAGIZ!QU&hdv&aQJP5~Tx3@~b;&_C z_JK5`d#xhLo(b`O&#tP+JeNBI(Srzn3bUDY93~8CV>-BLt+_8Z>a}VGK0)K#3GmBd zmJKX-lICsRi?tKB^76-qknQcx48DmuM&`hmG~K=C5NdG|OE=o@diV#^7X+UaXY}_v zcEH%)BvRkW5{;Of-P;|xvnwHKGv}J_tj$yZ0i`W!@5 zOkDC;Md>;aEcLG)H5{FH4I{EeJP3#S7m>0#Pg-b7O%GNSBBcAYJ#Qj?%B#L#-^#2Z z=oW96I%=-XjHtM-;lE!;BuH%H8Am=eb4hB^58rmu<{QRU_ASS8hw5LCP!za}JQ48~ zv*so-b9yYaED6MKzGKeq6o&SCqY9!p6a;>7^QUXvgGUa}au|iKK2HbS43X0yGd76lwPPSLfZrVm`>1OO6L5$F zpiKoQ?-jb|MjCJLyR;WMDc`s*9gTCffBuPXS;!s8oK8+}Os?Gk9hpiE#1LXV&5!d4 z6Sg&RDmV=1+`q^5w=pN&QYAuQQi=0r(Jcob}X#2j^-cVlF1w0}@c ze4xo~xnlJZ7F%O+;lr$Ra-ol@6d2Up9>ZzYTIEaz6T1XCTIC^vl~@FbHDoedzZmc? zA%BYPq(Oq`zuaa7b$;;Z44ZI8SHDqZ9(E%C{DP9>$lH8qdO^6DU@p`opjSu>V_hIg zKxYQ+X{Uv;F`7}`6M9?x)&KR^$$0~I+dXX)YAR+?x1l$=KiEm`gZ5`h>6iWe+=sk^ z53)NNkjDF29tx}zrB)iJ$l*JsT2w(gDga?^Q0z-#hYrgF4WZs?zQAOSxI&<90MTF^ zJ2h0r=$jcA{YZgPFKXaX_Gm$fhPV2tQge$PgPXfNlam>|^H;}yyIZb`oNZS(SFZtW zM8}3hp9r>%rP5~M0$XlYec0d{5h)bwE>Y$rl}&9^h$~YH7@`)FKfEr)ixs(d_leRp z(TzUGM2M4w$m228gC=;P#p+Ki_`C(URgnt2*aW(iM)G3fi%8Zq!rw;Hz`i$XGoIK& zxoCK}b=~<+W~H~V0C;F)@c5Um4nLamcDd~oMlbik+5^mHlb4RJ z8)P++Z90yfU+fI}^8AORBlc;S_v=cL6z#uAx%Olf?C@In)hYX|F;~X_4233rqv$xueSelc#Y&iyvx%PE6VP>~JS9A*E*3@jsID0e2ETB12~6Tz?S^3k&c=bMjTnp#a1^>J#G|8`rG;rxbc-FR#_viDFFBpHOr_B&P*`1ZLt>*yyY*O$ z7ASyBJ#tNunr);ZN(8}#d1Gv=A;-q3n1r|-lA}x}KN2&iMf`k82CSH+b{3r?^Kp7Rteo;`u|Atb;WWUA5O%DYsg~DUUhfcGii+_*pNMa(;emEQ zO@EXn(J*!X)b*#QdvOoukjlHo6{U4CtTOeWtR8{&C8@y>uve;q<%U`=!`VSW;cJ=` z?#pKC#yQ`!Kxig2~f1#mkk!r_SM{(GM;6YjklyWs;4q=Fi zFtceB=Z+VO<&=QI09;a1Yr(lw_8Vo-4?Zeb_%xo+!sYIQGIznOs-wlhTrjbBT1>AL$VX}RW*pL9 zKX&niIi~Yh{m$_T;qs1%-K6bl;U+7ZUhR1ql7xlMRVpQTP&g@m8=q(oxkX1Kmyi|t z@4ea4BR*=qdROS_oDeN1lWh|>x*yyZKLu|4I;j)hkCdFX?>(|lLk~`R5->1}yjGNK zCf-1P^;R%Os&2h1CI}k+B_G&7IN)Q>T9~txOF85=kwVfD3IWbYKs5YQ#L_GL>ugS; zzU^%%&o~nVX{gN`$1EdePW#^E5dia}U!xztUk>LuEKFhzqW7c;l6^b1P6oEXCN$9U zyS!iI(rm_1wxY&nlmyul3J1*M*y@MJCqz{$1Rob+8r{_k#4p2{X%sv$q}XYF%bw}K zg+x&kn1ohh*wFa5i#GRJ)5MHqeytS2u4JWc+1qie-aN>h4-z_6meTn4sKS8#IeUw1 zx)vnxkQPL^lv3VEGFs$S>NajK$Xgs zqJWhblCf1doP`e+OW~99GO)}gmG5p*?5zsIWH?_9CJ+RI!mD>%>vE~tp7)tD_?9i8 z;gxkfW1i~Yl96(6j@xNZ&MD1f9ae^1P=?So6YIAQM3EHk);JS>7Ut%=dOdwGcOD3^ zS=^y*GgmR8o>VBS!i(96-=OD^3qw}!f)AQxjA0DtmOw+BPKd6IB20%acP)q&!tj^n zlr%=OP56xxYp!0FUu4p`mPF1l{Ere7%nWMmBL)3q0dmk&J8W3Q%37a#1D_|30})Wy zn>0i+6t=qnMky)%Ko6blfwXK-~&woN}fMTZq9zHS5gU;-;W%G z_M%!bo{3HENdg|DTE^TJ0*@t(w6MC_t`YPub%w@jZJRLG?>NdQO|JJp?HrRUb^H`2 zcE{a=;ml>pu|HyG#U^5?njf={>lfm%MEnXuwvAe2ikUSDV`_<-Is+Z@T#x%LBB06l zQzPPvgw$TWgsuOC{2WzJRa|w~tA5`=MDZEOit-F=5=WVwQUx5fnD$K}@WPn9j*?!P zT<>Rf*x9&a&J{yaKdwCHl^u)bqQlQ)B&~x(GU{iy)=uFZdL2X`J{I=ZJj={jHYW6G zdzumx?}v`-=8vcndQ+-onMFLiA^whn%4dQceLlgA-b9!wP2XqwiI2dj%Rq4cQ4N|v z7ZE3Z@B94?8*D?PeNKAeGZCA`Z+L&g7&&Zf>tPQp(AnJ}Jqfd%6cX|veBV<7h6Skc zJo*Z*M=lrZ|6>=vl93=`6+VFZCumL}lbHrJ}a(gr(5m(F?LcUgu0>(%|G;+lKwd~o{~l@&nz z*iQk1hYMb&7a#k^S$ju7Ry+hDx2r)-V}uX11Lh&RPIj~-*D>6VOkh|O|Au%kU#fD4 z`o_opHBQoLA(>M*>Nu9c35ryd_A+wd+&B_U^Vg-WPWfZ+U44K%<^74cIL6# ze$1ZrS>}%Jf6F;i)6(op)()8z<4YL$%99hdQ=^c0sKb z8rp4wRtj3r?jHw9v{zuji&)1a{sFtrwV<3GWrqDb_*g#C5x5e(W;Z{qQ-hn2LVMep z!tz`1(aEaI#(DCTJfWq`rLj`ygjO?GJ}|=P2KG^FpXHdUj|-~l03u%D&V|qT!gv4P zV(1c|MIZhsKM`vYDQhlq)xnW>Ha73h-zs+FDWCD$ar?{8--{>29|;x z1X(&dj8<;tdCbMx&sUu|sA2YJy(@%<_OHWn=DofEcq5p&dwYz|F;MB)s;!R5OxI9D0esk)~gs@+EFD#YqB3NYHzS=x4T z35x7{vdWS)VLS0@{dIu`vBtQ+&rh8mpH6?#;_+>-y0IG<1yVQcy!4dt z_ULc9xAf|NuhBQ$_-&hSZGD~uwc}HzvBG-H-PXw)*aqcy&a{wY^Tj_7-fMbX8YFZU zo)Ua$d+69+rp3Bz|6A8=n6?o=OsX4P)Z<@av@J2q|U)|Td z`1qWg&JHmqCcwPBP8zJOlj-qyv$McNzJo0C>5D1D7WlI}-*z5jop7#j=tz3frI&YC z&fv=58zO!h2On`{Bcl3*f*n|-y*nNnYP)N*PlW531{-+})2RFN6-A=o=fl(rxv#s> zh+Q!KYD^C;nU&fo+3nWf!yG6YNXt=x`WUc61=IeL+}qL7HBd(4z0F^7_PsFYL{%Bp z4wETxYuXeniO_ZGyEUB_##)@7Ll(E)j8{czaDPHN2M9j@c7C>WG4j;fILQJ_!93BX zW(X&8!d)&VbGEBfeqQFkLrx%}kQ`7GLtypd>?uj`?tT);zxbt4@_@2Z2r$pl3nbF| zwcCRw>t1&0@@?qq6%!LMp?j2nkQHfZTX}O$d?`^zjqojyeDGWtKT7pUsmgB0#br;s zzyIo+>i(ucK?h}O_ARBRLQq_l0R=CGntA-yYY}_;THU>?878CC*@noYCGMd{>7upE z`4Gz<8@BE2&yI}aP9-oA{apZ|LLIe<4}iHK6Y=;oNV%bY{Si(HeO0s1s@pA4uio4t z&Ru~Or?_z!rOg_3XJ2A7_MzE8?3M~ZNnXC5<*y&>eZsv$ihLK3wasmhWpl$hJ{gHgURE z6)s1W>EoEKl~GfO%YhAUtY^Lh~(>F4Jg}xXk~&1JzsGJ zQ#qU&%$^rd69=q^#T`6<^h|+4x9^>$3(Q~qc&(rAM>rU;_Wl`vbDnR2+2$W_<;ug5 zh28&wM#Ih=9C4Ozsb5H(RtOJVQ{42x7t?qh!U~MUpTT!BF(qc6LkhI^@b>Jn#ddex z5#9DyZeKhZ&UI^*rrprJ|fdDx&f)bTk&cA8^&G#O9gR=z2CWfSl%#A#`HYKx~!w68L8 zmY5nuMS>Y#>LT-sn$~}w`vWo1p_4*jAR@6ZBW$i(Vfo9KnPvDa46tkx0{ z4wn6$^-KM&D%kc!$=mYho+MHv4bxZ+Y#E5_K}8`gGTqf}a-R_m?1kSzqSTA})_NF{ z6adX-pBk&LhaJ#_nisp8P04Fv%1!fQB;9!4fiidFhq4|(5*K}*J$YOFyIV{Zp|B9@ zIOs#U>a@z){$38UsgS5SFR0yin+XbjE&cFe2W~!4ng%{=vhKIvz}k5g@u!daPQx1w z@?fEE;vLNDyM;OIa#urp$s z=KI;(`ZI0sABfHchu!c2MZe*VUvE1Z!E+#gE91?vXJ_#^{{$f-=S3t{Dc;c%3!x}| z7|D{P2o4K^2c&RLmPnlof=YxT*09|DB^DmvJe|Ag7%ruS>GpHwmjjgdiw|uTXb6>t0ImTHGz(m%csJ-4!PUlzH!jDW$t0VLfkC)KO6D>#*B?VoP0iWz->Ob%zZ7>o-1#eN@YlT# z-cH*)VtjlkG2%;fcfHir-P($Kf^=*N)v{jb`V3e?D?uneBDa=R?RVK6?B;Z{x}@_{iO7od70TMfpdPijda${jNfpW?qJsor&k84p8>BX%-pK5b19tP&??5|;QX5o34LS7bXu^~MNn(i72>pB?+2t!4F3J`u*+Lz6-7?rga3I?p_104qx- zteW-&^`NMaAa~Vvih34Oc&JIXSpFw+7lLx!2<}lX< zZJ{Ka<$@b4ZcCwhRY_Z;>~7R6!pAAsQm!jZ*$ zk9?*)oaAg!7Lm)ezoLxH?jscp1ZBqw4%pA{GiiNq903Z@ zuT(2L@o|bdUN%eQSpU9VS#^gjdwDrDttlOH;|_Q!}@BU(F6 z>Hn}SyAKNOP;qbl7D-agX?&~hIt{VVsi=JZ@DX6~Rh_IElMWz3Y*FBVtvZ)85@Y#| ztwj^&{w@X+R6PI5$mSgpVRjxYDxm7ShtuA7dMiAkqqQ>LtCf5YdjShw{3yUVDJRCa=TsA zucWS>u>kdKP0xXER*>WnbFLd60^g&Rs#cs-R$EY2xg|t|0F`YJ*Jr~>-Ni9*1g(Z` zYRZMr8?J5Po;o`>93-sQ$;_L%%MwNm-#TH|nF!j<|EBpuX#j*4OCmg42Ywe#1gf(c zC3l=10#L;e#sIDWWrDI1{wr@~uFrwKbDL(6BK*w}9Ndya6ZnF{GZzNKzsEmA2esztvI9^<6L}?!(ZR5(}&Yr_-=ukH4nfs%VqCz*YstYqU)2reD}D|D<@@DP)AHJ z9{dS753Dtw4a>e6GkCoAz!jl<<37K2oV(dpz?r_=@wQVwbcrBPP?6?B5m3F{b<9R$ z!H^Fj5pmhwOr-B=?%7T7pfr`nv4rRkrc`~i<-NW(%?Rcr#ZcRI!@Q#u>9zCM*V{j+4$7Y!TEGEA0e)TT&3E__-~a%Z@CP7Q z|M3U>6RTbT4pLCN8kitp;134F<}4D}9R1dg9j^|dKeh(I0t0*y0KNkF<_OvVNeB}E zCj_E5I-Qjn5FG=u09jb(fo1{!9-x1>Wxxsr0WtspI;9LmP7E#!6by=G0Sq7=TrdMQ zA4i5H(Gz2f1d(07zx1?3M9GZiGod7%GD%)pEGH-VHk0Nw((=GdG9#?~ke^@SM&v;( zJps=v$SeOKC;yDI=s{jtJb5f{VIC3mp>Us*w*Zp>183O;%ptWRo9Cx0^NJ}yGr12d zKLznoFZ|=}kN;!+mw8zs%Zdozr$C3*rHQ6lgL@tFPrSe8l7HdVk=&Thi4hT7D^_I5SG7< zSK4gSg7Op|qT~*x6;(6(KL!#<5XNn8k-TI>oaDYTO@<}jPi5srmyhjEfuZB;tSd-$ z?5=850Zp`N6tIj4$wHpJd^WbfpI^5S`FjjMU~CFTC&&i<$DUr&5C48+>#Epa3!FzU zutTHmGBt29M2co1Uy?8e3KxYnBi<|3#Ved-m~bFh4!IU{Yd}NwGD=S8lk^EO8Bla~ zjaL*e!s{D_>qJV7R%rR-bhh;(7NZgh9-@*6q2GNjXO(rnEku{ySJ{pp^5qkW#}hbDN^b88z8MKnNBgYk!=fBTl)E8`y&cQQe;zX0iG zzez^Dk5zQbn>b#W5%JU?ETu>A1j^k!U}|e zGFgQzr!K&$UYNS~%wH+o;80c(H80`{N0d9ebH8)KDV{A(1G&=pvzD6m+E?AAWZ71` zL2Ul?%yTQ(wwOx`4x7-;@^0Z-TLH3)5wAVJAPN;mHnHT9+JGQg!J1Px;rOH^#3xdE zhj;1XyGwW$2n`MhF)WhWmnjvF2W|2o4i?$*$9P^eYcsaD_On%FVjIG`Q4#K zIn2pid)#MxU`#Q!1XTzQurn$EUde!NV=>VSqVZfwlP5UQW9mdYJ~`yPK{L20m`mWc zcmU`*`1nymCqd)o9zD8NiOsKM(0_la41uH=0KZktwqj(`7sA0iPCpQ0x-o@ae7?b# zXa;nz%7A5Sw1Q`8xZe><=cJw_z!fE;3;te`ZBbb>k*Lo-O84u@X8n@OmqlbHBp=K* zC2Arr=^-#>|HJu)dh_NX&V*V+gWkyWHN|Q~@cDZmYGW7)nn8X*Ao(}cK+>*66W?(O z>;{p-a-n`z=vqmVhz5B>6kph}v&Qsllwlnv& zubZR#-lI(@32T&M$)W(QacZL|nw^fQYJMp>cm3GeQ zOGZN?8eW!=^l)-#zWrUE<6LMQkN;BTO@FtPEJ%yj8AbGN?3zU_cvwI z7p1(5y|Sc^hHdMD%$_N`(p|UDWph#S@NA4_-ZHl5N9b61Yrzb1v=vFR%8U!=FE6|& z94jjfR-8oID4?}2)^VkexwiX@Hev`=;dkXGq#G`iez{_VJ|xKGTBrek^KY)sT?rVx?PmM5PT>ZU^eUyPru>&fl2Rg2d#%5Ka-CKXolN2< z(>LF1XafVuzpsN>gKG&N36Z&GJM9;>4p|~`rqG9IW%9)j-btQR`#*-R<9bq!#}66S zggY^?Qb;|83&TYr$O6b+(<4zMbQoy{INw8%qbuXNfidmGTbrH^E|EWPz-XUb<*$3G z@|97|qw?B)Ip~BBwh@^8%%)tep`e}_fPeCp9y)>^J~^I73c9n6h}{`} z@E}ioF`3)DzbJ1KPi%kO>GFKYZJu*g2*6xDnQidVOkW{eL$|KW|DtHlkyuQwqP}9; zzt~^$9gY(73x6lVTMBJ)#J4P9SDUw&1}!A^H@2Rg^i2Ht=ta}rDtqC}-uzHq&2Qz{ zxI{w2#wNq@Y-P^sh=SEGb+b5~>Stl@v@Vj5a7z7}p7bq9qkZdg(8HpLyK5h|cGI0! z*wBT_LrwPy-p1$g6)CJ?gx=(pA}&Edp_|%5RJ8wS{`8+QXW@iTNrnMOpH)Bwh!P`H z7rfOl-e>7L9N!y$7mpg=C;wI$zc{GcmfePI>2ZE1IZ((+ls%Wha(Mfd*(JatS!30q z_w%x}bJ^S+)1)xB#@!s0=%`jG3;)5!m?QE;p*vQQ+L1GPQIo63k^v7A2;Fc~&KSA! zA?5^K;evS7Y%}%|n`TrS&5P|9pj%?SuXpXNa;GZ)#>6%1qBMQ;&f+v1++eX6v*}2- zT{Ui4?<*C5hyIK3>2~G%Op^unO2!JVsp8)kK#WXfAeW)4N}A17Ti7cc1ucdcWwVib zJ@5@20=|}7YjbniG!l(K=@GSv5yd49P7J_hdq8azzbQdvto$g2&7({lV-<5CL$S&bE%Kg- zEArx*FW8HSA@DDhueF!$G&U8JOV&bP{^y8${l?DLM#B6S`LQ|y<(_yQ*&-hApX5L- zy}Q6j`;3rVo`vWEeza40z39v>Q6UJAU^Cs0IFaC zWj}5nZeQ$UmbNPNqfELfmQCx+Qv0~UK^Xc3*ADwmZ2%Qw|65^KnaA_g{{tsL*uP<( z%G)5itFGbD6F!&KW9O#6Oo2wEUEwf)Y?qDw-AP4&UY9tf$*fcr){3kT3L!`wcxE== zJPdZtJn-9Xh;!@Hg+Nt+OoGrZO0KFjF1n^B9C%W#F1;I=S!XvjRmpx`+*nl4rd_jT z0pLglz-#q^2d61U@@WFJ7ogxlB?u@%yU0YYdsn*A(GJxRh=>BCZ!!RZl$fb0!*P^? z6|_jfREUI91Q;Mhfd(*QNgQ4pnPoq+USuq|iJ!z$q(CD9O+YM*7z})5pIm>c69A4u-fY-e9(+GiR&8apllz0S8!2LBJ0FFu_dZG05uFRvWiIGqgBIY2FK*43?E z9fLH&w@A7{$0XeG8^?2E0e~Sg&mzkXxM2zDGH$3lsN;F-G;CKYt%0uW1g-US;)glXq1kJwqrYf`hRk1c^>mOqmmCt46HUik+Nxcjn9Y7_&{Q zC>iM#uS!8|i)GyQyBW4eSB2Wg5J(6VVyam#9^s)SR1E`rX1pb^R~aBBX*EbB#axpK z?Yziy)*q65BaIRAS|huyaLF!Qyf4aj-6J5gR($xR**!TEXv%;m6$$`}%S=FK0<;@6 zXmt2tzaig-ASEkIa&aCUffBUyh)MYu@*J>GID{CkgI_Qgc=0s_Ye}TjV+8&OpI?mvbzRgRI>b! z`^f(atT&T2xgs01JTg1Iwh)z2J;4X&<6E^cltU+w5&T%Vc*vycN2XWATC0RgM};vOVZ;$-39HO$@W%){(;n37_7Z>C)s7! zVt$bVv*sbJ&%kLo{VcQgD1IUxU(t8xO)s9{hWnY!c2xi6`<|EYo`WIPA^4WPw-m+| zy)HVH1u9lA;y#SCOZYbqsC?u&{tKXniUrBV-9fQ&ps>A<9YN4tb%lvpOK?e>N#sK3 z*I_Y4F)yz3EHY0BcXZNm1&Rt)64+F_UmGqZI#RfWF~6ryj`IOXq*pCr?|tQ)rLsSq zWgkmW_en^%so~mIqT6D23zu7!Q5tKpu-l%-xV?VxbfY&=J1vTV9ThXyiEgBsS6EQ>TEx` zs-?}B`nl1NfXKg8q%_bWIrl_`o7h$AC|6ci*?!H5cLA_o$oxlfIz2t1p>$6vc$|EGuvK;r!nf|qP?-=mLj zubZdD$kXCAbp%C%B7&+Lmbcpq_54SD>h&L^M%nq7>OD2LJ;in>cJbHUo(M2l!4@oF ztL0Hr3`6n6=E>|_i7sGKih%2qty`xu)dHE_Ca~cZ4Jtu> ziOzHp708S|g>)}~cOV~SZk{2dAoPt9T`Q#Vp2_)Le4!WaI0r;zZ?=H(7)_PNhnVYu zIm|9E>NA*sMavgew4jKk`i6G+^m}YV&m+X#2zDe4Kw?R@i3bnA{(KxD!(7LP=nEqO zq7MyldoMZp+bxVj%Ny!27$%6}K4ppC)2<}~5oWhF%NAFjf@-wYS0B$eQCNEB&D33E zO2=2idTU>W)VAzyv0xLL+R@DjkAwyt$Kp6S>(NyMq`ne~+1;;fsKh5AfhPP%s_!B` zn2SiA0MT~94T1817Clger>x89AQnkDqHLm05U^3+807ok*n8!d_zal#Rq-o~xGsE( zHw-UJ+@9GnFfU7mRnSYDcD4Q(R4%@xeGP5W%1q#^^P5oJi#FJ{U3JYz>E9m)}{4i zeQ%&YJNY~e$g~j9M^eqW?444xtS!Q{7Mv}GY~$6987-`Na`OgW7i7S3LwRx8PV}x69g2elj)7xgSerHeBZ|8YI-qw!G>0-VR2q2Q;COXSu|XJNSGrNcYEbOSW4M zQS_83QjAgdMP-zWtv)yK!VfLO93UlWSz9CLe{+s&N3vcpjFi&U5^1C;fMZKn$>a|E z_%ur&BjK07d@`ZrVZ;qgwqpssY@B+fXIDx!idnqV(7PtpQ} zBLdWqFYgd*Yw6R1oX=#WxB-6cW$`bU+5#{Bj1U8Bc+|$+u zvr*a_X4|$d-ZD!$d1_hH!0n7`^_qbrp_cSSddI0Pn|4Sconr?z98p--vnI5LwWN-- z8ZPyvnjUX>jf+%{v$6fREq*;O;g$GZ{o4Ilcg|%B*dsr=mxQmuD2Fdnn^ulRm zm`y6F4URmyet+Jv>xUiij*|H^!SQ#DiDB7;kz9_ON!l5jSYXy_MwMn-OfyUok2R74 z9MQ#~s%l=c(Z``P8^u!AK@Nym7926@kaJp)y=mTry$H22*@R+m3%E_?rXseqE@+W3 zL<$yg;<094lW9OiX^`Cpi7|{Nm#L17g}{|mVgVzQ>y#-I=nTRUqME#L+8WcXTKZvW zk%h<%kSIZkZk(YB=>!l15@Z)Ewfa(~PrTbwlv}&@QorCIU;OFV}EGPN>Nky~J zYd(~QB2O@=C_80Y1~%>wY+MJvQv^|q=(cBPF$LC~%%?VWk!^Ej%L$E{S2+>6%z{^J zWble-DTRZ>$l%8F1^Q2#uY34yUQBmlq+PRHduY`)`DhW?MV04~$rLnfQI*7#k+Byz z88tKz-%BQOmUE+^+7>GK-@Y= zKq62G5SoesNf2_4gbPUL5!06B9$sa(6xCiBS8kaZu4&02@F)q1ajUev6RxsXF~V;W zhX@rHEsa|QK_{hn*g_%TDD%#z$@A?sI2O_;qf5s&bcdtsRQBvzh=LDqspLo(+2UYb zr9^@Wq`G|#{T6a`OW|rKYbrYDxuz#(s}?Vn4$MW`??=jW>w)f_a$Zt~qwX3+LJ>%C z1+u8suXVecP_bZizhnJdcs^5r>Kh8V6#$(w`(A z<#~u%cG+}%$sbbNJDD&pgr9iz>X7fNrimbu5kt6GXT0`va^NO%P%ooF+J6^Ph~t@UyjquYd%HzFuf^H8!9L$r>Phr zj_-NHUFCcwE~NnQa(g`PWw3!6*}LdA2^KHD+czx4or$t!&2= zhBmHc%N?iRn?7a5_upfd5Js?o5vE6k)_MwJNme0r8-&iPq*;^5o0wzFgk4G{msIY@&IcnA#`B zh3C7>HAaq*V`PDYxY@-AeA#68yicf(7B}y%@th3`yoeZ@T~pow##EZ3tZvskIA*bc zXo{JlR4R>yD=wxiF%fxru60SHnhroGIN4CWRt(LvUGll$oMc3X2NpVRt@IQV;G+Tq z6iLA(tmT-6#>LF+Y^f%80kF!sE}e`5l7y%sb=t_|RVx4pBmycH_~k)dYQ`%cH?uKQ zQjt$vMC{TiA|iY=D?HZuo43E+&kp~Kr&J$;g+2aYxFhi98R_u8r0(TJXP(cHn(OXE z!}4|z>u%PiiJXB6zS-&DfbKD7V+sg;et4pBUEJPaZwbx|83lrZqYN$S2xfuIh^n!SVzEUOJ)hut-anwW#}Y~<3yUA%1Yrm$+NeF7o;}ea z+MJ>&j5wIu2w&gL{K@yT$0uK_?mk4Es~{>c5fwp*sG=}IVliY!Dk`vILAyWP7g)?6 z!WN~#mP z=~;z_YMtAdy*}Wh1HeGBr@g|6tweN47^GS{lSt_yS#F~BTdG5KI*?%{lE< zr!(#^msXyvAC1{0!Rm2N$Qor^RwXr^RMA!SMk6*BiCsiQo zlSKB$LC6gc7U694aK= zXOT;HACRt+0-DxFqWq7{{R|nl>rm^;Z7fo~dfjvKvax$HrP>)x&t}tH;m$8rl9tI8 ze8g3n%3zXcx|b}qUxvpd3R8xMR`r6YBSgYWU$`>Ib2N~27XdZbLq!B=VKzOK(BhBL zD!I!El+fm7$X#|P$vm3!&d(xZNhGS+!)}Mv>En^ILig5oPl&aIRWMRzt%Z)LhRjwD zzL((zc@WT`BT0A7zKtO$fzxBAR5jorAWvqHJ8Po>yoqBMpWb;ooHIMTDET)P4BZx| z`P7va4kjfHGB7jJM7PzgQM1 zzXMFG4}quDH|=)O6jkkQm3PH?hGzO*(Y&ogYIp3zsDtm$@C8*$w+EJkgSbL?+U@;8OuK(L~kid43ex#u8m-N24g*Ou_T$)P?^G z@8=_7!536Ke!rIS-|QIsU8mdl+_#Tw1@YvA2oRL(S~;C&e1S)@BV}u}ptPYhNn;|p zN4GOFr?zzr{X}!9s z018!5Pjwqn(JQ`u+v(wqk`9m>=Z~xCy+e7y?eam4F?Yyy2F8%* zD4vuT0)fIihuvh@{n)A8E-}IRTi!%oZ4@9+Qd6N|99TnOq@3Lm%d<=6(Vm z&uzm8-B!00O}CN9SnI!?@9L_lwG8$-5AJ@{D-M0_0@-2y=0o#5D4%(1AdKrn^sik% z>dN<~xXMwAH@B{QFk$=CJn1d7I*11m1d&2S1jO-_6cyfpLL&qss-p#n0Lc*%1wkSL zsv-6-{f0n7bdNlue@AE4 zW-0j)$`4xPOW1m(@IPA-Z{ulxl2Es`j@Gn9-dPWmaayJa^34_pixBzm!MLpfH)`teDF{!6oF!h2g?1f=i>Zsra3oFc|wkH z`vos}dlU5tUt)M{r3Iq-5hF>WK=%`rv1xdXE#UR_F)&hlMp7S5J=g7%dfR(Lx>ThD z?3qWNpUnc2VFP`Dnr0@FCouqV#E}#(1VDhh}yk_gs7o?Ij~s=z3SgBA#Vn+h^X^+^#nd4^8aiUHum#NO%lv$syC!B24x zrjSKQsiBOWB5oRX0V@4qJRy;`lJJ7hosj2S(By|m?3Zz-6qyV(>oBAfsP3Q*j2lZK zSk(c5Lr0EvI-3E2Cxlq2R+W>zGcT2xMs-f*PW?J-w-C8W7$AH^r_fccu!aat4z5DE zuHfK0?uSTJHfga!O09Ch{WW@mISuyYI1=avjcT68o=^!45Q`vB6oFVDTOmA7xuV7b z3H7yh94yC2BHe?yXoBEjfFcY=36|AX%Rp-wU}h_#O?Y5Hfsj~{NX8==Z0_q&j0Pq- zzanJ#6gZF6`G#Qze6;x!pd0ftA0Du=mAxhz+h_)jzdhK{m=y@J@(UwNM(C0_7C8_> zpiOezt%k+0h1yTH?LZtsI;s`O`W6DOm}7pSBUU_IB@aYEgoFTj7TreRvxl~IocmE{ zkSVS&p87K}NhW(X!iEi!1(Hm|JPls3HCdJoMG~t86icm{4({nwi6qGwFi|-i>U;3U zLC#^?6SU|d>Q7p6>~%&V2`9@yP|i)uxEO3IvLz(mvZ8n{%>vAe#UV;Ce#V7J{zlaQ z4Xw1EEkz_vYnk|4srpE2u%cbw)B=%Wf?{-SOm#XKt^?Yn-lx@Z4AN?=di06u9%BlD zsH5877|mdc3e71t=ANhE-9SK zNJwBi%FWHmmjgCS`IDXU0p4^GaRlD;$)8iFavlYH%#$F75R6!)6+#rDVFs2EqZE*| zs#b_XvdduzSp*>njD!KLl0sz*00oH#NT5MZAXWqf?w#017<%q7U@9Wv^{+W+P7|PlG73b_OMVhoXYVOacDz;^ zl1tWiWRr{l-D`EZBO#^3g%wZeDa<#>_&9vNWaF?Q^(X}IUsc`(y z-KhZe4?*-bn6p&Aiq=|%$I#3Z6Y7S(tEc4CX8-xj5fxk~qptQ&FzxGSlI!TisAKuG zcj#ufGhCFansx7NABRji%CLBOA?fk^L+xQzz*^qRt346pxAY}Sq~-$OF$+1eQd9!3 z`7d?n?Rn6`-0H&kwgHx55CSdIA%bObE*Wk%ik72{+?8F8skFljC=h!y7|Z+;OrohI zbX!CvM4@XOXd1SQT(!|P&g`ok7TkW9#n9=}$M+d}B?!R>X_A##9K>g?FrEgWw!~%v z!BCdV1!m>Yln6BgVuJzNOr$7_YR>lqJlkA^SxBZ|@r-L*wsO@QFopY6%@Aca|I2HQ z5mj2RT%uz~u3|1~Q$PK~IkN>0*FwPb5V)?5D}H;&N2TKBOKn&s5o*${ZHiWnw%cC^ z%do7~ZCaH5ZE(XDw%L8$#2VOPQrG_8*l+fnFv}~h4k|Z0?!;ZK#I6c|C(X^HoU7ZM z8*?SCt4i|WmU$dp>6ym5Q!ZL&F}9_A60l4-+<9{;=D3)>t(_UEi_0o{5bEL9g?NO3 zFbzyOaEhm7BM3p9A>l?+M5U*T94TGH900w4q;n%RXW{-!dvfyjwiwomVP{sBmlxG7 zvudq{Oo?+W)4@Dx$8C2>NZjZt7kWC{EX zB%oppS%8vmq9%JmJP7hgUW+OlfSpv4kf{9i*!6yo-#)5f-Ep&mXYo7GmAo%BC^{Af@u+2 zX#H}fM#{1LqDAB4>j#5?2TUV_d%aNs} zHs;#Yqir3zF~vmO@yi#_Z!Kpt2A_N&i!*18U5Iyqhxbd9P1(K<@ElBH20BiQ=??D) z(5U{Ieg|=_=Co2)LqCN~{CE**CH3d+J!P^1Hh~>HUs0ol@JF|acb!Bkk#X%!Jrg)M|4iWtg~1O#M=sSs5>)T|%sud(w!yU{oC{LfFT zJvvsir+?|Wy8IWz)8vzCEbK@*p zM36e!I_EJX;!`?YOSHk&<*ZFB!@ZN-2b8WlTM&-HAWr3y(kYc7Y-0G$7cHAcB%OLV7`> zucG9lFrhx(;R0Z_>f__Oo62w$dv}N_J;`YWlED##mJE?X#;_3r!bpavJTnKXQ9QQI zcd=VccYjNrQ=rcF^g@qTt2LEvfIWOnIcRrn=-Y3d4v1u6F1@XW3>kZzRO5SED;9L~ zULn!wpPqUo=p(TVX$;iZ=w6AJV2QzjjQ})hR=^#a3=5DzkS3jTkOtW+Qy5xq$uo|V z1N$jq{6f>&+d2o`q**jl5dzY7mk0tzifG7U3j@f6@MgV!ohOddx#K&#uMqyf(}pXz z%H&n;W1;uHqKBbXfRqBCXOsX-#nS4UBFzkSyP*AU1d0Jff$*bnhS zY7b@r^m19KI-$*;QI}N1cx=znw5+>Bd4O?8_~w1chpg9jjAWE~TT(@#VG_|Eq>Ujy zCM(wl<##$a+UxJ?typdIkEt&J^>HV8uqY-ZfM_F%3eP)gpcO^Z(v`V|&f3&$IBw5H z-R*Lh4UE-zI5py7txdN<``;Skav8jRyTk2Qa-2UsTdnPE0g8ef7%~J@VlWm90Z9Ey z?Q|-34fEl2o=;1E^5{{CCTN8Wq$!BV=j&{KZ*TqP`CZ`eKnbnuT_im;4 zzx}ND=XsUj=NgwI_O0~-3vHg`jKmAwn5Rs-c*pB|PuxjXVrfe4S)_%k!sOAR%^^>o zK{i_!Cg-p1YyYo#*0*TBx-Vm_zlFVAi8}Kc4Y^p%$b-atJNWi z2dIb?5Jn9sHI&DpM9=5)Tiy3XmG3S%OML%h-}`@YZNuCOBp~82^?R!+3oJw{x9l{S ze+&9`_)CUg59VY$jsK6n1qSWe?Ws~;d36G;ChMv8T<535micr9$*0SrHjp*_wf)i; zZ?LhU=-wAYT-sITKF`??O~yJR5%~Q2hvUUsvtG?JME6y`59$7)2lV^B^|0dp_4^FZ zo8#a`OHPRAdhK6EMmQwN?DO@dDPfg-cD}w4!v#Z86ovCx#d|91_m*;is;_LA} z$<^1;mBt;`p&%29RDzf+fuCcqH;b@o?WMH4WfC%pp-TnO`7=r8y62iQqO5W5_SvG( zOIW8ZOsAQGk_0p?g~XFWz_wDfswkL%6qVVN9@?S>MGnaYJ2i_8PPw^XD`&ObQmVGp zYIJeO)}IRwsBxT6eXcE~+f`h*y{|r()bk6SDNPeoCe>=)meo1s3;`gM0vB08Ct!*Q z1VJ_0G#2FyG*Ke^s#EIcej`I&H{8v#6mN@Xp$j`oTmkS97~y@)7AoNgA~TABgFJ0G zwojDf)jjl`9Xze{r>97X^VXEv;;LaH-77WmzY}+n=&Qu)cYZ z!ku~DO8cE0>}8=aFghQV*&uUcER$`TV=)a9?RPMVbSaj{jFVczM34t4z_BDmrlKH8 zg8IE(G*HwVK}%Arp!B>9Ox@Ow!?Yk$u%EEs3HpyS>sNF z+uqNQoaL)5tsoOez*9Y(jAZTQ1G2u?Ykp7ghxC5atFCM`Z;GU*k>vT(2p40`GdSv% zj%9Ji?6}>G?TUg#x>+I1N!mxlO4OA6?I zI^y{#v8`%a6R5d{i*h~El^NE?SVFcyr}FufJAZaF|PCi|f#JJ4qVlw%u1tJoL>v-KKih63cY#Y6^8V z7s(TI;?QN$B8v`;x@o4nnh~&z2F23=xu1!_%2Zmk5F8;y1v*wl&a=-oGOn33ODxA+ zR0f4iv7U3@e;=2Stu0L_#2A?dp)S?F)F zC0_<{;!^rtpkjy@GcqaOdXgJt6fzKe%{^GM`t)kvBz#a!;X zGat=CB7OS>&?6l-VOpK#j7&1q{Z8#QNJWGM5<&r}ulX&Ra16WV0Ru9t!Cz#Teg-Yt zW?ag5J@aJ#b%LRm)p)Ret8=`*1*Olhy7#a1LOqos)GcTPV1$BbAQB)SNd!QZnkt-H z+$uG?3wDhvIv>@LKT$HJ;f%0=!sQ{FX`}7f`&|~cBk^V}y|JVuWB`LQA#HnmNiRT3 z4wy%&s1+hr6dBE|em$q==KR-z!eYlCC#}PYyuUOE z%7jNhb@l&Ozw!FqXH+?1=_{kPK9Q`oB#{4;3m3arT$v(Xn-uWbNI0OOobHbN9|P7< zr`D?ZoTg%6YyWFI`R@bRR`bErfAoK8_rIj==)FI(Zv7v+_3+X1TjxdnO~(?^rS`TC zQjR}1sj=;AowWy928Lo_5VIr+VYPMoM*am+07OIw@MJ_ojJZClZCX?f65qtXB-s46 zr3U*8g22cuTc~17-tG5)G=V-6ZGw{al}dEXkd_}Am+QVvrn&}A!{4*W%B#CknoEg{ zcJ^TTHgj&UwGBgG`?!RNh=oakY5;&{lq4cqmx(>{LhrHM>@N2nO=WQ$Lqio$mE3f; z{5OFo<9sp6d{Vr zs}%}Rl!z<}2&dOqn32?z@mT^QoV`JPDVx&;oJ7|{G3yYL2m#V$kjzp)Ay6Qj7xfr? zzuzqb|4I=AMfNbACN%eM03=I`zRHF_m!4}JGLRvfBSL(8QkB?&H=`S5z0b97A_B4QZ&;V6rK|c0~>33m~I&kp45w zZ-XMhheiQt%Or8k7D+tJ_3Z?^&srTA+!N91bs7G`@R<~Xp!C@KJE1l1f?&L&E&3ev zZo&Ay%hV$8{FVW76blfnq1p}GPFDf~x$0&#c!kH$wrzTkk@S!VXn<%FIWoo01Kq8M zjG63b0S(H+1}KD}L{HFWM#u(*O*07erjq70K@95{F&cq_0BRtxz{T<+8of17)nlnv z#>OPLI}1Etw|4!)UyyJ97+mHV7;B!VIJcMLnJ1DW12%AL)F6S#Ko6qw4MB6S4W4-R z=y!%@cU+QPXAj;(HX#~>EKmWc$c!0?l1$8j3JWGEJ?g)=mWJ_om^(Tpf2v{`1!_Wf zUWZ-hTlKkrW>G2uIGquDQiF_oU1_BJ?%{sxZ*wo(zpr&D9=<=^%p4ps|6{p8=Mf^@ zFHUKe3ZZ?8)LxdtV5k#B4&+2MV`*o^yMbLJ>En>keft+KmWwb#XZ-tZd`F-YAJhf7?iU^|iOBq;K z8Cb9v(4J=yUm|_ig*7AE%8Er^&iZ$AOk<6B?o3GMuRFSVuqrGbl|!RFjeP8=Dst5K z`cv4G&+5H;)5Epq<`Rqb??uDAEwoWYd@tmT+&urH+%-Djo;YiXg8SvuRIa^5e2Tg! zqs{FxdyqbQO+&$Cd~UO@mz487)A)ys_VYQUOYvsyrCL6x)w}KAizchtD4tJNVr?fy zaJRXxJ+00^oq_;lEEW(u?%1=e^DPUyeQHr5(Ir6MxlDuB+^b_n6lVmc7&ziwOv~iH zJMQ7dnM|fQU+xmDSFVz`qFk+}@6hvcTEpg?#~ z?RRy&709l=I)n(q@HEOm4hJpx8f`b^d)dZqvY^C8R1pRDx&$%Akdv=+1&ha70z+6y z0)H(!dOf_$j{-n2ONoI+2_YPsy0HW14pefrud2N4id!rBptJ4nt*( z{1x>K0G6c`TVRD0R<`Phu#j*b@3I z_M|7=JXO-ef)MW+BJbEvXN$hX1FcFB3GA&vNuyPlQ?SKmY+KtQS!!Q)(8t|zK1GCPdF^v)`s2{TTNzaCb0YTvHZv|CW z2szyWhPC@L){X+;3fcpGP-AUmzEL%DCZ|jIJ!QKhTatV|=8}0vE*2Umw5Ex=*pl;N zonoNPzGPSR-C%XZ;vnNvAP|s30gwjS9AG=CBJdPQlpyi}8369u#O}4VQ=ic-p07RT zg4fl(JS|$+maWv;HD?(pNHmcx#%--A@O|E+7OOkf?Mt#r6^3uG&2O#K?dtIUd_LWs zE2((!>rhH#|0gkgmj|DCq1}JtLCM;K6oUA_Fx2izd`TquHp(aue>W52T#|PZJdXM3 z_$XNv6arE8Sc2V?+cLsioI!u%45#Ujz1#-^)!BL5h9M%nH8BgBXq*C`$)4}s@qFtm zDdI{GCoiUQB%?I2?v0$NQi=>L|}?2gBZn#q+*dpkQPA^5k&u zLa69Yk22+aO@NWPSk!0GSE1Eafjepr0?_R290GSC;A?L)e*NLTejnohi_$%DsuF=y zSGGfDlB0S2=;$x<*HdTXxp0U z76$#tx9zjHeLbE1xuqBa5(tIR*y>36xLH|WL1ByM_3gpepp33&nxoCb5yNoLg2{>J z(t?UT&y~ZYdLGM@%X_nqJ^rdpWE3?g8YRlx3_!{D*1w@bk34D9!tpq*_iU*>7sERw z>?d2pG7p*E6si^H!@N#=-dou1#Ymq8_Bfnv8GROrIMwNC`V7FXLoZh4XDxH#vg2)3 zL^lhK7YbEhpR~@_%tIW-1KmTqS%*6t?;5by(U=dD0E4Q;^!4{!)GciRgdJ&}Jc%Xp5RERio z5a9BGNJv>Pl_(SuiDoQFkQ$sfC2)RBw(ODSqaCGn?$__ImL@PPNJh}ur+B9|l4;in znM2a7e?j~33JIc}{re!hs*=%FJTc1Y|i)OgFvZ~>lRj`#?C{na?!D5**^a2ZQ+laSv>syCxgSmZ{faZ z5{uC`T_A#8N2@ur1M6B{Q|B!DSS+#|okY2!<1S@v(Q0N@(WYEdh+SrU_r6G}7#j6R$;6-?D?e9qgz%`iSn82cZ+^z}Me70}PkrF5Ay>XC`0(SS2% z5HIUc0!F3;U(+DKiMb7dC=!B^0_cmvs!tt&MVc8Jbf-V{b#vgcs|#lAwf`?W=XWb; z(>?vSvRmCAfe>|cKmphQNrs$7i<4V#=J)VPf{x1D>@OT&t*dk8pVarBSQb!>nA>6j z5*$EC01^mEKZ`HfzWtlkR94}!u3C+!LoJ+XCEzrJAd3K!Qgvzy_jN%$COvX`J?izu zfd`r!)b8!JmKo39Wn&u9af8kwQ%$tO0DZcolD&EqO$KG>G#)VJ%(O%(8>cMo&K-S% z`ZsNj>hVkWSRi*7ciFy7-<=hIFAb}0WM3%i^OAL-S*6@O7<%vO_F8g6nfpj57Ku_6 zLYNHBD3GQJnVBYnR+-CP8{eHi=DB*@hDFon;D3|)?4tahqtj26Tdo2Lr|_Ih=N-ck?TjVvQ#;HcFYKqD$c)S8LPSSH44p<+QHwFb#DH z7Jy+E1GlGg4WSAR4WlyiU6Ge%3A{8TNrqx#FFbf2uF|gm!}CtYEzi|*xl=bhSMwTw zZ1n{b&Nue;c7EUA@>PfM0(os{5(4RB=fTmhdbH1_wcBbwz1=sNcO{PilK%W(L9*09 zYw&p}#kkfaUrwah#}oUnoz3(8H{B+~FY?GA{rW)vjxdBN3<9pY!|3X9@mX0+V*tEM zQ!hxDA`K3lKNXBm$hN;4%dS6n`g=6ATPRq?c4dSO1vuSe+qj-4L0y&PhP zizzBWiw1ArU8%&)I5k!;uFE;nzC^NCq1Ep)NdA5bMw#ZqbW|wHHh81gvdqE(c|C6}o%7 z4`VvOs(MG%ms&OFip55`+ykKfX4yGzY-H)aU8n>iIN94dBhcT%b4UIIG6+6LSp*g)%#j2d`|??{1)5Q$>B@D; z1k4$XmlHXI`|rv0IB5A@yVrGE?&YomNvij{X&{qwhuCHG)?>1`MZjJ<{lmy~SeQ;_ zH>)*zWnqCt0t7*;hZ>rmXzx;2oFB{eS-9*P10Mz*=+6{m3nq@yqcVa4lr`@dO@#mQ z)<9oNDSvAo zs$Vu9K9g%5>BoH^vR!rDZaWxzTA7bN6Zl}VDzM>0VhEhA%9{FdUyAj!^R9YVX-`Ve zhSjq-@Xt1`ZVyqLZ_)xEx2tgj9mj3`mhHpPAWmRC5d?2gF0LuOF(_n`xrCHBljEEJ zfdWv~pE2Ehb~AdafXIjfB4v^Sw501{{U7ghiHu?HbHaQx!qsJO*V?}cyrWhNi0M2p zVT`PPvfX814&BF)k0-_-_F?}nZi?9L6+-CI&M^54n?*Hl1B&eA;Q?}C^Wx2Y+vxpb z@u+FmDb3eDq@Y0=nue9J1+KQBDp3JQ)RIgX{$f&0BeZS?Pw`Hf-jnURzclgzP1)d8S3f1y#?*YUBQOE(e z39|cnohC+HTsp44=9x}j{wF_U>+bP&jCbDCE90NwmPMyx@o|fnX{cV*anaxcBo3sO zCsC_@!kWTkImCXafCDC(C73X&TzgxUh}hkeTS7xTgaA!+6? z_=pO>RZDVq&2rlMsjcsoTFxn-Eo?ifqdUA3>cr=^lA%d3368a&PQgL&lns` zf-kNMhyn+9n4*8+(fZ`DSOzK!S)j%Pu%<)u^=d36*A+`+lb=iJsNXB!v|yXC(&ME`kg zZ?m_%vFQHDb*P8UpC0w7y|^rZVo0lwsX)u~Op+a`G_8CakW1|Tpg)xJYscqLVEcDd z7}NEPw^LuVOERqJm8xV&3reWOgaOi+1VD=AEHf(r9g08@VF4QBLo#R{RHTo9O&M+`p6C9P}-!R_RjFI<&5f^5HZ}ebX5VpXH@i zD}9hhVQuQ)>-{(@TP+zK_VI3nLU4=%nr<6IYgwYDw?bxa>kq*SXr@;!WytpAP2~NP zc^gD8R>qkml4&GCC5TNT0T$_vW;b4-)!>?zu2BeJkP&twX7!zm_$w7gxB-v*vtRPI zJ$h?sYg{JC9uC>cN z?#S-c_U_(?pR%TAXw|>F{{A;F1_c89NaKNXlGjQEkW^CXIi9Xf8ysZN-KQ;@{&do< zt5uYo{zbd~y`l1(H^H37q=V^mC#Q4Eo?*T#YL2`6|1fPz1YBB@Z!OMIs7m_V88FIy z=g!M9BtG6+8@SG&w$txa8(6%qojcmC15!52Ex9$k*2gfixX4bJ(p(-^P^cW)|G#q# z7%)a)D)wT~P5JER0o_W#*#ew%i&@Tws5)B~bf=Xn80ub_y zD?C!rH;Z1AT-nL3-ET289g1j;7Y>Q3ZR*L_ZBPgV5s)GSbl5H!-?6iv_}Qi8epj4s zsck>fKcRHs+kH}O&3dOVWI_L%#>)Hk$#3A!^7fws+XA1~|C~0j1stkNVa{~Qu=L3y z-jWjDL@_>BezK9+yeUcKVAFg+>Buaksb zP3L3A$?t3}?M-UPHDrhrS%6>}m@s56*8eyCXCM5;P_S6(>BMk*c#GDeuS30RYdDYJ zDRg4$`5#v?XWy`?TlJR9e!^+-sF{ogsSyQ{hzmaWvcXvejAT$mimHnh0brsGio{|M z1)uGX@9gXClcnf)8=Pp~D$vuP-SchvxR#y;qSoL8aT$UrWSn!H=LG+Cf?UW_a(zAh zKMmRgd2n1ryUFE20vU>86m-BAFXqtRF`WockFI<1F>=(S24pEP_P4u=83>7`0#&iL zpQQayUCM;P<+0N~HvjHMUqiEszFOjHFJAt~4+72el6EQ~ziI!>*lHhhRGLAjMc23P z;|BWW4F&o7|65yB8Y^Kk%@U6eiDf3wn}|D~;lFq7!|NCIHyMqfm5#Y0^DhsAzjVHn zoc!0`+oN3q13D@?J!;;+3Zr$g@Lv)e&Pw#F;Nhp(`6X zuP<_(X@t5!9rX z$q9o^2muB|bcfFVC+I!c-`D;OP!rg$p=6DF=00vOC|B05%um?44lBzIf=B8OIIb)u z?DFiq7{F{RD6)x223Sb8SwNE28ETQ7?dW*;8U ze7cM5jg9!N&l^W?xGjmiaiD=Ma{|+DZv~JD5i3Nd5N$NR(@F!&hWk;wYid9cMM!~W zvACwWxw`EaD%4qks++ZR*_P6nV_Ym%vlw`0VYy5)nBy*0#t<6Q0_+>D6%i>)S0HFx zRO}%LFyn%@;u>mMn{#4rW4T4@@#W(&cq5j@!L8i0EiUNn(Gf1TYH6u)xo%asGQrVesr7F~}y5`i^F|BHr zmMUuu#)b|k#~sSdv}xgPLcGSr8j_+ha?6;hjm{;+uGqH*vhHA*7P`#cz{K3dacHWG zMz)o1Wyoe3meq}ODUM(&)nb?#JI5~vfhly;N5X+Lh_hvm}XhA6}7HR zqi!icLsWcGH&aC|XfrR7pvxRtjPjtSTN>VjUWWp;MNc%eC8!X>g*2 zVSiio`LNd8*y*=uuG=*zS~lgvthRba^|WnE4H|Z%9Pr&DYHsz6mHinZNbTEWW-#fZdT=U z8e@Tq)Lc_5aT6r&U{y%FPGqgh8No(6VT-!t$g>(LF4-Gkpu6g!t~EM6I#GDz0}{5< zR8U$nDF-=a+|6^ZH$hQXM0uO}|D{8Pt&J=t6`+Q~GaO}X0fJr4N+-h$V z<%~$xHfR#l0}?wcs8t)&blqFUw@OiWHw@Y(*969v)xnzA9m|!XDv6obX7cY7NR~_u zGE+xQNUf;~4alRS6g0+W%+k0wt6mg$4kn`DqShy%M@>nMH~xL33Ig zYJwT>?rkqK4sIhnSws;g^DZrqY|ZY&sGSyXD&tO;kyA#lQ51P+^xO=`)o51cGK!}GYHKzZLNt^^gnS83$5HoX_Kp)bcXHHS` zy4JsUK8+i%f01`JSIfk|xK%S|;HLOei5Wg51lh%na+wvjf= z7C{Myqt^?`ShGc`%cr0o}5!_qI{xV$ZTztuE z-&`DQBdxwZ_o2U&-pK!fGc>HNGKriWkEjnYXAHlc{K5W+Wzs^GUBzG+5Q^P*g9v!y z%&_o=SVghoD6(Qnw6L&>YNIImGcwCm?5Ig4v>C{%TfZfSc>LF1j@orm>7zwK&bR8B z&RG!$oZW`1S2C1MX>)U6E<1%QMinq}Gbv0-QyGZ3TE-}c|pqDOp*x+l?CI&UU|Yb6>O2~;kf>PSta|g*`Pc`CrvwZE4UbdWTjYwiR(Y8vANU~#5#?Qm) zVUXTjl?xnejZ~cypyjU9wiHnnR9K0&zVA!dXB=x$uUpL1yQeoo#4k%hVqzTG0mk^UT$YCoW!OuxZ6^>XpN*qQw*~d6Ec;U)l5ufMJt6WiYkf6aBngd zF{x_KVPXpxEs6-iR$D6>ZM`z(+l>b>u(PX01ypf2u22AQ*BvsMXw9Zmt)tE3s_4Sf zE8ll&c$Y%IFg&Ed*13UB;|UK^2Go@FRne;=uh$e9|68s z$^3Hq^_%YowqQ^x0YE5992H4opq*->3^L|irAVeF*D$J@l|BZlu!xEy9X*x#JJAhA zh>8moUKYiQVp643GKFD{Y*AwuEhiGNQD(BTbz#KYMGY}2shI8$Ja*sP9)#2Il6Zu2@84^#6x z%*EcreVd57Pow&eoAmp{1EFFC0S7RTAfgd51DE0I(&!{i{CF8$oa#{Z7|oa3`i z3j)8f5Z|I1zysPf?i6&ZTTg?d=>JpQza(PDQ{pR8H!rFJp*uy4NH~Q83XK$P!(##f z4dSZf5u>)lZB}0&s1*n7I;)hmT8312Q&>p~^9#6(F~-Xb!U$lN+gZgdLTZ?^8r*t> z>Q_47Z%we7r~5NYh5*`zd6a~%w}*>jYj=%^Wk|Pf#g1hr{ts1H{v~big(H@ZyW#SA z5STGG6bS_E(y_XQxGxJ0>>B1q#G}$pB+@{JB7x32B|x>}D(|rN*X<#HUeEHsxd-R( z4-|)ob)IOX=z0^7b0^9-@Fe@xZdvGehUw%`e0)!Cm0dQ1@F~dUe~QKCm?V(xpr!iV z*F{QV(3R6o1z{}EL_n=*t+)p?iyzUp@3(B;eJ8#GNBKIY)JnTowUyE}>}oNR$X$87 zR9ur{-C>ZtSAHslr^yM95apvrZZU{U@H^ezFp*|ZhTpZs5PiLjHV^c$I)e-7r<5Lxt*@=hHy8tb+5=l?`o|; z3MYscc%MU`z{3)6<}-~94G~UbYushO8LtS;WErSC_{@}k@@f^hEd?Bc{O*ti?tc4f zf=b9Ov!+&|LO2S%c?ADTgnzyiEe1WY4k%4D8!$JInhPqT1BmZ=(xFibAqZ`n z$QD<;<2LJ!oLSF(_|kr?aGWi7YeLmU?L$O?fI>6D;oPUrhssQTitxJBZq9p8AeS`3 zgeGeCR6$^{EHC)^Nt3y342t~btDMjS7^{FI?eF&6@XXVyU#6eDfP>~QB=-08} z`Rb*%x;@^3t<=QYJgw-8Ro944qe-5(eoxR@^(&x98!zi3*b6Rio&38^_NyK!tR4PCQMnymoAgdUQ zBNSLckP(0^1(1TMML}2~k%9=oL`WnN5f%$05e6(oVk;FwBn5&X0}?DzREPrsj9C^a zu~AkcA|jwF04OMo5+aBxBNRapU6J+nU-Qe|_Z?@e(Z%?*Yl!%VW2Jnv!?m$`W(Tow z7Q>G9MC%oRGWYHjO2&`Iv=eTI7wtp0(?NH>zTXXnvt7M;4)nf9G=~#zf3#!EC-HWy zy{--XCFutS=cKZUA-N8Ok^zHO@{q4h2T=&wNw{dit*?~DWEq3CICg1BVa|Hu1S>kN z4-eiy-0mOtSwwNO3?h7!RF?1k-}@@Ma1M+;pXL$5{fnlMaumB!+(I$_RmRaTY#mK|TRr8$(uamt}O)KVZGBnRWfBPy3ccL=P;6rhp3M z>#k(81&XprD#92c1L1h}asrAFSVfW$dYUIwY86jKmZ2KYGp(ZTVp+^~#YC)0dBMq9Urc|d9<`{}#YMP~!#M;M#}44i z^MX_dt$?8vSVAn2j6x$Ip%z6mGa?3HjKKg3{T~kBM@DZj+HI<o3q@ZAB0*Qoq|Cw}?RCCAQ&P`taiemkP zwG3TZCDAJfl>1sHdOZ?KVm%g1GFGNaG_8r2?qH2p9BhNKmF5lR}CCKED>Z z%z(_ASSH8EJmYP@nBy@!jYmYcXad&lQw4j1-Ci>r_WGekGSE5dvl*H0Bb8J=?_;FW zDzS<$g$75sj7EL^UvO*&T%EA7(r$?mu zP;szuVe();G!CS-LjpNy94A@(|J|1PPp!^$pACDj7ia$|4@B?ybo{Fx7}rXjE9aDN zH{!7WSq>;VPAi z{+mCaKWwkk)1&%imMVJ~5dGfe-9`m~)b0>K4B?S77&9WUSN^2H@OVmh@w|BQ_lcAbWqL#Y)}ZWWKt24gpd#AjqS8LOaFt- zc-N-=99qGE?`fs$>-}r}d@QqXWwRMd_)`2?eM>(6s?;;jvOvR4udQ;=P$}KH+@(AZ zN{-^^$~ZKU&~cK}OS)|3WS{^J+F+V@EeBn%ronR>-@m&hfAD zp7f-j|Pv=r`i24drbG(KNXy9GsDr@3ZNxzZ)axx)&I}T`km*~eq5BK|L?8?(QyCt zALv23Yp-h)UWHUiq3t{1t#=#D5KR3DN~~0<6G5x%nrTF)goZ2fTn7}QvWeMIivokq zPnxL8{?gBvyQAcM|E>8B-}_$I+G>8W!Eaii`L$G58aXQ2Z z*(St+d4Lg9-8tKsP#_rsDg4%6hvslX8oQc;hGzOR$y|JoU%FAfb$Yv^vQ@?FkwB~D z&FsteX2{)nYl2{ek7Z1JkNuFT)lRyN6RHRIzd>fqlac9qf7I))B+=!(iv$a4;+5yY&83>kuuO(jqo%Wu#3UcXEGqqn(4`#9xla5@H=94#V|U6v9}*HcrCn#VTE zIBiyG@S8Vix1~aK$OyCzL9#b~DJNSxgwt&MkP5fvfhc*yC~J}kMfuP}$Yc~Sk(5JF z(9Wm!>Ri@f)G451$uvv0gd}Dxnj3Dqfrfkf9p1|iQPyBnii2`+bYaNESL9z&0{g(z z^y1FU$zhog7}ba&a`robE#{W_RNrnX$=O<=>ax@Jmsq&0SmAoxu&8v=Ts$1IDE(qc z50wbB43z0?7J@M{fC~-F(|4L$vA*V^b{RTzM>8HmM$AHVTAC|{>g(im`+D6MTMFgr zU4=ZDXAM0vnhSNZod!?CzWhILrrliA=Dd6+kHXyB`kIZcb-xb*G94!a(Ns1zgjA$f zKv*IOsKizX#sVOu6bTVU6cQ?kL5RT>5s4HSB8ZBjf{PSTLLiVtfFhtH7BE;UL>Q{U zRa98ADuOXUSt6neMnpm&$S5R4imHr^1r{POK~@T^5f%{;ivU*6RSQ}-+!O2)8X>>)ARK-PPF#40jNvP>bMr()}&OB-PEv(AUsWc3sg(KJ&O!j z3DVaKecx5_e!sEe@w4M$;9XNCQokRFv1iA=)=tWb`rqrRZN*aYEGa$uQm2HJhMqUI zY3OW*u$LS?Fk#|&^v_S1H#xqpxHhxDo51p}uWq+>D_!}e25FiSq2x`qD?m~KVsee1 z)ZXHB)(VskD;N8<$Wa(|eI8FANUg#7r7S1&u!l{&QJ{pekeo6YUk`$lnI^YaZp?1| zR~+uizf7cpb|*&+l3FJx-YduMov78Aczk`}$)tlTk<~ptkTwX8N zb>`zJb?y{T^d47-tOQTrFynsf^pgBqeolnO;>Uu+I7msiMS89sb|R>2$v#J_;)1l8 zi~6$N@VPvsQx;K^{ZSXLLSk&%*w>S3(E5YRZORJ2~c8OaAr?9av)>=AT#U z<0NDzI~;*D1{#SSBPJ_uQU;#Nb;@06xG%!qlgJqWoHt!5g!anO%ydmHmJRPjl72N! zI86#lH)KfV(%PHlPAMeml;>0Wb86;RD@h%cJ+DvY7Nt^k8Z@@t4m-G5r4yPz zgz%^R^3sOs^sZMjpbxWh^N4K9!9kEF@3ygWSO?U5Vi1{_SOB?!ku<5_QlapvD}h3R zfYFMn7v9lO-P?NR)n)fX#p@u(39_E*f^v~n`&Nc!e zo}cQ~shjA`YI3jpi5q-xMcqhdDmbXD)LbH_`xSbq3TLm$DtPSILI1DR*Sbco8`1iI z32SfNZhzv4ukRIq{_~c2TTd3s)o1aj7#)vU;^!Y4G@#4_ z1PB5VfdLQ*pe#}l6ogS^kz_;>SfLaoia`*HC<+0C24KvpTydA!Ke9TxC@ZxTH%A4h z>SCD;h2ZK9pu}JTjRO4;n?k0AUo~7mvSUkg1Ibpc-YH(KX0KKKY`UxBv^EqQs{g^) zt4t!{s|Bki?ZR-b&{k@$Ene$Q?5*8m%)q;2sFUF-tB6fv#9H}jtJY5;R3PNB#HakN z!YCF|4CX>u>SIHmMmCL!Wkeg5f*9`rlkAplE&c7s%NAO=e1S z9gm_hwdJErhKTB|#AxGO*Kre3%Wajm)heq?jSIEiJ8nGQZkS$X1C4lQV_QmFQ7MJB z%*E!W?deWrYoUfvOiRVfX_<|%RIM9}iEPCxsYb0YZOjqdT8>jDW>p-tw>=q&sJl_a zE?bFM(#)mDGSeQ7z6}3>oTU8j%r=9 zjV-#F9Lix%nJ{_7m|JwTQJYLyn40EUTP+++M={BY<{67|F);174YYE!OPNzhx<$0g zZCp&F6CnmlC5G4y(|YN&(xP0&#|q*z1YF3uXtlw%<_)&nMa9OIT2nC0$1!cT+lt!K z?#(Xt&N&g{v8}n3#qmM$%zJ4KTo>>a|syHEJx{$!li7CxVld)q2h6Q|EEziIj5_ zGT6)(+*8QRVwtVRies21xoX;BFr5&RWTqKOvRf%d42iY~DU{ahxKlSS=;f({Ww~1| z%&UP@aIU+9L2em_KcW1;=KMqN{C$UR{{Hd9GE@z<#Kek15K&N)*DtW!EM*{2z(Pd^ z*B0MbYqy3ja^puT%&rB>Te+E7Nv-0VMFY&u>5{MyEw(@;d7YS$-YRe#=F^8^k4VcBIv3q|X`TvWu z`m%Zcl7$s1C!k9v|SM*s4uAsoh;PKp1YZwaog?Zuagk!z~j*>R#w{_qigxg zFU+;hH~mvc-X<(Bi!BG11BySb1AO6ms+Bj&3R5ZR@)9T;g}fJUQnvr zQruz8Ih+z>#}yZDbC;UR%uI7GD1wsuEe-lS}iH4KuHok+W$6zHt>MqT(<_Z0ky(h~3*G19xC54uf9jN3*0Hm$2 z*r=Hh3IJJCQ9~KwJ5+Uf_lF}?<+sVa^<@jwU z!Vb{i=>I`b?BsjqjNAI{F~FE5l`jb!U9Dn%Z|7>UK9g};V&gS9Jbv?Qqy5-gr5qA0 zDTT)_WtqD|zJz`7t#yurm}3)$RQZ;SN(;3;JM6l8q!uP0d=hhBw>UGt->v>s2rN;*x-qLwSARF8 z)9kjk5Fx-y=D?MNBqj_Qk(e_YjJK74FEnQFJnjjIS|Q-YL!PxE9;frGw!u1A0%_vI z?Z2d+g{vJ}`AWhGoU*rN5;?1k-|>!FTJ`HWg2zMXEkrE6Z`O zoWDWorh&#kvf2x1`46_M85rP1_@6(-E zI?b#ZwLl{qVa7(+HoPu9lE8(@U9X}nTll`$Lt^1?dU3X!C{>HY^YyhZDn7QU|K;@9 zu7b8rw)<`OFL&EEl;;@2tpne%xw$9fZ@!PBpJQWNd~_du(ArSECG>!{eTAhw8G+Ae zobgkve)nx#DsSGm7ZQs+4n58Vcx8S@0QSZPq~eWMt{uPndsKguJ0!YoRj_}DmvXU1 zYsPBgiU<5P6t+4)pLI>Tn=@~B{Du+e26L4LH%34$xAA7U6V$whe8Y78nfA557n_rJ z(eCoY5AjY||Bbr%8yy5HlOPOX73SFiEH+O|VV+nxNL%WndHg;l>j?b0R45lSCqv!h zEwa&X_ub7!BoqAcq;*n&M(7VV(U-PV)v*{5(^z&|%L%gHwaXTp1hU{xlyy7~#xhA=8p7m@0LUt8r zLhwcNdez-(uFYq{5nQcwSSyURw(dLRK%JlQx>smG})0!gkFP@957Ak8| zl&Dtx2uUpnAP)V>f)awg%5h$|=e$cTKX*&AKY!i#y$9#W!Lv3cTEGQ{JGs6T4=Um_ z4)+Ei3DRk)30Ps86O>#bj>s-?~`cg9nK*!k`jvsI{zgu&= zed9NOiPY8Dw~-J5*9rHfjxa+`Ws2aUX8FoUe4=kc(_-~P_vRU&@=>pBZOofsGrXpq zos^ixSGqn9JNM-MoyFtc7`vYQTL!nC@(4X@8drbW_<8#+zYf=*vA{lKPDMOX(A&B^ zCX9EH1P4ajTB@zf8wmztTZM4V+>`w~YS%3>2mYXcrvffCu9x_pf>q>Fs9n9Fcux(z zkDqnFvg)Bz)VIq@KwY&7T%@IUE|9fyZyIg-5?M3BjSh0VH+~fOa25&l!h@0NEpc zVgoYclM&lx_`VP6*mJ*R@;x6RlP1fx*WH-31grA$j>aoVK>yJ}b+_Xt+y`T6?->Ck zEj-8B3r6R#kd`iXeZBvC^$#_7j2v6kCPv9DD%zG(h%6}zqbMb{6t=V3N`=fZO-d^k zBk_DQUtlH3EEHBEh>>E!h@z4&Efxrf$psM>0LIu+Oeze;OdiJaUG^K9{H)h~u!O1P zWqMUU?R4iFxz#VTyItz;divH^Yj5X({yET6*zE2e!ml6yM>O=d+RcSqt=pXyZ0c@s z`E8DS-}HsoFCw_dAczo##NF;w^6T&ZNZxRf)Z*0MW;)974%(*Nw05fk#J20W)}+0; zgkwGKozZ14m%xh-m)!XG?(!>Zv)pIk)2>?ku5@W1Gai!wJeUIu80GqLV}1?>y?Y}BUBNXk-l(C$ zE8nGfP$Hhn-08ZL&yFQN72Of|oBO*)t?wZ3=V;sSw$LuQ`ubll^*s;vJLPdyj@eqC z1YOOtL1$Lm9k|DEZJ&;+&w>6W*1qxLB3422=6*KmTBhta68XUQG|cm5>-|gL^82kL zhDRDOeE7HLq_>|7pRLDjHRGAi%Ga&@t+SI~C+ly0E$70kdG2amgPFWM?|IF7iwM~N z!u`bRW+X8BZ4l=4u6ucf-45h`Lo^j*)U`NpFno5~_R8?T_$>nRcV58ZX|X<_ds7}GE6ZYl#i9te`u>*rRkhQ+6|;U6o_uxBywBw6 zEC0UVQrslBdq?i!?0Fw`mwV@bndk9*UZi9%cAHMu22QtSNm+#2=cD8}oxfe`Yq#OZ zxz09qw#>OkPkmJ7{!)Q@lE2f6_I_@yylML$xgHL(j&AR@>Dg%=@tZ6kW)}L$H@`39 zitjtlYHG3kd|h5eW(qTw-xVpnt>qKKb7^vO@qDc3v6)*hhKXPx2A%&-uhDJ5E(Ir$ z+b-%K=Pe!gO;F?Tin2(dv1!C7RFq+oM|p6C^!1dWzfJdLIe#jR15SI{FM62#Gy4gD zxL^279sl?G>*3Su_L(ENF4bwFx%;^d`_>VO|K+~i-Muk?-{#Rv&i=NT+w#WwFl=p3kM-kiN6vv+kaKjn*V7FAk7X zReh3++A;s^8^xCIA9|6+&Ny)F_aiYf9w*|`^Fyt<$d;t`#x++(Z)vRIJ7@10>?poK z{%JwK`o2Gb5l-t6Kk;GysQ~pN$=K|knm*=?D z%IN%8zF#gzJKdKU9>y+54EU~&hdCa^iYwz2ekWg7d;RSESJ-4?=;AG&$-7U^O}lsg zZM{;JGTCd5J~!iJ$;yqoz&#@HNq$othWkU$)TWnc;90uyS9~4{{$DHivgtd{s5>~J zl=t&6@=m-B_WMMb1BqCUz&+WJ&-I8kZQ_1EJ62_lgeGqtdCah@J~lXk0u2rL&DKjA z0dHqeG3G=d=b-5FKQ`n1HEdc(|2EqV*t_;@%wkoUhe$cC!p*3sXQFmYvrV1u*lipDE;hM zPp@By-M_vl(*fgM`FZ};vJf$T3md#0=kCAYdT$t3zF+M#3z!AB0Ll`NPLK`UOb#n?fViiiu>Ms{K ze+|C8#up7pJ5Ch@31?LR2Xi1NPj~wu2qOWz7jpMD1S`-%-M0P}yQ~nyFhvpDacgw0 zUslZPP81dx!8`XMq%U+`x$eX7`0m|&-@rb~=~XdFce*!Df|$R{lF+&`5y<3&w|C3r zY1ihv(>tH@$V{jTcVi3;ifP;>t9>NAMVZF8eMxm?uIKB zsGnJT=Hs~XjqKUU3&zh`!R2Nu{jyqa0#L^*NA1t1JJF|$Y)<9|RsAT$$WbL*y~%%F z^>&=@dAC;z{~5<5FB<(eu6FBp$h_aYkcXGP*-<^k-GIjXuTX+O{R#K2r(^T|*m*^l zST-deaF^b?V<&U@VqcmppTM2HC?wg`1;)~#42CwF_UkMCWBPa&HF-Fm6jXDV`Dcg9 ze_03<%w$wlRS;E*s-UWXpu`kd3b8~%ilT_3F;)tS!B#9-s)(uzt01DR6c{Kd#8DV5 z7^(uu5k&-8D2R%pD1xe^Ac`V{1rZccf+`@aSSX7XVu~Xb79gk~qNv3d2&onfSfZ%0 z7>KG11qF%-f{H8^SgI^VP*hlqR7j$XRxtrWAc&%E-6AnS&Nz`m=U~2nQ24`XIzGLrr*OI(}+hJ|s{w#S#a6W~=7T-YFkrDe@W$}349pdR1 z4bY@eCPR7hM z^HXtjpnl?~^q0Fe!epT-sTI5kjkRcs7Y}r^8}K3)$r{)QTy^2HhJH&?=b5c*-u~OE zj2tNu0@WWN$bk-DzTTC(-7C$_TBn~SZQY2XUJ%7x`;zJc_~emH^ZG(%eUPnpZ9aX# zRPiVC8~tpH0P}4I2!^DIEhegWfduHQos&&Zn#paj+m9D^sAfyw4$k*CW9%~={=+7Q zRxfV~F=R;5C9GUh_I)**r26k91O|@pJ;6|b{LinBK;t_K>;oOT0N~E+htBl5Z!PZ_ zZ5QMJe>|y6w5^3x=ZAa6#4$%&crrY;{0ycJ_oq*o?EwF5w(7LHZMv;I7Hd?#qnX*1 zzlbZ6x&X;j=vfI(R`GZ5`y;YzL2pr%9yD}#NC(5MM-a&i0OE=^Wf;Qv?DU@Hxh2N% zfW#@Z;?RLLjw`;lo-*GB;IN|ZLhEpIaFy6R3P8GRo zsmC<#DwypCnL1YB>ArVe)n`P;Q0r?y#c%HUki-Rk`!ZsB(5cWR%&?#<7f)RMK0@!j z{^N}?iiV>;+&)4EQBI~$%pI3YRpMf$J2hTnMtS~V~Ouz$yGG0V^a}U5}r&8P> zrU}F1o4luEBW+(vky+~Y$EAnXpt;6U$6;oMZ$bt2#RS6$g8OuOZsqr_xMZ0c)qPjt zk+x%5cvh>W$5}7O*hA$^M!$O!43^VuG`m+cbDWh7HBXwxM|}l*jGm-s#$TR6Br>2- z72yw=J1X^p>NS$w^)e5(_$STlT?+1};`hG{9yia505Bn`0eP=E!vM0^pBFwgwQ*{# z*XP#et%^e{bf3shX7Ali1mAYvrp3Sz+uRwFAXDZ%uA78|&AL=oK6M?S-LkS{NE-Jp z@D!g5#k%+R+w-sdmWzQi-m)AGyZoSky7^z|UetdM2^Q)`r(ewNKVCmZoVDV%P920& z>^~*gb!DjHs{e~?fQQ+2GR*qMIf`7=jl$mF6{Cj2v+EwC_wH{E(LLK;Af|@{{)v-F z%!E<Ix~rB5-mdm<%4-*eww)o&Iy^1`_d zzN2r(RYe$%EfwXT&5c!#Yn^vZ$k0Fp&_F<68B__G)|iwqkq`C#DYGJWIOCNHtux%F z=(uHr#AMK8Qr^HzCR}ZrHYQAl3P|%Vscnv15x9rz&OK8ns&tsDW0zLMDXijdR@yiM z2+uLxd$|4L|LZ>%t$+)4`p&}%D|`br+U!}K9nJ$Z>z5C&_0tO{9%OIpW@Q!MZ$C*p z|4V?=1EcV4k{hULzZ=66kU*d5;9F}XA|#Yp+jgF@rrJFE=(j(7AKguOf2q`GTVMCj zG4BZF8FNkblp|MQmdl?m(KE(l3GMX#Dwj(y7E9%q&N1emGYMko;?K*kQ?hp{%6RT7 z@TNv{jb#t_c5nTc=Zp@%Pi^}4dkofi3CX%F9A2JYyTi-S$eGX>dNCd;!V$_+e#;lN zv0sCOamrWY8mHvzt2(npIvKtHh8Fn39h1zhHN8r>t8H0yKTX0EmcR0Aa6WrY` z!8N!$2X}XOmtY~dOVE#d@1M86*{bQ;o$c9~n(C>o>Zkjen73lN|58x`B2Wugb7+zY zOAaec`zIDQM@Q#U3&BYaT*`8>k=Sr5;B8I@PmZ2w+S_bSgjJgFRF3`FP+?|7SXwu+ z(2M-TP1iYY>%KKfDBn1U=}4wr{my z4KE#35U(<<6Uv<%$6=AH(;gU92p$=6{zn_yVBRG`5nFfO#-Y* zVT<{tfM3_!#pS^4lRxqB{#PXIt@+q$q1Ac?vMfQxWb^S93U4@mMr7Tvg>sGaQ0)QB z#SuEJma!^%@@xcr|LA1V#Rj{Dq&;YNutv2d-L_m`J{H?4uqiVu4y%f5`J8v3d(~-i zkbT25Gn>ziWwWtbEwv=Sik(GoL;uqiI2pTCS2B*R!B8Ob8PL-5gR(j}tdTM52WPc% zY|2U&BVh}6M-qN>R95Javiv54{aS2uUIJ)>E*iuPMd-rOxX3=@@||T%1KFX(SbfFe zu-!`R)?e-u%8vmF!Lp61HDxr4&ridIggopl!-bzB9%IQxShRen{hPO)>`rz<))*oh zOcB^dj=@#g!@zfMq&L;0kUB~eLdFFPJ9#n*IM483eCA6&P2X~vZr!$t!+%uu5AG`h z5;SvniCZIvrx>hvM5U$4tf^Rl+gg*C0802aufN6i1?}~#_aVM-RV;ij+-Q@lZ}+Im zES~t?Ps*M-2)mmwM0M7yN`;_FZmX*CegtyOb<%Cg53UU2d#Il_b8_D@1kP8)u&PM$ zH6{)R3Q}=cRyv`lJ zNqTE|^p%z^^ZXu052Xv8Hg=sUQkIk`WrJC~hzmY~s^{$tV;vJ1<{${mx$nw9wJd6k z^MC@6Z`wQ&Fj&g_rK}&z)a`>DJsmqVU)mb9b`!^xR*T!?(qwPzZNW$};TTx1(vu_v zkU`U{|M<4O-8VHnzAE2KEDIcH6N;IM*UMz3rm(j^@yLu;+udMO~oI1f{vD;5@=vU8^O6`=1b$kXW;2Zi#oM zVTZe^=Mqsvwrt~QX8tTJ&le@gb4o&ckam@a-r8Al-0x;&OkFkQ4vPL48eoap#UDkU z%UwpXdQ+#JM=S>qiTseEJ9WKMG4*3$;-Vw|fe<2(UH2E8oMIYN8u1I>3T_}h)>}13xxuoaEYs)W) z1De{9)-*TJYQNDFAe*u&De(#rqJS85WED*4(Vq}FDs2b}2pDxxAR{_9mAG;=lPN_a zoA*0Gak5!72K?yfuY3Wt36cf_eF&R{Fyt3ln5H#|ll`zj4Ka37q2gB^&p`=L%ekO3 zTj_y6yC{y|zc;r?VFM$bi`MG*XH za;sl;t&BfX+r*kg&v;S&2nDm$7ay1Q?teF zy`1r!qmdr32l;Wu=m#j-P-W=g(I6NWWAj72C;L#6^>=e!IG8v;G2P@!QS(M^_1}S7)&(zjHoyENK^(7 z*pc)$EDQ|T(Mq-ACuBHLX7V$c=gn`9mZhtLUzg)PngtHDN+DdcJ0LevHsV=O?dDA# z%|^gXe=ENe^8Uq3H%IiFS*r6=gfD5gBi~yS9u^;iex<*3yT__~;J`!JcOrvI2+BR~ zyQk-W$$Br?q@oqcINlw%;aopJF1l==+P=OzX8e8+mM`CSjze;IK!Y?|>ExUwQmWN^ z>uh-|T)!F0=@_Pxz#T1&997r@$8H>z)5<@l;7;L50T=mOCA3RmLqLk|@5@7(SQ}>X zYzocqS^_wB=1?%itPAcxz*avHq58*Py^TZd<$)JCM`lv=kgyy5A*5YJNRxZsUcH6!IV= z_{C<@h7~OGTWlT{s+79sw@z};-t>4-SDPj>v6{Ut#4qe7$ZaETNh_tp)uIMeeb@@O z1uV^GlY5f_bz3t>Q+G6<<$i*F;4IlrJdr%_n;SRh8`8sclTU~lHxbkqJiN-g(L(I( zRYhWw?7r?MdDGaeM{WQ*^iFE1nwfW1n*wG{f1G~hbrTZE9CXMXOfgmJ8)fX2(W>{r zAJ7p3o|;?Smusm(WWHpTw>N+l!ah%2A$|`yXX+G>pThD$4Et#f*R>zy7qHAezHGtR&_q&rRs@oW{C4e5njo*)q=|z=)jf~3|#x^Inl3Hcq`tlYuCU07Uwl&fJR=Qn7+jS-Wj6o zRpBBqI-;ru>Zu@lb4Z*^KeL#HuPlDkNIaNKv>5sekP1>eq%E=k zGqzNO+GZO0CJ&W3B&lKAX^YJ$cG^UnoGD|En^V8lQs&+<^`WlQ;yB@Z(==$eS%C`l zv0)<-9_v5dtM6_Tk+M+9mX2cOcZaRU1J@(W^^Y|Yl!IpZq#jRtWvkrHj z3DesGozP4QE~Eui4ZNLf-RcL2L^5II(5~Gc^Y2}1MJ{+5w&88_%{}6$cdqJy9Cqky zXW~*~`)!ne2~%KmQnQR_ZTK#!7@HNSe`Kkz_-%wA=3m6VXX95`N#Xzt&X4B)Iv_F_ znhwC$8|L3ieEdGnMfTaX&{Ed~rosv}-ubu0egvOnw(Z-0Khmx>6J^K{5n@Hgg+B11Cf2P@|_6c=x*6|V( zRL_!8p4&*ISqotNqTZ#*S!XqZnT5W)&9>UyLF3qPX${?84CyPp!`Gy!N4rJC(3X98 z<1{o0tZ4Fu@S=5LGj_rFrKe^Oy+?f>+{Hr7#XYj~y)pyqNmEl>wrk*OiO24egIQ$s zHf_ZVa+-3erTLkZ;JA9a7YiNU5zDvJKnPr#9^3p=&TILBsBZYlUyWWP-w>2tw4~YC zmC`6YrbL-Naoqpq>}<1Hz)#5CtBGo}t3X!PbzU0B60j!Zsx`z{xcE7Ba(O3& zp50vF3Rh^GncdzrKSEKC3T+ShK-p21r=gS5I&=Li(YvJ%Qow3F{@=X0GZM8?1pWYudo>eT*k=P#&RFaZ_}ixa+0&n^_?A8xHF!8lIWMesVK(Yeub=yo;*1-qCY#NA>_sv6es*X*CT1VR%RX;Z-2b;Y@6qbeHjIC z>w_Pq3H^+egy!=0oMlTnC!0dVQqL@cF-w(MJF=erHRY!dMKS~l=nWX5#5bFAT-!4s z;EuQY{X3UCE}L(eg{!Y%t*^WHKh%j8tdh88Klt=eX>)X|ZDCSsF zfLLeJ8h@T*dp7)0w4+)JJYJ)9kmVBC2>n2+$fh9ild*N_MPJa1#6pp{ZFCP0Dq>&hK4m>IGT+ zho!LaRWnyNo+^2ZH1p(f8EgHCb`vN@C{i_ii+`;P($P{pqSQ*x>F8zAgCMReQXW(* zJ4akzWDQ%VXlrW|$zh(e%jU?)_~mUTqA$FuQw1H(=iIljSOz=kRVW$lhl!dj`^$w> z%*_G*F>h7AE%1}KU;Hp!_$skZ1aVl;_mtT)GBQRb@$qKa&^Ts6{FsJvZpl<_)8m>k z?JK8MOr1Fh1#gGN^##~jeVkjW`2mFT>L3XkPQ1v}Fyl7?7A~zqZ2Zg3ZxfqDICJ&! zrk{DJnyOTqM4Qk-<)i!k8DXGEB^U-B>Rm!T-jRn-v z8`6Vu7?IRfI=Z5<%?YN)_BJtc8d}x(AP_oCK?t@9qt0B6xQZ;fuFV{}QJ9E{&hj!> zeX*`x490rC4s)G42%3=*(XI#!J+|E5+Nh!_8ao9fA}0a?A)}?jq-%;+NXJ|VVxp9c z=58*hW6QUfEmK#KZC1rv9@bxe3m8iJ{r=JXx4ZQ6#H-n_N2s+tvQ7me? z0M@ffx8N9E!{7GM^Z828C2G3zEYf{>%x8!@+2=w)?~De(C-=Wz0iH^*CVavq`S&yW_=_#EvRBX=Ejgsc?#od7rkr=>7vIDV7@XibKV{uDCs;8b9L6qY)xNVFM1RjGC!)W+`RH=IqERxjf(@fX zbWv4N{iR5zT;o+gh1$4w$`kz#5rpeh{?${uNoN6D0Af_jvCDf89gW-RpiRxJKv5RQasA(f#Eq(z20MY>A z&x;H|4hRmxb(Y{&j{i>wZ<|upu|>#ZRPJrv5*>TQ|Is^v`||++2nT#z1o+pqcUQhV z+G(Mu^Q1CTlA@@4@LdH4j#fLYi$0)o%) zem;RhgQAp-RX`FG6SD^3b8uRb&CcbQglED^N@gI%0gRC{U}G~O@;CtiBWT!60DuF4 z3=#jSY6Y0%q8fwE5E5RnK@};x=OoF@DY0Sa{HE$1o9P|MDMS-j1S?4pR3Z%E#Q%>X zz-;aWaHCM7wurQ(peAhvfD(oc1Q6hteRh40{!QHqBJZ;a;6(ncAPN_eglMGa7%2wA zq85Kh>IMCxutp)O6z4DIr_Qi|Pr>dY@G&(^qJQ!gH?fMZU^iMM@XcV>g0bbXy=FrM zXwk1+&rE#hAXcx>eqPY$LQ2(g!8D(cte)GfY*4?vswyxyke2n?gw%wvp34-9sm4OB z8tzc@26p|+NA*X%7)BUP)D%@+bfmIg*tyk_kXe7+yGtJQyGfz<>_Q z!wZVUO9xQFi(;U~vq6wY?+X!~KYWsDa&p>;_pu*>Zs{}=POhq4l0Y@f=v|qMXcy|@ z8zlKJ>`=-1uu0;91!sDBXhV;J{o0XlY_-U$k6&{6Z1@?>ZBhHue7Zu_v8^gdS`&Aq zvt&58K}P(uI(eiaWm8{7Nj(_QoorqQYef6;Xu}l_)#a<#iVj%!FkP;04e|qGkvqzO zlLKthOA2oUl2}hwIYCw#7Ibgx*EkHOzwu3wfFw<-SRr9gHGSqNNA5N#>|+~8)N*izud(<8$V;q;t~I zU(j70X6<#R$C%oFYRCxN5;3@!cp>EVmb=k~KJy2fnLUjaE=hGMk2CNA-5hgf>HZW6 zKAl5q2+<&*5;CI0xYJzCanWQY1glEC>q~t6&(i*5N+Oe>fyqP>{1yzBe}=&Xd;iDM zpyY-k0F)mAAOByu2mQCW{ZD+>MsfjuaGzTW0Kl})G=O)$0v=adKX-T^KXAzy05wh~ zy0L@XX#g|@LS1I`8?s-97`j3}!c{-6UH3gk`0W_2#7}hZbyoXyfA#qeAWld0xdeD0 zm}HJu6sw)8s7_djqkkG506^;HNaVcxxN%IV@PKPE)nxGxoS;}~C!}520-8UUY3blE z2m+`EqUvB78J8D8n)NEchR6$J0@>irj5)K^(DAu5v*gtzOXJuJmGNod7huacXK%8s zIl^tcklDoF)Q0mGL?9pmnE=Viu_QD#o1e7hC-yR3YKs8t=Y-GjMZkI{6xr;km3L00 zy}V?^f6NzP<1ay#KrL8Wo_|8%Uj`eifES`bU0Fxj+j&s2ZD43I^ek&>KPm`%6DM>A)w6GXH?_DTVu4Gmk zN499TT3Y5Kol~+PeV6GipIhN0O(6qm1{+F4DV|aO$@Rha`ed~xjL^RNV1al;2|vBKa4O6*{(eUej9*@9$G#i6UPWEZPIj8zbj zbubJJKsqeQc=2bPRMlSQG6Xc6;1t<>YvHm=i($KC2%r{ACJ30XonEZ4a7BgArR|Xjd2+9*~SR9TTVbX(W}A zFww&Ma5@wY=)JOmLu#6*!NoXQpb*%XFFaYTUSMUJ-H!sXIZ<`b{es#4RMhh?I}OF+aL z3WKG?6r}5rgndsQ1*|kc@ zO|`1@dMl1#q-p7mC4rH^C{NWN(NNHzs{p_PDWM1LKp6CP)?{ol7S?&`LB`VT(zu^< z0U&A6ON&fv%RwVESx+F+<5WjCAOV#N09FbJs{LR|cuXQ_cot4>J338a>YA|XFftel z1x8`$c`Uplyh3QeU|k*nzmq-`Fsz-&GzdW8r~iRN%ZNu4l8u0*Oy2s7^Un_xuvV2a zEPa(NRx>AFTX8KKSRPsqIyjnL^t89KAqI{cMwni9XcD$QIj;~406+og5UK}h+t<^jG8b2q;Lsi zah0-32v#W~frvEqG_`4*YChmoQ4*dhBMy%YKax4jBt0t(z=;WrtzyJV?{{8;geU;Z z1n%L`Bdsc%#A2wfXw4seAN<1kBaK}vZwO$LmLV$~l(!NVM{g_*F@Yot4JE;bgN3Cc zO$l9qpMZ>$7leovgvX>NN0^0B5UY$w^<_}}w@56L6<#MpG!h1WDz3IImJwJI5er}x z1Zj6c(2Ol%RE|ZS(ddF5J!BFHfCwK_r%If!0?EntVaXc>CXfXq85Ky=(NiEm_W6_U z+`eq@ygb+zy^+GLZC*SE76Y(0J)J-it%96xvGR{UJiJ^a`6^Y%U9+sucd z<`U1{`;e5mm#l#l=^{?d%7VpYHfKb#;fjV7BP@ET;)Kv$EZm%KD2 zn`Pk9^?Z8m>A-~!;O=D)%3fWX*>h4#3n~8@k{0;>6HdT};YuNi1%>$a^&hiwi@U(n zQ>Q))iU+Q)u3A`aQ&Vka>Co!h?8=@KceA^@yQdGKBGMGY?S#&#iM_lXWlXb)s5G=3 z)D8kg^Hj-7&t)fZGfirzF14mnbXMaz1r|G`I1nEzj8h&7SRk*ez%iB~gA@r2jh_@Z zCI^xa)>SCyg`#VU{7W1sP5xS^a`Sd{f_rb}_!@8|PxleZT>Mdv;16T%@s6$0$_%%v z!ms0S@pb3y+qa8{3#g%h+@o0{Hj_!bL~)M(4mJ%9EtdR0NTJhP9SvG*B_)eud=AB8 z-(zb|S-mz~n9ehNvII7#_~&msGN(<1_nBwie>A`xCXVk$c@4s1rV%fl$*!;1H%0iU zyDx`qEMJ6vPtj=U(yi_y5IS%2acizLZ(8^y0^{zwv{+GSI{)djJ_5bEZ{MJP>3JWDn-I8r!~slIFiD@-o2OyX|#7;|6StHM?@!*ilnO ztZlY>m^(F0{Bf~WJZKNQKt`7EU^w?@();OgbJBTQMdE(|cGoU|=gF58=lRyHxlvVy%BIvJIl|=U zLC%}Cw6uSQw9+SFb?s`Qzz^;c-|wE>52RCVjo1%{VjT|yvn9RwxuU7=kZYsyT}wG_OaBnY$;0TI%ZWICq6R2**Kzy*YGmuI}(VDr)uaRH;11d z-%9j-tSg)4HDUVxNl8n>8| zDa0zHi;wIubdLA^60fzrb$|M7v>6Tu#7_)Pfvq+^O-l6I*x2^GYDa0;vtRe<^3h%& zv2Q&wunL_k!8^(r=0)Y#z(gaN<9E2w5z-M5ss)w7wwM^4n{S;b_l=J5hv*V0zL3GtpT9*vzld^p|5<*NH6ydeV|*&B&QRQ#w_)gTyJBhSV15UI z@=S{`Qty20Q9mN*Td&Pd4}gRaGBxc)7UDBHv!K8LhJhbsCO74OMy@ZJ>6WF4c1j!p zwR4YOv60BK&;wO##{We3D5Pv@8Qs4Z4lIQ3;Hf11gREUBi2l3aT0Shtg|gUW3q|zz zR1DOgXcxWckmOcV^=R$35egcD5Pl9E!K0gpmIO#Bmr-!~S<8k+6JX&0LqnWjnAU^j*nXuZB|0UJ`gF_7jQOScqJ%Zl{G^?FoH#PXc{<)5HCPATN)1dt|4B4nu&Gs@Os1M*bWh1ix{3nXCEf)+^gU<_v;G zFI{qlHOSTVA3IXrPgC_Ki^1mua>xAB3lZ^0_a2C-tJU?%T zB-`?Kv7?wRSB@<`u+n<|qs*w7%laaeaRA1(>rAzc#WCfoa_7QtTZ+vP1`WHie|&pE z7aJ|a=pa-PIiVXWND~!#D9*2^p1lZ4{Z+N$MrY1Uw5L0nj}^!u7~AVqF&ROQ5gumN zY_67pq$*hq;ihcuhJh4R#1iQgz6vutjxSP%ffNZLEk&_$N>d$!qCD>frD-%OR$r%F zGlmC2uPd!m-Q?6~R(`>h;|at}oB!i7aY^TIeV*<2K%Q4(et?4U?AYV*@Z|OT?iDVL z&nQ>0_({e}EP8q_7w->)$@uqBLcdcMW1$hco#=qq!7F^ut|Jq80#wgXgSTz__PuRw zPBnf%R4?JH#FoBg&K0+Xt{un1+8C7$7a4GrlBG%5Dx=E2c7N+hHNih)J$IHb?NvC_ z@RRADwE2gL-@@e_C@NazQ!ZM#4%`=x9j2OyS}Y#WurX=Z@P%hUMw5fYSK%r1#FG{mG`T8jg~lZbpXlpuE|J$%mH}s;rPS zy|kE^dE{LkdHVtwe4V{Pgbf4+;z?eg(BC;?#PAbFEQA3jWYd{Xuj$A50o|Li*PrwRVa zWuNRIJ3YtxMnUasJ@DDvYo?9wiN15jv(lI*iw46OhfzGeLaBQy+}MUz)IC+Sj@bk+ zJ2m8|GVzHhY>E6MA~9yUU>Ju%`3^be*p2tRKT)UZhQ7A9!$4>o+r@aHsVl6GG1qCF zWc{y)ed0f|GZ|0_Q>q^&y<% z)@G_7hY{Fbz!3r^s)$5`py2{HH+z=(hK<6n7~-LY=3lQbjOhPXHARm&_v7=|3xH7T zv(Dgi0<(0O8Qf`S3Uj-f{8#?A{ z`n4soCc1Mlrb8OSyOlZ|xu?q?Z2aZgs+;wQPrJ&DjZ@SWe7G%!Z!N=0vfbG+Q@0-Q zSfw)WR`^e6Tup9MBP3Sras3?p=5N;*eX?6yyeC+(38nQd(i?o(o7*LI9_9QoYde}; zSLBF<3avM!1{gGW<+8G?N1A0g7=L_Kvswuk(>NJbS_rS)queS!I*b>qAn?FA)-*?` zyh^qozZJN9{r2nUnCRD${0p+S;)UxE*^(Vrxx&+DQ}Dv0A1lx1m5|}LTkzp$F4~pi z=gyfqrTOhUJ9oeC8C&p$PW?A2@QHtAcW!M+)7e9vo3qbX3qzf$iB@K#fe_?ZJWY{R zV-4(VeiytcQy$(9!_w79*GAYNAN}fY9!=|yJ~}fY*~|Fk#4mh_G8sh9TB+J*Y1o~O z%mxd)HrC(W7&V+5?D}t}dPK8zxC+X3vUMt|Ce)5*WWF>OL|09)}Z{ z=TvUEzY|&OF)RLZMCX%l=-AgCJft6=H{*~0Tjx(2e&z)F*-u3;0_Nkkb38YiW}-+78?Q|f%D;| zaXGYmTOM|UWc7O z#&oBo&XxB2i%O<~aL9PyMGv$lV7h`=b?nro6%&H=eC}G3Hr6@9&7_mxz+*}%Ylb>b zJPq9ECz8I17o;&SwHj7vVhhIbVyO^9RsK^W4W+aZ5yskHqSNIh4*H1<}!&7Mw5 z678YsbU#rmx2TRGVRCV?-)?bRvHAuBNwuKxZD68&>aRG%{s=c=PXvy9n&Woof)vbb zZxFGz?Mf|i3=XwTk#hh2#@q-o?9LJIJDt}Z-SyqHM|I8kIr@F8pB_DY=M;S0~5Dz%^bp=y2Sln^HjhCW6YXy z$ioKrkDi?!U8IOG&=NYy4J;}wq-3cUw-%B@HiNTwW3Hvel{uQIS9Va|mu&Nen@QzL z1tv^89D497X0KqYg2sa2t7n2bMvU! z{EUz;BphwbjL;?1F5{F?)6~OygJl2y&QYQqJZ3)!Tcij!j0jbI7?px(vTVih>3kye z)z(U``E~w${4>(E#()4q{b~`0_j^tCQ4Xz-L^T6vmX(QU_Wb6ozt~aBu%%ciuY?%s ztN>?RL-Q>Ep_)T;)i)8ss|+}`hI7SYhAaJ*8q=FePNp)mMXk$c(hS?38&*%q3aZCg zws(DfS`e=%8#Ee=1VzEh7uD(`i{YpX^RuT-Q*TXp`N)JIUyBj8ON_h>zTm$^7{ng!k6@SXnlIOtv zx#{$;d1TF+Jo(=C`oTExn!}?Tb@;T+{is_#d*act(Wq}+Mp7uU&RM2XESU_V5ViTj z@BM>^uO-XACCBTyR{y&5hx(TBN?Y*Ze0T9H0z(*PA|I1RrNvO>*;*nW)sM*pgD#!7 zS6pI)06A8}>TkWrZY{Svb0<1GCzm58BL>>0S+x#t6Ib)4vf1L~@Crg7Um{|@ppZ!o zIUIIGea78aB#xI=G#Ujx<_0%qkaf6+O?a3@S8HDyFHZ*D(PWSmVV+Nby>>k zCLE3riBx%;qvKYm$VA?aQ;-m~^-0KZC}Rt|PoXpDV4PaiNKZHc_a&kJmPk|xH%}s& z;(6QlWDZlrS->)>q?$mo8;Q{Noo*dH`F&0$ZRVNmn=$}!&bKMHm>cCazSMlx^t4p* zCdmzsiw8F*lrw24fUO!oxofgaRW)Qs)l=hCZGl?cakki!+(VJE1l-ILN!aLx_An~3 zD%IGrG7>Q+!DU^dXj?B57_G0&xFnUf0T?fPN%c^onx39 z7Zj)((}569o3A0hr4vFtMyy= zSvp^SetnkKMx?2)v^hUNbI>gJKq1cg1{IW@XgAl3%WBY_V?i_&v@9AeL**=EA;2L; zoIyVp0`tt(z%0d-IAxRdZ__&kQ-*5Vr69$#Qd7sZ=txcw{m04D+D@>~3;!P$aRG%# zS95MhFW^EYjnS|RrC{VB=y-+OH(J#pSzR)#FTl7wC@!sf@zCSt z98A?)NVQ~P$jUksL?Im-EIpEi|IJ+nUn>zi_y&%*)5M7iN5m>gAKRr=(IKo*#Z=1A zYon)QV`hwZmMZp__Hdr`)5_d+oBtX4oKVsaA3w@ltxV-k5UT6fka==3v^%J|h7hx=LLjVDXVu)#}o&=eP2WnQHjee04`^eZqDFw~;#P~76M)pmk5;T}RX zuPhmjA48|9fIt3yp}P5JQ&nZmemICyrAGIcyh!5ce4O*<0g!hyCRQ(e zRb67tc^+Df=1ay928;96ybiRVe^yN>3`^RAtvWVFX)WSA`|;gJ%=*IBC5K-kG6{%u3O90wPwZyrNuX~XFXqx#|azB<+=nMQK`-$Sxj7+rr9 zd?jC&e(Hcz{wvrv`?qv2wK~&|m_1CNZ8!LGb`LE!)EEyfR$4s#eubSJ5H@QHFhb0o zI`-c*|JCRc3c=t1z31Si|?h&=ok+kBy7rcFh^ z4d;aXw0UagZRg3hKi->c$ISMUu0A_sNZ zQU!uoLX9z!I0);)$6M&CYJK#=Dc@Y z2_E!t7^+rS*3TAN*0ON@qwTgr>^8h9=1^8y!@c;h;WlDxG{TkjD!7U7B$v1XX{&!< z>3)!^U9H>Xu-Tx~;$W+BzR~2+m#Z}rPlT&3KxagitT-;tCiCt zE&O$HBZ%<4T1Omfp=v2Uclb|lqS^Pc1W5AUF(Y!RoMbxJ#=jH2~65fSo=Fsa`@(+>_sst(p?!5G~`Hkrw${~D)rZq%C;(MD_a zuV`2q*1mkqnK$qW$1J+96HYPy=@+3{42pt9n5wF@3&QZNXwhBZ$-bRuW(88y~COI>u0xEw1l92_Q3G5Kv+07Sf1Q}``hQV zvUKQyNd^@;udN!g-`3K%3Lfz9nia-Pm3W!Y-~E*Y*}Df)zipT1Eu8!Gq@XW6;|{$O zbF+6?TDs4W2(fOxcK+M#@Nla+EvqomgJh;aXnucuqJRC#<(B@htg)qF=NI!sheOlS z9G0SVema~DnL9)E-wNMd@xK+G48(tdUD)!%Sfe8H(CAyiQ60)+eAx0qp9}zM?!kPc z1$J0y(-LazDvrd>E0N2~FNT=qiSv<0ov z`=|by!EaOKb3YqyICCq4g!_ABNNqs{{rVJ1G;ft?dM89^u0x+r*t}NM<&xEJG})^> zEgKwPuZWTQBaV`4Ti0$eLnfbo{muDrHeJ}ub}ewEpKZjvRP;?}n;c8BUDKk1fOhUp zU{oSD!LR1YdsMuX;vo~(>v7sy2G$|tsAm1-mrcphMrF`$tjD8idit;^=mj0xZkpvT ztTNq1(mB`)OssZnyuVd!z29}NJgfg}Y(t937d8GEqkh(P-}v<5X!Y2XU(9Asjig3x z#!6qYLh}KA8H{MJ!KQP0CgT*r(x3N1S%QM7l?wb#xDgkAj zUv1efv$Igigd@?>h4Wzejuz|{9L`x*=KMPAQ?$n8s*k7{ClNLXey_YurwNRlxbO>n zRg9n{M;9I%g~nhl1pxXHl*K88p3`h;nuNtOP70Wtr`0A#NKR%@?wjm$EEhx+;OgwhnC)Mf{k64ey8-{>%LLc}(bRQF=mXay zLVT^qM;(2Ol#}|WS{5`yqae^F$S}C^f>W;kW+hRcqS(3*ZSZi<(l~->jOfq&ZewyQ z%5w;zXTDfr()SbP#(gFo_rvOTQRh-_C%j>{gpL-|in3UkJT^9B=q9$OHv`@+=H&pc z%i00~dluZH4qq=-M+2g}uJVh6XQ!5$T71&P%yr4MtLuj&Tx}at?(SF4{S*%U7tI+7 z{x}A}30))%lzT1zQ)mJW^a(l~QulekmA6~jx@32_P1c$tR+bjyNJOlVT5g)0e%iUk zkx*VobQ@XCX5)TtU%IQvm>{lA_^cgNDRGza52806*NKG=WS+Z+hNB-}muKssCW6DF zfDlV0WNA>fU>UAEH2@;+>i(enh~gQc{MSdNa;CbH+eVF;@f=oycgLK0V)5=N=K(_^ zPjCJek9Z;|b?gg46-2c7%M>ag6_pt(x{rw5$Q*_khkCq+-L78;m=~WIMkZ}j1~Xpm zcv&Xuyyijz*LWG9@faSB7pNMT3}tm(8@C7kd$t35e>?Jp-F~;0!>;5jIdZ^F^=BngwuR+AleE@*;N0^*OVT-PRLe*|_nGNyA1_a)!x=RKWGbWlVsCwjbtkjl5W3 zRGh!_!sCS^gEk8kCw}l&a$F6~rf2kw!1d?)wNSP{RG=>B1lnx(#xw z32cQ4Hz5SVcE(-aO~;6w9ayht9y^R~KXnz+goLe_$=0P^k%Q~9$I*>oS}J*V_)!$_ z7J4I)y`Crx32N$)ekPoM#~{YY(90bcQ1?46l~~pKu)%eC?Y?It>$t2&Zg+$wTFG=p zgOD7g35CYRU!44_yi6KTI3CGFD>U0!1-{+_oesk#izZ$4ds4F&Fa&`Xr6T%@l#Vce z5*ORtc;Uxwn7d;R>y`6_cGtaSr3}ZNX@j#PWJf<+J=Q2!B0DgdJush=WQB+u6gH<7 zj@PY9Jv(65;7o|Uz3#5D$Zs9@U6Jx9cC%^*jfzzw;Yr|+nBd&dC7bVkN_?)Z2cm;%I=@+wfOD?u;h6gqT^nU3;VAJ&x4cfQ|9A()s(4LRD{C9 z*h`a%kfKcR1ZdRj^BCx-vvd!SKLRxMZJ>vlfTBvLm-eC}k<`iG>i&@;!~l}(K2dPC z0vcm^^ue#ITjFau248=<+p7@FF$3}O>DJ>aLQ~-fLqpy9oMVO8;6sBk!r9@6*-a!l zBt>l;SoMW2<8o+>jKNT7vXFFm_N5{2&(~?GN!7CmTL3z~&tz(JQRJ9^)zIQXmt#~c zdTBz9x$rruY35eXp0`Q=UteDt6i3jly^AisXz(oV!8IX)#WlFQyDY&2K^G@TaCdii zcY+0XcY*~E;p4sc{=bV4sDVkgRs-X}%<;7cmbrfz^ z@BlOs(!P0e4UjuW&g(Sw0H~jZrTIbLP+b;v!5IOGoc64-k#;DJGr7q>B5PGdE#i$? zlZPeoWQoN9xg7GdK`}9rwB67iQ71%A#y13OP6c{l*6kN7J|jNM>LYi&G8eRhE1WR# zUCKw{t+S#4@1wGmgYCcWdyMWbzBabyW~1RB+UHrpkqq#sN>wK`4`mz#wMdZc57xML zqSDfmq6u*uGyoNP7i0Rx{m$zO*QbqP#^@cpQ4=-714Kq{gkaQ zSgR{YG}S_9^*BEe65?-SF|aHzZyY$~ z)@^oVzt@2)-sQ6I8YBFI3yivs`p=b&ZPo_{Yk%t4wQ(-eY7#p>dw zr;n?!RR`?DN_(dY9%XdmCySt4+%dDqb*BxmNNZ@l0t{bwjIsE4QYad?P>Pn?SlnP0 zE{v0&f1UhTMChqdq~GId`{hUx{X?^v6aSk#TxleN7^7bM5UC=CO?xa)m_auWcE3U^ zDeTN!f>VSqy+wNoBu*=3epGrbs59LKVl-Mey4o8(^1Dj`47mbE6`RGb zl(1{(Y1?73BQ^zMp$QD%baR=EsC zCR>}>(UoDN7?RevE5d^PaN*)T_gd0zcdFm(`aAqBF{F_QOo0p`y&}^535kVM! zocXHL>Bf?WJ+5O_{UF$A3%UE9p}{6jGKgiIN2s1h0gXx&@NY@Dkrs%D=Z zjSZuTf%+Nd@*XNPOA#pISA$*V3*Qa0osQ1#4)NAw@w$lng-Wwm4DJ8hJ8(vfgmz(7 z;dkJ-uL{r2RUJ-l?HrHCNZFi)5lc%jisw*ALi%%y1M(n};f$d{adCddSmsSUzg&`7 ze=?1?$T>0=7BEG~QIFE=YM?{a;p96L*7|rw5tSZ!lc+w!QsL zrrtqQ$z=qEPgzM|tu9%HA>P_QD0u7)xb9ZAx=YY*8x^Z*6p20lgl4?OXJIvu8-+`o zg`v7O<*b=_^}(>O-T7RMO^zQX+G<`3wnf|0LP&7JWHZMTq|rQ zQ$e(Bn8&Gs(S4Si=JBsT`eJjQX9+!hb-UBXQ2lpL8~LAS{_68k;$l<>hrecmq=V+z zn3Zq^%Qc$mhDfBp}E_5k6q2kfa45X3$Ue|9vR$13g^vc=_{q!*zj9bVkHj+Xr@Bz^RP#W8?NzXa5x^(7!f?|ck& z)b$Oa5!JuXgzny*C#2l1JPyLFapIz%vLHUY@-J20rD-8 z)9@W?AcPL6n0P>N_WOt^0lZ~vBN?dp^tbkQ=w#q_@iVOJo6Tp}EX>c|H;J4>tREHb z=h7?lIi4f5P)sgFROGqJbUOFH**O@FDYHHy|9D+$UaSPc5B*z?^^lyP2I5#kMXeWW5)OAxyoe;z$2}Z*WQuz+PzE?c{2L36S zuEy=+OMQc=n|+jW#QUT_&-Yv0csb)22yB-quonp-m`Uv5t^nJ>t2Ho6)oEzU2MI`{ z2Ex)c_HH>%k}E)xBJljudkF=@n9sC9G@ycmkcAp&lB_KeL)g8{?-7Lzi7P*j2pYT( zy{Jdqzg`_nMA64F_JHPw@@coh)#dzcaU>-E}eMSvqgO4w3>~Au{Sm#rS=1j zfIp0S-d#eO1#bOeu^OACTz*8=)gmU=sT)08T>P)mCssV3ZNfLDD2Dnq=AuGN+AuYA z0}im;)6+Bk_05tj3Dl6Bb0izO6CBfJ1A~EYzVpd|>^(n8gAc)#yw;m7V>fYrA z`(*?naS(gk?l`yhfRD{~RdG)YnhiID8W9wIJJ@ z-#WS4E6vK8IB6ml6)iZrS3ezKMK1GsAG}woQKt%L_NBQRWn<#k&S?}E^X}xw%iOlq zbakUXApCj81XT;SFyERQkV#Pm)PLLyHWG{_POfjo3rVIPe?ly zb` zYk7IgvcYRRi&`-H_Svx|iS1l>DP*2qwM~!eyXond4UxmWy#$>=%A^4Omn$j$gWFoN z$)XHcIr<~v-lOnq46bbu;_kn|14c^I5kYm&fWol5h__AG=_?Y45TE&L$sai?9bk+p z{~4oTx;G+0keUNZ!+0|QEo-6R3;Y}Sfu(r&u}CcX%0+JXoQ={?i*5R_8-n!E0}r(T zSjh{)kIO;zpGb<*7q3VY1BIw?23+CBg`nu_=YCjZhqp4EX6|@sq2Oa&5QaqVDfr}& zK+Ghtlc8KxmLpq4D?=}(3?_&CRgQARLZAW8pICJ9-4>}CdWusQW^xu;{@fz!YTnj% zb9h%@9=fgrBIzU+H`6sK29 zxbd!jBJQidms~y31>uO@FjD9gqd8aHEGw&;a|=kOuK0@-8B2XS zla0@7;-{g6u?QVtinOPl(K;oY;MclpORqdY^zYhm!j^nJ5&Bd4WbtCRgK_2Rk^Ipx zULM0;^B&<}%(D_VH)Dzj{5G$Vq8SUMqvSrNv{1U)H4L#C^>f;-EFGmku`T?iV;$Z< zZ>=vlSCO|g|45=U;j?~{Reek*d(DUU_j8g%@+j;><%V4j8ohA7$kR=eYlDqOJ%5}g zIX<((UBk~!trp)U|LDWTRiFANm$RgKX(m-8X4k5&$8RbZKA92-o-HbdH{5;Z=QCNK zS@SNEn4}JKbR)|eEqxlgk$o%0-~PzKS5Vr@VkhS%LMPM_ca$IqWiOrPPddoxL9)s>jAX1$8c?4&K3X@NBmjL<1FK3+E9}k0awl<9$nVU4PppWoxD?#^AYv{WN`Di3UCmlM`m!)+;ki+D&5N| zC~B|bMTe%6qeX2nf~z9-BPJ2?w(mv1=bp)lU0Bhq4d^mqEz$#{@}Gexc9gnDOV6>5ok_Pe(V; z8=-CJA6fV~bMrW!k&RtZRB~*7#EGWMxza7Be4X7nX6bPDFmHRxIO^Hm76T8w#SbuC z?`8Pbbu0g97(P3ms#N!EHDn3VLX7V} zrDdqO(9Rs1P0)f)oZ=p2^X__|;YJQhSIXOP5jTjB>M5nJgn4=ldJcdC8vd;J>Z7X z>bsE7`SoOa$l^FAlP(BG%B-L)G-!|0L(C@=y-{)8LBw6L?H7)wFaG&b7NEQ2O2IWm z9sp+D8%6qcj58a1Z>q2o9O5P?q7r+h&qH5@wV&1vsz2;T%cAalgVIYmb{yfzU%nzy zpQG1RQ-Yn<7N;;(Z6HaQ>1!3|pX3~wFcRqw>9<}9mwh6(XGwy?!o(^)rNmA)nfam+ z#V#P8qMm+U2xwqb=z$kN|5(pwpmijMgvt#);`_k%Y;MVRXI>dD*>*MH^6llC8b+^x z8vc&Qw*jz}b7r!!>Y515P0BAPl2Kgfi1*WFGdpXPA3*r?(p{%1Q*~zb)0Ut33$5Wi z!!ybc-=lh|a8BH9lbo(NNc0XtXDr{Q$KU+Gj&@g!0N^6Q%jA+=C7B;36OZ)WYqknV z9QvBM@87(CBCAaGasU!ZQFy{S067BE%MU?4j;hW<*=#ZOGL7SAI876|>L2=rkV2>- z@{Kgk|1)hi%OYcAUvX8w;>902H%eF6IB=wYIyx=AfxB2=b~E#*PyR=IAyUu!A}<3m zfMt`2BckVHYm!s4Zk$#elN%|I@=gD8%_5Iob<_>Xva*LbnYV@z03X$hxbn+fV`}&@ zo*I$L9T>1^RQZEK5X+C${}e#FuC{N8ipQQC5PX9Whldo-M9l(;75_$l2gt@6|0s#G z9YABUhnpGxYXxAsHwDWu$6Ftt`Kzd?CD4=;TZ8bc0f10?BfM#t>hdYt8~z&8k%L%F zxUL1j+Uhn8=FGwE4!=`~F%scFa_f8a-P}3*co*uv8;A5bg+o8-eBAutj8Dmz|AG@k zo&boSQ2~&khCsHhMOF=bx+$xGcC5(KtzS{Ew?EwcafF;c9L^1$`K4 zQtd{IB6igc&{78qeOcfp?{-F|p zFydCpNRd;^qO=HYkQ}TfWRBitTchR!2nRp-F-1d=50mn@Ar?e%k=0Ndi7=u8jypNU z8cQ%<$jaiN68<_saML^nnBtrfl?sHC>g^#;`T+BLr8j&YOnmR=tqdPmVm36}b9{}wqCmtCSe?%!o zmr*{t8oK7Qaw5%Ps{SsTLqz5?5V<+aiOYf3+)~LT17m!Tf$0(t;?niYx?JJ5I(!NC4bB?%2^Ds>>dhl0JOv}R_NMj~xedB;KY3Z0RqEtdxcTyzbS&~D z^NW|4bZu=T>`R;HwfVH^EV|KOINfPggV6vy?OIMG2%`losgn;kSHN$(*B7S$3kEJ8 z6^sW!UHM-iaKnv_^Nq=km!W?z-~Mg9?7h4^|L5%{R?QUT72F9R#e4-0qvWkGD{lf& za%j|UQv>B=>r<^mr$c{z7Pm4%6q64G-JqmW#xoRK{ei>%rmXX5Xyj*jeo4;$63yq%Bk3`G1E}X$qKmhVsnWaHU0Z7BcR;gAtDfs}vFlsS?$LtlNjN*qV@;c}% zqXHHH3ndk?sF>#!#{4S4Y*MTLlmJqI)qg+S{8#n00Z}9tK^jjUx1?l`TlI!#2Ji=| zzXy?2OseDYVFU{&w(3bWnGA51Q-1;(g#w&l-Vo8MhYhYF!egL6#!T$@*j1G zVj{q7VD@Y4e`^0FD6>3}*SWlo`$`ru{L1$5T4MTV{{sJq-{DmdCH-FSqyW(GserRn z&DuI!g7VtcV7jv3#=T5LtYsgLmgrSo^tOtX+}^NF8?k9!<>{V~?o47hvfJseo6j{j zf~VhlMJ~0PPNy{T&}W_`x~vVP(FEJy|7!EZkc651a)du=)SNTvTV;N zfgMOS!eI8+w1a}>7<+3jaaW7lCZfz2lV3S5V-U=F))6f?N&gk^Esb*gn54Chl)k5aI~Mo28{xSl~74-f~tZ& zZtD?Bqk9THH|%lSfKJpTGW_9uqYph>>8Bbr3S@lNVOy9ps&uZQtcn_kl7Fxwi05=Z z%ppd@bt|u8J&UamEHYTe(a0O~g{ga1Q>iAyrI$xJ1&~zqrY_!+R2KQI%~0-$qeW)4 zogq`jZy+YlJ9ZUCPT-dIzNTeX7Q4Jub?h+_(2qK`eLkkNUF|k4syF*7J;L%ucp`J6 zp?F?RVXgVaK?;7+_OT~j%et|h) zWv8uayVP|c{CftIDTXHf-@*j@r$wcTrX%bbx(eGJb2seIGTxdN(*p%1lJI9r^Wc2YcafUm>;`>8I;qX|G59@;qc#6YRa1vj^-pchH6x z`*)v>)ggXLp@R%ty_B2s<7)jPYvTT8&Z<=3@#6W_KgardCxuH} z)rq%SeZ($Y*f?@;geWpJ5*u4Mf^+_=<~uAqi44x)*Hp*Yn^jw-1Orw~;b{VDrKb5} z^g2p1Eo17^rZx_-eN@|L4l#Ss!OZNKVz!Wh`ijuS`N4?*q(QDlF{#)99S6y!K7Wd% z&i4nv!xY>fu#a5_Ve_c8(`?9UetAWF@lB?jxdCO15qtzO5wLTqFD zv4n966B32rf^wD?LDD)RDMC1(4r+uOx8WumXyS1e%#-aq=NzCklF(RxXCs%CLO}nj zO@cOn>%8kuHvd=fJm&E?>Gntbe)}!&O%<|Ge?6c$Sh0cH^iZu`P@HRAezpf&=0c^= z$jV`rutMw3IP6PnkfZ%~Puu9G&t#j{Cvg2dr$yc<`sq3`lSEUHrDyIEoxD6$&M_-= z8C<$WFrF+C4GD_MLlf_pe)Ur_8)J)(i5as>^K+$Qagh>Ff!^1F#Gvw4YW)rtTn$_i zp}a`mNe21H|5&k_6m#4$mC~&2`B=?3yhWTX>HiH@bHj~?1Q*2)bxqS;bvj*-=_^J& z{wN%;bl8{YUMptkS%}Y_&|HG%=8anW}$+Cda?-9r5lNDmS~hWPCon5#(?}|?=BDWsA#{8-o8v|XukL5V246b0?#kMQ{3LM6qY&_H=IJ)KFX~$UwmsPL8Q* z#qi2TO8|^wML5$ZQnt|JT0QIB|BcZd5wJ7{$un?`n`2e}iY47eW!zS08!VLX=$u-a zti3G^U?n7JCdlR8;Lo`Y`DGecCNfoWRPvd=sA!}*jBnFa_4YFH+ceaIA~(k?g8GTYIpkC+4EvMt$ zA}OkS8tV>e4GF({s6TPMFwgsUW!;xczovYB?Da5Ls>y16oDRi*Ohpug4%DB0y-ngX zkPMU+(EL$gozW`T)B?L^w;yVZ^1JL)`SC<*JJ3GPGT+DM=$Ko3635EnUM7cE@y@QB z&207T7w=l)d}x*5+Iv6PIHW@arym+doVOF z-$=a1U)Rd%R%=Vn(sGQM_+fe~4$6c3%;@S~V|`7Dg+Hu81XEwI)g0N7hNzUReT2Ou z2D*~CWs)roQyk#igCcc_dw@cuM`mCh7m55X814w{D`fgorF?)Y>Y%Mej= z!26^VW17I&i&KFRYpDtl1YR?yd}Q7~I8raprAm{PN=!iC33Ixh1IbLp$3S4RLchy+ z;+e5l#6HYn9-5;cWgf&Nk2uZI29Yt%x_=+`s*1Z>>&%CP*r^tDX4kY~9JaSO;(o$y zNP0nsB|g1^JGoE&E}JrPm0M4gll7VOPG9)Wk8*sY^WtKpTbQQY{F$8jy^Ik!Ahc8q zo+Zs|j9hj;V9{Aa;%lzr@JNIm$Dk%TKPVLvPy<46ZOL$*U(wGjG(IhTtty1KL^v{- zDZ&26hAP+=1(jGkp}L3wjoh2cUqTK_*(U;#AP{+$)m41?S%8e&ucYmY051=W&tn-TezHAV*b~!{Cyk4&gxROd z0aGHRcALjPcdn_A?`1%u0@K3Usw8j^;PMRwglifQz_ zvcBgBp0!vQ0Fp=F6kL;t=Hfe@Xp`pmT#4YC&{`6&@{JdQ2Yt9?4OkWL z!Y;)GAp`Qy3SIytENy8n97d7=y?@Bqt&e?M?7&a~HeYJgpjOEpq0B@m+HJ;d&v&Z* z+vUbeI4tgHAA!_9%XJ_{qf3fCg9%*>{K>zFSEAAO+M2C@v*<=K{c*x_xVHdk#_R!f z;r`rjYHCmMc&(OD^u=}VtUB`GqMu$)@H>_6!Yb?HkXelYm%nQ|HCg^I>uxm+aNt7C zu39EvFw~4C(*yNA6&0k{v^>xf{gZGu1}mZhF~?~nxR_WF_yG?+=LSktET=6QT;<@z zu@EmEyr~h^WEn#c*vo0;C8nw^4wNCl=HLu>>F->85FY%8E*y!8e$Ml0l$q`exw+Zr zEUqH8A&ta%dBLZo<^0PNBXqYKdUN!tCR_UeabAqq;wwnX_=N4 z&WM96t;1w^Z8d^Sa~<%9$MAx`qXq2+$cKC7vnKx8PJKWNNU0w7KyZ#Pv$dx_#fJ@B z}PVG=TPtWN=0J%lbFc-Y{qdQZgOX4U1wFF3)h}aaaFG%m>dh3ZG{qrlAHoCv(848l%x@j!6HFWQ29)&Dq3_5K@oYi z=l)~CVF7MS3RCa)5U{mTmP%M>LA)`t^Kn~wDNq@KO;>L=ZYveM9B0}%cRbS3m^@yk zel-9Bfa*28AGkAFWzBGXoE1usK2Ox+X{VJ4rH!*L&XHha1dv!)&9g2y!Hz5pI^D=6 zOh=OVd_Xi!Fqx9BfR5?QgN4SAKIXeiu)NHR!$D%xye)G6Xe^#xaDW$0v>j&@sE?E} zR}>!tu))g#INeA7H#r-jNpWtuR&Hr=Im6h#NU(468Y^BSX#Ml{7ZFGzAb^;vG&yzX zNvWiPsxijK07c*jBfVcr|0*G~o=LLxdr}>X9)DfC61lOa2blSYoSs#aez8^`qLp?~ ze5%Q`KM{Jh_N1|dNx2pV^1px9dGWzn!Z6dRY(3^Oi>R}-< zw5DgsXCMQsxFCblwgQA+O=0kVJO=;(|2rD|HV5Ev*l&$y93~6a|Fy0^@K~t<0JS+k z03HB{1o%|70f7J#P-OUW9#d0zFaz<5wyhDB55Ftpy+`=SF@w>c7MMx%1Mo;W_u0{9 zo^y%Hu)M2=vox24z90USQ1>Sc9##)e>Y*O_+xbwQHH@cNOC0Ef$2xmT1zzy$QF|P` zO$ad4(IUo zl~b>S@nVL~Hqg6j9G3BPD28S8&(=v$*1EDZH?A@q{FO-4YTN&{3*g73s&e6_`IkI6 zwl7Lizl>R5I)m@SJAJm+B9w-QvcE~#qk=NAO(8B)Bg$_)(;c}Y!_;Rd;d+1f>Lmho zFctqVtEOaXF%b|m9WGe%#?eGMtO}fu&8^6YWi)g~xwOk-5fpA|oE->_riFeI9WRzl z{Bnpul!NS1h$R^@aS&p$`mNV!tCP1@Idv8Enun}n_3{5M#((Dg{}bBOOW|X57CR_2 z8L_)*+mN(`8Y%F#!|VD2ZYMv$-!lBPe2$MXvied>WOPgR^@HUX!PZ08E7gHK$_2=rA2ujc?@58dBSNmk?wB!YPpfNkWzT{k(5{w08RnW|IzyVs@2U>TG(Y4 zG^((`dmsCj--`7w8Fx$ON1t#ZGITGdcMC>$@^=eqNjhYI;{&8p`NsLm@dUn%d%{<}qU0(EwCABdN zqd(fkD>v@J^Ex(91=yhS48F1Z!z1IqQh+8~WL34&g2i^^!_XjguPxi9lB?Re>jyKt zuTAxWAvXV58xJ1#3s5Mvu7!WU?6)#1>|dmqddLP#>KK4T=~|@=@7^q={v~vFJsndz92cd%kED&TR`RvfHPIe&=?X`PFo^N&;o!rYWU5i@;$&Y@&TAnZ;`7S^ z^jaSSp=nfjUyj$9xmXArVs#k4ZbYTnXJHq}0)Rx;TtW&>NrB2K;wr^qJAe?LNUf-} z3i$-WZ%+-^2db5d+GsvqT}KMj?)$s6jBG2CIwwsEUD|lhc4vX+7{K|6dj0m*x!e4& zMaQil%Au~~57%N;0!xWq{_m4RjSi)lQ{-snZ+>q3pKuV}4{ii%v}1PAwl_n+Gc-}l z+ga=|w0w6vzCR_e5*^yKLWt9d`f`$GN}~TbiK1thum>G)o>=xOW`D!oElPxSbuf3# zHqVBBC`*FSZI1f(c>cHE^6<8^^4UiW4;_z`PpKIcSo`4j{PTh3y+L~er)zf0Fj+Ij zA0?{i@pwpp!)q)3i{Na32HAQ%ux85lMGa<6Bg1MF(alUkH@qJrX31I1`*QN&E5d@G z^l(f)W-0M+aoYRqSef<2y)60aW2N8M%ecGepLt3!diD?Ru*N_t1NS~Hyl?V4OhiPJ zW47d;%ec2FG@H@+xq~}C8huIY_;h@5ja{msGBI^TYwwPD!6-1pu#!Cmn)_PvH%r%4 zT3BZpG#aeVcYj_Wb;K4X-1txxXU2nYxl+s1VItAeL4>vO)@ss*K~xUJwOU2@)%q(% z8TE6pdu?Cj{!@2Y4_k~j&f1+iqM3Oa$+=iT@hNY)*^}KHMBz}1F!dZj!`P(<#du8y zeYmYp!H92!LETR}1tJEi`+mBrQM=_G4-?9Ba~3fo7W>z5hR~ez?1BZAkR2MwvFHxX zT_f)`w=do#X^#dtsNCeSKho!p8v{Hy){ E023sLOaK4? literal 0 HcmV?d00001 diff --git a/test_replays/2.0.8.25605/ggtracker_3663861.SC2Replay b/test_replays/2.0.8.25605/ggtracker_3663861.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..ca6356de1811a667434790d39b1a4050ec464ce9 GIT binary patch literal 23933 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 S5jBir#eRPNxUxr}5CK3YH8*1yaTj9?H!@jS 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 + assert replay.player[player_id].creep_spread_by_minute + + + replay =factory.load_replay("test_replays/2.0.8.25605/ggtracker_3621402.SC2Replay",load_map= True,engine=pluginEngine,load_level=4) + assert replay.player[2].max_creep_spread == (14,22.95) + assert replay.player[2].creep_spread_by_minute[7] == 8.21 + assert replay.player[2].creep_spread_by_minute[13] == 22.42 + if __name__ == '__main__': unittest.main() From 148f32264dad249bb60040764cbaa62cc89dbc3d Mon Sep 17 00:00:00 2001 From: jonomon Date: Thu, 1 Aug 2013 10:12:13 -0400 Subject: [PATCH 005/238] added no tracker events handling --- sc2reader/engine/plugins/creeptracker.py | 6 + sc2reader/engine/plugins/creeptrackerClass.py | 238 ------------------ 2 files changed, 6 insertions(+), 238 deletions(-) delete mode 100644 sc2reader/engine/plugins/creeptrackerClass.py diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index bda1c1da..7f32976c 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -38,6 +38,11 @@ def handleUnitBornEvent(self,event,replay): (event.x,event.y),event.unit_type_name,event.second) def handleEndGame(self, event, replay): + if len( replay.tracker_events) ==0 : + for player in replay.players: + player.creep_spread_by_minute = 0 + player.max_creep_spread =0 + return for player_id in replay.player: self.creepTracker.reduce_cgu_per_minute(player_id) for player in replay.players: @@ -46,6 +51,7 @@ def handleEndGame(self, event, replay): if player.creep_spread_by_minute: player.max_creep_spread = max(player.creep_spread_by_minute.items(),key=lambda x:x[1]) else: + ## Else statement is for players with no creep spread(ie: not Z) player.max_creep_spread =0 ## The class used to used to calculate the creep spread diff --git a/sc2reader/engine/plugins/creeptrackerClass.py b/sc2reader/engine/plugins/creeptrackerClass.py deleted file mode 100644 index cf69e837..00000000 --- a/sc2reader/engine/plugins/creeptrackerClass.py +++ /dev/null @@ -1,238 +0,0 @@ -from __future__ import absolute_import - -from itertools import dropwhile -from sets import Set -from Image import open as PIL_open -from Image import ANTIALIAS -from StringIO import StringIO -from collections import defaultdict - -class creep_tracker(): - def __init__(self,replay): - #if the debug option is selected, minimaps will be printed to a file - ##and a stringIO containing the minimap image will be saved for - ##every minite in the game and the minimap with creep highlighted - ## will be printed out. - self.debug = replay.opt.debug - ##This list contains creep spread area for each player - self.creep_spread_by_minute = dict() - ## this list contains a minimap highlighted with creep spread for each player - if self.debug: - self.creep_spread_image_by_minute = dict() - ## This list contains all the active cgus in every time frame - self.creep_gen_units = dict() - ## Thist list corresponds to creep_gen_units storing the time of each CGU - self.creep_gen_units_times= dict() - ## convert all possible cgu radii into a sets of coordinates centred around the origin, - ## in order to use this with the CGUs, the centre point will be - ## subtracted with coordinates of cgus created in game - self.unit_name_to_radius = {'CreepTumor': 10, "Hatchery":8,\ - "NydusCanal": 5 } - self.radius_to_coordinates= dict() - for x in self.unit_name_to_radius: - self.radius_to_coordinates[self.unit_name_to_radius[x]] =\ - self.radius_to_map_positions(self.unit_name_to_radius[x]) - - #Get map information - replayMap = replay.map - # extract image from replay package - mapsio = StringIO(replayMap.minimap) - im = PIL_open(mapsio) - mapinfo = replay.map.archive.read_file('MapInfo') - ##remove black box around minimap - cropped = im.crop(im.getbbox()) - cropsize = cropped.size - self.map_height = 100.0 - # resize height to MAPHEIGHT, and compute new width that - # would preserve aspect ratio - self.map_width = int(cropsize[0] * (float(self.map_height) / cropsize[1])) - self.mapSize =self.map_height * self.map_width - ## the following parameters are only needed if minimaps have to be printed - minimapSize = ( self.map_width,int(self.map_height) ) - self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) - mapOffsetX, mapOffsetY = self.cameraOffset(mapinfo) - mapCenter = [mapOffsetX + cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] - # this is the center of the minimap image, in pixel coordinates - imageCenter = [(self.map_width/2), self.map_height/2] - # this is the scaling factor to go from the SC2 coordinate - # system to pixel coordinates - self.image_scale = float(self.map_height) / cropsize[0] - self.transX =imageCenter[0] + self.image_scale * (mapCenter[0]) - self.transY = imageCenter[1] + self.image_scale * (mapCenter[1]) - - def radius_to_map_positions(self,radius): - ## this function converts all radius into map coordinates - ## centred around the origin that the creep can exist - ## the cgu_radius_to_map_position function will simply - ## substract every coordinate with the centre point of the tumour - output_coordinates = list() - # Sample a square area using the radius - for x in range (-radius,radius): - for y in range (-radius, radius): - if (x**2 + y**2) <= (radius * radius): - output_coordinates.append((x,y)) - return output_coordinates - - def init_cgu_lists(self, player_id): - self.creep_spread_by_minute[player_id] = defaultdict(int) - if self.debug: - self.creep_spread_image_by_minute[player_id] = defaultdict(StringIO) - self.creep_gen_units[player_id] = list() - self.creep_gen_units_times[player_id] = list() - - def add_to_list(self,player_id,unit_id,unit_location,unit_type,event_time): - # This functions adds a new time frame to creep_generating_units_list - # Each time frame contains a list of all CGUs that are alive - length_cgu_list = len(self.creep_gen_units[player_id]) - if length_cgu_list==0: - self.creep_gen_units[player_id].append([(unit_id, unit_location,unit_type)]) - self.creep_gen_units_times[player_id].append(event_time) - else: - #if the list is not empty, take the previous time frame, - # add the new CGU to it and append it as a new time frame - previous_list = self.creep_gen_units[player_id][length_cgu_list-1][:] - previous_list.append((unit_id, unit_location,unit_type)) - self.creep_gen_units[player_id].append(previous_list) - self.creep_gen_units_times[player_id].append(event_time) - - def remove_from_list(self,unit_id,time_frame): - ## This function searches is given a unit ID for every unit who died - ## the unit id will be searched in cgu_gen_units for matches - ## if there are any, that unit will be removed from active CGUs - ## and appended as a new time frame - for player_id in self.creep_gen_units: - length_cgu_list = len(self.creep_gen_units[player_id]) - if length_cgu_list ==0: - break - cgu_per_player = self.creep_gen_units[player_id]\ - [length_cgu_list-1] - creep_generating_died = dropwhile(lambda x: x[0] != \ - unit_id, cgu_per_player) - for creep_generating_died_unit in creep_generating_died: - cgu_per_player.remove(creep_generating_died_unit) - self.creep_gen_units[player_id].append(cgu_per_player) - self.creep_gen_units_times[player_id].append(time_frame) - - def add_event(self,event): - # Search things that generate creep - # Tumor, hatcheries, nydus - if event.name == "UnitBornEvent": - if event.unit_type_name== "Hatchery": - self.add_to_list(event.control_pid, event.unit_id,\ - (event.x,event.y),event.unit_type_name,event.second) - if event.name == "UnitInitEvent": - units = ["CreepTumor", "Hatchery","NydusCanal"] - if event.unit_type_name in units: - self.add_to_list(event.control_pid,event.unit_id,\ - (event.x, event.y), event.unit_type_name,event.second) - # Removes creep generating units that were destroyed - if event.name == "UnitDiedEvent": - self.remove_from_list(event.unit_id,event.second) - - def reduce_cgu_per_minute(self,player_id): - #the creep_gen_units_lists contains every single time frame - #where a CGU is added, - #To reduce the calculations required, the time frame containing - #the most cgus every minute will be used to represent that minute - last_minute_found = 0 - cgu_per_player_new = list() - cgu_time_per_player_new = list() - cgu_last_minute_list = list() - for index,cgu_time in enumerate(self.creep_gen_units_times[player_id]): - cgu_last_minute_list.append(self.creep_gen_units[player_id][index]) - if (cgu_time/60) ==0: - cgu_per_player_new.append(self.creep_gen_units[player_id][0]) - cgu_time_per_player_new.append(0) - cgu_last_minute_list = list() - if (cgu_time/60)>last_minute_found: - cgu_max_in_min = max(cgu_last_minute_list,key = len) - cgu_per_player_new.append(cgu_max_in_min) - cgu_max_in_min_index = self.creep_gen_units[player_id].index(cgu_max_in_min) - cgu_time_per_player_new.append(self.creep_gen_units_times[player_id][cgu_max_in_min_index]) - last_minute_found = cgu_time/60 - cgu_last_minute_list=list() - - self.creep_gen_units[player_id] = cgu_per_player_new - self.creep_gen_units_times[player_id] = cgu_time_per_player_new - - def get_creep_spread_area(self,player_id): - ## iterates through all cgus and and calculate the area - for index,cgu_per_player in enumerate(self.creep_gen_units[player_id]): - # convert cgu list into centre of circles and radius - cgu_radius = map(lambda x: (x[1], self.unit_name_to_radius[x[2]]),\ - cgu_per_player) - # convert event coords to minimap coords - cgu_radius = self.convert_cgu_radius_event_to_map_coord(cgu_radius) - creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) - cgu_last_event_time = self.creep_gen_units_times[player_id][index]/60 - if self.debug: - self.print_image(creep_area_positions,player_id,cgu_last_event_time) - creep_area = len(creep_area_positions) - self.creep_spread_by_minute[player_id][cgu_last_event_time]=\ - float(creep_area)/self.mapSize*100 - return self.creep_spread_by_minute[player_id] - - def cgu_radius_to_map_positions(self,cgu_radius,radius_to_coordinates): - ## This function uses the output of radius_to_map_positions - total_points_on_map = Set() - if len(cgu_radius)==0: - return [] - for cgu in cgu_radius: - point = cgu[0] - radius = cgu[1] - ## subtract all radius_to_coordinates with centre of - ## cgu radius to change centre of circle - cgu_map_position = map( lambda x:(x[0]+point[0],x[1]+point[1])\ - ,self.radius_to_coordinates[radius]) - total_points_on_map= total_points_on_map | Set(cgu_map_position) - return total_points_on_map - - def print_image(self,total_points_on_map,player_id,time_stamp): - minimap_copy = self.minimap_image.copy() - # Convert all creeped points to white - for points in total_points_on_map: - x = points[0] - y = points[1] - x,y = self.check_image_pixel_within_boundary(x,y) - minimap_copy.putpixel((x,y) , (255, 255, 255)) - creeped_image = minimap_copy - # write creeped minimap image to a string as a png - creeped_imageIO = StringIO() - creeped_image.save(creeped_imageIO, "png") - self.creep_spread_image_by_minute[player_id][time_stamp]=creeped_imageIO - ##debug for print out the images - f = open(str(player_id)+'image'+str(time_stamp)+'.png','w') - f.write(creeped_imageIO.getvalue()) - creeped_imageIO.close() - f.close() - - def check_image_pixel_within_boundary(self,pointX, pointY): - pointX = 0 if pointX <0 else pointX - pointY=0 if pointY <0 else pointY - # put a minus 1 to make sure the pixel is not directly on the edge - pointX = int(self.map_width-1 if pointX >= self.map_width else pointX) - pointY = int(self.map_height-1 if pointY >= self.map_height else pointY) - return pointX,pointY - - def convert_cgu_radius_event_to_map_coord(self,cgu_radius): - cgu_radius_new = list() - for cgu in cgu_radius: - x = cgu[0][0] - y = cgu[0][1] - (x,y) = self.convert_event_coord_to_map_coord(x,y) - cgu = ((x,y),cgu[1]) - cgu_radius_new.append(cgu) - return cgu_radius_new - - def convert_event_coord_to_map_coord(self,x,y): - imageX = int(self.map_height - self.transX + self.image_scale * x) - imageY = int(self.transY - self.image_scale * y) - return imageX, imageY - - def cameraOffset(self,mapinfo): - fogOfWarStart = mapinfo.find('Dark') - textureEnd = mapinfo[fogOfWarStart + 5:-1].find('\0') - rest = mapinfo[fogOfWarStart + 5 + textureEnd + 1: -1] - return ord(rest[0]), ord(rest[4]) - - From f3ef915ecc3015b66a4a8268fc5bcab2ea03731e Mon Sep 17 00:00:00 2001 From: jonomon Date: Thu, 1 Aug 2013 10:19:44 -0400 Subject: [PATCH 006/238] Update creeptracker.py --- sc2reader/engine/plugins/creeptracker.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index 7f32976c..23053574 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -39,9 +39,6 @@ def handleUnitBornEvent(self,event,replay): def handleEndGame(self, event, replay): if len( replay.tracker_events) ==0 : - for player in replay.players: - player.creep_spread_by_minute = 0 - player.max_creep_spread =0 return for player_id in replay.player: self.creepTracker.reduce_cgu_per_minute(player_id) @@ -51,7 +48,7 @@ def handleEndGame(self, event, replay): if player.creep_spread_by_minute: player.max_creep_spread = max(player.creep_spread_by_minute.items(),key=lambda x:x[1]) else: - ## Else statement is for players with no creep spread(ie: not Z) + ## Else statement is for players with no creep spread(ie: not Zerg) player.max_creep_spread =0 ## The class used to used to calculate the creep spread From 7906de610bf7d11688a88036ec10f66a4261921a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 19:52:45 -0400 Subject: [PATCH 007/238] README/documentation updates. --- README.rst | 207 +++++++++++------------- docs/source/articles/gettingstarted.rst | 73 +++++++++ 2 files changed, 166 insertions(+), 114 deletions(-) create mode 100644 docs/source/articles/gettingstarted.rst diff --git a/README.rst b/README.rst index 6cf59cd2..9f294ea0 100644 --- a/README.rst +++ b/README.rst @@ -1,51 +1,27 @@ What is sc2reader? ==================== -sc2reader is a python library for extracting information from various different -Starcraft II resources. These resources currently include Replays, Maps, and -Game Summaries; we may eventually include BNet profiles and possibly adapters -to the more entrenched SCII sites like sc2ranks. +sc2reader is a python library for extracting information from various different Starcraft II resources. These resources currently include Replays, Maps, and Game Summaries; we have plans to add support for Battle.net profiles and would gladly accept adapters to the more entrenched SCII sites such as sc2ranks. -Our goal is to give anyone and everyone the power to construct their own -tools, do their own analysis, and hack on their own Starcraft II projects -under the open MIT license. Currently powering: +There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created with out first being able to open up Starcraft II game files and analyze the data within. Our goal is to give anyone and everyone the power to construct their own tools, do their own analysis, and hack on their own Starcraft II projects under the open MIT license. -* Websites: `ggtracker.com`_, `gamereplays.org`_ -* Tools: `The Core`_ -* Experiments: `Midi Conversion`_ - -Our secondary goal is to become a reference implementation for people looking -to implement libraries in other languages. For replays, it implements the -replay format as specified in Blizzard's `s2protocol`_ project. -The following is a list of partial implementations in other languages: +Who Uses sc2reader? +====================== -* C#: `sc2replay-csharp`_ (special thanks for v1.5 help) -* C++: `sc2pp`_ -* Javascript: `comsat`_ -* PHP: `phpsc2replay`_ +sc2reader is currently powering: -Unfortunately sc2reader does not implement a battle.net scraper for profile -information. If you need the information I know of two projects that can get -you started: - -* Ruby: `bnet_scraper`_ - Maintained by Agora Games -* Python: `sc2profile`_ - Currently unmaintained, slightly dated. +* Websites: `ggtracker.com`_, `gamereplays.org`_, `sc2companion.com`_ +* Tools: `The Core`_ +* Experiments: `Midi Conversion`_ -If you'd like your tool, site, project, or implementation listed above, drop -us a line on our `mailing list`_ or stop by our #sc2reader IRC channel and say hi! +If you use sc2reader and you would like your tool, site, project, or implementation listed above, drop us a line on our `mailing list`_ or stop by our #sc2reader IRC channel and say hi! Current Status ================= -sc2reader is currently capable of parsing varying levels of information out of -the three primary resource types listed below. For a more detailed and exact -description of the information that can be extracted please consult the -`documentation`_ hosted on Read the Docs. - -The library is production ready and reasonably stable. `travis-ci`_ provides a -record of our `continuous testing`_ and `coveralls.io`_ provides a record of our `test coverage`_. +sc2reader is production ready at release and under active development on github. It is currently capable of parsing varying levels of information out of the three primary resource types listed below. For a more detailed and exact description of the information that can be extracted please consult the `documentation`_ hosted on ReadTheDocs. Replays @@ -90,22 +66,20 @@ in future releases. Maps ------- -Maps are currently parsed in the most minimal way possible and are an area for -big improvement in the future. Currently the Minimap.tga packaged with the map -is made available along with Name, Author, Description for ONLY enUS localized -SCII map files. More robust Map meta data extraction will likely be added in -future releases. +Maps can be parsed for the following information: + +* Minimap and Icon images (tga format) +* enUS localized Name, Author, Description, Website (if available) +* Map Dimensions, Camera Bounds, Tileset +* Player Slot data and Advanced Teams alliance/enemy data. -There's a lot more in here to be had for the adventurous. +There is a lot more in here to be had for the adventurous. Game Summaries ----------------- -Game Summary files are downloaded by the client in order to allow you to view -the game summary from your match history. Prior to 2.0.8 they were the only -way to get the information from the summary screen. Since the 2.0.8 release -you have been able to compute this information yourself from the replay files. +Game Summary files are downloaded by the client in order to allow you to view the game summary from your match history. Prior to 2.0.8 they were the only way to get the information from the summary screen. Since the 2.0.8 release you have been able to compute this information yourself from the replay files. Thank you Prillan and `Team Liquid`_ for helping to decode this file. @@ -115,76 +89,92 @@ Thank you Prillan and `Team Liquid`_ for helping to decode this file. * URLs to map localization files and images * Player build orders up to 64 (real) actions -Parsing on these files is now production ready for those that can get them. See -the `Team Liquid`_ thread for details on how to go about getting them. +Parsing on these files is now production ready for those that can get them. See the `Team Liquid`_ thread for details on how to go about getting them. Again, these files are generally unnecessary after the 2.0.8 release. - -Example Usage +Basic Usage ===================== -To demonstrate how you might use sc2reader in practice I've included some short -contrived scripts below. For more elaborate examples, checkout the docs and the -`sc2reader.scripts`_ package on Github or in the source. +For examples scripts, checkout the docs and the `sc2reader.scripts`_ package on Github or in the source. + +Loading Replays +------------------- +For many users, the most basic commands will handle all of their needs:: + + import sc2reader + replay = sc2reader.load_replay('MyReplay', load_map=true) +This will load all replay data and fix GameHeart games. In some cases, you don't need the full extent of the replay data. You can use the load level option to limit replay loading and improve load times:: -Downloading Maps --------------------- + # Release version and game length info. Nothing else + sc2reader.load_replay('MyReplay.SC2Replay', load_level=0) -Save all the minimaps for all the games you've ever played:: + # Also loads game details: map, speed, time played, etc + sc2reader.load_replay('MyReplay.SC2Replay', load_level=1) - import sc2reader, os, sys + # Also loads players and chat events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=2) - if not os.path.exists('minimaps'): - os.makedirs('minimaps') + # Also loads tracker events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=3) - # Only load details file (level 1) and fetch the map file from bnet - for replay in sc2reader.load_replays(sys.argv[1:], load_map=True, load_level=1): - minimap_path = os.path.join('minimaps', replay.map_name.replace(' ','_')+'.tga') - if not os.path.exists(minimap_path): - with open(minimap_path, 'w') as file_out: - file_out.write(replay.map.minimap) - print("Saved Map: {0} [{1}]".format(replay.map_name, replay.map_hash)) + # Also loads game events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=4) +If you want to load a collection of replays, you can use the plural form. Loading resources in this way returns a replay generator:: -Organizing Replays ----------------------- + replays = sc2reader.load_replays('path/to/replay/directory') -Organizing your 1v1 replays by race played and matchup and sortable by length:: - import sc2reader, os, shutil, sys +Loading Maps +---------------- - sorted_base = 'sorted' - path_to_replays = 'my/replays' +If you have a replay and want the map file as well, sc2reader can download the corresponding map file and load it in one of two ways:: - for replay in sc2reader.load_replays(sys.argv[1], load_level=2): - if replay.real_type != '1v1': - continue + replay = sc2reader.load_replay('MyReplay.SC2Replay', load_map=true) + replay.load_map() - try: - me = replay.player.name('ShadesofGray') - you = team[(me.team.number+1)%2].players[0] +If you are looking to only handle maps you can use the map specific load methods:: - matchup = "{0}v{1}".format(me.play_race[0], you.play_race[1]) + map = sc2reader.load_map('MyMap.SC2Map') + map = sc2reader.load_maps('path/to/maps/directory') - sorted_path = os.path.join(sorted_base,me.play_race[0],matchup) - if not os.path.exists(sorted_path): - os.makedirs(sorted_path) - filename = "{0} - {1}".format(replay.game_length, replay.filename) - src = os.join(path_to_replays,replay.filename) - dst = os.join(sorted_path, filename) - shutil.copyfile(src, dst) +Using the Cache +--------------------- + +If you are loading a lot of remote resources, you'll want to enable caching for sc2reader. Caching can be configured with the following environment variables: + +* SC2READER_CACHE_DIR - Enables caching to file at the specified directory. +* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries; not based on memory imprint! + +You can set these from inside your script with the following code **BEFORE** importing the sc2reader module:: + + os.environ['SC2READER_CACHE_DIR'] = "path/to/local/cache" + os.environ['SC2READER_CACHE_MAX_SIZE'] = 100 + + # if you have imported sc2reader anywhere already this won't work + import sc2reader - except KeyError as e: - continue # A game I didn't play in! + +Using Plugins +------------------ + +There are a growing number of community generated plugins that you can take advantage of in your project. See the article on `Creating GameEngine Plugins`_ for details on creating your own. To use these plugins you need to customize the game engine:: + + from sc2reader.engine.plugins import SelectionTracker, APMTracker + sc2reader.engine.register_plugin(SelectionTracker()) + sc2reader.engine.register_plugin(APMTracker()) + +The :class:`~sc2reader.engine.plugins.ContextLoader` and :class:`~sc2reader.engine.plugins.GameHeartNormalizer` plugins are registered by default. Installation ================ +sc2reader runs on any system with Python 2.6+, 3.2+, or PyPy installed. From PyPI (stable) @@ -205,8 +195,7 @@ or with setuptools (specify a valid x.x.x):: cd sc2reader-x.x.x python setup.py install -Releases to PyPi can be very delayed, for the latest and greatest you are encouraged -to install from Github master which is **usually** kept quite stable. +Releases to PyPi can be very delayed, for the latest and greatest you are encouraged to install from Github master. From Github @@ -214,7 +203,9 @@ From Github Github master is generally stable with development branches more unstable. -Install from the latest source on github with pip:: +We use `travis-ci`_ to provide a record of our `continuous testing`_ and `coveralls.io`_ provides a record of our `test coverage`_. Please verify that tests are passing before installing development versions. + +Install from the latest source on Github with pip:: pip install -e git+git://github.com/GraylinKim/sc2reader#egg=sc2reader @@ -229,36 +220,29 @@ or with setuptools:: For Contributors ------------------- -Contributors should install from an active git repository using setuptools in -`develop`_ mode. This will install links to the live code so that local edits -are available to external modules automatically:: +Contributors should install from an active git repository using setuptools in `develop`_ mode. This will install links to the live code so that local edits are available to external modules automatically:: git clone https://github.com/GraylinKim/sc2reader.git cd sc2reader python setup.py develop -Please review the CONTRIBUTING.md file and get in touch with us before doing -too much work. It'll make everyone happier in the long run. - +Please review the `CONTRIBUTING.md`_ file and get in touch with us before doing too much work. It'll make everyone happier in the long run. Testing ------------------- -We use the built in ``unittest`` module for testing. If you are still on Python -2.6 you will need to install ``unittest2`` because our test suite requires newer -features than are included in the main distribution. +We use the built in ``unittest`` module for testing. If you are still on Python 2.6 you will need to install ``unittest2`` because our test suite requires newer features than are included in the main distribution. To run the tests just use:: - python -m unittest discover test_replays - python -m unittest discover test_s2gs + python test_replays/test_all.py + python test_s2gs/test_all.py -When repeatedly running tests it can be very helpful to make sure you've -set a local cache directory to prevent long fetch times from battle.net:: +When repeatedly running tests it can be very helpful to make sure you've set a local cache directory to prevent long fetch times from battle.net:: export SC2READER_CACHE_DIR=local_cache # or - SC2READER_CACHE_DIR=local_cache py.test + SC2READER_CACHE_DIR=local_cache python test_replays/test_all.py Good luck, have fun! @@ -266,21 +250,13 @@ Good luck, have fun! Community ============== -sc2reader has a small but growing community of people looking to make tools and -websites with Starcraft II data. If that sounds like something you'd like to be -a part of please join our underused `mailing list`_ and start a conversation -or stop by #sc2reader on FreeNode and say 'Hi'. We have members from all over -Europe, Australia, and the United States currently, so regardless of the time, -you can probably find someone to talk to. +sc2reader has a small but growing community of people looking to make tools and websites with Starcraft II data. If that sounds like something you'd like to be a part of please join our underused `mailing list`_ and start a conversation or stop by #sc2reader on FreeNode and say 'Hi'. We have members from all over Europe, Australia, and the United States currently, so regardless of the time, you can probably find someone to talk to. Issues and Support ===================== -We have an `issue tracker`_ on Github that all bug reports and feature requests -should be directed to. We have a `mailing list`_ with Google Groups that you can -use to reach out for support. We are generally on FreeNode in the #sc2reader -and can generally provide live support and address issues there as well. +We have an `issue tracker`_ on Github that all bug reports and feature requests should be directed to. We have a `mailing list`_ with Google Groups that you can use to reach out for support. We are generally on FreeNode in the #sc2reader and can generally provide live support and address issues there as well. Acknowledgements @@ -297,7 +273,7 @@ and kept this project going. * Thanks to `ggtracker.com`_ for sponsoring further development and providing the thousands of test files used while adding s2gs and HotS support. * Thanks to Blizzard for supporting development of 3rd party tools and releasing - their `s2protocol`_ reference implementation. + their `s2protocol`_ full reference implementation. .. _s2protocol: https://github.com/Blizzard/s2protocol @@ -324,3 +300,6 @@ and kept this project going. .. _travis-ci: https://travis-ci.org/ .. _coveralls.io: https://coveralls.io .. _test coverage: https://coveralls.io/r/GraylinKim/sc2reader +.. _CONTRIBUTING.md: https://github.com/GraylinKim/sc2reader/blob/master/CONTRIBUTING.md +.. _sc2companion.com: http://sc2companion.com +.. _Creating GameEngine Plugins: http://sc2reader.readthedocs.org/en/latest/articles/creatingagameengineplugin.html diff --git a/docs/source/articles/gettingstarted.rst b/docs/source/articles/gettingstarted.rst new file mode 100644 index 00000000..af0f205f --- /dev/null +++ b/docs/source/articles/gettingstarted.rst @@ -0,0 +1,73 @@ +Getting Started with SC2Reader +================================== + +Loading Replays +------------------- +For many users, the most basic commands will handle all of their needs:: + + import sc2reader + replay = sc2reader.load_replay('MyReplay', load_map=true) + +This will load all replay data and fix GameHeart games. In some cases, you don't need the full extent of the replay data. You can use the load level option to limit replay loading and improve load times:: + + # Release version and game length info. Nothing else + sc2reader.load_replay('MyReplay.SC2Replay', load_level=0) + + # Also loads game details: map, speed, time played, etc + sc2reader.load_replay('MyReplay.SC2Replay', load_level=1) + + # Also loads players and chat events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=2) + + # Also loads tracker events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=3) + + # Also loads game events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=4) + +If you want to load a collection of replays, you can use the plural form. Loading resources in this way returns a replay generator:: + + replays = sc2reader.load_replays('path/to/replay/directory') + + +Loading Maps +---------------- + +If you have a replay and want the map file as well, sc2reader can download the corresponding map file and load it in one of two ways:: + + replay = sc2reader.load_replay('MyReplay.SC2Replay', load_map=true) + replay.load_map() + +If you are looking to only handle maps you can use the map specific load methods:: + + map = sc2reader.load_map('MyMap.SC2Map') + map = sc2reader.load_maps('path/to/maps/directory') + + +Using the Cache +--------------------- + +If you are loading a lot of remote resources, you'll want to enable caching for sc2reader. Caching can be configured with the following environment variables: + +* SC2READER_CACHE_DIR - Enables caching to file at the specified directory. +* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries; not based on memory imprint! + +You can set these from inside your script with the following code **BEFORE** importing the sc2reader module:: + + os.environ['SC2READER_CACHE_DIR'] = "path/to/local/cache" + os.environ['SC2READER_CACHE_MAX_SIZE'] = 100 + + # if you have imported sc2reader anywhere already this won't work + import sc2reader + + +Using Plugins +------------------ + +There are a growing number of community generated plugins that you can take advantage of in your project. See the article on :doc:`creatingagameengineplugin` for details on creating your own. To use these plugins you need to customize the game engine:: + + from sc2reader.engine.plugins import SelectionTracker, APMTracker + sc2reader.engine.register_plugin(SelectionTracker()) + sc2reader.engine.register_plugin(APMTracker()) + +The :class:`~sc2reader.engine.plugins.ContextLoader` and :class:`~sc2reader.engine.plugins.GameHeartNormalizer` plugins are registered by default. From 5e4e94fba30a881218bd5bfdf7300ee80fca3a79 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 20:09:31 -0400 Subject: [PATCH 008/238] Update the change log and move links around. --- CHANGELOG.rst | 35 ++++++++++++++++++++++------- README.rst | 61 +++++++++++++++++++++++++++------------------------ 2 files changed, 59 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f9c9017e..aba2358d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,10 +1,24 @@ CHANGELOG ============ -0.5.2 - --------------------- +0.6.0 - August 12th 2013 +------------------------ + +New Stuff: +~~~~~~~~~~~~~~~~ + +* Adds python 3.2+ support +* Adds experimental SC2Map.MapInfo parsing support. +* Implements new replay GameEngine and plugin support. +* Added a sc2json script contributed by @ChrisLundquist +* Adds plugin GameHeartNormalizer plugin by @StoicLoofah +* Hooked up coveralls.io for coverage reporting: https://coveralls.io/r/GraylinKim/sc2reader +* Hooked up travis-ci for continuous testing: https://travis-ci.org/GraylinKim/sc2reader +* Switched to built in python unittest module for testing. + +Changed Stuff (non-backwards compatible!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* Adds experimental SC2Map.MapInfo parsing support. Replaces the useless MapInfo resource from before. * Summary.teams is now summary.team; summary.team is now summary.teams. To conform with replay name conventions * Fixed #136, unit types from tracker events are used when available. * Deprecated player.gateway for player.region @@ -12,12 +26,17 @@ CHANGELOG * Player.uid now means something completely different! Use player.toon_id instead * Player.uid is now the user id of the player (was player.cid) * PersonDict can no longer be constructed from a player list and new players cannot be added by string (name). Only integer keys accepted for setting. -* Added a sc2json script contributed by @ChrisLundquist -* Hooked up travis-ci for continuous testing. https://travis-ci.org/GraylinKim/sc2reader -* Switched to built in python unittest module for testing. * Log a warning instead of throwing an exception when using an unknown colors. - * An unknown hex value will use the hex value as the name. - * An unknown color name will use 0x000000 as the color. +** An unknown hex value will use the hex value as the name. +** An unknown color name will use 0x000000 as the color. +* Finally straighten out all these replay player list/dicts +** human/humans -> human entities, indexed by uid +** computer/computers -> computer entities, indexed by pid +** player/players -> actually playing in the game, indexed by pid +** observer/observers -> observing the game, indexed by uid +** entities -> players + observers || humans + computers, indexed by pid +** client/clients - (deprecated) same as human/humans +** people/person - (deprecated) same as entity/entities 0.5.1 - June 1, 2013 diff --git a/README.rst b/README.rst index 9f294ea0..d0f67ad3 100644 --- a/README.rst +++ b/README.rst @@ -1,3 +1,4 @@ + What is sc2reader? ==================== @@ -18,10 +19,19 @@ sc2reader is currently powering: If you use sc2reader and you would like your tool, site, project, or implementation listed above, drop us a line on our `mailing list`_ or stop by our #sc2reader IRC channel and say hi! +.. _ggtracker.com: http://ggtracker.com +.. _gamereplays.org: http://www.gamereplays.org/starcraft2/ +.. _sc2companion.com: http://sc2companion.com +.. _The Core: http://www.teamliquid.net/forum/viewmessage.php?topic_id=341878 +.. _Midi Conversion: https://github.com/obohrer/sc2midi + + Current Status ================= -sc2reader is production ready at release and under active development on github. It is currently capable of parsing varying levels of information out of the three primary resource types listed below. For a more detailed and exact description of the information that can be extracted please consult the `documentation`_ hosted on ReadTheDocs. +sc2reader is production ready at release and under active development on Github. It is currently capable of parsing varying levels of information out of the three primary resource types listed below. For a more detailed and exact description of the information that can be extracted please consult the `documentation`_ hosted on ReadTheDocs. + +.. _documentation: http://sc2reader.rtfd.org/ Replays @@ -93,6 +103,8 @@ Parsing on these files is now production ready for those that can get them. See Again, these files are generally unnecessary after the 2.0.8 release. +.. _Team Liquid: http://www.teamliquid.net/forum/viewmessage.php?topic_id=330926 + Basic Usage ===================== @@ -127,6 +139,8 @@ If you want to load a collection of replays, you can use the plural form. Loadin replays = sc2reader.load_replays('path/to/replay/directory') +.. _sc2reader.scripts: https://github.com/GraylinKim/sc2reader/tree/master/sc2reader/scripts + Loading Maps ---------------- @@ -168,7 +182,9 @@ There are a growing number of community generated plugins that you can take adva sc2reader.engine.register_plugin(SelectionTracker()) sc2reader.engine.register_plugin(APMTracker()) -The :class:`~sc2reader.engine.plugins.ContextLoader` and :class:`~sc2reader.engine.plugins.GameHeartNormalizer` plugins are registered by default. +The new GameHeartNormalizerplugin is registered by default. + +.. _Creating GameEngine Plugins: http://sc2reader.readthedocs.org/en/latest/articles/creatingagameengineplugin.html Installation @@ -216,6 +232,11 @@ or with setuptools:: cd sc2reader-master python setup.py install +.. _travis-ci: https://travis-ci.org/ +.. _coveralls.io: https://coveralls.io +.. _test coverage: https://coveralls.io/r/GraylinKim/sc2reader +.. _continuous testing: https://travis-ci.org/GraylinKim/sc2reader + For Contributors ------------------- @@ -228,6 +249,10 @@ Contributors should install from an active git repository using setuptools in `d Please review the `CONTRIBUTING.md`_ file and get in touch with us before doing too much work. It'll make everyone happier in the long run. +.. _develop: http://peak.telecommunity.com/DevCenter/setuptools#development-mode +.. _CONTRIBUTING.md: https://github.com/GraylinKim/sc2reader/blob/master/CONTRIBUTING.md + + Testing ------------------- @@ -258,6 +283,9 @@ Issues and Support We have an `issue tracker`_ on Github that all bug reports and feature requests should be directed to. We have a `mailing list`_ with Google Groups that you can use to reach out for support. We are generally on FreeNode in the #sc2reader and can generally provide live support and address issues there as well. +.. _mailing list: http://groups.google.com/group/sc2reader +.. _issue tracker: https://github.com/GraylinKim/sc2reader/issues + Acknowledgements ======================= @@ -275,31 +303,6 @@ and kept this project going. * Thanks to Blizzard for supporting development of 3rd party tools and releasing their `s2protocol`_ full reference implementation. - -.. _s2protocol: https://github.com/Blizzard/s2protocol -.. _ggtracker.com: http://ggtracker.com -.. _gamereplays.org: http://www.gamereplays.org/starcraft2/ -.. _Midi Conversion: https://github.com/obohrer/sc2midi -.. _sc2reader.scripts: https://github.com/GraylinKim/sc2reader/tree/master/sc2reader/scripts -.. _The Core: http://www.teamliquid.net/forum/viewmessage.php?topic_id=341878 -.. _PyPy: http://pypy.org/ -.. _sc2pp: https://github.com/zsol/sc2pp -.. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp -.. _comsat: https://github.com/tec27/comsat .. _phpsc2replay: http://code.google.com/p/phpsc2replay/ -.. _Team Liquid: http://www.teamliquid.net/forum/viewmessage.php?topic_id=330926 -.. _develop: http://peak.telecommunity.com/DevCenter/setuptools#development-mode -.. _documentation: http://sc2reader.rtfd.org/ -.. _mailing list: http://groups.google.com/group/sc2reader -.. _developers mailing list: http://groups.google.com/group/sc2reader-dev -.. _phpsc2replay: http://code.google.com/p/phpsc2replay/ -.. _issue tracker: https://github.com/GraylinKim/sc2reader/issues -.. _bnet_scraper: https://github.com/agoragames/bnet_scraper -.. _sc2profile: https://github.com/srounet/sc2profile -.. _continuous testing: https://travis-ci.org/GraylinKim/sc2reader -.. _travis-ci: https://travis-ci.org/ -.. _coveralls.io: https://coveralls.io -.. _test coverage: https://coveralls.io/r/GraylinKim/sc2reader -.. _CONTRIBUTING.md: https://github.com/GraylinKim/sc2reader/blob/master/CONTRIBUTING.md -.. _sc2companion.com: http://sc2companion.com -.. _Creating GameEngine Plugins: http://sc2reader.readthedocs.org/en/latest/articles/creatingagameengineplugin.html +.. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp +.. _s2protocol: https://github.com/Blizzard/s2protocol From b34be94c4144bdefd4cc5f2bb4163ebed5b0fa92 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 20:17:41 -0400 Subject: [PATCH 009/238] Small readme revisions. --- README.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index d0f67ad3..6db6b242 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ What is sc2reader? sc2reader is a python library for extracting information from various different Starcraft II resources. These resources currently include Replays, Maps, and Game Summaries; we have plans to add support for Battle.net profiles and would gladly accept adapters to the more entrenched SCII sites such as sc2ranks. -There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created with out first being able to open up Starcraft II game files and analyze the data within. Our goal is to give anyone and everyone the power to construct their own tools, do their own analysis, and hack on their own Starcraft II projects under the open MIT license. +There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created without first being able to open up Starcraft II game files and analyze the data within. Our goal is to give anyone and everyone the power to construct their own tools, do their own analysis, and hack on their own Starcraft II projects under the open MIT license. Who Uses sc2reader? @@ -109,7 +109,10 @@ Again, these files are generally unnecessary after the 2.0.8 release. Basic Usage ===================== -For examples scripts, checkout the docs and the `sc2reader.scripts`_ package on Github or in the source. +..note:: + + For example scripts, checkout the docs and the `sc2reader.scripts`_ package on Github or in the source. + Loading Replays ------------------- @@ -211,7 +214,7 @@ or with setuptools (specify a valid x.x.x):: cd sc2reader-x.x.x python setup.py install -Releases to PyPi can be very delayed, for the latest and greatest you are encouraged to install from Github master. +Releases to PyPi can be very delayed (sorry!), for the latest and greatest you are encouraged to install from Github master. From Github From 768792d716d423d40f8be135948965abb4e788b0 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 20:59:50 -0400 Subject: [PATCH 010/238] Small additional changes for release. --- CHANGELOG.rst | 52 ++++++++++++++++++++++-------------------------- CONTRIBUTORS.txt | 4 ++-- README.rst | 2 ++ 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index aba2358d..cea71265 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ New Stuff: ~~~~~~~~~~~~~~~~ * Adds python 3.2+ support +* Adds support for patch 2.0.10. * Adds experimental SC2Map.MapInfo parsing support. * Implements new replay GameEngine and plugin support. * Added a sc2json script contributed by @ChrisLundquist @@ -27,16 +28,16 @@ Changed Stuff (non-backwards compatible!): * Player.uid is now the user id of the player (was player.cid) * PersonDict can no longer be constructed from a player list and new players cannot be added by string (name). Only integer keys accepted for setting. * Log a warning instead of throwing an exception when using an unknown colors. -** An unknown hex value will use the hex value as the name. -** An unknown color name will use 0x000000 as the color. + * An unknown hex value will use the hex value as the name. + * An unknown color name will use 0x000000 as the color. * Finally straighten out all these replay player list/dicts -** human/humans -> human entities, indexed by uid -** computer/computers -> computer entities, indexed by pid -** player/players -> actually playing in the game, indexed by pid -** observer/observers -> observing the game, indexed by uid -** entities -> players + observers || humans + computers, indexed by pid -** client/clients - (deprecated) same as human/humans -** people/person - (deprecated) same as entity/entities + * human/humans -> human entities, indexed by uid + * computer/computers -> computer entities, indexed by pid + * player/players -> actually playing in the game, indexed by pid + * observer/observers -> observing the game, indexed by uid + * entities -> players + observers || humans + computers, indexed by pid + * client/clients - (deprecated) same as human/humans + * people/person - (deprecated) same as entity/entities 0.5.1 - June 1, 2013 @@ -57,27 +58,22 @@ Changed Stuff (non-backwards compatible!): * Support for all replays (arcade replays now parse!) from all versions * Support for the new replay.tracker.events added in 2.0.8 - * Units now have birth frame, death frame, and owner information - * New events for (roughly) tracking unit positions - * New events for tracking player resource stockpiles and collection rates - * More! + * Units now have birth frame, death frame, and owner information + * New events for (roughly) tracking unit positions + * New events for tracking player resource stockpiles and collection rates + * More! * Much more comprehensive documentation. * New unit model - * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. - * Units that can transform maintain a full type history. - * Units are correctly and uniquely identified by unit_id alone. + * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. + * Units that can transform maintain a full type history. + * Units are correctly and uniquely identified by unit_id alone. * Updated unit meta data: - * Mineral Cost - * Vespene Cost - * Supply Cost - * Flags for is_worker, is_army, is_building + * Mineral Cost + * Vespene Cost + * Supply Cost + * Flags for is_worker, is_army, is_building * Added ability meta data: - * is_build flag marking abilities that create units - * build_unit indicating the unit type that is built - * build_time indicating the build time for the ability - -0.4.0 - ??? --------------------- - -... + * is_build flag marking abilities that create units + * build_unit indicating the unit type that is built + * build_time indicating the build time for the ability diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 5494293f..e53bbcd4 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -8,8 +8,8 @@ Contributors: Jason Dana - @sheutka on github Cameron Zemek (grom) - @grom358 on github Fabien Reboia (srounet) - @srounet on github + Kevin Leung - @StoicLoofah on github Daniele Zannotti (Durrza) Mike Anderson -Special thanks to ggtracker, inc (ggtracker.com) for sponsoring -sc2reader's continued development. +Special thanks to ggtracker, inc (ggtracker.com) for sponsoring sc2reader's continued development. diff --git a/README.rst b/README.rst index 6db6b242..b747bd96 100644 --- a/README.rst +++ b/README.rst @@ -306,6 +306,8 @@ and kept this project going. * Thanks to Blizzard for supporting development of 3rd party tools and releasing their `s2protocol`_ full reference implementation. + .. _phpsc2replay: http://code.google.com/p/phpsc2replay/ .. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp .. _s2protocol: https://github.com/Blizzard/s2protocol + From fbda9eb53f19273a08d63d6c78e718a4f4e30a2f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 21:00:11 -0400 Subject: [PATCH 011/238] New v0.6.0 release. --- MANIFEST.in | 2 ++ docs/source/conf.py | 4 ++-- sc2reader/__init__.py | 2 ++ setup.py | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 6b5be921..adca023d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,7 @@ include LICENSE.txt include CONTRIBUTORS.txt +include CONTRIBUTING.md +include STYLE_GUIDE.rst include README.rst include CHANGELOG.rst recursive-include sc2reader *.csv *.json diff --git a/docs/source/conf.py b/docs/source/conf.py index 72686655..ede171f8 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,10 +50,10 @@ # built documents. # # The short X.Y version. -version = '0.5.1' +version = '0.6.0' # The full version, including alpha/beta/rc tags. -release = '0.5.0' +release = '0.6.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 5a965474..928d049f 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division +__version__ = "0.6.0" + import os import sys diff --git a/setup.py b/setup.py index 113a1b2b..56361dce 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.5.1', + version='0.6.0', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From 0f5e949d502df4fb5e5f78032cd7de0902f97a93 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 08:45:41 -0400 Subject: [PATCH 012/238] Fix changelog formatting. --- CHANGELOG.rst | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cea71265..f9812de4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -28,16 +28,16 @@ Changed Stuff (non-backwards compatible!): * Player.uid is now the user id of the player (was player.cid) * PersonDict can no longer be constructed from a player list and new players cannot be added by string (name). Only integer keys accepted for setting. * Log a warning instead of throwing an exception when using an unknown colors. - * An unknown hex value will use the hex value as the name. - * An unknown color name will use 0x000000 as the color. + * An unknown hex value will use the hex value as the name. + * An unknown color name will use 0x000000 as the color. * Finally straighten out all these replay player list/dicts - * human/humans -> human entities, indexed by uid - * computer/computers -> computer entities, indexed by pid - * player/players -> actually playing in the game, indexed by pid - * observer/observers -> observing the game, indexed by uid - * entities -> players + observers || humans + computers, indexed by pid - * client/clients - (deprecated) same as human/humans - * people/person - (deprecated) same as entity/entities + * human/humans -> human entities, indexed by uid + * computer/computers -> computer entities, indexed by pid + * player/players -> actually playing in the game, indexed by pid + * observer/observers -> observing the game, indexed by uid + * entities -> players + observers || humans + computers, indexed by pid + * client/clients - (deprecated) same as human/humans + * people/person - (deprecated) same as entity/entities 0.5.1 - June 1, 2013 @@ -58,22 +58,22 @@ Changed Stuff (non-backwards compatible!): * Support for all replays (arcade replays now parse!) from all versions * Support for the new replay.tracker.events added in 2.0.8 - * Units now have birth frame, death frame, and owner information - * New events for (roughly) tracking unit positions - * New events for tracking player resource stockpiles and collection rates - * More! + * Units now have birth frame, death frame, and owner information + * New events for (roughly) tracking unit positions + * New events for tracking player resource stockpiles and collection rates + * More! * Much more comprehensive documentation. * New unit model - * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. - * Units that can transform maintain a full type history. - * Units are correctly and uniquely identified by unit_id alone. + * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. + * Units that can transform maintain a full type history. + * Units are correctly and uniquely identified by unit_id alone. * Updated unit meta data: - * Mineral Cost - * Vespene Cost - * Supply Cost - * Flags for is_worker, is_army, is_building + * Mineral Cost + * Vespene Cost + * Supply Cost + * Flags for is_worker, is_army, is_building * Added ability meta data: - * is_build flag marking abilities that create units - * build_unit indicating the unit type that is built - * build_time indicating the build time for the ability + * is_build flag marking abilities that create units + * build_unit indicating the unit type that is built + * build_time indicating the build time for the ability From 3f020da11291565f965981b61d77ade35171460c Mon Sep 17 00:00:00 2001 From: David Joerg Date: Tue, 13 Aug 2013 12:06:33 -0400 Subject: [PATCH 013/238] seems to work OK --- sc2reader/engine/__init__.py | 1 + sc2reader/engine/engine.py | 3 + sc2reader/engine/plugins/creeptracker.py | 100 ++++++++++++++--------- 3 files changed, 65 insertions(+), 39 deletions(-) diff --git a/sc2reader/engine/__init__.py b/sc2reader/engine/__init__.py index 9a27a9c5..77e20fe0 100644 --- a/sc2reader/engine/__init__.py +++ b/sc2reader/engine/__init__.py @@ -13,6 +13,7 @@ def setGameEngine(engine): module = sys.modules[__name__] module.run = engine.run + module.plugins = engine.plugins module.register_plugin = engine.register_plugin module.register_plugins = engine.register_plugins diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 7026dfdf..1ab11244 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -94,6 +94,9 @@ def register_plugins(self, *plugins): for plugin in plugins: self.register_plugin(plugin) + def plugins(self): + return self._plugins + def run(self, replay): # A map of [event.name] => event handlers in plugin registration order # ranked from most generic to most specific diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index 23053574..5015f1cd 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -from itertools import dropwhile from sets import Set from Image import open as PIL_open from Image import ANTIALIAS from StringIO import StringIO from collections import defaultdict +from itertools import tee # The creep tracker plugin class CreepTracker(object): @@ -16,40 +16,62 @@ class CreepTracker(object): This uses the creep_tracker class to calculate the features ''' def handleInitGame(self, event, replay): + try: if len( replay.tracker_events) ==0 : return if replay.map is None: replay.load_map() self.creepTracker = creep_tracker(replay) for player in replay.players: + if player.play_race[0] == 'Z': self.creepTracker.init_cgu_lists(player.pid) + except Exception as e: + print("Whoa! {}".format(e)) + pass def handleUnitDiedEvent(self, event, replay): + try: self.creepTracker.remove_from_list(event.unit_id,event.second) + except Exception as e: + print("Whoa! {}".format(e)) + pass + def handleUnitInitEvent(self,event,replay): + try: if event.unit_type_name in ["CreepTumor", "Hatchery","NydusCanal"] : self.creepTracker.add_to_list(event.control_pid,event.unit_id,\ (event.x, event.y), event.unit_type_name,event.second) + except Exception as e: + print("Whoa! {}".format(e)) + pass def handleUnitBornEvent(self,event,replay): + try: if event.unit_type_name== "Hatchery": self.creepTracker.add_to_list(event.control_pid, event.unit_id,\ (event.x,event.y),event.unit_type_name,event.second) + except Exception as e: + print("Whoa! {}".format(e)) + pass def handleEndGame(self, event, replay): + try: if len( replay.tracker_events) ==0 : return - for player_id in replay.player: - self.creepTracker.reduce_cgu_per_minute(player_id) for player in replay.players: + if player.play_race[0] == 'Z': + self.creepTracker.reduce_cgu_per_minute(player.pid) player.creep_spread_by_minute = self.creepTracker.get_creep_spread_area(player.pid) - for player in replay.players: if player.creep_spread_by_minute: player.max_creep_spread = max(player.creep_spread_by_minute.items(),key=lambda x:x[1]) else: ## Else statement is for players with no creep spread(ie: not Zerg) player.max_creep_spread =0 + except Exception as e: + print("Whoa! {}".format(e)) + pass + ## The class used to used to calculate the creep spread class creep_tracker(): @@ -76,7 +98,6 @@ def __init__(self,replay): for x in self.unit_name_to_radius: self.radius_to_coordinates[self.unit_name_to_radius[x]] =\ self.radius_to_map_positions(self.unit_name_to_radius[x]) - #Get map information replayMap = replay.map # extract image from replay package @@ -95,7 +116,7 @@ def __init__(self,replay): self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) mapOffsetX= replayMap.map_info.camera_left mapOffsetY = replayMap.map_info.camera_bottom - mapCenter = [mapOffsetX + cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] + mapCenter = [mapOffsetX+ cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] # this is the center of the minimap image, in pixel coordinates imageCenter = [(self.map_width/2), self.map_height/2] # this is the scaling factor to go from the SC2 coordinate @@ -148,40 +169,42 @@ def remove_from_list(self,unit_id,time_frame): length_cgu_list = len(self.creep_gen_units[player_id]) if length_cgu_list ==0: break - cgu_per_player = self.creep_gen_units[player_id]\ - [length_cgu_list-1] - creep_generating_died = dropwhile(lambda x: x[0] != \ - unit_id, cgu_per_player) + cgu_per_player = self.creep_gen_units[player_id] [length_cgu_list-1] + creep_generating_died =filter(lambda x:x[0]==unit_id,cgu_per_player) for creep_generating_died_unit in creep_generating_died: - cgu_per_player.remove(creep_generating_died_unit) - self.creep_gen_units[player_id].append(cgu_per_player) + new_cgu_per_player = filter(lambda x:x != creep_generating_died_unit, cgu_per_player ) + self.creep_gen_units[player_id].append(new_cgu_per_player) self.creep_gen_units_times[player_id].append(time_frame) + def cgu_gen_times_to_chunks(self,cgu_time_list): + ## this function returns the index and value of every cgu time + maximum_cgu_time = max(cgu_time_list) + for i in range(0, maximum_cgu_time): + a = filter(lambda (x,y): int(y/60)==i, enumerate(cgu_time_list)) + if len(a)>0: + yield a + + def cgu_in_min_to_cgu_units(self,player_id,cgu_in_minutes): + ## this function takes index and value of CGU times and returns + ## the cgu units with the maximum length + for cgu_per_minute in cgu_in_minutes: + indexes = map(lambda x:x[0], cgu_per_minute) + cgu_units = list() + for index in indexes: + cgu_units.append(self.creep_gen_units[player_id][index]) + cgu_max_in_minute = max(cgu_units,key = len) + yield cgu_max_in_minute + def reduce_cgu_per_minute(self,player_id): #the creep_gen_units_lists contains every single time frame #where a CGU is added, #To reduce the calculations required, the time frame containing #the most cgus every minute will be used to represent that minute - last_minute_found = 0 - cgu_per_player_new = list() - cgu_time_per_player_new = list() - cgu_last_minute_list = list() - for index,cgu_time in enumerate(self.creep_gen_units_times[player_id]): - cgu_last_minute_list.append(self.creep_gen_units[player_id][index]) - if (cgu_time/60) ==0: - cgu_per_player_new.append(self.creep_gen_units[player_id][0]) - cgu_time_per_player_new.append(0) - cgu_last_minute_list = list() - if (cgu_time/60)>last_minute_found: - cgu_max_in_min = max(cgu_last_minute_list,key = len) - cgu_per_player_new.append(cgu_max_in_min) - cgu_max_in_min_index = self.creep_gen_units[player_id].index(cgu_max_in_min) - cgu_time_per_player_new.append(self.creep_gen_units_times[player_id][cgu_max_in_min_index]) - last_minute_found = cgu_time/60 - cgu_last_minute_list=list() - - self.creep_gen_units[player_id] = cgu_per_player_new - self.creep_gen_units_times[player_id] = cgu_time_per_player_new + cgu_per_minute1, cgu_per_minute2 = tee (self.cgu_gen_times_to_chunks(self.creep_gen_units_times[player_id])) + cgu_unit_max_per_minute = self.cgu_in_min_to_cgu_units(player_id,cgu_per_minute1) + minutes = map(lambda x:int(x[0][1]/60)*60, cgu_per_minute2) + self.creep_gen_units[player_id] = list(cgu_unit_max_per_minute) + self.creep_gen_units_times[player_id] = list(minutes) def get_creep_spread_area(self,player_id): ## iterates through all cgus and and calculate the area @@ -192,12 +215,14 @@ def get_creep_spread_area(self,player_id): # convert event coords to minimap coords cgu_radius = self.convert_cgu_radius_event_to_map_coord(cgu_radius) creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) - cgu_last_event_time = self.creep_gen_units_times[player_id][index]/60 + cgu_event_time = self.creep_gen_units_times[player_id][index] + cgu_event_time_str=str(int(cgu_event_time/60))+":"+str(cgu_event_time%60) if self.debug: - self.print_image(creep_area_positions,player_id,cgu_last_event_time) + self.print_image(creep_area_positions,player_id,cgu_event_time_str) creep_area = len(creep_area_positions) - self.creep_spread_by_minute[player_id][cgu_last_event_time]=\ + self.creep_spread_by_minute[player_id][cgu_event_time]=\ float(creep_area)/self.mapSize*100 + return self.creep_spread_by_minute[player_id] def cgu_radius_to_map_positions(self,cgu_radius,radius_to_coordinates): @@ -229,7 +254,7 @@ def print_image(self,total_points_on_map,player_id,time_stamp): creeped_image.save(creeped_imageIO, "png") self.creep_spread_image_by_minute[player_id][time_stamp]=creeped_imageIO ##debug for print out the images - f = open(str(player_id)+'image'+str(time_stamp)+'.png','w') + f = open(str(player_id)+'image'+time_stamp+'.png','w') f.write(creeped_imageIO.getvalue()) creeped_imageIO.close() f.close() @@ -256,6 +281,3 @@ def convert_event_coord_to_map_coord(self,x,y): imageX = int(self.map_height - self.transX + self.image_scale * x) imageY = int(self.transY - self.image_scale * y) return imageX, imageY - - - From 1c8e7e31a66ee9b09879d9707476ad88f17c93b9 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 15:26:29 -0400 Subject: [PATCH 014/238] APMTracker needs to track APM for observers as well as players. --- sc2reader/engine/plugins/apm.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py index 1074cd47..0d69b293 100644 --- a/sc2reader/engine/plugins/apm.py +++ b/sc2reader/engine/plugins/apm.py @@ -18,10 +18,10 @@ class APMTracker(object): name = 'APMTracker' def handleInitGame(self, event, replay): - for player in replay.players: - player.apm = defaultdict(int) - player.aps = defaultdict(int) - player.seconds_played = replay.length.seconds + for human in replay.humans: + human.apm = defaultdict(int) + human.aps = defaultdict(int) + human.seconds_played = replay.length.seconds def handlePlayerActionEvent(self, event, replay): event.player.aps[event.second] += 1 @@ -31,8 +31,8 @@ def handlePlayerLeaveEvent(self, event, replay): event.player.seconds_played = event.second def handleEndGame(self, event, replay): - for player in replay.players: - if len(player.apm.keys()) > 0: - player.avg_apm = sum(player.aps.values())/float(player.seconds_played)*60 + for human in replay.humans: + if len(human.apm.keys()) > 0: + human.avg_apm = sum(human.aps.values())/float(human.seconds_played)*60 else: - player.avg_apm = 0 + human.avg_apm = 0 From 2b9c477eb51ac5041b76ab22aec59753a3730554 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 17:17:28 -0400 Subject: [PATCH 015/238] Make sure to process game events last. --- sc2reader/resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index ae2364b2..e31792fa 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -483,7 +483,7 @@ def load_game_events(self): return self.game_events = self.raw_data['replay.game.events'] - self.events = sorted(self.game_events+self.events, key=lambda e: e.frame) + self.events = sorted(self.events+self.game_events, key=lambda e: e.frame) # hideous hack for HotS 2.0.0.23925, see https://github.com/GraylinKim/sc2reader/issues/87 if self.events and self.events[-1].frame > self.frames: From 3423130b5804fa0f28081f83db724b6140ba1f62 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 17:50:37 -0400 Subject: [PATCH 016/238] Add regression test for event order. --- test_replays/event_order.SC2Replay | Bin 0 -> 69989 bytes test_replays/test_all.py | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 test_replays/event_order.SC2Replay diff --git a/test_replays/event_order.SC2Replay b/test_replays/event_order.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..9cdfa1ca1c670db456e83af6a4eb2aa35b033842 GIT binary patch literal 69989 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 2edc67e5..d0af7009 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -358,6 +358,9 @@ def test_gameheartnormalizer_plugin(self): self.assertEqual(replay.teams[1].players[0].name, 'LiquidTaeJa') self.assertEqual(replay.winner, replay.teams[0]) + def test_replay_event_order(self): + replay = sc2reader.load_replay("test_replays/event_order.SC2Replay") + if __name__ == '__main__': unittest.main() From e0feb866b2f8f3300feafd49d8b31af07d740e4f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 18:29:55 -0400 Subject: [PATCH 017/238] Bump version to v0.6.1 [skip ci] --- docs/source/conf.py | 4 ++-- sc2reader/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index ede171f8..3eb38153 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,10 +50,10 @@ # built documents. # # The short X.Y version. -version = '0.6.0' +version = '0.6.1' # The full version, including alpha/beta/rc tags. -release = '0.6.0' +release = '0.6.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 928d049f..93e80ebb 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.0" +__version__ = "0.6.1" import os import sys diff --git a/setup.py b/setup.py index 56361dce..6ed4e196 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.0', + version='0.6.1', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From 1c42c9a1089db0763d5e6678b692142a12cc117d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 18:32:40 -0400 Subject: [PATCH 018/238] Update changelog for v0.6.1 [skip ci] --- CHANGELOG.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f9812de4..0f464c76 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,12 @@ CHANGELOG ============ +0.6.1 - August 13th 2013 +------------------------ + +* Fix bug in event ordering that caused game events to process before tracker events. +* Fix APMTracker to count APM for all humans, not just players. + 0.6.0 - August 12th 2013 ------------------------ From bfef5be26baad8a6a58656ae3e129c4824385271 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Wed, 14 Aug 2013 16:33:18 -0400 Subject: [PATCH 019/238] fix more bugs eeccchhh --- sc2reader/engine/plugins/creeptracker.py | 29 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index 5015f1cd..e6e0a418 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -104,16 +104,25 @@ def __init__(self,replay): mapsio = StringIO(replayMap.minimap) im = PIL_open(mapsio) ##remove black box around minimap - cropped = im.crop(im.getbbox()) - cropsize = cropped.size + +# https://github.com/jonomon/sc2reader/commit/2a793475c0358989e7fda4a75642035a810e2274 +# cropped = im.crop(im.getbbox()) +# cropsize = cropped.size + + cropsizeX = replay.map.map_info.camera_right - replay.map.map_info.camera_left + cropsizeY = replay.map.map_info.camera_top - replay.map.map_info.camera_bottom + cropsize = (cropsizeX,cropsizeY) + self.map_height = 100.0 # resize height to MAPHEIGHT, and compute new width that # would preserve aspect ratio self.map_width = int(cropsize[0] * (float(self.map_height) / cropsize[1])) self.mapSize =self.map_height * self.map_width + ## the following parameters are only needed if minimaps have to be printed - minimapSize = ( self.map_width,int(self.map_height) ) - self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) +# minimapSize = ( self.map_width,int(self.map_height) ) +# self.minimap_image = cropped.resize(minimapSize, ANTIALIAS) + mapOffsetX= replayMap.map_info.camera_left mapOffsetY = replayMap.map_info.camera_bottom mapCenter = [mapOffsetX+ cropsize[0]/2.0, mapOffsetY + cropsize[1]/2.0] @@ -121,7 +130,7 @@ def __init__(self,replay): imageCenter = [(self.map_width/2), self.map_height/2] # this is the scaling factor to go from the SC2 coordinate # system to pixel coordinates - self.image_scale = float(self.map_height) / cropsize[0] + self.image_scale = float(self.map_height) / cropsize[1] self.transX =imageCenter[0] + self.image_scale * (mapCenter[0]) self.transY = imageCenter[1] + self.image_scale * (mapCenter[1]) @@ -172,7 +181,7 @@ def remove_from_list(self,unit_id,time_frame): cgu_per_player = self.creep_gen_units[player_id] [length_cgu_list-1] creep_generating_died =filter(lambda x:x[0]==unit_id,cgu_per_player) for creep_generating_died_unit in creep_generating_died: - new_cgu_per_player = filter(lambda x:x != creep_generating_died_unit, cgu_per_player ) + new_cgu_per_player = list(filter(lambda x:x != creep_generating_died_unit, cgu_per_player )) self.creep_gen_units[player_id].append(new_cgu_per_player) self.creep_gen_units_times[player_id].append(time_frame) @@ -180,7 +189,7 @@ def cgu_gen_times_to_chunks(self,cgu_time_list): ## this function returns the index and value of every cgu time maximum_cgu_time = max(cgu_time_list) for i in range(0, maximum_cgu_time): - a = filter(lambda (x,y): int(y/60)==i, enumerate(cgu_time_list)) + a = list(filter(lambda x_y: x_y[1]//60==i , enumerate(cgu_time_list))) if len(a)>0: yield a @@ -202,7 +211,7 @@ def reduce_cgu_per_minute(self,player_id): #the most cgus every minute will be used to represent that minute cgu_per_minute1, cgu_per_minute2 = tee (self.cgu_gen_times_to_chunks(self.creep_gen_units_times[player_id])) cgu_unit_max_per_minute = self.cgu_in_min_to_cgu_units(player_id,cgu_per_minute1) - minutes = map(lambda x:int(x[0][1]/60)*60, cgu_per_minute2) + minutes = map(lambda x:int(x[0][1]//60)*60, cgu_per_minute2) self.creep_gen_units[player_id] = list(cgu_unit_max_per_minute) self.creep_gen_units_times[player_id] = list(minutes) @@ -216,7 +225,7 @@ def get_creep_spread_area(self,player_id): cgu_radius = self.convert_cgu_radius_event_to_map_coord(cgu_radius) creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) cgu_event_time = self.creep_gen_units_times[player_id][index] - cgu_event_time_str=str(int(cgu_event_time/60))+":"+str(cgu_event_time%60) + cgu_event_time_str=str(int(cgu_event_time//60))+":"+str(cgu_event_time%60) if self.debug: self.print_image(creep_area_positions,player_id,cgu_event_time_str) creep_area = len(creep_area_positions) @@ -278,6 +287,6 @@ def convert_cgu_radius_event_to_map_coord(self,cgu_radius): return cgu_radius_new def convert_event_coord_to_map_coord(self,x,y): - imageX = int(self.map_height - self.transX + self.image_scale * x) + imageX = int(self.map_width - self.transX + self.image_scale * x) imageY = int(self.transY - self.image_scale * y) return imageX, imageY From 6de72a036c2275ecdeb5301fb1cb827c0ca88bf8 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 16 Aug 2013 12:23:10 -0400 Subject: [PATCH 020/238] Remove dated download URL [skip ci]. --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index 6ed4e196..17031b14 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,6 @@ author="Graylin Kim", author_email="graylin.kim@gmail.com", url="https://github.com/GraylinKim/sc2reader", - download_url="https://github.com/GraylinKim/sc2reader/archive/v0.5.1.tar.gz", platforms=["any"], From 82ad817f2442084730c03a9b1ebc595bcccb65cf Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 16 Aug 2013 12:49:22 -0400 Subject: [PATCH 021/238] Better fix for hours/minutes on game length. --- sc2reader/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/utils.py b/sc2reader/utils.py index be1f1253..94fb5637 100644 --- a/sc2reader/utils.py +++ b/sc2reader/utils.py @@ -252,12 +252,12 @@ class Length(timedelta): @property def hours(self): """ The number of hours in represented. """ - return int(self.seconds/3600) + return self.seconds//3600 @property def mins(self): """ The number of minutes in excess of the hours. """ - return int(self.seconds/60) % 60 + return self.seconds//60 % 60 @property def secs(self): From cc34ecf9b695a5f1e92847508a853af91000c790 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 14:55:48 -0400 Subject: [PATCH 022/238] Coverage reporting fix refs #145. --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 280df185..3d6c9240 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,9 +8,10 @@ python: install: - python setup.py install - pip install coveralls + - mkdir local_cache script: - - coverage run test_replays/test_all.py - - coverage run --append test_s2gs/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader test_replays/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader --append test_s2gs/test_all.py after_success: - coveralls branches: From 4e638e8d350a5f33b3283638321566c778b29f68 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 15:53:31 -0400 Subject: [PATCH 023/238] Fix FileCaching for python3. --- sc2reader/factories/sc2factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/factories/sc2factory.py b/sc2reader/factories/sc2factory.py index ebc2e6c7..7518767b 100644 --- a/sc2reader/factories/sc2factory.py +++ b/sc2reader/factories/sc2factory.py @@ -274,7 +274,7 @@ def cache_set(self, cache_key, value): if not os.path.exists(bucket_dir): os.makedirs(bucket_dir) - with open(cache_path, 'w') as out: + with open(cache_path, 'wb') as out: out.write(value) def cache_path(self, cache_key): From 380ab282d843dd8448fffcadb8d8f035692cc82b Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 15:55:28 -0400 Subject: [PATCH 024/238] Attempt to fix coverage take 2. --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3d6c9240..f640c349 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,8 @@ install: - pip install coveralls - mkdir local_cache script: - - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader test_replays/test_all.py - - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader --append test_s2gs/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader test_replays/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader --append test_s2gs/test_all.py after_success: - coveralls branches: From 7f448d8f3c8ffae822495d7df2db4d9792ba91c1 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 16:36:46 -0400 Subject: [PATCH 025/238] Coverage fix take 3, use develop and not install. --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f640c349..b1319cc2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,12 @@ python: - 3.3 - pypy install: - - python setup.py install + - python setup.py develop - pip install coveralls - mkdir local_cache script: - - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader test_replays/test_all.py - - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader --append test_s2gs/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader test_replays/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader --append test_s2gs/test_all.py after_success: - coveralls branches: From 9692db7e602adebefca9f18b792ea6aa0a1a5713 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 31 Aug 2013 20:23:23 -0400 Subject: [PATCH 026/238] Small clarification on the unit.finished_at time. --- sc2reader/data/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 769f7287..530837bc 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -48,7 +48,8 @@ def __init__(self, unit_id, flags): #: The frame the unit was finished at. Only available for 2.0.8+ replays. #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDoneEvent` is received. For units - #: that are born and not initiated this will be the same as :attr:`started_at`. + #: that are born and not initiated this will be the frame that the :class:`~sc2reader.events.tracker.UnitBornEvent` + #: is received. self.finished_at = None #: The frame the unit died at. Only available for 2.0.8+ replays. From 79fe810ac04f6f8fd029ced9d5e8a9944addafa3 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 31 Aug 2013 20:24:54 -0400 Subject: [PATCH 027/238] Substantial performance improvements. --- sc2reader/decoders.py | 23 ++++++++++------------- sc2reader/readers.py | 6 ++++-- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index ae233547..e0406b3f 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -176,7 +176,7 @@ def byte_align(self): def read_uint8(self): """ Returns the next 8 bits as an unsigned integer """ - data = self._buffer.read_uint8() + data = ord(self._buffer.read(1)) if self._bit_shift != 0: lo_mask, hi_mask = self._bit_masks[self._bit_shift] @@ -231,7 +231,7 @@ def read_uint64(self): def read_vint(self): """ Reads a signed integer of variable length """ - byte = self.read_uint8() + byte = ord(self._buffer.read(1)) negative = byte & 0x01 result = (byte & 0x7F) >> 1 bits = 6 @@ -335,8 +335,8 @@ def read_struct(self, datatype=None): """ Reads a nested data structure. If the type is not specified the first byte is used as the type identifier. """ - self.byte_align() # I think this is true - datatype = self.read_uint8() if datatype is None else datatype + self.byte_align() + datatype = ord(self._buffer.read(1)) if datatype is None else datatype if datatype == 0x00: # array data = [self.read_struct() for i in range(self.read_vint())] @@ -347,31 +347,28 @@ def read_struct(self, datatype=None): elif datatype == 0x02: # blob length = self.read_vint() - data = self.read_bytes(length) + data = self._buffer.read_bytes(length) elif datatype == 0x03: # choice flag = self.read_vint() data = self.read_struct() elif datatype == 0x04: # optional - exists = self.read_uint8() != 0 + exists = self._buffer.read_uint8() != 0 data = self.read_struct() if exists else None elif datatype == 0x05: # Struct - data = OrderedDict() entries = self.read_vint() - for i in range(entries): - key = self.read_vint() # Must be read first - data[key] = self.read_struct() + data = dict([(self.read_vint(), self.read_struct()) for i in range(entries)]) elif datatype == 0x06: # u8 - data = self.read_uint8() + data = ord(self._buffer.read(1)) elif datatype == 0x07: # u32 - data = self.read_bytes(4) # self.read_uint32() + data = self._buffer.read_bytes(4) # self.read_uint32() elif datatype == 0x08: # u64 - data = self.read_unit64() + data = self._buffer.read_unit64() elif datatype == 0x09: # vint data = self.read_vint() diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 7f7e1dca..5e980e36 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -2077,8 +2077,10 @@ def __call__(self, data, replay): frames = 0 events = list() while not decoder.done(): - frames += decoder.read_struct() - etype = decoder.read_struct() + decoder._buffer.read(3) # 03 00 09 + frames += decoder.read_vint() + decoder._buffer.read(1) # 09 + etype = decoder.read_vint() event_data = decoder.read_struct() event = self.EVENT_DISPATCH[etype](frames, event_data, replay.build) events.append(event) From e244c3579b388a900377264358b45c6858c7391a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 31 Aug 2013 20:26:12 -0400 Subject: [PATCH 028/238] Fix the tutorial, thanks sil5555. --- docs/source/tutorials/prettyprinter.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/tutorials/prettyprinter.rst b/docs/source/tutorials/prettyprinter.rst index aa817977..1eb97b45 100644 --- a/docs/source/tutorials/prettyprinter.rst +++ b/docs/source/tutorials/prettyprinter.rst @@ -75,7 +75,7 @@ The replay object itself is a dumb data structure; there are no access methods o datetime.datetime(2011, 9, 20, 21, 8, 8) >>> replay.type '2v2' - >>> replay.map + >>> replay.map_name 'The Boneyard' >>> replay.length # string format is MM.SS Length(0, 1032) @@ -104,7 +104,7 @@ So now all we need to do is build the ouput using the available replay attribute -------------------------------------------- SC2 Version {release_string} {category} Game, {date} - {type} on {map} + {type} on {map_name} Length: {length} """.format(**replay.__dict__) @@ -120,7 +120,7 @@ Similar formatting written in a more verbose and less pythonic way: output += "--------------------------------------------\n" output += "SC2 Version "+replay.release_string+'\n' output += replay.category+" Game, "+str(replay.date)+'\n' - output += replay.type+" on "+replay.map+'\n' + output += replay.type+" on "+replay.map_name+'\n' output += "Length: "+str(replay.length) return output @@ -163,7 +163,7 @@ So lets put it all together into the final script, ``prettyPrinter.py``: -------------------------------------------- SC2 Version {release_string} {category} Game, {date} - {type} on {map} + {type} on {map_name} Length: {length} {formattedTeams} From c89e58d1158d7157edfbd76691eb190cac32f6be Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Sep 2013 12:49:11 -0400 Subject: [PATCH 029/238] Fix up a lot of small issues in the tutorial. [skip ci] --- docs/source/tutorials/prettyprinter.rst | 49 +++++++++++++------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/docs/source/tutorials/prettyprinter.rst b/docs/source/tutorials/prettyprinter.rst index 1eb97b45..a8584620 100644 --- a/docs/source/tutorials/prettyprinter.rst +++ b/docs/source/tutorials/prettyprinter.rst @@ -38,18 +38,18 @@ The first step is to get a script up to accept a path from the command line. if __name__ == '__main__': main() -Now we need to use sc2reader to read that file into a :class:`Replay` object that contains all the information that we are looking for. +Now we need to use sc2reader to read that file into a :class:`~sc2reader.resources.Replay` object that contains all the information that we are looking for. :: - from sc2reader import SC2Reader + from sc2reader.factories import SC2Factory def main(): path = sys.argv[1] - sc2 = SC2Reader() + sc2 = SC2Factory() replay = sc2.load_replay(path) -In the code above, we imported the :class:`SC2Reader` class from the sc2reader package. This class is a factory class that is used to load replays. This factory is configurable in a variety of ways but sane defaults are provided so that most users probably won't need to do any substantial configuration. In fact, because many users will never need to configure the SC2Reader factory the package provides a default factory that can be used by operating directly on the sc2reader package. +In the code above, we imported the :class:`~sc2reader.factories.SC2Factory` class from the ``sc2reader.factories`` package. This class is a factory class that is used to load replays. This factory is configurable in a variety of ways but sane defaults are provided so that most users probably won't need to do any substantial configuration. In fact, because many users will never need to configure the SC2Factory the package provides a default factory that can be used by operating directly on the sc2reader package. :: @@ -61,7 +61,7 @@ In the code above, we imported the :class:`SC2Reader` class from the sc2reader p We'll use this short hand method for the rest of this tutorial. -The replay object itself is a dumb data structure; there are no access methods only attributes. For our script we will need the following set of attributes, a full list of attributes can be found on the :class:`Replay` reference page. +The replay object itself is a dumb data structure; there are no access methods only attributes. For our script we will need the following set of attributes, a full list of attributes can be found on the :class:`~sc2reader.resources.Replay` reference page. :: @@ -71,13 +71,13 @@ The replay object itself is a dumb data structure; there are no access methods o '1.4.0.19679' >>> replay.category 'Ladder' - >>> replay.date + >>> replay.end_time datetime.datetime(2011, 9, 20, 21, 8, 8) >>> replay.type '2v2' >>> replay.map_name 'The Boneyard' - >>> replay.length # string format is MM.SS + >>> replay.game_length # string format is MM.SS Length(0, 1032) >>> replay.teams [, ] @@ -88,7 +88,7 @@ Many of the replay attributes are nested data structures which are generally all >>> replay.teams[0].players[0].color.hex 'B4141E' - >>> replay.player['Remedy'].url + >>> replay.player.name('Remedy').url 'http://us.battle.net/sc2/en/profile/2198663/1/Remedy/' Each of these nested structures can be found either on its own reference page or lumped together with the other minor structures on the Misc Structures page. @@ -103,13 +103,13 @@ So now all we need to do is build the ouput using the available replay attribute {filename} -------------------------------------------- SC2 Version {release_string} - {category} Game, {date} + {category} Game, {start_time} {type} on {map_name} - Length: {length} + Length: {game_length} """.format(**replay.__dict__) -In the code above we are taking advantage of the dump data structure design of the :class:`Replay` objects and unpacking its internal dictionary into the string.format method. If you aren't familiar with some of these concepts they are well worth reading up on; string templates are awesome! +In the code above we are taking advantage of the dump data structure design of the :class:`~sc2reader.resources.Replay` objects and unpacking its internal dictionary into the ``string.format`` method. If you aren't familiar with some of these concepts they are well worth reading up on; string templates are awesome! Similar formatting written in a more verbose and less pythonic way: @@ -119,12 +119,12 @@ Similar formatting written in a more verbose and less pythonic way: output = replay.filename+'\n' output += "--------------------------------------------\n" output += "SC2 Version "+replay.release_string+'\n' - output += replay.category+" Game, "+str(replay.date)+'\n' + output += replay.category+" Game, "+str(replay.start_time)+'\n' output += replay.type+" on "+replay.map_name+'\n' - output += "Length: "+str(replay.length) + output += "Length: "+str(replay.game_length) return output -Next we need to format the teams for display. The :class:`Team` and :class:`Player` data structures are pretty straightforward as well so we can apply a bit of string formatting and produce this: +Next we need to format the teams for display. The :class:`~sc2reader.objects.Team` and :class:`~sc2reader.objects.Player` data structures are pretty straightforward as well so we can apply a bit of string formatting and produce this: :: @@ -162,9 +162,9 @@ So lets put it all together into the final script, ``prettyPrinter.py``: {filename} -------------------------------------------- SC2 Version {release_string} - {category} Game, {date} + {category} Game, {start_time} {type} on {map_name} - Length: {length} + Length: {game_length} {formattedTeams} """.format(formattedTeams=formatTeams(replay), **replay.__dict__) @@ -182,10 +182,10 @@ So lets put it all together into the final script, ``prettyPrinter.py``: Making Improvements --------------------------- -So our script works fine for single files, but what if you want to handle multiple files or directories? sc2reader provides two functions for loading replays: :meth:`~SC2Reader.load_replay` and :meth:`~SC2Reader.load_replays` which return a single replay and a list respectively. :meth:`~SC2Reader.load_replay` was used above for convenience but :meth:`~SC2Reader.load_replays` is much more versitile. Here's the difference: +So our script works fine for single files, but what if you want to handle multiple files or directories? sc2reader provides two functions for loading replays: :meth:`~sc2reader.factories.SC2Factory.load_replay` and :meth:`~sc2reader.factories.SC2Factory.load_replays` which return a single replay and a list respectively. :meth:`~sc2reader.factories.SC2Factory.load_replay` was used above for convenience but :meth:`~sc2reader.factories.SC2Factory.load_replays` is much more versitile. Here's the difference: -* :meth:`~SC2Reader.load_replay`: accepts a file path or an opened file object. -* :meth:`~SC2Reader.load_replays`: accepts a collection of opened file objects or a path (both directory and file paths acceptable) or a collection of paths. You could even pass in a collection of mixed paths and opened file objects. +* :meth:`~sc2reader.factories.SC2Factory.load_replay`: accepts a file path or an opened file object. +* :meth:`~sc2reader.factories.SC2Factory.load_replays`: accepts a collection of opened file objects or file paths. Can also accept a single path to a directory; files will be pulled from the directory using :func:`~sc2reader.utils.get_files` and the given options. With this in mind, lets make a slight change to our main function to support any number of paths to any combination of files and directories: @@ -203,13 +203,13 @@ Any time that you start dealing with directories or collections of files you run * exclude: Default []. When recursing directories you can choose to exclude directories from the file search by directory name (not full path). * followlinks: Default false. When recursing directories, enables or disables the follow symlinks behavior. -Remember above that the short hand notation that we have been using works with a default instance of the SC2Reader class. :class:`SC2Reader` factories can be customized either on construction or with the :meth:`~SC2Reader.configure` method. +Remember above that the short hand notation that we have been using works with a default instance of the SC2Factory class. :class:`sc2reader.factories.SC2Factory` objects can be customized either on construction or with the :meth:`~sc2reader.factories.SC2Factory.configure` method. :: - from sc2reader import SC2Reader + from sc2reader.factories import SC2Factory - sc2 = SC2Reader( + sc2 = SC2Factory( directory='~/Documents/Starcraft II/Multiplayer/Replays', exclude=['Customs','Pros'], followlinks=True @@ -243,6 +243,7 @@ There are 4 available load levels: * 0: Parses the replay header for version, build, and length information * 1: Also parses the replay.details, replay.attribute.events and replay.initData files for game settings, map, and time information * 2: Also parses the replay.message.events file and constructs game teams and players. -* 3: Also parses the replay.game.events file for player action events. +* 3: Also parses the replay.tracker.events file +* 4: Also parses the replay.game.events file for player action events. -So that's it! An ideal prettyPrinter script might let the user configure these options as arguments using the argparse library. Such an expansion is beyond the scope of sc2reader though, so we'll leave it that one to you. +So that's it! An ideal prettyPrinter script might let the user configure these options as arguments using the ``argparse`` library. Such an expansion is beyond the scope of sc2reader though, so we'll leave it that one to you. From 8c8c908fcbbfde19de33f95514c441c1b26f9245 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 5 Sep 2013 11:24:46 -0400 Subject: [PATCH 030/238] When we have tracker events, don't change type with game events. Fixes #152. --- sc2reader/engine/plugins/context.py | 5 ++++- sc2reader/events/game.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 63bf0bfd..2bd267e7 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -49,9 +49,12 @@ def handleTargetAbilityEvent(self, event, replay): if event.target_unit_id in replay.objects: event.target = replay.objects[event.target_unit_id] - if not event.target.is_type(event.target_unit_type): + if not replay.tracker_events and not event.target.is_type(event.target_unit_type): replay.datapack.change_type(event.target, event.target_unit_type, event.frame) else: + # Often when the target_unit_id is not in replay.objects it is 0 because it + # is a target building/destructable hidden by fog of war. Perhaps we can match + # it through the fog using location? unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, 0x00, event.frame) event.target = unit replay.objects[event.target_unit_id] = unit diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 7ff46188..720b23a9 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -278,9 +278,12 @@ def __init__(self, frame, pid, data): self.target_timer = self.ability_type_data.get('timer', None) #: Unique id of the target unit. Available for TargetUnit type events. + #: This id can be 0 when the target unit is shrouded by fog of war. self.target_unit_id = self.ability_type_data.get('unit_tag', None) - #: A reference to the targetted unit + #: A reference to the targetted unit. When the :attr:`target_unit_id` is + #: 0 this target unit is a generic, reused fog of war unit of the :attr:`target_unit_type` + #: with an id of zero. It should not be confused with a real unit. self.target_unit = None #: Current integer type id of the target unit. Available for TargetUnit type events. From 2622463e5e14ebea631dcdba1fff371f9efa2c46 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 6 Sep 2013 00:21:55 -0400 Subject: [PATCH 031/238] Register plugin exceptions as PluginExit events. refs #149 --- sc2reader/engine/engine.py | 83 +++++++++++++++++--------------------- test_replays/test_all.py | 56 +++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 45 deletions(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 1165f2e5..fffc3246 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -102,6 +102,15 @@ def handleAbilityEvent(self, event, replay): replay:: code, details = replay.plugins['MyPlugin'] + + If your plugin depends on another plugin, it is a good idea to implement handlePluginExit + and be alerted if the plugin that you require fails. This way you can exit gracefully. You + can also check to see if the plugin name is in ``replay.plugin_failures``:: + + if 'RequiredPlugin' in replay.plugin_failures: + code, details = replay.plugins['RequiredPlugin'] + message = "RequiredPlugin failed with code: {0}. Cannot continue.".format(code) + yield PluginExit(self, code=1, details=dict(msg=message)) """ def __init__(self, plugins=[]): self._plugins = list() @@ -123,8 +132,11 @@ def run(self, replay): # remove them from this list and regenerate event handlers. plugins = list(self._plugins) - # Create a dict for storing plugin exit codes and details - replay.plugins = dict() + # Create a dict for storing plugin exit codes and details. + replay.plugin_result = replay.plugins = dict() + + # Create a list storing replay.plugins keys for failures. + replay.plugin_failures = list() # Fill event event queue with the replay events, bookmarked by Init and End events. event_queue = collections.deque() @@ -141,8 +153,9 @@ def run(self, replay): # Remove the plugin and reset the handlers. plugins.remove(event.plugin) handlers.clear() - replay.plugins[event.plugin.name] = (event.code, event.details) - continue + replay.plugin_result[event.plugin.name] = (event.code, event.details) + if event.code != 0: + replay.plugin_failures.append(event.plugin.name) # If we haven't compiled a list of handlers for this event yet, do so! if event.name not in handlers: @@ -152,19 +165,31 @@ def run(self, replay): event_handlers = handlers[event.name] # Events have the option of yielding one or more additional events - # which get processed after the current event finishes. - new_events = list() + # which get processed after the current event finishes. The new_events + # batch is constructed in reverse order because extendleft reverses + # the order again with a series of appendlefts. + new_events = collections.deque() for event_handler in event_handlers: - new_events.extend(event_handler(event, replay) or []) - - # extendleft does a series of appendlefts and reverses the order so we - # need to reverse the list first to have them added in order. + try: + for new_event in (event_handler(event, replay) or []): + if new_event.name == 'PluginExit': + new_events.append(new_event) + break + else: + new_events.appendleft(new_event) + except Exception as e: + if event_handler.im_self.name in ['ContextLoader']: + # Certain built in plugins should probably still cause total failure + raise # Maybe?? + else: + new_event = PluginExit(event_handler.im_self, code=1, details=dict(error=e)) + new_events.append(new_event) event_queue.extendleft(new_events) - # For any plugins that didn't yield a PluginExit event, record a successful - # completion. + # For any plugins that didn't yield a PluginExit event or throw unexpected exceptions, + # record a successful completion. for plugin in plugins: - replay.plugins[plugin.name] = (0, dict()) + replay.plugin_result[plugin.name] = (0, dict()) def _get_event_handlers(self, event, plugins): return sum([self._get_plugin_event_handlers(plugin, event) for plugin in plugins], []) @@ -194,35 +219,3 @@ def _has_event_handler(self, plugin, event): def _get_event_handler(self, plugin, event): return getattr(plugin, 'handle'+event.name, None) - - -if __name__ == '__main__': - from sc2reader.events import UserOptionsEvent, GameStartEvent, PlayerLeaveEvent - - class TestEvent(object): - name = 'TestEvent' - - def __init__(self, source): - self.source = source - - class TestPlugin(object): - yields = TestEvent - - def handleInitGame(self, event, replay,): - yield TestEvent(event.name) - - def handleTestEvent(self, event, replay): - print(event.source) - - def handleGameStartEvent(self, event, replay): - yield TestEvent(event.name) - - def handleEndGame(self, event, replay): - yield TestEvent(event.name) - - class TestReplay(object): - events = [UserOptionsEvent, UserOptionsEvent, GameStartEvent, PlayerLeaveEvent] - - engine = GameEngine() - engine.register_plugin(TestPlugin()) - events = engine.run(TestReplay) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index d0af7009..dbbfd157 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -362,5 +362,61 @@ def test_replay_event_order(self): replay = sc2reader.load_replay("test_replays/event_order.SC2Replay") +class TestGameEngine(unittest.TestCase): + class TestEvent(object): + name='TestEvent' + def __init__(self, value): + self.value = value + def __str__(self): + return self.value + + class TestPlugin1(object): + name = 'TestPlugin1' + + def handleInitGame(self, event, replay): + yield TestGameEngine.TestEvent('b') + yield TestGameEngine.TestEvent('c') + + def handleTestEvent(self, event, replay): + print("morestuff") + if event.value == 'd': + yield sc2reader.engine.PluginExit(self, code=1, details=dict(msg="Fail!")) + else: + yield TestGameEngine.TestEvent('d') + + def handleEndGame(self, event, replay): + yield TestGameEngine.TestEvent('g') + + class TestPlugin2(object): + name = 'TestPlugin2' + def handleInitGame(self, event, replay): + replay.engine_events = list() + + def handleTestEvent(self, event, replay): + replay.engine_events.append(event) + + def handlePluginExit(self, event, replay): + yield TestGameEngine.TestEvent('e') + + def handleEndGame(self, event, replay): + yield TestGameEngine.TestEvent('f') + + class MockReplay(object): + def __init__(self, events): + self.events = events + + def test_plugin1(self): + engine = sc2reader.engine.GameEngine() + engine.register_plugin(self.TestPlugin1()) + engine.register_plugin(self.TestPlugin2()) + replay = self.MockReplay([self.TestEvent('a')]) + engine.run(replay) + self.assertEqual(''.join(str(e) for e in replay.engine_events), 'bdecaf') + self.assertEqual(replay.plugin_failures, ['TestPlugin1']) + self.assertEqual(replay.plugin_result['TestPlugin1'], (1, dict(msg="Fail!"))) + self.assertEqual(replay.plugin_result['TestPlugin2'], (0, dict())) + + + if __name__ == '__main__': unittest.main() From cba9d63b59e38faa8bc8bf5b6d67b2085b3738be Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 6 Sep 2013 00:22:16 -0400 Subject: [PATCH 032/238] Bump to 0.6.2 --- CHANGELOG.rst | 7 +++++++ docs/source/conf.py | 4 ++-- setup.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0f464c76..b526235f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ CHANGELOG ============ +0.6.2 - September 5th 2013 +-------------------------- +* Fix rare bug where TargetedAbility events could overwrite unit types. +* Substantial performance boost (20% in local testing) +* Fixed serious bug with FileCaching that affected Python3 users. +* Plugins can now yield PluginExit events to broadcast their shutdown. + 0.6.1 - August 13th 2013 ------------------------ diff --git a/docs/source/conf.py b/docs/source/conf.py index 3eb38153..1272f575 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,10 +50,10 @@ # built documents. # # The short X.Y version. -version = '0.6.1' +version = '0.6.2' # The full version, including alpha/beta/rc tags. -release = '0.6.1' +release = '0.6.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/setup.py b/setup.py index 17031b14..a3691f14 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.1', + version='0.6.2', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From f65122a0f4e99a65af97a0293e561e960d90f152 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Sep 2013 16:07:13 -0400 Subject: [PATCH 033/238] Properly handle hallucinated units. Fixes #153. --- sc2reader/data/__init__.py | 18 +++++++++++------- sc2reader/engine/plugins/context.py | 14 +++++++++----- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 530837bc..fd345a34 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -37,7 +37,7 @@ class Unit(object): Represents an in-game unit. """ - def __init__(self, unit_id, flags): + def __init__(self, unit_id): #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. self.owner = None @@ -66,8 +66,6 @@ def __init__(self, unit_id, flags): #: behind the fog of war is targetted. self.id = unit_id - self.flags = flags - #: A reference to the unit type this unit is current in. #: e.g. SeigeTank is a different type than SeigeTankSeiged self._type_class = None @@ -76,8 +74,14 @@ def __init__(self, unit_id, flags): #: in order by frame the type was acquired. self.type_history = OrderedDict() - #: Is this unit type a hallucinated one? Unsure of this flag.. - self.hallucinated = (flags & 2 == 2) + #: Is this unit type a hallucinated one? + self.hallucinated = False + + self.flags = 0 + + def apply_flags(self, flags): + self.flags = flags + self.hallucinated = flags & 2 == 2 def set_type(self, unit_type, frame): self._type_class = unit_type @@ -231,14 +235,14 @@ def __init__(self, build_id): #: A dictionary mapping integer ids to available abilities. self.abilities = dict() - def create_unit(self, unit_id, unit_type, unit_flags, frame): + def create_unit(self, unit_id, unit_type, frame): """ :param unit_id: The unique id of this unit. :param unit_type: The unit type to assign to the new unit Creates a new unit and assigns it to the specified type. """ - unit = Unit(unit_id, unit_flags) + unit = Unit(unit_id) self.change_type(unit, unit_type, frame) return unit diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 2bd267e7..dbda0c49 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -55,7 +55,7 @@ def handleTargetAbilityEvent(self, event, replay): # Often when the target_unit_id is not in replay.objects it is 0 because it # is a target building/destructable hidden by fog of war. Perhaps we can match # it through the fog using location? - unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, 0x00, event.frame) + unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, event.frame) event.target = unit replay.objects[event.target_unit_id] = unit @@ -64,7 +64,8 @@ def handleSelectionEvent(self, event, replay): return units = list() - for (unit_id, unit_type, subgroup, intra_subgroup) in event.new_unit_info: + # TODO: Blizzard calls these subgroup flags but that doesn't make sense right now + for (unit_id, unit_type, subgroup_flags, intra_subgroup_flags) in event.new_unit_info: # If we don't have access to tracker events, use selection events to create # new units and track unit type changes. It won't be perfect, but it is better # than nothing. @@ -79,7 +80,7 @@ def handleSelectionEvent(self, event, replay): if not unit.is_type(unit_type): replay.datapack.change_type(unit, unit_type, event.frame) else: - unit = replay.datapack.create_unit(unit_id, unit_type, 0x00, event.frame) + unit = replay.datapack.create_unit(unit_id, unit_type, event.frame) replay.objects[unit_id] = unit # If we have tracker events, the unit must already exist and must already @@ -87,6 +88,9 @@ def handleSelectionEvent(self, event, replay): else: unit = replay.objects[unit_id] + # Selection events hold flags on units (like hallucination) + unit.apply_flags(intra_subgroup_flags) + units.append(unit) event.new_units = event.objects = units @@ -110,7 +114,7 @@ def handleUnitBornEvent(self, event, replay): event.unit = replay.objects[event.unit_id] else: # TODO: How to tell if something is hallucination? - event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, 0, event.frame) + event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, event.frame) replay.objects[event.unit_id] = event.unit replay.active_units[event.unit_id_index] = event.unit @@ -189,7 +193,7 @@ def handleUnitInitEvent(self, event, replay): event.unit = replay.objects[event.unit_id] else: # TODO: How to tell if something is hallucination? - event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, 0, event.frame) + event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, event.frame) replay.objects[event.unit_id] = event.unit replay.active_units[event.unit_id_index] = event.unit From 37b392459237b6f557fc53ca7557e50e3343a577 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Sep 2013 17:36:01 -0400 Subject: [PATCH 034/238] Bump to 0.6.3. --- CHANGELOG.rst | 5 +++++ docs/source/conf.py | 5 +++-- sc2reader/__init__.py | 2 +- setup.py | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b526235f..7f26efeb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ CHANGELOG ============ +0.6.3 - September 15th 2013 +--------------------------- + +* Properly mark hallucinated units. + 0.6.2 - September 5th 2013 -------------------------- * Fix rare bug where TargetedAbility events could overwrite unit types. diff --git a/docs/source/conf.py b/docs/source/conf.py index 1272f575..91b8a826 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,6 +12,7 @@ # serve to show the default. import sys, os +import sc2reader autodoc_member_order = "bysource" @@ -50,10 +51,10 @@ # built documents. # # The short X.Y version. -version = '0.6.2' +version = sc2reader.__version__ # The full version, including alpha/beta/rc tags. -release = '0.6.2' +release = sc2reader.__version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 93e80ebb..d32ab45f 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.1" +__version__ = "0.6.3" import os import sys diff --git a/setup.py b/setup.py index a3691f14..69d3cdd2 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.2', + version='0.6.3', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From 78404df06d9fc6dbe9c12ba42af64e492fa424e1 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Sep 2013 22:30:03 -0400 Subject: [PATCH 035/238] Updates to the plugin documentation. --- .../articles/creatingagameengineplugin.rst | 14 ++++- docs/source/plugins.rst | 59 +++++++++++-------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/docs/source/articles/creatingagameengineplugin.rst b/docs/source/articles/creatingagameengineplugin.rst index 740820f3..1d371aeb 100644 --- a/docs/source/articles/creatingagameengineplugin.rst +++ b/docs/source/articles/creatingagameengineplugin.rst @@ -33,7 +33,10 @@ Given the following plugins:: def handleTargetAbilityEvent(self, event, replay): pass -An engine handling a ``TargetAbilityEvent`` would call handlers in the following order:: + sc2reader.engine.register_plugin(Plugin1()) + sc2reader.engine.register_plugin(Plugin2()) + +When the engine handles a ``TargetAbilityEvent`` it will call handlers in the following order:: Plugin1.handleAbilityEvent(event, replay) Plugin2.handleEvent(event, replay) @@ -84,3 +87,12 @@ If a plugin wishes to stop processing a replay it can yield a PluginExit event b The GameEngine will intercept this event and remove the plugin from the list of active plugins for this replay. The exit code and details will be available from the replay:: code, details = replay.plugins['MyPlugin'] + +Using Your Plugin +----------------- + +To use your plugin with sc2reader, just register it to the game engine: + + sc2reader.engine.register_plugin(MyPlugin()) + +Plugins will be called in order of registration for each event. If plugin B depends on plugin A make sure to register plugin A first! diff --git a/docs/source/plugins.rst b/docs/source/plugins.rst index a311a6c5..b7ad5435 100644 --- a/docs/source/plugins.rst +++ b/docs/source/plugins.rst @@ -1,26 +1,42 @@ Plugins ============= -A plugin is pretty much just a callable function or object that accepts a replay -file as a single argument. sc2reader supports assignment of plugins to different -resource types via the :meth:`SC2Factory.register_plugin` factory method. +sc2reader has a built in game engine that you can plug into to efficiently process replay events. You can add plugins to the engine by calling :meth:`~sc2reader.engine.engine.GameEngine.register_plugin`:: -:: + import sc2reader + from sc2reader.engine.plugins import APMTracker, SelectionTracker + sc2reader.engine.register_plugin(APMTracker()) + sc2reader.engine.register_plugin(SelectionTracker()) - import sc2reader - from sc2reader.plugins.replay import APMTracker, SelectionTracker - sc2reader.register_plugin('Replay',APMTracker()) - sc2reader.register_plugin('Replay',SelectionTracker()) +Plugins will be called in order of registration for each event. If plugin B depends on plugin A make sure to register plugin A first! -The order you register plugins is the order they are executed in so be careful to -put register in the right order if you have dependencies between plugins. +See the :doc:`articles/creatingagameengineplugin` article for instructions on making your own plugins. + + +ContextLoader +------------- + +.. note:: + + This plugin is registered by default. + +This plugin creates and maintains all the :class:`~sc2reader.data.Unit` and :class:`~sc2reader.data.Ability` data objects from the raw replay data. This creates all the ``event.player``, ``event.unit``, ``event.ability`` object references and maintains other game data structures like :attr:`~sc2reader.resources.Replay.objects`. + + +GameHeartNormalizer +--------------------- + +.. note:: + + This plugin is registered by default. + +This plugin fixes player lists, teams, game lengths, and frames for games that were played with the GameHeart mod. APMTracker ---------------- -The APMTracker adds three simple fields based on a straight tally of non-camera -player action events such as selections, abilities, and hotkeys. +The :class:`~sc2reader.engine.plugins.APMTracker` adds three simple fields based on a straight tally of non-camera player action events such as selections, abilities, and hotkeys. * ``player.aps`` = a dictionary of second => total actions in that second * ``player.apm`` = a dictionary of minute => total actions in that minute @@ -30,21 +46,12 @@ player action events such as selections, abilities, and hotkeys. SelectionTracker -------------------- -The :class:`SelectionTracker` plugin simulates every person's selection at every -frame in both the hotkey and active selection buffers. This selection information -is stored in ``person.selection`` as a two dimensional array of lists. - -:: - - unit_list = replay.player[1].selection[frame][buffer] +.. note:: -Where buffer is a control group 0-9 or 10 which represents the active selection. + This plugin is intended to be used in conjunction with other user written plugins. If you attempt to use the ``player.selection`` attribute outside of a registered plugin the values will be the values as they were at the end of the game. -Keep in mind that the buffers are only updated for the following events: +The :class:`SelectionTracker` maintains a ``person.selection`` structure maps selection buffers for that player to the player's current selection:: - * The active selection changes - * When unit types change (eggs hatch, tanks siege) + active_selection = event.player.selection[10] -Buffers are not updated when units die unless the unit dies while selected (because -the active selection must change). Units that die while deslected won't get deselected -until the next time the control group they were saved in becomes active. +Where buffer is a control group 0-9 or a 10 which represents the active selection. From 3416b04f75ae9bb78930b379b8f8f77090a55574 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 18 Sep 2013 15:00:25 -0400 Subject: [PATCH 036/238] Adjust tank supply cost. fixes #156. --- sc2reader/data/unit_info.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/data/unit_info.json b/sc2reader/data/unit_info.json index 9959a7ef..64d2a2ed 100644 --- a/sc2reader/data/unit_info.json +++ b/sc2reader/data/unit_info.json @@ -692,13 +692,13 @@ "is_army": true, "minerals": 150, "vespene": 125, - "supply": 2 + "supply": 3 }, "siegetanksieged": { "is_army": true, "minerals": 150, "vespene": 125, - "supply": 2 + "supply": 3 }, "starport": { "minerals": 150, From 1fb58be340e17a49500b4d69d013fe4f05ae223c Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 20 Sep 2013 22:53:11 -0400 Subject: [PATCH 037/238] Small unicode related fix. --- sc2reader/engine/plugins/context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index dbda0c49..099569a0 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -30,7 +30,7 @@ def handleAbilityEvent(self, event, replay): event.logger.error(replay.filename) event.logger.error("Release String: "+replay.release_string) for player in replay.players: - event.logger.error("\t"+str(player)) + event.logger.error("\t{0}".format(player)) self.logger.error("{0}\t{1}\tMissing ability {2:X} from {3}".format(event.frame, event.player.name, event.ability_id, replay.datapack.__class__.__name__)) From 6c0adc29bfb0d94847da9ea1a0bebad5a555cee9 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 20 Sep 2013 23:19:10 -0400 Subject: [PATCH 038/238] Consolidate and improve readers layer. --- sc2reader/decoders.py | 4 +- sc2reader/events/message.py | 17 +- sc2reader/readers.py | 752 +++--------------------------------- sc2reader/resources.py | 23 +- 4 files changed, 81 insertions(+), 715 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index e0406b3f..bb0bbd4c 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -166,8 +166,8 @@ def __init__(self, contents): self.read_bool = functools.partial(self.read_bits, 1) def done(self): - """ Returns true when all bits in the buffer have been used""" - return self.tell() == self.length and self._bit_shift == 0 + """ Returns true when all bytes in the buffer have been used""" + return self.tell() == self.length def byte_align(self): """ Moves cursor to the beginning of the next byte """ diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 0eb991e4..7608f8db 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -10,11 +10,10 @@ class MessageEvent(Event): name = 'MessageEvent' - def __init__(self, frame, pid, flags): + def __init__(self, frame, pid): self.pid = pid self.frame = frame self.second = frame >> 4 - self.flags = flags def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" @@ -28,10 +27,9 @@ def __str__(self): class ChatEvent(MessageEvent): name = 'ChatEvent' - def __init__(self, frame, pid, flags, target, text, extension): - super(ChatEvent, self).__init__(frame, pid, flags) + def __init__(self, frame, pid, target, text): + super(ChatEvent, self).__init__(frame, pid) self.target = target - self.extension = extension self.text = text self.to_all = (self.target == 0) self.to_allies = (self.target == 2) @@ -42,8 +40,8 @@ def __init__(self, frame, pid, flags, target, text, extension): class PacketEvent(MessageEvent): name = 'PacketEvent' - def __init__(self, frame, pid, flags, info): - super(PacketEvent, self).__init__(frame, pid, flags) + def __init__(self, frame, pid, info): + super(PacketEvent, self).__init__(frame, pid) self.info = info @@ -51,6 +49,7 @@ def __init__(self, frame, pid, flags, info): class PingEvent(MessageEvent): name = 'PingEvent' - def __init__(self, frame, pid, flags, x, y): - super(PingEvent, self).__init__(frame, pid, flags) + def __init__(self, frame, pid, target, x, y): + super(PingEvent, self).__init__(frame, pid) + self.target = target self.x, self.y = x, y diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 5e980e36..7aba7219 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -12,419 +12,22 @@ from sc2reader.decoders import BitPackedDecoder, ByteDecoder -class Reader(object): - def __init__(self, **options): - self.options = options - - def __call__(self, data, replay): - raise NotImplementedError - - -class InitDataReader_Base(Reader): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_bytes(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(5)+1, - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=None, - licenses=[], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_16561(InitDataReader_Base): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(5)+1, - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=None, - licenses=[], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_17326(InitDataReader_16561): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_19132(InitDataReader_17326): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_22612(InitDataReader_19132): - +class InitDataReader(object): def __call__(self, data, replay): data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( + result = dict( + user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, + clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, + highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, + combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, + team_preference=data.read_uint8() if replay.base_build >= 16561 and data.read_bool() else None, test_map=data.read_bool(), test_auto=data.read_bool(), - examine=data.read_bool(), - custom_interface=None, + examine=data.read_bool() if replay.base_build >= 21955 else None, + custom_interface=data.read_bool() if replay.base_build >= 24764 else None, observe=data.read_bits(2), ) for i in range(data.read_bits(5))], @@ -443,7 +46,7 @@ def __call__(self, data, replay): fog=data.read_bits(2), observers=data.read_bits(2), user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64(), + client_debug_flags=data.read_uint64() if replay.base_build >= 22612 else None, ), game_speed=data.read_bits(3), game_type=data.read_bits(3), @@ -451,9 +54,9 @@ def __call__(self, data, replay): max_observers=data.read_bits(5), max_players=data.read_bits(5), max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), + max_colors=data.read_bits(6) if replay.base_build >= 17266 else data.read_bits(5)+1, max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, + max_controls=data.read_uint8()+(0 if replay.base_build >= 26490 else 1), map_size_x=data.read_uint8(), map_size_y=data.read_uint8(), map_file_sync_checksum=data.read_uint32(), @@ -466,14 +69,14 @@ def __call__(self, data, replay): allowedDifficulty=data.read_bits(data.read_bits(6)), allowedControls=data.read_bits(data.read_uint8()), allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, + allowed_ai_builds=data.read_bits(data.read_bits(7)) if replay.base_build >= 23925 else None, ) for i in range(data.read_bits(5))], default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6))], + default_ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, + cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], is_blizzardMap=data.read_bool(), is_premade_ffa=data.read_bool(), - is_coop_mode=None, + is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, ), lobby_state=dict( @@ -487,261 +90,43 @@ def __call__(self, data, replay): colorPref=data.read_bits(5) if data.read_bool() else None, race_pref=data.read_uint8() if data.read_bool() else None, difficulty=data.read_bits(6), - ai_build=None, + ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, handicap=data.read_bits(7), observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], + working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, + rewards=[data.read_uint32() for i in range(data.read_bits(6 if replay.base_build >= 24764 else 5))], + toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, + licenses=[data.read_uint32() for i in range(data.read_bits(9))] if replay.base_build >= 19132 else [], ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, is_single_player=data.read_bool(), game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), - default_ai_build=None, + default_ai_build=data.read_bits(7) if replay.base_build >= 23260 else None, ), ) + if not data.done(): + raise ValueError("{0} bytes left!".format(data.length-data.tell())) + return result -class InitDataReader_23925(InitDataReader_22612): - +class AttributesEventsReader(object): def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=data.read_bool(), - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64(), - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=data.read_bits(data.read_bits(7)), - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=data.read_bits(7), - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=data.read_bool(), - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=data.read_bits(7), - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7), - ), - ) - - -class InitDataReader_24764(InitDataReader_22612): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - highest_league=data.read_uint8() if data.read_bool() else None, - combined_race_levels=data.read_uint32() if data.read_bool() else None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=data.read_bool(), - custom_interface=data.read_bool(), - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64(), - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=data.read_bits(data.read_bits(7)), - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=data.read_bits(7), - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=data.read_bool(), - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=data.read_bits(7), - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=data.read_uint8() if data.read_bool() else None, - rewards=[data.read_uint32() for i in range(data.read_bits(6))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7), - ), - ) - - -class InitDataReader_26490(InitDataReader_24764): - - def __call__(self, data, replay): - data = super(InitDataReader_26490, self).__call__(data, replay) - data['game_description']['max_controls'] -= 1 - return data - - -class AttributesEventsReader_Base(Reader): - header_length = 4 - offset = False - - def __call__(self, data, replay): - # The replay.attribute.events file is comprised of a small header and - # single long list of attributes with the 0x00 00 03 E7 header on each - # element. Each element holds a four byte attribute id code, a one byte - # player id, and a four byte value code. Unlike the other files, this - # file is stored in little endian format. - # - # See: ``objects.Attribute`` for attribute id and value lookup logic - # data = ByteDecoder(data, endian='LITTLE') - attribute_events = list() - data.read_bytes(self.header_length) - for attribute in range(data.read_uint32()): - info = [ - data.read_uint32(), - data.read_uint32(), - data.read_uint8(), - ''.join(reversed(data.read_string(4))), - ] - attribute_events.append(Attribute(*info)) - - return attribute_events - - -class AttributesEventsReader_17326(AttributesEventsReader_Base): - # The header length is increased from 4 to 5 bytes from patch 17326 and on. - header_length = 5 - - -class DetailsReader(Reader): - + data.read_bytes(5 if replay.base_build >= 17326 else 4) + result = [Attribute( + data.read_uint32(), + data.read_uint32(), + data.read_uint8(), + ''.join(reversed(data.read_string(4))), + ) for i in range(data.read_uint32())] + if not data.done(): + raise ValueError("Not all bytes used up!") + return result + + +class DetailsReader(object): def __call__(self, data, replay): details = BitPackedDecoder(data).read_struct() return dict( @@ -787,13 +172,8 @@ def __call__(self, data, replay): ) -class MessageEventsReader_Base(Reader): - TARGET_BITS = 3 - +class MessageEventsReader(object): def __call__(self, data, replay): - # The replay.message.events file is a single long list containing three - # different element types (minimap pings, player messages, and some sort - # of network packets); each differentiated by flags. data = BitPackedDecoder(data) pings = list() messages = list() @@ -801,39 +181,33 @@ def __call__(self, data, replay): frame = 0 while not data.done(): - # All the element types share the same time, pid, flags header. frame += data.read_frames() pid = data.read_bits(5) - t = data.read_bits(3) - flags = data.read_uint8() - - if flags in (0x83, 0x89): - # We need some tests for this, probably not right - x = data.read_uint32() - y = data.read_uint32() - pings.append(PingEvent(frame, pid, flags, x, y)) - - elif flags == 0x80: - info = data.read_bytes(4) - packets.append(PacketEvent(frame, pid, flags, info)) - - elif flags & 0x80 == 0: - lo_mask = 2**self.TARGET_BITS-1 - hi_mask = 0xFF ^ lo_mask - target = flags & lo_mask - extension = (flags & hi_mask) << 3 - length = data.read_uint8() - text = data.read_aligned_string(length + extension) - messages.append(ChatEvent(frame, pid, flags, target, text, (flags, lo_mask, hi_mask, length, extension))) + flag = data.read_bits(4) + if flag == 0: # Client chat message + recipient = data.read_bits(3 if replay.base_build >= 21955 else 2) + text = data.read_aligned_string(data.read_bits(11)) + messages.append(ChatEvent(frame, pid, recipient, text)) - return AttributeDict(pings=pings, messages=messages, packets=packets) + elif flag == 1: # Client ping message + recipient = data.read_bits(3 if replay.base_build >= 21955 else 2) + x = data.read_uint32()-2147483648 + y = data.read_uint32()-2147483648 + pings.append(PingEvent(frame, pid, recipient, x, y)) + elif flag == 2: # Loading progress message + progress = data.read_uint32()-2147483648 + packets.append(PacketEvent(frame, pid, progress)) -class MessageEventsReader_Beta_24247(MessageEventsReader_Base): - TARGET_BITS = 4 + elif flag == 3: # Server ping message + pass + + data.byte_align() + + return AttributeDict(pings=pings, messages=messages, packets=packets) -class GameEventsReader_Base(Reader): +class GameEventsReader_Base(object): def __init__(self): self.EVENT_DISPATCH = { @@ -2056,7 +1430,7 @@ def trigger_mouse_moved_event(self, data): ) -class TrackerEventsReader_Base(Reader): +class TrackerEventsReader(object): def __init__(self): self.EVENT_DISPATCH = { @@ -2077,9 +1451,9 @@ def __call__(self, data, replay): frames = 0 events = list() while not decoder.done(): - decoder._buffer.read(3) # 03 00 09 + decoder._buffer.read(3) # 03 00 09 frames += decoder.read_vint() - decoder._buffer.read(1) # 09 + decoder._buffer.read(1) # 09 etype = decoder.read_vint() event_data = decoder.read_struct() event = self.EVENT_DISPATCH[etype](frames, event_data, replay.build) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index e31792fa..f9eeceaa 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -382,12 +382,12 @@ def load_players(self): if slot_data['control'] == 2: if slot_data['observe'] == 0: - self.entities.append(Participant(slot_id, slot_data, user_id, initData['player_init_data'][user_id], player_id, details['players'][detail_id], self.attributes.get(player_id, dict()))) + self.entities.append(Participant(slot_id, slot_data, user_id, initData['user_initial_data'][user_id], player_id, details['players'][detail_id], self.attributes.get(player_id, dict()))) detail_id += 1 player_id += 1 else: - self.entities.append(Observer(slot_id, slot_data, user_id, initData['player_init_data'][user_id], player_id)) + self.entities.append(Observer(slot_id, slot_data, user_id, initData['user_initial_data'][user_id], player_id)) player_id += 1 elif slot_data['control'] == 3: @@ -540,18 +540,11 @@ def register_datapack(self, datapack, filterfunc=lambda r: True): def register_default_readers(self): """Registers factory default readers.""" self.register_reader('replay.details', readers.DetailsReader(), lambda r: True) - self.register_reader('replay.initData', readers.InitDataReader_Base(), lambda r: 15405 <= r.base_build < 16561) - self.register_reader('replay.initData', readers.InitDataReader_16561(), lambda r: 16561 <= r.base_build < 17326) - self.register_reader('replay.initData', readers.InitDataReader_17326(), lambda r: 17326 <= r.base_build < 19132) - self.register_reader('replay.initData', readers.InitDataReader_19132(), lambda r: 19132 <= r.base_build < 22612) - self.register_reader('replay.initData', readers.InitDataReader_22612(), lambda r: 22612 <= r.base_build < 23925) - self.register_reader('replay.initData', readers.InitDataReader_23925(), lambda r: 23925 <= r.base_build < 24764) - self.register_reader('replay.initData', readers.InitDataReader_24764(), lambda r: 24764 <= r.base_build < 26490) - self.register_reader('replay.initData', readers.InitDataReader_26490(), lambda r: 26490 <= r.base_build) - self.register_reader('replay.message.events', readers.MessageEventsReader_Base(), lambda r: r.build < 24247 or r.versions[1] == 1) - self.register_reader('replay.message.events', readers.MessageEventsReader_Beta_24247(), lambda r: r.build >= 24247 and r.versions[1] == 2) - self.register_reader('replay.attributes.events', readers.AttributesEventsReader_Base(), lambda r: r.build < 17326) - self.register_reader('replay.attributes.events', readers.AttributesEventsReader_17326(), lambda r: r.build >= 17326) + self.register_reader('replay.initData', readers.InitDataReader(), lambda r: True) + self.register_reader('replay.tracker.events', readers.TrackerEventsReader(), lambda r: True) + self.register_reader('replay.message.events', readers.MessageEventsReader(), lambda r: True) + self.register_reader('replay.attributes.events', readers.AttributesEventsReader(), lambda r: True) + self.register_reader('replay.game.events', readers.GameEventsReader_15405(), lambda r: 15405 <= r.base_build < 16561) self.register_reader('replay.game.events', readers.GameEventsReader_16561(), lambda r: 16561 <= r.base_build < 17326) self.register_reader('replay.game.events', readers.GameEventsReader_17326(), lambda r: 17326 <= r.base_build < 18574) @@ -562,7 +555,7 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) - self.register_reader('replay.tracker.events', readers.TrackerEventsReader_Base(), lambda r: True) + def register_default_datapacks(self): """Registers factory default datapacks.""" From 2d4bd6be1d513cb73a61e694ef20a6272fc65cad Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:01:50 -0400 Subject: [PATCH 039/238] Bump version to 0.6.4. --- CHANGELOG.rst | 7 +++++++ sc2reader/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7f26efeb..00f0f90e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ CHANGELOG ============ +0.6.4 - September 22nd 2013 +--------------------------- + +* Fix bug in code for logging errors. +* Fix siege tank supply count +* Small improvements to message.events parsing. + 0.6.3 - September 15th 2013 --------------------------- diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index d32ab45f..60b5eead 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.3" +__version__ = "0.6.4" import os import sys diff --git a/setup.py b/setup.py index 69d3cdd2..0f2fc7a7 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.3', + version='0.6.4', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From dda41fbb378d137a67898140fa494a31df9de016 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:18:08 -0400 Subject: [PATCH 040/238] Fix up event names and hierarchy. * PacketEvent is now ProgressEvent. * SetToHotkeyEvent is now SetControlGroupEvent. * AddToHotkeyEvent is now AddToControlGroupEvent. * GetFromHotkeyEvent is now GetControlGroupEvent. * PlayerAbilityEvent is no longer part of the event hierarchy. * event.name is no longer a class property; it can only be accessed from an event instance. --- CHANGELOG.rst | 14 +++- sc2reader/engine/engine.py | 40 ++++----- sc2reader/engine/plugins/apm.py | 12 ++- sc2reader/events/game.py | 112 +++++++++----------------- sc2reader/events/message.py | 31 ++++--- sc2reader/events/tracker.py | 43 +++++----- sc2reader/factories/plugins/replay.py | 2 +- sc2reader/readers.py | 2 +- 8 files changed, 117 insertions(+), 139 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 00f0f90e..4d76d073 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,11 +1,23 @@ CHANGELOG ============ +0.7.0 - +--------------------------- + +* PacketEvent is now ProgressEvent. +* SetToHotkeyEvent is now SetControlGroupEvent. +* AddToHotkeyEvent is now AddToControlGroupEvent. +* GetFromHotkeyEvent is now GetControlGroupEvent. +* PlayerAbilityEvent is no longer part of the event hierarchy. +* event.name is no longer a class property; it can only be accessed from an event instance. + + + 0.6.4 - September 22nd 2013 --------------------------- * Fix bug in code for logging errors. -* Fix siege tank supply count +* Fix siege tank supply count. * Small improvements to message.events parsing. 0.6.3 - September 15th 2013 diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index fffc3246..2788bcc6 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -5,6 +5,7 @@ from sc2reader.events import * from sc2reader.engine.events import InitGameEvent, EndGameEvent, PluginExit + class GameEngine(object): """ GameEngine Specification -------------------------- @@ -56,9 +57,8 @@ def handleEventName(self, event, replay) * handleMessageEvent - called for events in replay.message.events * handleGameEvent - called for events in replay.game.events * handleTrackerEvent - called for events in replay.tracker.events - * handlePlayerActionEvent - called for all game events indicating player actions * handleAbilityEvent - called for all types of ability events - * handleHotkeyEvent - called for all player hotkey events + * handleControlGroupEvent - called for all player control group events Plugins may also handle optional ``InitGame`` and ``EndGame`` events generated by the GameEngine before and after processing all the events: @@ -196,26 +196,18 @@ def _get_event_handlers(self, event, plugins): def _get_plugin_event_handlers(self, plugin, event): handlers = list() - if isinstance(event, Event) and self._has_event_handler(plugin, Event): - handlers.append(self._get_event_handler(plugin, Event)) - if isinstance(event, MessageEvent) and self._has_event_handler(plugin, MessageEvent): - handlers.append(self._get_event_handler(plugin, MessageEvent)) - if isinstance(event, GameEvent) and self._has_event_handler(plugin, GameEvent): - handlers.append(self._get_event_handler(plugin, GameEvent)) - if isinstance(event, TrackerEvent) and self._has_event_handler(plugin, TrackerEvent): - handlers.append(self._get_event_handler(plugin, TrackerEvent)) - if isinstance(event, PlayerActionEvent) and self._has_event_handler(plugin, PlayerActionEvent): - handlers.append(self._get_event_handler(plugin, PlayerActionEvent)) - if isinstance(event, AbilityEvent) and self._has_event_handler(plugin, AbilityEvent): - handlers.append(self._get_event_handler(plugin, AbilityEvent)) - if isinstance(event, HotkeyEvent) and self._has_event_handler(plugin, HotkeyEvent): - handlers.append(self._get_event_handler(plugin, HotkeyEvent)) - if self._has_event_handler(plugin, event): - handlers.append(self._get_event_handler(plugin, event)) + if isinstance(event, Event) and hasattr(plugin, 'handleEvent'): + handlers.append(getattr(plugin, 'handleEvent', None)) + if isinstance(event, MessageEvent) and hasattr(plugin, 'handleMessageEvent'): + handlers.append(getattr(plugin, 'handleMessageEvent', None)) + if isinstance(event, GameEvent) and hasattr(plugin, 'handleGameEvent'): + handlers.append(getattr(plugin, 'handleGameEvent', None)) + if isinstance(event, TrackerEvent) and hasattr(plugin, 'handleTrackerEvent'): + handlers.append(getattr(plugin, 'handleTrackerEvent', None)) + if isinstance(event, AbilityEvent) and hasattr(plugin, 'handleAbilityEvent'): + handlers.append(getattr(plugin, 'handleAbilityEvent', None)) + if isinstance(event, ControlGroupEvent) and hasattr(plugin, 'handleControlGroupEvent'): + handlers.append(getattr(plugin, 'handleControlGroupEvent', None)) + if hasattr(plugin, 'handle'+event.name): + handlers.append(getattr(plugin, 'handle'+event.name, None)) return handlers - - def _has_event_handler(self, plugin, event): - return hasattr(plugin, 'handle'+event.name) - - def _get_event_handler(self, plugin, event): - return getattr(plugin, 'handle'+event.name, None) diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py index 0d69b293..42d44185 100644 --- a/sc2reader/engine/plugins/apm.py +++ b/sc2reader/engine/plugins/apm.py @@ -7,7 +7,7 @@ class APMTracker(object): """ Builds ``player.aps`` and ``player.apm`` dictionaries where an action is - any Selection, Hotkey, or Ability event. + any Selection, ControlGroup, or Ability event. Also provides ``player.avg_apm`` which is defined as the sum of all the above actions divided by the number of seconds played by the player (not @@ -23,7 +23,15 @@ def handleInitGame(self, event, replay): human.aps = defaultdict(int) human.seconds_played = replay.length.seconds - def handlePlayerActionEvent(self, event, replay): + def handleControlGroupEvent(self, event, replay): + event.player.aps[event.second] += 1 + event.player.apm[int(event.second/60)] += 1 + + def handleSelectionEvent(self, event, replay): + event.player.aps[event.second] += 1 + event.player.apm[int(event.second/60)] += 1 + + def handleAbilityEvent(self, event, replay): event.player.aps[event.second] += 1 event.player.apm[int(event.second/60)] += 1 diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 720b23a9..fc5a2413 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -13,8 +13,6 @@ class GameEvent(Event): """ This is the base class for all game events. The attributes below are universally available. """ - name = 'GameEvent' - def __init__(self, frame, pid): #: The id of the player generating the event. This is 16 for global non-player events. #: Prior to Heart of the Swarm this was the player id. Since HotS it is @@ -34,6 +32,9 @@ def __init__(self, frame, pid): #: A flag indicating if it is a local or global event. self.is_local = (pid != 16) + #: Short cut string for event class name + self.name = self.__class__.__name__ + def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) @@ -47,9 +48,6 @@ class GameStartEvent(GameEvent): Recorded when the game starts and the frames start to roll. This is a global non-player event. """ - - name = 'GameStartEvent' - def __init__(self, frame, pid, data): super(GameStartEvent, self).__init__(frame, pid) @@ -58,9 +56,6 @@ class PlayerLeaveEvent(GameEvent): """ Recorded when a player leaves the game. """ - - name = 'PlayerLeaveEvent' - def __init__(self, frame, pid, data): super(PlayerLeaveEvent, self).__init__(frame, pid) @@ -70,9 +65,6 @@ class UserOptionsEvent(GameEvent): This event is recorded for each player at the very beginning of the game before the :class:`GameStartEvent`. """ - - name = 'UserOptionsEvent' - def __init__(self, frame, pid, data): super(UserOptionsEvent, self).__init__(frame, pid) #: @@ -118,12 +110,8 @@ def create_command_event(frame, pid, data): return SelfAbilityEvent(frame, pid, data) -class PlayerActionEvent(GameEvent): - name = 'PlayerActionEvent' - - @loggable -class AbilityEvent(PlayerActionEvent): +class AbilityEvent(GameEvent): """ Ability events are generated when ever a player in the game issues a command to a unit or group of units. They are split into three subclasses of ability, @@ -133,11 +121,6 @@ class AbilityEvent(PlayerActionEvent): See :class:`LocationAbilityEvent`, :class:`TargetAbilityEvent`, and :class:`SelfAbilityEvent` for individual details. """ - - name = 'AbilityEvent' - - is_player_action = True - def __init__(self, frame, pid, data): super(AbilityEvent, self).__init__(frame, pid) @@ -236,9 +219,6 @@ class LocationAbilityEvent(AbilityEvent): Note that like all AbilityEvents, the event will be recorded regardless of whether or not the command was successful. """ - - name = 'LocationAbilityEvent' - def __init__(self, frame, pid, data): super(LocationAbilityEvent, self).__init__(frame, pid, data) @@ -265,9 +245,6 @@ class TargetAbilityEvent(AbilityEvent): Note that all AbilityEvents are recorded regardless of whether or not the command was successful. """ - - name = 'TargetAbilityEvent' - def __init__(self, frame, pid, data): super(TargetAbilityEvent, self).__init__(frame, pid, data) @@ -318,9 +295,6 @@ class SelfAbilityEvent(AbilityEvent): Note that all AbilityEvents are recorded regardless of whether or not the command was successful. """ - - name = 'SelfAbilityEvent' - def __init__(self, frame, pid, data): super(SelfAbilityEvent, self).__init__(frame, pid, data) @@ -329,7 +303,7 @@ def __init__(self, frame, pid, data): @loggable -class SelectionEvent(PlayerActionEvent): +class SelectionEvent(GameEvent): """ Selection events are generated when ever the active selection of the player is updated. Unlike other game events, these events can also be @@ -340,10 +314,6 @@ class SelectionEvent(PlayerActionEvent): by non-player actions. When a player action updates a control group a :class:`HotkeyEvent` is generated. """ - - name = 'SelectionEvent' - is_player_action = True - def __init__(self, frame, pid, data): super(SelectionEvent, self).__init__(frame, pid) @@ -392,39 +362,32 @@ def __str__(self): def create_control_group_event(frame, pid, data): update_type = data['control_group_update'] if update_type == 0: - return SetToHotkeyEvent(frame, pid, data) + return SetControlGroupEvent(frame, pid, data) elif update_type == 1: - return AddToHotkeyEvent(frame, pid, data) + return AddToControlGroupEvent(frame, pid, data) elif update_type == 2: - return GetFromHotkeyEvent(frame, pid, data) + return GetControlGroupEvent(frame, pid, data) elif update_type == 3: # TODO: What could this be?!? - return HotkeyEvent(frame, pid, data) + return ControlGroupEvent(frame, pid, data) @loggable -class HotkeyEvent(PlayerActionEvent): +class ControlGroupEvent(GameEvent): """ - Hotkey events are recorded when ever a player action modifies a control - group. I know that calling control group events hotkey events doesn't make - sense but for backwards compatibility I haven't changed it yet. Sorry. - - There are three kinds of hotkey events, generated by each of the possible + ControlGroup events are recorded when ever a player action modifies or accesses a control + group. There are three kinds of events, generated by each of the possible player actions: - * :class:`SetToHotkeyEvent` - Recorded when a user sets a control group (ctrl+#). - * :class:`GetFromHotkeyEvent` - Recorded when a user retrieves a control group (#). - * :class:`AddToHotkeyEvent` - Recorded when a user adds to a control group (shift+ctrl+#) + * :class:`SetControlGroup` - Recorded when a user sets a control group (ctrl+#). + * :class:`GetControlGroup` - Recorded when a user retrieves a control group (#). + * :class:`AddToControlGroup` - Recorded when a user adds to a control group (shift+ctrl+#) All three events have the same set of data (shown below) but are interpretted differently. See the class entry for details. """ - - name = 'HotkeyEvent' - is_player_action = True - def __init__(self, frame, pid, data): - super(HotkeyEvent, self).__init__(frame, pid) + super(ControlGroupEvent, self).__init__(frame, pid) #: Index to the control group being modified self.control_group = data['control_group_index'] @@ -445,38 +408,33 @@ def __init__(self, frame, pid, data): self.mask_data = data['remove_mask'][1] -class SetToHotkeyEvent(HotkeyEvent): +class SetControlGroupEvent(ControlGroupEvent): """ - Extends :class:`HotkeyEvent` + Extends :class:`ControlGroupEvent` This event does a straight forward replace of the current control group contents with the player's current selection. This event doesn't have masks set. """ - name = 'SetToHotkeyEvent' - -class AddToHotkeyEvent(HotkeyEvent): +class AddToControlGroupEvent(SetControlGroupEvent): """ - Extends :class:`HotkeyEvent` + Extends :class:`ControlGroupEvent` This event adds the current selection to the control group. """ - name = 'AddToHotkeyEvent' - -class GetFromHotkeyEvent(HotkeyEvent): +class GetControlGroupEvent(ControlGroupEvent): """ - Extends :class:`HotkeyEvent` + Extends :class:`ControlGroupEvent` + This event replaces the current selection with the contents of the control group. The mask data is used to limit that selection to units that are currently selectable. You might have 1 medivac and 8 marines on the control group but if the 8 marines are inside the medivac they cannot be part of your selection. """ - name = 'GetFromHotkeyEvent' - @loggable class CameraEvent(GameEvent): @@ -485,9 +443,6 @@ class CameraEvent(GameEvent): It does not matter why the camera changed, this event simply records the current state of the camera after changing. """ - - name = 'CameraEvent' - def __init__(self, frame, pid, data): super(CameraEvent, self).__init__(frame, pid) @@ -515,8 +470,10 @@ def __str__(self): @loggable class ResourceTradeEvent(GameEvent): - name = 'ResourceTradeEvent' - + """ + Generated when a player trades resources with another player. But not when fullfulling + resource requests. + """ def __init__(self, frame, pid, data): super(ResourceTradeEvent, self).__init__(frame, pid) @@ -552,8 +509,9 @@ def __str__(self): class ResourceRequestEvent(GameEvent): - name = 'ResourceRequestEvent' - + """ + Generated when a player creates a resource request. + """ def __init__(self, frame, pid, data): super(ResourceRequestEvent, self).__init__(frame, pid) @@ -577,8 +535,9 @@ def __str__(self): class ResourceRequestFulfillEvent(GameEvent): - name = 'ResourceRequestFulfillEvent' - + """ + Generated when a player accepts a resource request. + """ def __init__(self, frame, pid, data): super(ResourceRequestFulfillEvent, self).__init__(frame, pid) @@ -587,8 +546,9 @@ def __init__(self, frame, pid, data): class ResourceRequestCancelEvent(GameEvent): - name = 'ResourceRequestCancelEvent' - + """ + Generated when a player cancels their resource request. + """ def __init__(self, frame, pid, data): super(ResourceRequestCancelEvent, self).__init__(frame, pid) diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 7608f8db..dc6e40ca 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -8,13 +8,17 @@ @loggable class MessageEvent(Event): - name = 'MessageEvent' - + """ + Parent class for all message events. + """ def __init__(self, frame, pid): self.pid = pid self.frame = frame self.second = frame >> 4 + #: Short cut string for event class name + self.name = self.__class__.__name__ + def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) @@ -25,8 +29,9 @@ def __str__(self): @loggable class ChatEvent(MessageEvent): - name = 'ChatEvent' - + """ + Records in-game chat events. + """ def __init__(self, frame, pid, target, text): super(ChatEvent, self).__init__(frame, pid) self.target = target @@ -37,18 +42,22 @@ def __init__(self, frame, pid, target, text): @loggable -class PacketEvent(MessageEvent): - name = 'PacketEvent' +class ProgressEvent(MessageEvent): + """ + Sent during the load screen to update load process for other clients. + """ + def __init__(self, frame, pid, progress): + super(ProgressEvent, self).__init__(frame, pid) - def __init__(self, frame, pid, info): - super(PacketEvent, self).__init__(frame, pid) - self.info = info + #: Marks the load progress for the player. Scaled 0-100. + self.progress = progress @loggable class PingEvent(MessageEvent): - name = 'PingEvent' - + """ + Records pings made by players in game. + """ def __init__(self, frame, pid, target, x, y): super(PingEvent, self).__init__(frame, pid) self.target = target diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index d9526aeb..893f0e55 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -15,6 +15,9 @@ def __init__(self, frames): self.frame = frames self.second = frames >> 4 + #: Short cut string for event class name + self.name = self.__class__.__name__ + def load_context(self, replay): pass @@ -39,9 +42,6 @@ class PlayerStatsEvent(TrackerEvent): events generated at the end of the game. One for leaving and one for the end of the game. """ - - name = 'PlayerStatsEvent' - def __init__(self, frames, data, build): super(PlayerStatsEvent, self).__init__(frames) @@ -223,9 +223,6 @@ class UnitBornEvent(TrackerEvent): it are the :class:`~sc2reader.event.game.AbilityEvent` game events where the ability is a train unit command. """ - - name = 'UnitBornEvent' - def __init__(self, frames, data, build): super(UnitBornEvent, self).__init__(frames) @@ -274,9 +271,6 @@ class UnitDiedEvent(TrackerEvent): Generated when a unit dies or is removed from the game for any reason. Reasons include morphing, merging, and getting killed. """ - - name = 'UnitDiedEvent' - def __init__(self, frames, data, build): super(UnitDiedEvent, self).__init__(frames) @@ -312,8 +306,10 @@ def __str__(self): class UnitOwnerChangeEvent(TrackerEvent): - name = 'UnitOwnerChangeEvent' - + """ + Generated when either ownership or control of a unit is changed. Neural Parasite is an example + of an action that would generate this event. + """ def __init__(self, frames, data, build): super(UnitOwnerChangeEvent, self).__init__(frames) @@ -346,8 +342,11 @@ def __str__(self): class UnitTypeChangeEvent(TrackerEvent): - name = 'UnitTypeChangeEvent' - + """ + Generated when the unit's type changes. This generally tracks upgrades to buildings (Hatch, + Lair, Hive) and mode switches (Sieging Tanks, Phasing prisms, Burrowing roaches). There may + be some other situations where a unit transformation is a type change and not a new unit. + """ def __init__(self, frames, data, build): super(UnitTypeChangeEvent, self).__init__(frames) @@ -371,8 +370,9 @@ def __str__(self): class UpgradeCompleteEvent(TrackerEvent): - name = 'UpgradeCompleteEvent' - + """ + Generated when a player completes an upgrade. + """ def __init__(self, frames, data, build): super(UpgradeCompleteEvent, self).__init__(frames) @@ -399,9 +399,6 @@ class UnitInitEvent(TrackerEvent): in game before they are finished. Primary examples being buildings and warp-in units. """ - - name = 'UnitInitEvent' - def __init__(self, frames, data, build): super(UnitInitEvent, self).__init__(frames) @@ -451,9 +448,6 @@ class UnitDoneEvent(TrackerEvent): when an initiated unit is completed. E.g. warp-in finished, building finished, morph complete. """ - - name = 'UnitDoneEvent' - def __init__(self, frames, data, build): super(UnitDoneEvent, self).__init__(frames) @@ -474,8 +468,11 @@ def __str__(self): class UnitPositionsEvent(TrackerEvent): - name = 'UnitPositionsEvent' - + """ + Generated every 15 seconds. Marks the positions of the first 255 units that were damaged in + the last interval. If more than 255 units were damaged, then the first 255 are reported and + the remaining units are carried into the next interval. + """ def __init__(self, frames, data, build): super(UnitPositionsEvent, self).__init__(frames) diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index 81a05c54..40401196 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -106,7 +106,7 @@ def APMTracker(replay): player.seconds_played = replay.length.seconds for event in player.events: - if event.name == 'SelectionEvent' or 'AbilityEvent' in event.name or 'Hotkey' in event.name: + if event.name == 'SelectionEvent' or 'AbilityEvent' in event.name or 'ControlGroup' in event.name: player.aps[event.second] += 1 player.apm[int(event.second/60)] += 1 diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 7aba7219..61f8d928 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -197,7 +197,7 @@ def __call__(self, data, replay): elif flag == 2: # Loading progress message progress = data.read_uint32()-2147483648 - packets.append(PacketEvent(frame, pid, progress)) + packets.append(ProgressEvent(frame, pid, progress)) elif flag == 3: # Server ping message pass From 24c0acf48036b67cb95ebcb88d84edd044753c3d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:22:10 -0400 Subject: [PATCH 041/238] Flesh out the ping class. --- CHANGELOG.rst | 6 +++++- sc2reader/events/message.py | 21 ++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4d76d073..9ee1965f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -10,7 +10,11 @@ CHANGELOG * GetFromHotkeyEvent is now GetControlGroupEvent. * PlayerAbilityEvent is no longer part of the event hierarchy. * event.name is no longer a class property; it can only be accessed from an event instance. - +* PingEvents now have new attributes: + * event.to_all - true if ping seen by all + * event.to_allies - true if ping seen by allies + * event.to_observers - true if ping seen by observers + * event.location - tuple of (event.x, event.y) 0.6.4 - September 22nd 2013 diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index dc6e40ca..b5166abd 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -60,5 +60,24 @@ class PingEvent(MessageEvent): """ def __init__(self, frame, pid, target, x, y): super(PingEvent, self).__init__(frame, pid) + + #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. self.target = target - self.x, self.y = x, y + + #: Flag marked true of message was to all. + self.to_all = (self.target == 0) + + #: Flag marked true of message was to allies. + self.to_allies = (self.target == 2) + + #: Flag marked true of message was to observers. + self.to_observers = (self.target == 4) + + #: The x coordinate of the target location + self.x = x + + #: The y coordinate of the target location + self.y = y + + #: The (x,y) coordinate of the target location + self.location = (self.x, self.y) From bb8f9d242b244b00d0b43150fddef24a4dc0f509 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:22:40 -0400 Subject: [PATCH 042/238] Misc. documentation improvements. --- docs/source/events/game.rst | 1 - docs/source/events/message.rst | 3 -- docs/source/events/tracker.rst | 1 - sc2reader/events/game.py | 49 +++++++++++++++++------ sc2reader/events/message.py | 14 +++++++ sc2reader/events/tracker.py | 72 +++++++++++++++++++--------------- 6 files changed, 92 insertions(+), 48 deletions(-) diff --git a/docs/source/events/game.rst b/docs/source/events/game.rst index ec253718..e3dd87a0 100644 --- a/docs/source/events/game.rst +++ b/docs/source/events/game.rst @@ -11,4 +11,3 @@ computer player. .. automodule:: sc2reader.events.game :members: - :undoc-members: \ No newline at end of file diff --git a/docs/source/events/message.rst b/docs/source/events/message.rst index fbaf0ae9..ffc57226 100644 --- a/docs/source/events/message.rst +++ b/docs/source/events/message.rst @@ -3,8 +3,5 @@ Message Events =================== -Coming soon! - .. automodule:: sc2reader.events.message :members: - :undoc-members: diff --git a/docs/source/events/tracker.rst b/docs/source/events/tracker.rst index 77df8ccf..36671b51 100644 --- a/docs/source/events/tracker.rst +++ b/docs/source/events/tracker.rst @@ -9,4 +9,3 @@ are also periodically recorded to snapshot aspects of the current game state. .. automodule:: sc2reader.events.tracker :members: - :undoc-members: \ No newline at end of file diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index fc5a2413..584f8b1a 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -16,11 +16,12 @@ class GameEvent(Event): def __init__(self, frame, pid): #: The id of the player generating the event. This is 16 for global non-player events. #: Prior to Heart of the Swarm this was the player id. Since HotS it is - #: now the user id (uid), we still call it pid for backwards compatibility. + #: now the user id (uid), we still call it pid for backwards compatibility. You shouldn't + #: ever need to use this; use :attr:`player` instead. self.pid = pid #: A reference to the :class:`~sc2reader.objects.Player` object representing - #: this player in the replay. Not available for global events (:attr:`pid` = 16) + #: this player in the replay. Not available for global events (:attr:`is_local` = False) self.player = None #: The frame of the game that this event was recorded at. 16 frames per game second. @@ -51,6 +52,9 @@ class GameStartEvent(GameEvent): def __init__(self, frame, pid, data): super(GameStartEvent, self).__init__(frame, pid) + #: ??? + self.data = data + class PlayerLeaveEvent(GameEvent): """ @@ -59,6 +63,9 @@ class PlayerLeaveEvent(GameEvent): def __init__(self, frame, pid, data): super(PlayerLeaveEvent, self).__init__(frame, pid) + #: ??? + self.data = data + class UserOptionsEvent(GameEvent): """ @@ -80,7 +87,7 @@ def __init__(self, frame, pid, data): self.sync_checksumming_enabled = data['sync_checksumming_enabled'] #: - is_map_to_map_transition = data['is_map_to_map_transition'] + self.is_map_to_map_transition = data['is_map_to_map_transition'] #: self.use_ai_beacons = data['use_ai_beacons'] @@ -127,11 +134,31 @@ def __init__(self, frame, pid, data): #: Flags on the command??? self.flags = data['flags'] - #: A dictionary of possible ability flags. Flag names are: alternate, - #: queued, preempt, smart_click, smart_rally, subgroup, set_autocast, - #: set_autocast_on, user, data_a, data_b, data_passenger, data_abil_queue_order_id, - #: ai, ai_ignore_on_finish, is_order, script, homogenous_interruption, - #: minimap, repeat, dispatch_to_other_unit, and target_self + #: A dictionary of possible ability flags. Flags are: + #: + #: * alternate + #: * queued + #: * preempt + #: * smart_click + #: * smart_rally + #: * subgroup + #: * set_autocast, + #: * set_autocast_on + #: * user + #: * data_a + #: * data_b + #: * data_passenger + #: * data_abil_queue_order_id, + #: * ai + #: * ai_ignore_on_finish + #: * is_order + #: * script + #: * homogenous_interruption, + #: * minimap + #: * repeat + #: * dispatch_to_other_unit + #: * target_self + #: self.flag = dict( alternate=0x1 & self.flags != 0, queued=0x2 & self.flags != 0, @@ -446,13 +473,13 @@ class CameraEvent(GameEvent): def __init__(self, frame, pid, data): super(CameraEvent, self).__init__(frame, pid) - #: The x coordinate of the center? of the camera + #: The x coordinate of the center of the camera self.x = (data['target']['x'] if data['target'] is not None else 0)/256.0 - #: The y coordinate of the center? of the camera + #: The y coordinate of the center of the camera self.y = (data['target']['y'] if data['target'] is not None else 0)/256.0 - #: The location of the center? of the camera + #: The location of the center of the camera self.location = (self.x, self.y) #: The distance to the camera target ?? diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index b5166abd..cf99ac91 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -12,8 +12,13 @@ class MessageEvent(Event): Parent class for all message events. """ def __init__(self, frame, pid): + #: The user id (or player id for older replays) of the person that generated the event. self.pid = pid + + #: The frame of the game this event was applied self.frame = frame + + #: The second of the game (game time not real time) this event was applied self.second = frame >> 4 #: Short cut string for event class name @@ -34,10 +39,19 @@ class ChatEvent(MessageEvent): """ def __init__(self, frame, pid, target, text): super(ChatEvent, self).__init__(frame, pid) + #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. self.target = target + + #: The text of the message. self.text = text + + #: Flag marked true of message was to all. self.to_all = (self.target == 0) + + #: Flag marked true of message was to allies. self.to_allies = (self.target == 2) + + #: Flag marked true of message was to observers. self.to_observers = (self.target == 4) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 893f0e55..646fb3f8 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -10,9 +10,14 @@ class TrackerEvent(Event): + """ + Parent class for all tracker events. + """ def __init__(self, frames): #: The frame of the game this event was applied self.frame = frames + + #: The second of the game (game time not real time) this event was applied self.second = frames >> 4 #: Short cut string for event class name @@ -30,17 +35,15 @@ def __str__(self): class PlayerStatsEvent(TrackerEvent): """ - Player Stats events are generated for all players that were in the game - even if they've since left every 10 seconds. An additional set of stats - events are generated at the end of the game. + Player Stats events are generated for all players that were in the game even if they've since + left every 10 seconds. An additional set of stats events are generated at the end of the game. - When a player leaves the game, a single PlayerStatsEvent is generated - for that player and no one else. That player continues to generate - PlayerStatsEvents at 10 second intervals until the end of the game. + When a player leaves the game, a single PlayerStatsEvent is generated for that player and no + one else. That player continues to generate PlayerStatsEvents at 10 second intervals until the + end of the game. - In 1v1 games, the above behavior can cause the losing player to have 2 - events generated at the end of the game. One for leaving and one for - the end of the game. + In 1v1 games, the above behavior can cause the losing player to have 2 events generated at the + end of the game. One for leaving and one for the end of the game. """ def __init__(self, frames, data, build): super(PlayerStatsEvent, self).__init__(frames) @@ -213,15 +216,14 @@ def __str__(self): class UnitBornEvent(TrackerEvent): """ - Generated when a unit is created in a finished state in the game. Examples - include the Marine, Zergling, and Zealot (when trained from a gateway). - Units that enter the game unfinished (all buildings, warped in units) generate - a :class:`UnitInitEvent` instead. - - Unfortunately, units that are born do not have events marking their beginnings - like :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to - it are the :class:`~sc2reader.event.game.AbilityEvent` game events where the ability - is a train unit command. + Generated when a unit is created in a finished state in the game. Examples include the Marine, + Zergling, and Zealot (when trained from a gateway). Units that enter the game unfinished (all + buildings, warped in units) generate a :class:`UnitInitEvent` instead. + + Unfortunately, units that are born do not have events marking their beginnings like + :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to it are the + :class:`~sc2reader.event.game.AbilityEvent` game events where the ability is a train unit + command. """ def __init__(self, frames, data, build): super(UnitBornEvent, self).__init__(frames) @@ -253,10 +255,12 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location + #: The x coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. + #: Location prior to rounding marks the center of the unit footprint. self.x = data[5] * 4 - #: The y coordinate of the location + #: The y coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. + #: Location prior to rounding marks the center of the unit footprint. self.y = data[6] * 4 #: The map location of the unit birth @@ -292,10 +296,12 @@ def __init__(self, frames, data, build): #: The player object of the that killed the unit. Not always available. self.killer = None - #: The x coordinate of the location + #: The x coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. + #: Location prior to rounding marks the center of the unit footprint. self.x = data[3] * 4 - #: The y coordinate of the location + #: The y coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. + #: Location prior to rounding marks the center of the unit footprint. self.y = data[4] * 4 #: The map location the unit was killed at. @@ -394,10 +400,9 @@ def __str__(self): class UnitInitEvent(TrackerEvent): """ - The counter part to :class:`UnitDoneEvent`, generated by the game engine - when a unit is initiated. This applies only to units which are started - in game before they are finished. Primary examples being buildings and - warp-in units. + The counter part to :class:`UnitDoneEvent`, generated by the game engine when a unit is + initiated. This applies only to units which are started in game before they are finished. + Primary examples being buildings and warp-in units. """ def __init__(self, frames, data, build): super(UnitInitEvent, self).__init__(frames) @@ -429,10 +434,12 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location + #: The x coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. + #: Location prior to rounding marks the center of the unit footprint. self.x = data[5] * 4 - #: The y coordinate of the location + #: The y coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. + #: Location prior to rounding marks the center of the unit footprint. self.y = data[6] * 4 #: The map location the unit was started at @@ -444,9 +451,8 @@ def __str__(self): class UnitDoneEvent(TrackerEvent): """ - The counter part to the :class:`UnitInitEvent`, generated by the game engine - when an initiated unit is completed. E.g. warp-in finished, building finished, - morph complete. + The counter part to the :class:`UnitInitEvent`, generated by the game engine when an initiated + unit is completed. E.g. warp-in finished, building finished, morph complete. """ def __init__(self, frames, data, build): super(UnitDoneEvent, self).__init__(frames) @@ -485,7 +491,9 @@ def __init__(self, frames, data, build): #: A dict mapping of units that had their position updated to their positions self.units = dict() - #: A list of (unit_index, (x,y)) derived from the first_unit_index and items + #: A list of (unit_index, (x,y)) derived from the first_unit_index and items. Like the other + #: tracker events, these coordinates have 4 point resolution. (15,25) recorded as (12,24). + #: Location prior to rounding marks the center of the unit footprint. self.positions = list() unit_index = self.first_unit_index From 1d0328316905a6695abcc22862f70f3393e2ba0d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 18:21:42 -0400 Subject: [PATCH 043/238] First pass at replay resume support. refs #91 --- CHANGELOG.rst | 1 + sc2reader/engine/plugins/context.py | 5 +++++ sc2reader/events/game.py | 14 ++++++++++++++ sc2reader/readers.py | 4 ++-- sc2reader/resources.py | 10 ++++++++++ test_replays/test_all.py | 2 ++ 6 files changed, 34 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9ee1965f..f3d95ef3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,7 @@ CHANGELOG 0.7.0 - --------------------------- +* Added replay.resume_from_replay flag. See replay.resume_user_info for additional info. * PacketEvent is now ProgressEvent. * SetToHotkeyEvent is now SetControlGroupEvent. * AddToHotkeyEvent is now AddToControlGroupEvent. diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 099569a0..feb013c5 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -99,6 +99,11 @@ def handleResourceTradeEvent(self, event, replay): event.sender = event.player event.recipient = replay.players[event.recipient_id] + def handleHijackReplayGameEvent(self, event, replay): + replay.resume_from_replay = True + replay.resume_method = event.method + replay.resume_user_info = event.user_infos + def handlePlayerStatsEvent(self, event, replay): self.load_tracker_player(event, replay) diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 584f8b1a..4f9d6735 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -581,3 +581,17 @@ def __init__(self, frame, pid, data): #: The id of the request being cancelled self.request_id = data['request_id'] + + +class HijackReplayGameEvent(GameEvent): + """ + Generated when players take over from a replay. + """ + def __init__(self, frame, pid, data): + super(HijackReplayGameEvent, self).__init__(frame, pid) + + #: The method used. Not sure what 0/1 represent + self.method = data['method'] + + #: Information on the users hijacking the game + self.user_infos = data['user_infos'] diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 61f8d928..ed9244ce 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1326,7 +1326,7 @@ def __init__(self): 21: (None, self.save_game_event), # New 22: (None, self.save_game_done_event), # Override 23: (None, self.load_game_done_event), # Override - 43: (None, self.hijack_replay_game_event), # New + 43: (HijackReplayGameEvent, self.hijack_replay_game_event), # New 62: (None, self.trigger_target_mode_update_event), # New 101: (PlayerLeaveEvent, self.game_user_leave_event), # New 102: (None, self.game_user_join_event), # New @@ -1356,7 +1356,7 @@ def load_game_done_event(self, data): def hijack_replay_game_event(self, data): return dict( user_infos=[dict( - game_unit_id=data.read_bits(4), + game_user_id=data.read_bits(4), observe=data.read_bits(2), name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, diff --git a/sc2reader/resources.py b/sc2reader/resources.py index f9eeceaa..d9f8c7d4 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -184,6 +184,16 @@ class Replay(Resource): #: SC2 Expansion. One of 'WoL', 'HotS' expasion = str() + #: True of the game was resumed from a replay + resume_from_replay = False + + #: A flag marking which method was used to resume from replay. Unknown interpretation. + resume_method = None + + #: Lists info for each user that is resuming from replay. + resume_user_info = None + + def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options): super(Replay, self).__init__(replay_file, filename, **options) self.datapack = None diff --git a/test_replays/test_all.py b/test_replays/test_all.py index dbbfd157..5040b4b9 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -227,6 +227,8 @@ def test_oracle_parsing(self): def test_resume_from_replay(self): replay = sc2reader.load_replay("test_replays/2.0.3.24764/resume_from_replay.SC2Replay") + self.assertTrue(replay.resume_from_replay) + self.assertEqual(replay.resume_method, 0) def test_clan_players(self): replay = sc2reader.load_replay("test_replays/2.0.4.24944/Lunar Colony V.SC2Replay") From be7883c0e0c392f8bf50d6fd529b9573180e2c27 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Sat, 16 Nov 2013 15:31:54 -0500 Subject: [PATCH 044/238] dont assume player name is ascii --- sc2reader/engine/plugins/context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index d4082b40..b59a707b 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -29,7 +29,7 @@ def handleAbilityEvent(self, event, replay): event.logger.error(replay.filename) event.logger.error("Release String: "+replay.release_string) for player in replay.players: - event.logger.error("\t"+str(player)) + event.logger.error("\t"+unicode(player).encode('ascii', 'ignore')) self.logger.error("{0}\t{1}\tMissing ability {2:X} from {3}".format(event.frame, event.player.name, event.ability_id, replay.datapack.__class__.__name__)) From e67216866e1d29e0d7b37e862165320a7f362155 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 17 Nov 2013 18:33:45 -0500 Subject: [PATCH 045/238] Remove unused player_names. closes #158. --- sc2reader/resources.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index d9f8c7d4..ba02eebd 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -203,7 +203,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_level = None #default values, filled in during file read - self.player_names = list() self.other_people = set() self.speed = "" self.type = "" From a3153db03a5ed478b64f3a33a0ea9dbdf3d54856 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:03:10 -0500 Subject: [PATCH 046/238] Remove map specific attributes from the listing. People that want map attribute information can run the relevant s2gs files through and get proper mappings for their use case. --- sc2reader/data/attributes.json | 32 +------------------------------- sc2reader/objects.py | 5 ++++- 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index cc2149b2..d2d0eab4 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -1,35 +1,5 @@ { "attributes": { - "0001": [ - "Korhal (Urban)", - { - "0001": "Unclassified game type.", - "0002": "4v4 Team Monobattles", - "0003": "Work with your team to select a strong composition of units", - "0004": "Each player must select a single combat unit at the start of the game." - } - ], - "0002": [ - "Rated", - { - "0001": "Yes", - "0002": "No" - } - ], - "0003": [ - "Balance Teams", - { - "0001": "Yes", - "0002": "No" - } - ], - "0004": [ - "Ship Limit", - { - "0001": "No", - "0002": "Yes" - } - ], "0500": [ "Controller", { @@ -1046,4 +1016,4 @@ ] }, "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\na(I3009\nS'Amm'\np51\ntp52\naS'Automated Match Making'\np53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nI3141\naVAI Build (Terran)\np64\naS'AI Build'\np65\natp66\nRp67\ng64\nsg1\n((lp68\n(I2001\nS'3v3'\np69\ntp70\naS'3 v 3'\np71\naV3v3\np72\natp73\nRp74\ng72\nsg1\n((lp75\nI3142\naVAI Build (Terran)\np76\naS'AI Build'\np77\natp78\nRp79\ng76\nsg1\n((lp80\n(I3200\nS'AB04'\np81\ntp82\naS'Agressive Push'\np83\naVAggressive Push\np84\natp85\nRp86\ng84\nsg1\n((lp87\nVAI Build (Protoss)\np88\naI3174\naS'AI Build'\np89\natp90\nRp91\ng88\nsg1\n((lp92\nS'Very Hard'\np93\naVElite\np94\na(I3004\nS'VyHd'\np95\ntp96\natp97\nRp98\ng94\nsg1\n((lp99\nS'Agressive Push'\np100\naVAggressive Push\np101\na(I3167\nS'AB04'\np102\ntp103\natp104\nRp105\ng101\nsg1\n((lp106\nI3204\naVAI Build (Zerg)\np107\naS'AI Build'\np108\natp109\nRp110\ng107\nsg1\n((lp111\nVInsane\np112\naS'Cheater 3 (Insane)'\np113\na(I3004\nS'Insa'\np114\ntp115\natp116\nRp117\ng112\nsg1\n((lp118\n(I3007\nS'Watc'\np119\ntp120\naS'Observer'\np121\naS'Watcher'\np122\natp123\nRp124\ng121\nsg1\n((lp125\nI3205\naVAI Build (Zerg)\np126\naS'AI Build'\np127\natp128\nRp129\ng126\nsg1\n((lp130\nVTeams5v5\np131\naI2007\naS'Team'\np132\natp133\nRp134\ng131\nsg1\n((lp135\n(I2001\nS'FFA'\np136\ntp137\naVFFA\np138\naS'Free For All'\np139\natp140\nRp141\ng138\nsg1\n((lp142\nS'Unknown'\np143\naI2012\naS'Team'\np144\natp145\nRp146\ng144\nsg1\n((lp147\nI3206\naVAI Build (Zerg)\np148\naS'AI Build'\np149\natp150\nRp151\ng148\nsg1\n((lp152\n(I3168\nS'AB04'\np153\ntp154\naS'Agressive Push'\np155\naVAggressive Push\np156\natp157\nRp158\ng156\nsg1\n((lp159\nI3172\naVAI Build (Protoss)\np160\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nS'Level 1 (Very Easy)'\np165\na(I3004\nS'VyEy'\np166\ntp167\naVVery Easy\np168\natp169\nRp170\ng168\nsg1\n((lp171\nS'Agressive Push'\np172\naVAggressive Push\np173\na(I3135\nS'AB04'\np174\ntp175\natp176\nRp177\ng173\nsg1\n((lp178\nV2v2\np179\naS'2 v 2'\np180\na(I2001\nS'2v2'\np181\ntp182\natp183\nRp184\ng179\nsg1\n((lp185\nS'Agressive Push'\np186\na(I3166\nS'AB04'\np187\ntp188\naVAggressive Push\np189\natp190\nRp191\ng189\nsg1\n((lp192\nVTeamsFFA\np193\naI2006\naS'Team'\np194\natp195\nRp196\ng193\nsg1\n((lp197\nVAI Build (Terran)\np198\naS'AI Build'\np199\naI3143\natp200\nRp201\ng198\nsg1\n((lp202\nVTeams7v7\np203\naI2011\naS'Team'\np204\natp205\nRp206\ng203\nsg1\n((lp207\nVMedium\np208\naS'Level 3 (Medium)'\np209\na(I3004\nS'Medi'\np210\ntp211\natp212\nRp213\ng208\nsg1\n((lp214\nI3140\naVAI Build (Terran)\np215\naS'AI Build'\np216\natp217\nRp218\ng215\nsg1\n((lp219\nS'Level 2 (Easy)'\np220\na(I3004\nS'Easy'\np221\ntp222\naVEasy\np223\natp224\nRp225\ng223\nsg1\n((lp226\n(I3136\nS'AB04'\np227\ntp228\naS'Agressive Push'\np229\naVAggressive Push\np230\natp231\nRp232\ng230\nsg1\n((lp233\nI2008\naVTeams6v6\np234\naS'Team'\np235\natp236\nRp237\ng234\nsg1\n((lp238\nS'Agressive Push'\np239\naVAggressive Push\np240\na(I3103\nS'AB04'\np241\ntp242\natp243\nRp244\ng240\nsg1\n((lp245\nV4v4\np246\naS'4 v 4'\np247\na(I2001\nS'4v4'\np248\ntp249\natp250\nRp251\ng246\nsg1\n((lp252\nS'Agressive Push'\np253\na(I3134\nS'AB04'\np254\ntp255\naVAggressive Push\np256\natp257\nRp258\ng256\nsg1\n((lp259\nVTeams1v1\np260\naI2002\naS'Team'\np261\natp262\nRp263\ng260\nsg1\n((lp264\nI3139\naVAI Build (Terran)\np265\naS'AI Build'\np266\natp267\nRp268\ng265\nsg1\n((lp269\nVAI Build (Zerg)\np270\naS'AI Build'\np271\naI3207\natp272\nRp273\ng270\nsg1\n((lp274\nI3171\naVAI Build (Protoss)\np275\naS'AI Build'\np276\natp277\nRp278\ng275\nsg1\n((lp279\nI3173\naS'AI Build'\np280\naVAI Build (Protoss)\np281\natp282\nRp283\ng281\nsg1\n((lp284\nVTeams3v3\np285\naI2004\naS'Team'\np286\natp287\nRp288\ng285\nsg1\n((lp289\nVAI Build (Protoss)\np290\naS'AI Build'\np291\naI3175\natp292\nRp293\ng290\nsg1\n((lp294\nVTeams4v4\np295\naI2005\naS'Team'\np296\natp297\nRp298\ng295\nsg1\n((lp299\nI3203\naVAI Build (Zerg)\np300\naS'AI Build'\np301\natp302\nRp303\ng300\nsg1\n((lp304\nS'Agressive Push'\np305\na(I3198\nS'AB04'\np306\ntp307\naVAggressive Push\np308\natp309\nRp310\ng308\ns." -} \ No newline at end of file +} diff --git a/sc2reader/objects.py b/sc2reader/objects.py index a0557145..e5391b66 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -62,6 +62,7 @@ def __repr__(self): return str(self) +@log_utils.loggable class Attribute(object): def __init__(self, header, attr_id, player, value): @@ -70,7 +71,9 @@ def __init__(self, header, attr_id, player, value): self.player = player if self.id not in LOBBY_PROPERTIES: - raise ValueError("Unknown attribute id: "+self.id) + self.logger.info("Unknown attribute id: {0}".format(self.id)) + self.name = "Unknown" + self.value = None else: self.name, lookup = LOBBY_PROPERTIES[self.id] self.value = lookup[value.strip("\x00 ")[::-1]] From 6fb12e825f421533ec11a48a5cdcc1ab996ebbb7 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:15:20 -0500 Subject: [PATCH 047/238] Raise an informative error on corrupt tracker file This way people can reliably catch this issue and deal with it as they wish. --- sc2reader/exceptions.py | 4 ++++ sc2reader/resources.py | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/sc2reader/exceptions.py b/sc2reader/exceptions.py index 15845101..caf13b86 100644 --- a/sc2reader/exceptions.py +++ b/sc2reader/exceptions.py @@ -10,6 +10,10 @@ class SC2ReaderLocalizationError(SC2ReaderError): pass +class CorruptTrackerFileError(SC2ReaderError): + pass + + class MPQError(SC2ReaderError): pass diff --git a/sc2reader/resources.py b/sc2reader/resources.py index ba02eebd..0a806ca3 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -16,7 +16,7 @@ from sc2reader import readers from sc2reader import exceptions from sc2reader.data import builds as datapacks -from sc2reader.exceptions import SC2ReaderLocalizationError +from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES @@ -194,7 +194,7 @@ class Replay(Resource): resume_user_info = None - def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options): + def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options): super(Replay, self).__init__(replay_file, filename, **options) self.datapack = None self.raw_data = dict() @@ -289,13 +289,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_players() # Load tracker events if requested - if load_level >= 3: + if load_level >= 3 and do_tracker_events: self.load_level = 3 for data_file in ['replay.tracker.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_tracker_events() - # Load events if requested if load_level >= 4: self.load_level = 4 @@ -305,6 +304,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Run this replay through the engine as indicated if engine: + resume_events = [ev for ev in self.game_events if ev.name == 'HijackReplayGameEvent'] + if self.base_build <= 26490 and self.tracker_events and len(resume_events) > 0: + raise CorruptTrackerFileError( + "Cannot run engine on resumed games with tracker events. Run again with the " + + "do_tracker_events=False option to generate context without tracker events.") + engine.run(self) def load_details(self): From caeb6ca36492092f81e1d6c0c8cfc2ecb1fdd939 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:18:50 -0500 Subject: [PATCH 048/238] Fix python3 bug in plugin error handling routine. --- sc2reader/engine/engine.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 2788bcc6..b72b80b0 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -178,11 +178,11 @@ def run(self, replay): else: new_events.appendleft(new_event) except Exception as e: - if event_handler.im_self.name in ['ContextLoader']: + if event_handler.__self__.name in ['ContextLoader']: # Certain built in plugins should probably still cause total failure raise # Maybe?? else: - new_event = PluginExit(event_handler.im_self, code=1, details=dict(error=e)) + new_event = PluginExit(event_handler.__self__, code=1, details=dict(error=e)) new_events.append(new_event) event_queue.extendleft(new_events) From 2b35c07e09eceafa47a0d1c9470bf3e5ffe18725 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 22:04:23 -0500 Subject: [PATCH 049/238] Fixes #160 with non back compatible changes. Renames all ability events as following: * AbilityEvent -> CommandEvent * AbilityEvent -> BasicCommandEvent * TargetAbilityEvent -> TargetUnitCommandEvent * LocationAbilityEvent -> TargetPointCommandEvent As such, all references to these classes, statements that check the event name, and engine plugin event handlers need to be renamed. Its not ideal but it is much better than being wrong. --- sc2reader/data/__init__.py | 2 +- sc2reader/engine/engine.py | 18 +++---- sc2reader/engine/plugins/apm.py | 4 +- sc2reader/engine/plugins/context.py | 4 +- sc2reader/events/game.py | 67 ++++++++++++++++----------- sc2reader/events/tracker.py | 2 +- sc2reader/factories/plugins/replay.py | 4 +- sc2reader/scripts/sc2parse.py | 2 +- sc2reader/scripts/sc2replayer.py | 4 +- 9 files changed, 61 insertions(+), 46 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index fd345a34..c9427572 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -62,7 +62,7 @@ def __init__(self, unit_id): self.killed_by = None #: The unique in-game id for this unit. The id can sometimes be zero because - #: TargetAbilityEvents will create a new unit with id zero when a unit + #: TargetUnitCommandEvents will create a new unit with id zero when a unit #: behind the fog of war is targetted. self.id = unit_id diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index b72b80b0..d527db36 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -18,14 +18,14 @@ class GameEngine(object): Example Usage:: class Plugin1(): - def handleAbilityEvent(self, event, replay): + def handleCommandEvent(self, event, replay): pass class Plugin2(): def handleEvent(self, event, replay): pass - def handleTargetAbilityEvent(self, event, replay): + def handleTargetUnitCommandEvent(self, event, replay): pass ... @@ -35,11 +35,11 @@ def handleTargetAbilityEvent(self, event, replay): engine.reigster_plugin(Plugin(5)) engine.run(replay) - Calls functions in the following order for a ``TargetAbilityEvent``:: + Calls functions in the following order for a ``TargetUnitCommandEvent``:: - Plugin1.handleAbilityEvent(event, replay) + Plugin1.handleCommandEvent(event, replay) Plugin2.handleEvent(event, replay) - Plugin2.handleTargetAbilityEvent(event, replay) + Plugin2.handleTargetUnitCommandEvent(event, replay) Plugin Specification @@ -57,7 +57,7 @@ def handleEventName(self, event, replay) * handleMessageEvent - called for events in replay.message.events * handleGameEvent - called for events in replay.game.events * handleTrackerEvent - called for events in replay.tracker.events - * handleAbilityEvent - called for all types of ability events + * handleCommandEvent - called for all types of command events * handleControlGroupEvent - called for all player control group events Plugins may also handle optional ``InitGame`` and ``EndGame`` events generated @@ -90,7 +90,7 @@ def handleEvent(self, event, replay): return ... - def handleAbilityEvent(self, event, replay): + def handleCommandEvent(self, event, replay): try: possibly_throwing_error() catch Error as e: @@ -204,8 +204,8 @@ def _get_plugin_event_handlers(self, plugin, event): handlers.append(getattr(plugin, 'handleGameEvent', None)) if isinstance(event, TrackerEvent) and hasattr(plugin, 'handleTrackerEvent'): handlers.append(getattr(plugin, 'handleTrackerEvent', None)) - if isinstance(event, AbilityEvent) and hasattr(plugin, 'handleAbilityEvent'): - handlers.append(getattr(plugin, 'handleAbilityEvent', None)) + if isinstance(event, CommandEvent) and hasattr(plugin, 'handleCommandEvent'): + handlers.append(getattr(plugin, 'handleCommandEvent', None)) if isinstance(event, ControlGroupEvent) and hasattr(plugin, 'handleControlGroupEvent'): handlers.append(getattr(plugin, 'handleControlGroupEvent', None)) if hasattr(plugin, 'handle'+event.name): diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py index 42d44185..137e1458 100644 --- a/sc2reader/engine/plugins/apm.py +++ b/sc2reader/engine/plugins/apm.py @@ -7,7 +7,7 @@ class APMTracker(object): """ Builds ``player.aps`` and ``player.apm`` dictionaries where an action is - any Selection, ControlGroup, or Ability event. + any Selection, ControlGroup, or Command event. Also provides ``player.avg_apm`` which is defined as the sum of all the above actions divided by the number of seconds played by the player (not @@ -31,7 +31,7 @@ def handleSelectionEvent(self, event, replay): event.player.aps[event.second] += 1 event.player.apm[int(event.second/60)] += 1 - def handleAbilityEvent(self, event, replay): + def handleCommandEvent(self, event, replay): event.player.aps[event.second] += 1 event.player.apm[int(event.second/60)] += 1 diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index feb013c5..b6b67af9 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -20,7 +20,7 @@ def handleGameEvent(self, event, replay): def handleMessageEvent(self, event, replay): self.load_message_game_player(event, replay) - def handleAbilityEvent(self, event, replay): + def handleCommandEvent(self, event, replay): if not replay.datapack: return @@ -43,7 +43,7 @@ def handleAbilityEvent(self, event, replay): elif event.other_unit_id is not None: self.logger.error("Other unit {0} not found".format(event.other_unit_id)) - def handleTargetAbilityEvent(self, event, replay): + def handleTargetUnitCommandEvent(self, event, replay): if not replay.datapack: return diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 4f9d6735..29945a4e 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -105,31 +105,31 @@ def __init__(self, frame, pid, data): def create_command_event(frame, pid, data): ability_type = data['data'][0] if ability_type == 'None': - return AbilityEvent(frame, pid, data) + return BasicCommandEvent(frame, pid, data) elif ability_type == 'TargetUnit': - return TargetAbilityEvent(frame, pid, data) + return TargetUnitCommandEvent(frame, pid, data) elif ability_type == 'TargetPoint': - return LocationAbilityEvent(frame, pid, data) + return TargetPointCommandEvent(frame, pid, data) elif ability_type == 'Data': - return SelfAbilityEvent(frame, pid, data) + return DataCommandEvent(frame, pid, data) @loggable -class AbilityEvent(GameEvent): +class CommandEvent(GameEvent): """ Ability events are generated when ever a player in the game issues a command to a unit or group of units. They are split into three subclasses of ability, each with their own set of associated data. The attributes listed below are shared across all ability event types. - See :class:`LocationAbilityEvent`, :class:`TargetAbilityEvent`, and :class:`SelfAbilityEvent` - for individual details. + See :class:`TargetPointCommandEvent`, :class:`TargetUnitCommandEvent`, and + :class:`DataCommandEvent` for individual details. """ def __init__(self, frame, pid, data): - super(AbilityEvent, self).__init__(frame, pid) + super(CommandEvent, self).__init__(frame, pid) #: Flags on the command??? self.flags = data['flags'] @@ -235,25 +235,38 @@ def __str__(self): return string -class LocationAbilityEvent(AbilityEvent): +class BasicCommandEvent(CommandEvent): """ - Extends :class:`AbilityEvent` + Extends :class:`CommandEvent` + + This event is recorded for events that have no extra information recorded. + + Note that like all CommandEvents, the event will be recorded regardless + of whether or not the command was successful. + """ + def __init__(self, frame, pid, data): + super(TargetPointCommandEvent, self).__init__(frame, pid, data) + + +class TargetPointCommandEvent(CommandEvent): + """ + Extends :class:`CommandEvent` This event is recorded when ever a player issues a command that targets a location and NOT a unit. Commands like Psistorm, Attack Move, Fungal Growth, and EMP fall under this category. - Note that like all AbilityEvents, the event will be recorded regardless + Note that like all CommandEvents, the event will be recorded regardless of whether or not the command was successful. """ def __init__(self, frame, pid, data): - super(LocationAbilityEvent, self).__init__(frame, pid, data) + super(TargetPointCommandEvent, self).__init__(frame, pid, data) #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.x = self.ability_type_data['point'].get('x', 0)/4096.0 + self.x = self.ability_type_data['point'].get('x', 0) / 4096.0 #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.y = self.ability_type_data['point'].get('y', 0)/4096.0 + self.y = self.ability_type_data['point'].get('y', 0) / 4096.0 #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. self.z = self.ability_type_data['point'].get('z', 0) @@ -262,18 +275,19 @@ def __init__(self, frame, pid, data): self.location = (self.x, self.y, self.z) -class TargetAbilityEvent(AbilityEvent): +class TargetUnitCommandEvent(CommandEvent): """ - Extends :class:`AbilityEvent` + Extends :class:`CommandEvent` - TargetAbilityEvents are recorded when ever a player issues a command that targets a unit. + This event is recorded when ever a player issues a command that targets a unit. The location of the target unit at the time of the command is also recorded. Commands like Chronoboost, Transfuse, and Snipe fall under this category. - Note that all AbilityEvents are recorded regardless of whether or not the command was successful. + Note that like all CommandEvents, the event will be recorded regardless + of whether or not the command was successful. """ def __init__(self, frame, pid, data): - super(TargetAbilityEvent, self).__init__(frame, pid, data) + super(TargetUnitCommandEvent, self).__init__(frame, pid, data) #: Flags set on the target unit. Available for TargetUnit type events self.target_flags = self.ability_type_data.get('flags', None) @@ -301,10 +315,10 @@ def __init__(self, frame, pid, data): self.upkeep_player_id = self.ability_type_data.get('upkeep_player_id', None) #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.x = self.ability_type_data['point'].get('x', 0)/4096.0 + self.x = self.ability_type_data['point'].get('x', 0) / 4096.0 #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.y = self.ability_type_data['point'].get('y', 0)/4096.0 + self.y = self.ability_type_data['point'].get('y', 0) / 4096.0 #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. self.z = self.ability_type_data['point'].get('z', 0) @@ -313,17 +327,18 @@ def __init__(self, frame, pid, data): self.location = (self.x, self.y, self.z) -class SelfAbilityEvent(AbilityEvent): +class DataCommandEvent(CommandEvent): """ - Extends :class:`AbilityEvent` + Extends :class:`CommandEvent` - SelfAbilityEvents are recorded when ever a player issues a command that has no target. Commands + DataCommandEvent are recorded when ever a player issues a command that has no target. Commands like Burrow, SeigeMode, Train XYZ, and Stop fall under this category. - Note that all AbilityEvents are recorded regardless of whether or not the command was successful. + Note that like all CommandEvents, the event will be recorded regardless + of whether or not the command was successful. """ def __init__(self, frame, pid, data): - super(SelfAbilityEvent, self).__init__(frame, pid, data) + super(DataCommandEvent, self).__init__(frame, pid, data) #: Other target data. Available for Data type events. self.target_data = self.ability_type_data.get('data', None) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 646fb3f8..b8967150 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -222,7 +222,7 @@ class UnitBornEvent(TrackerEvent): Unfortunately, units that are born do not have events marking their beginnings like :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to it are the - :class:`~sc2reader.event.game.AbilityEvent` game events where the ability is a train unit + :class:`~sc2reader.event.game.CommandEvent` game events where the command is a train unit command. """ def __init__(self, frames, data, build): diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index 40401196..ad4c3efb 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -94,7 +94,7 @@ def toDict(replay): def APMTracker(replay): """ Builds ``player.aps`` and ``player.apm`` dictionaries where an action is - any Selection, Hotkey, or Ability event. + any Selection, Hotkey, or Command event. Also provides ``player.avg_apm`` which is defined as the sum of all the above actions divided by the number of seconds played by the player (not @@ -106,7 +106,7 @@ def APMTracker(replay): player.seconds_played = replay.length.seconds for event in player.events: - if event.name == 'SelectionEvent' or 'AbilityEvent' in event.name or 'ControlGroup' in event.name: + if event.name == 'SelectionEvent' or 'CommandEvent' in event.name or 'ControlGroup' in event.name: player.aps[event.second] += 1 player.apm[int(event.second/60)] += 1 diff --git a/sc2reader/scripts/sc2parse.py b/sc2reader/scripts/sc2parse.py index b39fd432..d0808340 100755 --- a/sc2reader/scripts/sc2parse.py +++ b/sc2reader/scripts/sc2parse.py @@ -48,7 +48,7 @@ def main(): human.pids = set([human.pid for human in replay.humans]) event_pids = set([event.player.pid for event in replay.events if getattr(event, 'player', None)]) player_pids = set([player.pid for player in replay.players if player.is_human]) - ability_pids = set([event.player.pid for event in replay.events if 'AbilityEvent' in event.name]) + ability_pids = set([event.player.pid for event in replay.events if 'CommandEvent' in event.name]) if human.pids != event_pids: print('Event Pid problem! pids={pids} but event pids={event_pids}'.format(pids=human.pids, event_pids=event_pids)) print(' with {path}: {build} - {real_type} on {map_name} - Played {start_time}'.format(path=path, **replay.__dict__)) diff --git a/sc2reader/scripts/sc2replayer.py b/sc2reader/scripts/sc2replayer.py index cf373ed1..7a72c7ed 100755 --- a/sc2reader/scripts/sc2replayer.py +++ b/sc2reader/scripts/sc2replayer.py @@ -45,7 +45,7 @@ def getch(): def main(): parser = argparse.ArgumentParser( description="""Step by step replay of game events; shows only the - Initialization, Ability, and Selection events by default. Press any + Initialization, Command, and Selection events by default. Press any key to advance through the events in sequential order.""" ) @@ -77,7 +77,7 @@ def main(): # Loop through the events for event in events: - if isinstance(event, AbilityEvent) or \ + if isinstance(event, CommandEvent) or \ isinstance(event, SelectionEvent) or \ isinstance(event, PlayerLeaveEvent) or \ isinstance(event, GameStartEvent) or \ From 72da6aeae6ef1bbf9dc45fa544879d50d1fb87f6 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 22:19:08 -0500 Subject: [PATCH 050/238] Remove some old % style string formatting. --- sc2reader/decoders.py | 2 +- sc2reader/events/game.py | 6 +++--- sc2reader/events/message.py | 2 +- sc2reader/objects.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index bb0bbd4c..63324649 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -374,6 +374,6 @@ def read_struct(self, datatype=None): data = self.read_vint() else: - raise TypeError("Unknown Data Structure: '%s'" % datatype) + raise TypeError("Unknown Data Structure: '{0}'".format(datatype)) return data diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 29945a4e..998940ef 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -38,7 +38,7 @@ def __init__(self, frame, pid): def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) + return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): return self._str_prefix() + self.name @@ -547,7 +547,7 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}" % (self.minerals, self.vespene, self.terrazine, self.custom, self.reciever) + return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}".format(self.minerals, self.vespene, self.terrazine, self.custom, self.recipient) class ResourceRequestEvent(GameEvent): @@ -573,7 +573,7 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom" % (self.minerals, self.vespene, self.terrazine, self.custom) + return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format(self.minerals, self.vespene, self.terrazine, self.custom) class ResourceRequestFulfillEvent(GameEvent): diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index cf99ac91..e9859733 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -26,7 +26,7 @@ def __init__(self, frame, pid): def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) + return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): return self._str_prefix() + self.name diff --git a/sc2reader/objects.py b/sc2reader/objects.py index e5391b66..784ef9e2 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -82,7 +82,7 @@ def __repr__(self): return str(self) def __str__(self): - return "[%s] %s: %s" % (self.player, self.name, self.value) + return "[{0}] {1}: {2}".format(self.player, self.name, self.value) class Entity(object): From 6d13524ba8fbde2fa457189811eb0828666bf4c4 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 22:22:13 -0500 Subject: [PATCH 051/238] And this is why you run tests before pushing. refs #160 --- sc2reader/events/game.py | 2 +- test_replays/test_all.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 998940ef..e3948f26 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -245,7 +245,7 @@ class BasicCommandEvent(CommandEvent): of whether or not the command was successful. """ def __init__(self, frame, pid, data): - super(TargetPointCommandEvent, self).__init__(frame, pid, data) + super(BasicCommandEvent, self).__init__(frame, pid, data) class TargetPointCommandEvent(CommandEvent): diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 5040b4b9..ba7c0ea8 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -197,20 +197,20 @@ def test_hots_pids(self): replay = sc2reader.load_replay(replayfilename) self.assertEqual(replay.expansion, "HotS") player_pids = set([player.pid for player in replay.players if player.is_human]) - ability_pids = set([event.player.pid for event in replay.events if "AbilityEvent" in event.name]) + ability_pids = set([event.player.pid for event in replay.events if "CommandEvent" in event.name]) self.assertEqual(ability_pids, player_pids) def test_wol_pids(self): replay = sc2reader.load_replay("test_replays/1.5.4.24540/ggtracker_1471849.SC2Replay") self.assertEqual(replay.expansion, "WoL") - ability_pids = set([event.player.pid for event in replay.events if "AbilityEvent" in event.name]) + ability_pids = set([event.player.pid for event in replay.events if "CommandEvent" in event.name]) player_pids = set([player.pid for player in replay.players]) self.assertEqual(ability_pids, player_pids) def test_hots_hatchfun(self): replay = sc2reader.load_replay("test_replays/2.0.0.24247/molten.SC2Replay") player_pids = set([ player.pid for player in replay.players]) - spawner_pids = set([ event.player.pid for event in replay.events if "TargetAbilityEvent" in event.name and event.ability.name == "SpawnLarva"]) + spawner_pids = set([ event.player.pid for event in replay.events if "TargetUnitCommandEvent" in event.name and event.ability.name == "SpawnLarva"]) self.assertTrue(spawner_pids.issubset(player_pids)) def test_hots_vs_ai(self): @@ -331,7 +331,7 @@ def test_gameheartnormalizer_plugin(self): # Not a GameHeart game! replay = sc2reader.load_replay("test_replays/2.0.0.24247/molten.SC2Replay") player_pids = set([ player.pid for player in replay.players]) - spawner_pids = set([ event.player.pid for event in replay.events if "TargetAbilityEvent" in event.name and event.ability.name == "SpawnLarva"]) + spawner_pids = set([ event.player.pid for event in replay.events if "TargetUnitCommandEvent" in event.name and event.ability.name == "SpawnLarva"]) self.assertTrue(spawner_pids.issubset(player_pids)) replay = sc2reader.load_replay("test_replays/gameheart/gameheart.SC2Replay") From 665cc1245f60f6c2b0bd837a664390b719ab5bd5 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 22:28:11 -0500 Subject: [PATCH 052/238] Make note of the additional changes in the log. --- CHANGELOG.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f3d95ef3..2f99f148 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,12 +4,19 @@ CHANGELOG 0.7.0 - --------------------------- +* Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) * Added replay.resume_from_replay flag. See replay.resume_user_info for additional info. * PacketEvent is now ProgressEvent. * SetToHotkeyEvent is now SetControlGroupEvent. * AddToHotkeyEvent is now AddToControlGroupEvent. * GetFromHotkeyEvent is now GetControlGroupEvent. * PlayerAbilityEvent is no longer part of the event hierarchy. +* AbilityEvent doubled as both an abstract and concrete class (very bad, see #160). Now split into: + * AbilityEvent is now CommandEvent + * AbilityEvent is now BasicCommandEvent +* TargetAbilityEvent is now TargetUnitCommandEvent +* LocationAbilityEvent is now TargetPointCommandEvent +* Removed the defunct replay.player_names attribute. * event.name is no longer a class property; it can only be accessed from an event instance. * PingEvents now have new attributes: * event.to_all - true if ping seen by all From 1d9c141e4db4a972bea2ec2058f3e410de1e9894 Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Thu, 5 Dec 2013 22:12:31 -0800 Subject: [PATCH 053/238] adding a missing change from the list --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2f99f148..cc80d239 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -16,6 +16,7 @@ CHANGELOG * AbilityEvent is now BasicCommandEvent * TargetAbilityEvent is now TargetUnitCommandEvent * LocationAbilityEvent is now TargetPointCommandEvent +* SelfAbilityEvent is now DataCommandEvent * Removed the defunct replay.player_names attribute. * event.name is no longer a class property; it can only be accessed from an event instance. * PingEvents now have new attributes: From fe86668a8dd67c1bd7ea24d0ad035629c05b7306 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 21:22:04 -0500 Subject: [PATCH 054/238] Remove a couple more defunct replay attributes. --- CHANGELOG.rst | 3 +++ sc2reader/resources.py | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cc80d239..0de49ee4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -18,6 +18,9 @@ CHANGELOG * LocationAbilityEvent is now TargetPointCommandEvent * SelfAbilityEvent is now DataCommandEvent * Removed the defunct replay.player_names attribute. +* Removed the defunct replay.events_by_type attribute. +* Removed the defunct replay.other_people attribute. + * event.name is no longer a class property; it can only be accessed from an event instance. * PingEvents now have new attributes: * event.to_all - true if ping seen by all diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 0a806ca3..9ad0ed26 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -203,7 +203,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_level = None #default values, filled in during file read - self.other_people = set() self.speed = "" self.type = "" self.game_type = "" @@ -215,7 +214,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.map_hash = "" self.gateway = "" self.events = list() - self.events_by_type = defaultdict(list) self.teams, self.team = list(), dict() self.player = utils.PersonDict() From 9283c33842f924e3e1c781f0fe0c62b4c92d02a3 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 22:46:19 -0500 Subject: [PATCH 055/238] Use generic UnitType and Ability classes for data. The dynamically created classes don't play well with pickle and were unncessarily complex. The only change here is that you can't use this anymore. unit._type_class.__class__.__name__ Instead you can use the shorter: unit._type_class.name No problem. --- CHANGELOG.rst | 1 + sc2reader/data/__init__.py | 77 ++++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0de49ee4..2e7705b5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,7 @@ CHANGELOG 0.7.0 - --------------------------- +* Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. * Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) * Added replay.resume_from_replay flag. See replay.resume_user_info for additional info. * PacketEvent is now ProgressEvent. diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index c9427572..9d51723b 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -33,10 +33,7 @@ class Unit(object): - """ - Represents an in-game unit. - """ - + """Represents an in-game unit.""" def __init__(self, unit_id): #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. self.owner = None @@ -195,22 +192,64 @@ def __repr__(self): return str(self) +class UnitType(object): + """ Represents an in game unit type """ + def __init__(self, type_id, str_id=None, name=None, title=None, race=None, minerals=0, + vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): + #: The internal integer id representing this unit type + self.id = type_id + + #: The internal string id representing this unit type + self.str_id = str_id + + #: The name of this unit type + self.name = name + + #: The printable title of this unit type; has spaces and possibly punctuation + self.title = title + + #: The race this unit type belongs to + self.race = race + + #: The mineral cost of this unit type + self.minerals = minerals + + #: The vespene cost of this unit type + self.vespene = vespene + + #: The supply cost of this unit type + self.supply = supply + + #: Boolean flagging this unit type as a building + self.is_building = is_building + + #: Boolean flagging this unit type as a worker + self.is_worker = is_worker + + #: Boolean flagging this unit type as an army unit + self.is_army = is_army + + class Ability(object): + """ Represents an in-game ability """ + def __init__(self, id, name=None, title=None, is_build=False, build_time=0, build_unit=None): + #: The internal integer id representing this ability. + self.id = id - #: The internal integer id representing this ability. - id = None + #: The name of this ability + self.name = name - #: The name of this ability - name = "" + #: The printable title of this ability; has spaces and possibly punctuation. + self.title = title - #: Boolean flagging this ability as creating a new unit. - is_build = False + #: Boolean flagging this ability as creating a new unit. + self.is_build = is_build - #: The number of seconds required to build this unit. 0 if not ``is_build``. - build_time = 0 + #: The number of seconds required to build this unit. 0 if not ``is_build``. + self.build_time = build_time - #: A reference to the :class:`Unit` type built by this ability. None if not ``is_build``. - build_unit = None + #: A reference to the :class:`UnitType` type built by this ability. Default to None. + self.build_unit = build_unit @loggable @@ -260,20 +299,20 @@ def change_type(self, unit, new_type, frame): self.logger.error("Unable to change type of {0} to {1} [frame {2}]; unit type not found in build {3}".format(unit, new_type, frame, self.id)) def add_ability(self, ability_id, name, title=None, is_build=False, build_time=None, build_unit=None): - ability = type(str(name), (Ability,), dict( - id=ability_id, + ability = Ability( + ability_id, name=name, title=title or name, is_build=is_build, build_time=build_time, build_unit=build_unit - )) + ) setattr(self, name, ability) self.abilities[ability_id] = ability def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', minerals=0, vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): - unit = type(str(name), (Unit,), dict( - id=type_id, + unit = UnitType( + type_id, str_id=str_id, name=name, title=title or name, From 4d068bf69e1a2eb03385b979a2cf3d03b7e170d0 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 22:51:20 -0500 Subject: [PATCH 056/238] datapacks is a better word than builds here. --- sc2reader/data/__init__.py | 2 +- sc2reader/resources.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 9d51723b..6edf14a7 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -388,4 +388,4 @@ def load_build(expansion, version): for version in ('base', '23925', '24247', '24764'): hots_builds[version] = load_build('HotS', version) -builds = {'WoL': wol_builds, 'HotS': hots_builds} +datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds} diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 9ad0ed26..c89571fe 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -4,7 +4,6 @@ from collections import defaultdict, namedtuple from datetime import datetime import hashlib -import sys from xml.etree import ElementTree import zlib @@ -15,7 +14,7 @@ from sc2reader import log_utils from sc2reader import readers from sc2reader import exceptions -from sc2reader.data import builds as datapacks +from sc2reader.data import datapacks from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES From 0e6286fc868a6dabf7b33e8a8ff5d6e52891416b Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:20:57 -0500 Subject: [PATCH 057/238] Replace all references to gateway with region. --- CHANGELOG.rst | 1 + sc2reader/constants.py | 2 +- sc2reader/factories/plugins/replay.py | 2 +- sc2reader/objects.py | 13 +-------- sc2reader/resources.py | 40 +++++++++++++-------------- sc2reader/utils.py | 2 +- 6 files changed, 25 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2e7705b5..37482c05 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,7 @@ CHANGELOG 0.7.0 - --------------------------- +* All references to the gateway attribute have been replaced in favor of region; e.g. replay.region * Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. * Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) * Added replay.resume_from_replay flag. See replay.resume_user_info for additional info. diff --git a/sc2reader/constants.py b/sc2reader/constants.py index fa65d1c0..7b701dee 100644 --- a/sc2reader/constants.py +++ b/sc2reader/constants.py @@ -108,7 +108,7 @@ COLOR_CODES_INV = dict(zip(COLOR_CODES.values(), COLOR_CODES.keys())) -REGIONS = { +SUBREGIONS = { # United States 'us': { 1: 'us', diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index ad4c3efb..f6b19e79 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -62,7 +62,7 @@ def toDict(replay): # Consolidate replay metadata into dictionary return { - 'gateway': getattr(replay, 'gateway', None), + 'region': getattr(replay, 'region', None), 'map_name': getattr(replay, 'map_name', None), 'file_time': getattr(replay, 'file_time', None), 'filehash': getattr(replay, 'filehash', None), diff --git a/sc2reader/objects.py b/sc2reader/objects.py index 784ef9e2..e7e096b3 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -124,9 +124,6 @@ def __init__(self, sid, slot_data): #: The Battle.net region the entity is registered to self.region = GATEWAY_LOOKUP[int(parts[0])] - #: Deprecated, see Entity.region - self.gateway = self.region - #: The Battle.net subregion the entity is registered to self.subregion = int(parts[2]) @@ -198,9 +195,6 @@ def __init__(self, pid, detail_data, attribute_data): #: The Battle.net region the entity is registered to self.region = GATEWAY_LOOKUP[detail_data['bnet']['region']] - #: Deprecated, see `Player.region` - self.gateway = self.region - #: The Battle.net subregion the entity is registered to self.subregion = detail_data['bnet']['subregion'] @@ -346,12 +340,7 @@ class PlayerSummary(): #: Subregion id of player subregion = int() - #: The player's gateway, such as us, eu - gateway = str() - - #: The player's region, such as na, la, eu or ru. This is - # provided for convenience, but as of 20121018 is strictly a - # function of gateway and subregion. + #: The player's region, such as us, eu, sea region = str() #: unknown1 diff --git a/sc2reader/resources.py b/sc2reader/resources.py index c89571fe..80fbb0e3 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -17,7 +17,7 @@ from sc2reader.data import datapacks from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo -from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES +from sc2reader.constants import GAME_SPEED_FACTOR, LOBBY_PROPERTIES class Resource(object): @@ -120,8 +120,8 @@ class Replay(Resource): #: The :class:`Length` of the replay in real time adjusted for the game speed real_length = None - #: The gateway the game was played on: us, eu, sea, etc - gateway = str() + #: The region the game was played on: us, eu, sea, etc + region = str() #: An integrated list of all the game events events = list() @@ -211,7 +211,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.is_private = False self.map = None self.map_hash = "" - self.gateway = "" + self.region = "" self.events = list() self.teams, self.team = list(), dict() @@ -329,13 +329,13 @@ def load_details(self): self.map_name = details['map_name'] - self.gateway = details['cache_handles'][0].server.lower() + self.region = details['cache_handles'][0].server.lower() self.map_hash = details['cache_handles'][-1].hash self.map_file = details['cache_handles'][-1] #Expand this special case mapping - if self.gateway == 'sg': - self.gateway = 'sea' + if self.region == 'sg': + self.region = 'sea' dependency_hashes = [d.hash for d in details['cache_handles']] if hashlib.sha256('Standard Data: Swarm.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: @@ -467,7 +467,7 @@ def get_team(team_id): self.recorder = None entity_names = sorted(map(lambda p: p.name, self.entities)) - hash_input = self.gateway+":"+','.join(entity_names) + hash_input = self.region+":"+','.join(entity_names) self.people_hash = hashlib.sha256(hash_input.encode('utf8')).hexdigest() # The presence of observers and/or computer players makes this not actually ladder @@ -616,17 +616,17 @@ class Map(Resource): #: The map description as written by author description = str() - def __init__(self, map_file, filename=None, gateway=None, map_hash=None, **options): + def __init__(self, map_file, filename=None, region=None, map_hash=None, **options): super(Map, self).__init__(map_file, filename, **options) #: The unique hash used to identify this map on bnet's depots. self.hash = map_hash - #: The gateway this map was posted to. Maps must be posted individually to each gateway. - self.gateway = gateway + #: The region this map was posted to. Maps must be posted individually to each region. + self.region = region #: A URL reference to the location of this map on bnet's depots. - self.url = Map.get_url(gateway, map_hash) + self.url = Map.get_url(self.region, map_hash) #: The opened MPQArchive for this map self.archive = mpyq.MPQArchive(map_file) @@ -672,12 +672,12 @@ def __init__(self, map_file, filename=None, gateway=None, map_hash=None, **optio self.dependencies.append(dependency_node.text) @classmethod - def get_url(cls, gateway, map_hash): + def get_url(cls, region, map_hash): """Builds a download URL for the map from its components.""" - if gateway and map_hash: + if region and map_hash: # it seems like sea maps are stored on us depots. - gateway = 'us' if gateway == 'sea' else gateway - return cls.url_template.format(gateway, map_hash) + region = 'us' if region == 'sea' else region + return cls.url_template.format(region, map_hash) else: return None @@ -837,8 +837,8 @@ def load_translations(self): files.append(utils.DepotFile(file_hash)) self.localization_urls[language] = files - # Grab the gateway from the one of the files - self.gateway = list(self.localization_urls.values())[0][0].server.lower() + # Grab the region from the one of the files + self.region = list(self.localization_urls.values())[0][0].server.lower() # Each of the localization urls points to an XML file with a set of # localization strings and their unique ids. After reading these mappings @@ -1008,9 +1008,9 @@ def load_players(self): settings = self.player_settings[index] player.is_ai = not isinstance(struct[0][1], dict) if not player.is_ai: - player.gateway = self.gateway + player.region = self.region player.subregion = struct[0][1][0][2] - player.region = REGIONS[player.gateway].get(player.subregion, 'Unknown') + player.region = REGIONS[player.region].get(player.subregion, 'Unknown') player.bnetid = struct[0][1][0][3] player.unknown1 = struct[0][1][0] player.unknown2 = struct[0][1][1] diff --git a/sc2reader/utils.py b/sc2reader/utils.py index 94fb5637..e728c983 100644 --- a/sc2reader/utils.py +++ b/sc2reader/utils.py @@ -328,7 +328,7 @@ def toDict(replay): # Consolidate replay metadata into dictionary return { - 'gateway': getattr(replay, 'gateway', None), + 'region': getattr(replay, 'region', None), 'map_name': getattr(replay, 'map_name', None), 'file_time': getattr(replay, 'file_time', None), 'filehash': getattr(replay, 'filehash', None), From d9df519232dd9ac73ba83ed69d9388f4561eaf13 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:21:45 -0500 Subject: [PATCH 058/238] Fix typo. --- sc2reader/data/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 6edf14a7..f4e095f4 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -323,7 +323,7 @@ def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', miner is_building=is_building, is_worker=is_worker, is_army=is_army, - )) + ) setattr(self, name, unit) self.units[type_id] = unit self.units[str_id] = unit From bd2a8cf23b6450cccbbff7512ef19f118427189e Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:22:28 -0500 Subject: [PATCH 059/238] Use a regular dict for raw data results. --- sc2reader/readers.py | 4 ++-- sc2reader/resources.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index ed9244ce..4ac04c3a 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -8,7 +8,7 @@ from sc2reader.events.game import * from sc2reader.events.message import * from sc2reader.events.tracker import * -from sc2reader.utils import AttributeDict, DepotFile +from sc2reader.utils import DepotFile from sc2reader.decoders import BitPackedDecoder, ByteDecoder @@ -204,7 +204,7 @@ def __call__(self, data, replay): data.byte_align() - return AttributeDict(pings=pings, messages=messages, packets=packets) + return dict(pings=pings, messages=messages, packets=packets) class GameEventsReader_Base(object): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 80fbb0e3..ff4c3db4 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -480,9 +480,9 @@ def load_message_events(self): if 'replay.message.events' not in self.raw_data: return - self.messages = self.raw_data['replay.message.events'].messages - self.pings = self.raw_data['replay.message.events'].pings - self.packets = self.raw_data['replay.message.events'].packets + self.messages = self.raw_data['replay.message.events']['messages'] + self.pings = self.raw_data['replay.message.events']['pings'] + self.packets = self.raw_data['replay.message.events']['packets'] self.message_events = self.messages+self.pings+self.packets self.events = sorted(self.events + self.message_events, key=lambda e: e.frame) From f58daf7365ef04a041eb934de58701cd592bba00 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:23:27 -0500 Subject: [PATCH 060/238] Remove stray reference. --- sc2reader/resources.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index ff4c3db4..58e861a1 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -1010,7 +1010,6 @@ def load_players(self): if not player.is_ai: player.region = self.region player.subregion = struct[0][1][0][2] - player.region = REGIONS[player.region].get(player.subregion, 'Unknown') player.bnetid = struct[0][1][0][3] player.unknown1 = struct[0][1][0] player.unknown2 = struct[0][1][1] From b968b577f8771eaf6c32c07e5e588259cb47a8f6 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:24:12 -0500 Subject: [PATCH 061/238] Misc import and documentation improvements. --- sc2reader/__init__.py | 56 +++++++++++++++++++++++++++++++-- sc2reader/events/__init__.py | 5 ++- sc2reader/factories/__init__.py | 2 +- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 60b5eead..040febcb 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,4 +1,23 @@ # -*- coding: utf-8 -*- +""" + sc2reader + ~~~~~~~~~~~ + + A library for loading data from Starcraft II game resources. + + SC2Factory methods called on the package will be delegated to the default + SC2Factory. To default to a cached factory set one or more of the following + variables in your environment: + + SC2READER_CACHE_DIR = '/absolute/path/to/existing/cache/directory/' + SC2READER_CACHE_MAX_SIZE = MAXIMUM_CACHE_ENTRIES_TO_HOLD_IN_MEMORY + + You can also set the default factory via setFactory, useFileCache, useDictCache, + or useDoubleCache functions. + + :copyright: (c) 2011 by Graylin Kim. + :license: MIT, see LICENSE for more details. +""" from __future__ import absolute_import, print_function, unicode_literals, division __version__ = "0.6.4" @@ -13,12 +32,25 @@ # setup the library logging log_utils.setup() -# For backwards compatibility +# For backwards compatibility, goes away in 0.7 SC2Reader = factories.SC2Factory def setFactory(factory): - # Expose a nice module level interface + """ + :param factory: The new default factory for the package. + + Links the following sc2reader global methods to the specified factory:: + + * sc2reader.load_replay(s) + * sc2reader.load_map(s) + * sc2reader.load_game_summar(y|ies) + * sc2reader.configure + * sc2reader.reset + * sc2reader.register_plugin + + These methods when called will delegate to the factory for execution. + """ module = sys.modules[__name__] module.load_replays = factory.load_replays module.load_replay = factory.load_replay @@ -35,14 +67,34 @@ def setFactory(factory): def useFileCache(cache_dir, **options): + """ + :param cache_dir: Absolute path to the existing cache directory + + Set the default factory to a new FileCachedSC2Factory with the given cache_dir. + All remote resources are saved to the file system for faster access times. + """ setFactory(factories.FileCachedSC2Factory(cache_dir, **options)) def useDictCache(cache_max_size=0, **options): + """ + :param cache_max_size: The maximum number of cache entries to hold in memory + + Set the default factory to a new DictCachedSC2Factory with the given cache_dir. + A limited number of remote resources are cached in memory for faster access times. + """ setFactory(factories.DictCachedSC2Factory(cache_max_size, **options)) def useDoubleCache(cache_dir, cache_max_size=0, **options): + """ + :param cache_dir: Absolute path to the existing cache directory + :param cache_max_size: The maximum number of cache entries to hold in memory + + Set the default factory to a new DoubleCachedSC2Factory with the given cache_dir. + A limited number of remote resources are cached in memory for faster access times. + All remote resources are saved to the file system for faster access times. + """ setFactory(factories.DoubleCachedSC2Factory(cache_dir, cache_max_size, **options)) diff --git a/sc2reader/events/__init__.py b/sc2reader/events/__init__.py index db2cc164..6ceaa632 100644 --- a/sc2reader/events/__init__.py +++ b/sc2reader/events/__init__.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -import sc2reader.events.base -import sc2reader.events.game -import sc2reader.events.message +# Export all events of all types to the package interface +from sc2reader.events import base, game, message, tracker from sc2reader.events.base import * from sc2reader.events.game import * from sc2reader.events.message import * diff --git a/sc2reader/factories/__init__.py b/sc2reader/factories/__init__.py index 583b67ea..c6c469f6 100644 --- a/sc2reader/factories/__init__.py +++ b/sc2reader/factories/__init__.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, print_function, unicode_literals, division from sc2reader.factories.sc2factory import SC2Factory from sc2reader.factories.sc2factory import FileCachedSC2Factory From 81809e5888c10aeb80b0e0ba9ae9958b28367843 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:29:04 -0500 Subject: [PATCH 062/238] Don't forget the tests. --- test_replays/test_all.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index ba7c0ea8..c91f8dbf 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -245,7 +245,7 @@ def test_send_resources(self): def test_cn_replays(self): replay = sc2reader.load_replay("test_replays/2.0.5.25092/cn1.SC2Replay") - self.assertEqual(replay.gateway, "cn") + self.assertEqual(replay.region, "cn") self.assertEqual(replay.expansion, "WoL") def test_unit_types(self): @@ -320,7 +320,7 @@ def test_factory_plugins(self): self.assertEqual(result["release"], "2.0.5.25092") self.assertEqual(result["game_length"], 986) self.assertEqual(result["real_length"], 704) - self.assertEqual(result["gateway"], "cn") + self.assertEqual(result["region"], "cn") self.assertEqual(result["game_fps"], 16.0) self.assertTrue(result["is_ladder"]) From 03bbdae1d5979c661d4eae8568ce405694ca86ca Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:32:36 -0500 Subject: [PATCH 063/238] Our readers and lambdas can't be pickled. Remove registered readers/datapacks on picking. We won't need them anymore, the replay should already be loaded. --- CHANGELOG.rst | 1 + sc2reader/resources.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 37482c05..fa3cef51 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,7 @@ CHANGELOG 0.7.0 - --------------------------- +* Replays can now be pickled and stored for later consumption. * All references to the gateway attribute have been replaced in favor of region; e.g. replay.region * Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. * Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 58e861a1..0fc5d5dd 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -603,6 +603,12 @@ def _read_data(self, data_file, reader): elif self.opt.debug and data_file not in ['replay.message.events', 'replay.tracker.events']: raise ValueError("{0} not found in archive".format(data_file)) + def __getstate__(self): + state = self.__dict__.copy() + del state['registered_readers'] + del state['registered_datapacks'] + return state + class Map(Resource): url_template = 'http://{0}.depot.battle.net:1119/{1}.s2ma' From b421a7cd3e70ee05feeaa6c8f138b16c4eacfd00 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 00:23:36 -0500 Subject: [PATCH 064/238] Initial pass at PTR 2.1 support. --- sc2reader/events/tracker.py | 121 +++++++++++++++++++++++++----------- sc2reader/readers.py | 43 +++++++++++++ sc2reader/resources.py | 4 +- 3 files changed, 131 insertions(+), 37 deletions(-) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index b8967150..8eaaf7a1 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -27,12 +27,30 @@ def load_context(self, replay): pass def _str_prefix(self): - return "{0}\t ".format(Length(seconds=int(self.frame/16))) + return "{0}\t ".format(Length(seconds=int(self.frame / 16))) def __str__(self): return self._str_prefix() + self.name +class PlayerSetupEvent(TrackerEvent): + """ Sent during game setup to help us organize players better """ + def __init__(self, frames, data, build): + super(PlayerSetupEvent, self).__init__(frames) + + #: The player id of the player we are setting up + self.pid = data[0] + + #: The type of this player. One of 1=human, 2=cpu, 3=neutral, 4=hostile + self.type = data[1] + + #: The user id of the player we are setting up. None of not human + self.uid = data[2] + + #: The slot id of the player we are setting up. None if not playing + self.sid = data[3] + + class PlayerStatsEvent(TrackerEvent): """ Player Stats events are generated for all players that were in the game even if they've since @@ -181,10 +199,10 @@ def __init__(self, frames, data, build): self.resources_killed = self.minerals_killed + self.vespene_killed #: The food supply currently used - self.food_used = clamp(self.stats[29])/4096.0 + self.food_used = clamp(self.stats[29]) / 4096.0 #: The food supply currently available - self.food_made = clamp(self.stats[30])/4096.0 + self.food_made = clamp(self.stats[30]) / 4096.0 #: The total mineral value of all active forces self.minerals_used_active_forces = clamp(self.stats[31]) @@ -211,7 +229,7 @@ def __init__(self, frames, data, build): self.ff_vespene_lost_technology = clamp(self.stats[38]) if build >= 26490 else None def __str__(self): - return self._str_prefix()+"{0: >15} - Stats Update".format(self.player) + return self._str_prefix() + "{0: >15} - Stats Update".format(self.player) class UnitBornEvent(TrackerEvent): @@ -255,19 +273,24 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. - #: Location prior to rounding marks the center of the unit footprint. - self.x = data[5] * 4 + #: The x coordinate of the center of the born unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[5] - #: The y coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. - #: Location prior to rounding marks the center of the unit footprint. - self.y = data[6] * 4 + #: The y coordinate of the center of the born unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[6] #: The map location of the unit birth self.location = (self.x, self.y) + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit born {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} - Unit born {1}".format(self.unit_upkeeper, self.unit) class UnitDiedEvent(TrackerEvent): @@ -296,19 +319,39 @@ def __init__(self, frames, data, build): #: The player object of the that killed the unit. Not always available. self.killer = None - #: The x coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. - #: Location prior to rounding marks the center of the unit footprint. - self.x = data[3] * 4 + #: The x coordinate of the center of the dying unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[3] - #: The y coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. - #: Location prior to rounding marks the center of the unit footprint. - self.y = data[4] * 4 + #: The y coordinate of the center of the dying unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[4] #: The map location the unit was killed at. self.location = (self.x, self.y) + #: The index portion of the killing unit's id. Available for build 27950+ + self.killer_unit_index = None + + #: The recycle portion of the killing unit's id. Available for build 27950+ + self.killer_unit_recycle = None + + #: The unique id of the unit doing the killing. Available for build 27950+ + self.killer_unit_id = None + + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + else: + # Starcraft patch 2.1 introduced killer unit indexes + self.killer_unit_index = data[5] + self.killer_unit_recycle = data[6] + if self.killer_unit_index: + self.killer_unit_id = self.killer_unit_index << 18 | self.killer_unit_recycle + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) + return self._str_prefix() + "{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) class UnitOwnerChangeEvent(TrackerEvent): @@ -344,7 +387,7 @@ def __init__(self, frames, data, build): self.unit_controller = None def __str__(self): - return self._str_prefix()+"{0: >15} took {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} took {1}".format(self.unit_upkeeper, self.unit) class UnitTypeChangeEvent(TrackerEvent): @@ -372,7 +415,7 @@ def __init__(self, frames, data, build): self.unit_type_name = data[2].decode('utf8') def __str__(self): - return self._str_prefix()+"{0: >15} - Unit {0} type changed to {1}".format(self.unit.owner, self.unit, self.unit_type_name) + return self._str_prefix() + "{0: >15} - Unit {0} type changed to {1}".format(self.unit.owner, self.unit, self.unit_type_name) class UpgradeCompleteEvent(TrackerEvent): @@ -395,7 +438,7 @@ def __init__(self, frames, data, build): self.count = data[2] def __str__(self): - return self._str_prefix()+"{0: >15} - {1}upgrade completed".format(self.player, self.upgrade_type_name) + return self._str_prefix() + "{0: >15} - {1}upgrade completed".format(self.player, self.upgrade_type_name) class UnitInitEvent(TrackerEvent): @@ -434,19 +477,24 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. - #: Location prior to rounding marks the center of the unit footprint. - self.x = data[5] * 4 + #: The x coordinate of the center of the init unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[5] - #: The y coordinate of the location with 4 point resolution. E.g. 13.75 recorded as 12. - #: Location prior to rounding marks the center of the unit footprint. - self.y = data[6] * 4 + #: The y coordinate of the center of the init unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[6] #: The map location the unit was started at self.location = (self.x, self.y) + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) class UnitDoneEvent(TrackerEvent): @@ -470,7 +518,7 @@ def __init__(self, frames, data, build): self.unit = None def __str__(self): - return self._str_prefix()+"{0: >15} - Unit {1} done".format(self.unit.owner, self.unit) + return self._str_prefix() + "{0: >15} - Unit {1} done".format(self.unit.owner, self.unit) class UnitPositionsEvent(TrackerEvent): @@ -491,17 +539,20 @@ def __init__(self, frames, data, build): #: A dict mapping of units that had their position updated to their positions self.units = dict() - #: A list of (unit_index, (x,y)) derived from the first_unit_index and items. Like the other - #: tracker events, these coordinates have 4 point resolution. (15,25) recorded as (12,24). - #: Location prior to rounding marks the center of the unit footprint. + #: A list of (unit_index, (x,y)) derived from the first_unit_index and items. Prior to + #: Starcraft Patch 2.1 the coordinates have 4 point resolution. (15,25) recorded as (12,24). + #: Location prior to any rounding marks the center of the unit footprint. self.positions = list() unit_index = self.first_unit_index for i in range(0, len(self.items), 3): unit_index += self.items[i] - x = self.items[i+1]*4 - y = self.items[i+2]*4 + x = self.items[i + 1] + y = self.items[i + 2] + if build < 27950: + x = x * 4 + y = y * 4 self.positions.append((unit_index, (x, y))) def __str__(self): - return self._str_prefix()+"Unit positions update" + return self._str_prefix() + "Unit positions update" diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 4ac04c3a..94da5a9f 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -19,6 +19,7 @@ def __call__(self, data, replay): user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if replay.base_build >= 27950 and data.read_bool() else None, highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), @@ -74,6 +75,7 @@ def __call__(self, data, replay): default_difficulty=data.read_bits(6), default_ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], + has_extension_mod=data.read_bool() if replay.base_build >= 27950 else None, is_blizzardMap=data.read_bool(), is_premade_ffa=data.read_bool(), is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, @@ -610,6 +612,7 @@ def camera_update_event(self, data): distance=data.read_uint16() if data.read_bool() else None, pitch=data.read_uint16() if data.read_bool() else None, yaw=data.read_uint16() if data.read_bool() else None, + reason=None, ) def trigger_abort_mission_event(self, data): @@ -1361,6 +1364,7 @@ def hijack_replay_game_event(self, data): name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=None, ) for i in range(data.read_bits(5))], method=data.read_bits(1), ) @@ -1381,6 +1385,7 @@ def game_user_join_event(self, data): name=data.read_aligned_string(data.read_bits(8)), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_log=None, ) @@ -1430,6 +1435,43 @@ def trigger_mouse_moved_event(self, data): ) +class GameEventsReader_27950(GameEventsReader_26490): + + def hijack_replay_game_event(self, data): + return dict( + user_infos=[dict( + game_user_id=data.read_bits(4), + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_uint8()), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + ) for i in range(data.read_bits(5))], + method=data.read_bits(1), + ) + + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ), + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=data.read_uint8() - 128 if data.read_bool() else None, + ) + + def game_user_join_event(self, data): + return dict( + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_bits(8)), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + ) + + class TrackerEventsReader(object): def __init__(self): @@ -1443,6 +1485,7 @@ def __init__(self): 6: UnitInitEvent, 7: UnitDoneEvent, 8: UnitPositionsEvent, + 9: PlayerSetupEvent, } def __call__(self, data, replay): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 0fc5d5dd..325be41b 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -564,10 +564,10 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_22612(), lambda r: 22612 <= r.base_build < 23260) self.register_reader('replay.game.events', readers.GameEventsReader_23260(), lambda r: 23260 <= r.base_build < 24247) self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) - self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build < 27950) + self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) - def register_default_datapacks(self): """Registers factory default datapacks.""" self.register_datapack(datapacks['WoL']['16117'], lambda r: r.expansion == 'WoL' and 16117 <= r.build < 17326) From 9c06d282e04e29053a9c07bf95ce8baa36629c2a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 00:23:36 -0500 Subject: [PATCH 065/238] Initial pass at PTR 2.1 support. --- sc2reader/events/tracker.py | 113 +++++++++++++++++++++++++++--------- sc2reader/readers.py | 43 ++++++++++++++ sc2reader/resources.py | 4 +- 3 files changed, 131 insertions(+), 29 deletions(-) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index d9526aeb..d4bbf306 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -19,12 +19,30 @@ def load_context(self, replay): pass def _str_prefix(self): - return "{0}\t ".format(Length(seconds=int(self.frame/16))) + return "{0}\t ".format(Length(seconds=int(self.frame / 16))) def __str__(self): return self._str_prefix() + self.name +class PlayerSetupEvent(TrackerEvent): + """ Sent during game setup to help us organize players better """ + def __init__(self, frames, data, build): + super(PlayerSetupEvent, self).__init__(frames) + + #: The player id of the player we are setting up + self.pid = data[0] + + #: The type of this player. One of 1=human, 2=cpu, 3=neutral, 4=hostile + self.type = data[1] + + #: The user id of the player we are setting up. None of not human + self.uid = data[2] + + #: The slot id of the player we are setting up. None if not playing + self.sid = data[3] + + class PlayerStatsEvent(TrackerEvent): """ Player Stats events are generated for all players that were in the game @@ -178,10 +196,10 @@ def __init__(self, frames, data, build): self.resources_killed = self.minerals_killed + self.vespene_killed #: The food supply currently used - self.food_used = clamp(self.stats[29])/4096.0 + self.food_used = clamp(self.stats[29]) / 4096.0 #: The food supply currently available - self.food_made = clamp(self.stats[30])/4096.0 + self.food_made = clamp(self.stats[30]) / 4096.0 #: The total mineral value of all active forces self.minerals_used_active_forces = clamp(self.stats[31]) @@ -208,7 +226,7 @@ def __init__(self, frames, data, build): self.ff_vespene_lost_technology = clamp(self.stats[38]) if build >= 26490 else None def __str__(self): - return self._str_prefix()+"{0: >15} - Stats Update".format(self.player) + return self._str_prefix() + "{0: >15} - Stats Update".format(self.player) class UnitBornEvent(TrackerEvent): @@ -256,17 +274,24 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location - self.x = data[5] * 4 + #: The x coordinate of the center of the born unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[5] - #: The y coordinate of the location - self.y = data[6] * 4 + #: The y coordinate of the center of the born unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[6] #: The map location of the unit birth self.location = (self.x, self.y) + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit born {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} - Unit born {1}".format(self.unit_upkeeper, self.unit) class UnitDiedEvent(TrackerEvent): @@ -298,17 +323,39 @@ def __init__(self, frames, data, build): #: The player object of the that killed the unit. Not always available. self.killer = None - #: The x coordinate of the location - self.x = data[3] * 4 + #: The x coordinate of the center of the dying unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[3] - #: The y coordinate of the location - self.y = data[4] * 4 + #: The y coordinate of the center of the dying unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[4] #: The map location the unit was killed at. self.location = (self.x, self.y) + #: The index portion of the killing unit's id. Available for build 27950+ + self.killer_unit_index = None + + #: The recycle portion of the killing unit's id. Available for build 27950+ + self.killer_unit_recycle = None + + #: The unique id of the unit doing the killing. Available for build 27950+ + self.killer_unit_id = None + + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + else: + # Starcraft patch 2.1 introduced killer unit indexes + self.killer_unit_index = data[5] + self.killer_unit_recycle = data[6] + if self.killer_unit_index: + self.killer_unit_id = self.killer_unit_index << 18 | self.killer_unit_recycle + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) + return self._str_prefix() + "{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) class UnitOwnerChangeEvent(TrackerEvent): @@ -342,7 +389,7 @@ def __init__(self, frames, data, build): self.unit_controller = None def __str__(self): - return self._str_prefix()+"{0: >15} took {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} took {1}".format(self.unit_upkeeper, self.unit) class UnitTypeChangeEvent(TrackerEvent): @@ -367,7 +414,7 @@ def __init__(self, frames, data, build): self.unit_type_name = data[2].decode('utf8') def __str__(self): - return self._str_prefix()+"{0: >15} - Unit {0} type changed to {1}".format(self.unit.owner, self.unit, self.unit_type_name) + return self._str_prefix() + "{0: >15} - Unit {0} type changed to {1}".format(self.unit.owner, self.unit, self.unit_type_name) class UpgradeCompleteEvent(TrackerEvent): @@ -389,7 +436,7 @@ def __init__(self, frames, data, build): self.count = data[2] def __str__(self): - return self._str_prefix()+"{0: >15} - {1}upgrade completed".format(self.player, self.upgrade_type_name) + return self._str_prefix() + "{0: >15} - {1}upgrade completed".format(self.player, self.upgrade_type_name) class UnitInitEvent(TrackerEvent): @@ -432,17 +479,24 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location - self.x = data[5] * 4 + #: The x coordinate of the center of the init unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[5] - #: The y coordinate of the location - self.y = data[6] * 4 + #: The y coordinate of the center of the init unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[6] #: The map location the unit was started at self.location = (self.x, self.y) + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) class UnitDoneEvent(TrackerEvent): @@ -470,7 +524,7 @@ def __init__(self, frames, data, build): self.unit = None def __str__(self): - return self._str_prefix()+"{0: >15} - Unit {1} done".format(self.unit.owner, self.unit) + return self._str_prefix() + "{0: >15} - Unit {1} done".format(self.unit.owner, self.unit) class UnitPositionsEvent(TrackerEvent): @@ -488,15 +542,20 @@ def __init__(self, frames, data, build): #: A dict mapping of units that had their position updated to their positions self.units = dict() - #: A list of (unit_index, (x,y)) derived from the first_unit_index and items + #: A list of (unit_index, (x,y)) derived from the first_unit_index and items. Prior to + #: Starcraft Patch 2.1 the coordinates have 4 point resolution. (15,25) recorded as (12,24). + #: Location prior to any rounding marks the center of the unit footprint. self.positions = list() unit_index = self.first_unit_index for i in range(0, len(self.items), 3): unit_index += self.items[i] - x = self.items[i+1]*4 - y = self.items[i+2]*4 + x = self.items[i + 1] + y = self.items[i + 2] + if build < 27950: + x = x * 4 + y = y * 4 self.positions.append((unit_index, (x, y))) def __str__(self): - return self._str_prefix()+"Unit positions update" + return self._str_prefix() + "Unit positions update" diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 7aba7219..2fd4d944 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -19,6 +19,7 @@ def __call__(self, data, replay): user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if replay.base_build >= 27950 and data.read_bool() else None, highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), @@ -74,6 +75,7 @@ def __call__(self, data, replay): default_difficulty=data.read_bits(6), default_ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], + has_extension_mod=data.read_bool() if replay.base_build >= 27950 else None, is_blizzardMap=data.read_bool(), is_premade_ffa=data.read_bool(), is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, @@ -610,6 +612,7 @@ def camera_update_event(self, data): distance=data.read_uint16() if data.read_bool() else None, pitch=data.read_uint16() if data.read_bool() else None, yaw=data.read_uint16() if data.read_bool() else None, + reason=None, ) def trigger_abort_mission_event(self, data): @@ -1361,6 +1364,7 @@ def hijack_replay_game_event(self, data): name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=None, ) for i in range(data.read_bits(5))], method=data.read_bits(1), ) @@ -1381,6 +1385,7 @@ def game_user_join_event(self, data): name=data.read_aligned_string(data.read_bits(8)), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_log=None, ) @@ -1430,6 +1435,43 @@ def trigger_mouse_moved_event(self, data): ) +class GameEventsReader_27950(GameEventsReader_26490): + + def hijack_replay_game_event(self, data): + return dict( + user_infos=[dict( + game_user_id=data.read_bits(4), + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_uint8()), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + ) for i in range(data.read_bits(5))], + method=data.read_bits(1), + ) + + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ), + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=data.read_uint8() - 128 if data.read_bool() else None, + ) + + def game_user_join_event(self, data): + return dict( + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_bits(8)), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + ) + + class TrackerEventsReader(object): def __init__(self): @@ -1443,6 +1485,7 @@ def __init__(self): 6: UnitInitEvent, 7: UnitDoneEvent, 8: UnitPositionsEvent, + 9: PlayerSetupEvent, } def __call__(self, data, replay): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index f9eeceaa..3cdda56e 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -553,10 +553,10 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_22612(), lambda r: 22612 <= r.base_build < 23260) self.register_reader('replay.game.events', readers.GameEventsReader_23260(), lambda r: 23260 <= r.base_build < 24247) self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) - self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build < 27950) + self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) - def register_default_datapacks(self): """Registers factory default datapacks.""" self.register_datapack(datapacks['WoL']['16117'], lambda r: r.expansion == 'WoL' and 16117 <= r.build < 17326) From 50aa557aec2b73acd903a29f8bc648597a2e79a3 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 20:54:39 -0500 Subject: [PATCH 066/238] Fix small bugs in PTR support. --- sc2reader/readers.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 2fd4d944..c923a542 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1369,6 +1369,18 @@ def hijack_replay_game_event(self, data): method=data.read_bits(1), ) + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ) if data.read_bool() else None, + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=None, + ) + def trigger_target_mode_update_event(self, data): return dict( ability_link=data.read_uint16(), @@ -1399,7 +1411,7 @@ def user_options_event(self, data): sync_checksumming_enabled=data.read_bool(), is_map_to_map_transition=data.read_bool(), starting_rally=data.read_bool(), - debug_pause_enabled=None, + debug_pause_enabled=data.read_bool(), base_build_num=data.read_uint32(), use_ai_beacons=None, ) @@ -1455,7 +1467,7 @@ def camera_update_event(self, data): target=dict( x=data.read_uint16(), y=data.read_uint16(), - ), + ) if data.read_bool() else None, distance=data.read_uint16() if data.read_bool() else None, pitch=data.read_uint16() if data.read_bool() else None, yaw=data.read_uint16() if data.read_bool() else None, From 38dfa77d7512b52bdf3e659fcae88e6a87dc556c Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 20:54:39 -0500 Subject: [PATCH 067/238] Fix small bugs in PTR support. --- sc2reader/readers.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 94da5a9f..cd438c6b 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1369,6 +1369,18 @@ def hijack_replay_game_event(self, data): method=data.read_bits(1), ) + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ) if data.read_bool() else None, + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=None, + ) + def trigger_target_mode_update_event(self, data): return dict( ability_link=data.read_uint16(), @@ -1399,7 +1411,7 @@ def user_options_event(self, data): sync_checksumming_enabled=data.read_bool(), is_map_to_map_transition=data.read_bool(), starting_rally=data.read_bool(), - debug_pause_enabled=None, + debug_pause_enabled=data.read_bool(), base_build_num=data.read_uint32(), use_ai_beacons=None, ) @@ -1455,7 +1467,7 @@ def camera_update_event(self, data): target=dict( x=data.read_uint16(), y=data.read_uint16(), - ), + ) if data.read_bool() else None, distance=data.read_uint16() if data.read_bool() else None, pitch=data.read_uint16() if data.read_bool() else None, yaw=data.read_uint16() if data.read_bool() else None, From ba404a50251f8a3074e84a2e6a8da383ea3fec67 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 21:30:24 -0500 Subject: [PATCH 068/238] Clarify the highest leauge user attribute. --- sc2reader/objects.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index e7e096b3..684c8180 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -228,7 +228,8 @@ def __init__(self, uid, init_data): #: The user's combined Battle.net race levels self.combined_race_levels = init_data['combined_race_levels'] - #: The user's highest leauge in the current season + #: The highest 1v1 league achieved by the user in the current season with 1 as Bronze and + #: 7 as Grandmaster. 8 seems to indicate that there is no current season 1v1 ranking. self.highest_league = init_data['highest_league'] #: A flag indicating if this person was the one who recorded the game. From 94263a519a036f2bae43e18ce99f131c30dd4014 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 12 Dec 2013 21:36:34 -0500 Subject: [PATCH 069/238] The clan logo is a DepotFile location, not a string. --- sc2reader/readers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index cd438c6b..20dc8b8f 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -19,7 +19,7 @@ def __call__(self, data, replay): user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if replay.base_build >= 27950 and data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if replay.base_build >= 27950 and data.read_bool() else None, highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), @@ -1457,7 +1457,7 @@ def hijack_replay_game_event(self, data): name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) for i in range(data.read_bits(5))], method=data.read_bits(1), ) @@ -1480,7 +1480,7 @@ def game_user_join_event(self, data): name=data.read_aligned_string(data.read_bits(8)), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) From b6e6f82be13cf450bd5d2d571820efc81416554a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 12 Dec 2013 21:36:34 -0500 Subject: [PATCH 070/238] The clan logo is a DepotFile location, not a string. --- sc2reader/readers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index c923a542..e4f373b9 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -19,7 +19,7 @@ def __call__(self, data, replay): user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if replay.base_build >= 27950 and data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if replay.base_build >= 27950 and data.read_bool() else None, highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), @@ -1457,7 +1457,7 @@ def hijack_replay_game_event(self, data): name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) for i in range(data.read_bits(5))], method=data.read_bits(1), ) @@ -1480,7 +1480,7 @@ def game_user_join_event(self, data): name=data.read_aligned_string(data.read_bits(8)), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) From f0125666b6e07e931a42e6c7f73019e29fe0379e Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 00:51:45 -0500 Subject: [PATCH 071/238] Fixes #165, properly parse mouse click events. --- sc2reader/readers.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 20dc8b8f..e835123f 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -936,7 +936,7 @@ def trigger_mouse_clicked_event(self, data): position_world=dict( x=data.read_bits(20), y=data.read_bits(20), - z=data.read_uint32()-2147483648, + z=data.read_uint32() - 2147483648, ), ) @@ -1421,15 +1421,15 @@ def trigger_mouse_clicked_event(self, data): button=data.read_uint32(), down=data.read_bool(), position_ui=dict( - x=data.read_uint32(), - y=data.read_uint32(), + x=data.read_bits(11), + y=data.read_bits(11), ), position_world=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, + x=data.read_bits(20) - 2147483648, + y=data.read_bits(20) - 2147483648, + z=data.read_uint32() - 2147483648, ), - flags=data.read_uint8()-128, + flags=data.read_uint8() - 128, ) def trigger_mouse_moved_event(self, data): @@ -1441,9 +1441,9 @@ def trigger_mouse_moved_event(self, data): position_world=dict( x=data.read_bits(20), y=data.read_bits(20), - z=data.read_uint32()-2147483648, + z=data.read_uint32() - 2147483648, ), - flags=data.read_uint8()-128, + flags=data.read_uint8() - 128, ) From 554b94d9286b663c8b374ac716086607bd4813a2 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:22:10 -0400 Subject: [PATCH 072/238] Flesh out the ping class. --- CHANGELOG.rst | 11 +++++++++++ sc2reader/events/message.py | 21 ++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 00f0f90e..997bce39 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,17 @@ CHANGELOG ============ + +0.6.5 - December ?? 2013 +--------------------------- + +* PingEvents now have new attributes: + * event.to_all - true if ping seen by all + * event.to_allies - true if ping seen by allies + * event.to_observers - true if ping seen by observers + * event.location - tuple of (event.x, event.y) + + 0.6.4 - September 22nd 2013 --------------------------- diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 7608f8db..5bd82c83 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -51,5 +51,24 @@ class PingEvent(MessageEvent): def __init__(self, frame, pid, target, x, y): super(PingEvent, self).__init__(frame, pid) + + #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. self.target = target - self.x, self.y = x, y + + #: Flag marked true of message was to all. + self.to_all = (self.target == 0) + + #: Flag marked true of message was to allies. + self.to_allies = (self.target == 2) + + #: Flag marked true of message was to observers. + self.to_observers = (self.target == 4) + + #: The x coordinate of the target location + self.x = x + + #: The y coordinate of the target location + self.y = y + + #: The (x,y) coordinate of the target location + self.location = (self.x, self.y) From d3834e7748ce582f5d55510a225be9181b231249 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:22:40 -0400 Subject: [PATCH 073/238] Misc. documentation improvements. --- docs/source/events/game.rst | 1 - docs/source/events/message.rst | 3 -- docs/source/events/tracker.rst | 1 - sc2reader/events/game.py | 49 +++++++++++++++++++++++++-------- sc2reader/events/message.py | 14 ++++++++++ sc2reader/events/tracker.py | 50 +++++++++++++++++----------------- 6 files changed, 77 insertions(+), 41 deletions(-) diff --git a/docs/source/events/game.rst b/docs/source/events/game.rst index ec253718..e3dd87a0 100644 --- a/docs/source/events/game.rst +++ b/docs/source/events/game.rst @@ -11,4 +11,3 @@ computer player. .. automodule:: sc2reader.events.game :members: - :undoc-members: \ No newline at end of file diff --git a/docs/source/events/message.rst b/docs/source/events/message.rst index fbaf0ae9..ffc57226 100644 --- a/docs/source/events/message.rst +++ b/docs/source/events/message.rst @@ -3,8 +3,5 @@ Message Events =================== -Coming soon! - .. automodule:: sc2reader.events.message :members: - :undoc-members: diff --git a/docs/source/events/tracker.rst b/docs/source/events/tracker.rst index 77df8ccf..36671b51 100644 --- a/docs/source/events/tracker.rst +++ b/docs/source/events/tracker.rst @@ -9,4 +9,3 @@ are also periodically recorded to snapshot aspects of the current game state. .. automodule:: sc2reader.events.tracker :members: - :undoc-members: \ No newline at end of file diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 720b23a9..56ad5fdd 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -18,11 +18,12 @@ class GameEvent(Event): def __init__(self, frame, pid): #: The id of the player generating the event. This is 16 for global non-player events. #: Prior to Heart of the Swarm this was the player id. Since HotS it is - #: now the user id (uid), we still call it pid for backwards compatibility. + #: now the user id (uid), we still call it pid for backwards compatibility. You shouldn't + #: ever need to use this; use :attr:`player` instead. self.pid = pid #: A reference to the :class:`~sc2reader.objects.Player` object representing - #: this player in the replay. Not available for global events (:attr:`pid` = 16) + #: this player in the replay. Not available for global events (:attr:`is_local` = False) self.player = None #: The frame of the game that this event was recorded at. 16 frames per game second. @@ -53,6 +54,9 @@ class GameStartEvent(GameEvent): def __init__(self, frame, pid, data): super(GameStartEvent, self).__init__(frame, pid) + #: ??? + self.data = data + class PlayerLeaveEvent(GameEvent): """ @@ -64,6 +68,9 @@ class PlayerLeaveEvent(GameEvent): def __init__(self, frame, pid, data): super(PlayerLeaveEvent, self).__init__(frame, pid) + #: ??? + self.data = data + class UserOptionsEvent(GameEvent): """ @@ -88,7 +95,7 @@ def __init__(self, frame, pid, data): self.sync_checksumming_enabled = data['sync_checksumming_enabled'] #: - is_map_to_map_transition = data['is_map_to_map_transition'] + self.is_map_to_map_transition = data['is_map_to_map_transition'] #: self.use_ai_beacons = data['use_ai_beacons'] @@ -144,11 +151,31 @@ def __init__(self, frame, pid, data): #: Flags on the command??? self.flags = data['flags'] - #: A dictionary of possible ability flags. Flag names are: alternate, - #: queued, preempt, smart_click, smart_rally, subgroup, set_autocast, - #: set_autocast_on, user, data_a, data_b, data_passenger, data_abil_queue_order_id, - #: ai, ai_ignore_on_finish, is_order, script, homogenous_interruption, - #: minimap, repeat, dispatch_to_other_unit, and target_self + #: A dictionary of possible ability flags. Flags are: + #: + #: * alternate + #: * queued + #: * preempt + #: * smart_click + #: * smart_rally + #: * subgroup + #: * set_autocast, + #: * set_autocast_on + #: * user + #: * data_a + #: * data_b + #: * data_passenger + #: * data_abil_queue_order_id, + #: * ai + #: * ai_ignore_on_finish + #: * is_order + #: * script + #: * homogenous_interruption, + #: * minimap + #: * repeat + #: * dispatch_to_other_unit + #: * target_self + #: self.flag = dict( alternate=0x1 & self.flags != 0, queued=0x2 & self.flags != 0, @@ -491,13 +518,13 @@ class CameraEvent(GameEvent): def __init__(self, frame, pid, data): super(CameraEvent, self).__init__(frame, pid) - #: The x coordinate of the center? of the camera + #: The x coordinate of the center of the camera self.x = (data['target']['x'] if data['target'] is not None else 0)/256.0 - #: The y coordinate of the center? of the camera + #: The y coordinate of the center of the camera self.y = (data['target']['y'] if data['target'] is not None else 0)/256.0 - #: The location of the center? of the camera + #: The location of the center of the camera self.location = (self.x, self.y) #: The distance to the camera target ?? diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 5bd82c83..259ae0c8 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -11,8 +11,13 @@ class MessageEvent(Event): name = 'MessageEvent' def __init__(self, frame, pid): + #: The user id (or player id for older replays) of the person that generated the event. self.pid = pid + + #: The frame of the game this event was applied self.frame = frame + + #: The second of the game (game time not real time) this event was applied self.second = frame >> 4 def _str_prefix(self): @@ -29,10 +34,19 @@ class ChatEvent(MessageEvent): def __init__(self, frame, pid, target, text): super(ChatEvent, self).__init__(frame, pid) + #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. self.target = target + + #: The text of the message. self.text = text + + #: Flag marked true of message was to all. self.to_all = (self.target == 0) + + #: Flag marked true of message was to allies. self.to_allies = (self.target == 2) + + #: Flag marked true of message was to observers. self.to_observers = (self.target == 4) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index d4bbf306..aecc0d8d 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -10,9 +10,14 @@ class TrackerEvent(Event): + """ + Parent class for all tracker events. + """ def __init__(self, frames): #: The frame of the game this event was applied self.frame = frames + + #: The second of the game (game time not real time) this event was applied self.second = frames >> 4 def load_context(self, replay): @@ -45,17 +50,15 @@ def __init__(self, frames, data, build): class PlayerStatsEvent(TrackerEvent): """ - Player Stats events are generated for all players that were in the game - even if they've since left every 10 seconds. An additional set of stats - events are generated at the end of the game. + Player Stats events are generated for all players that were in the game even if they've since + left every 10 seconds. An additional set of stats events are generated at the end of the game. - When a player leaves the game, a single PlayerStatsEvent is generated - for that player and no one else. That player continues to generate - PlayerStatsEvents at 10 second intervals until the end of the game. + When a player leaves the game, a single PlayerStatsEvent is generated for that player and no + one else. That player continues to generate PlayerStatsEvents at 10 second intervals until the + end of the game. - In 1v1 games, the above behavior can cause the losing player to have 2 - events generated at the end of the game. One for leaving and one for - the end of the game. + In 1v1 games, the above behavior can cause the losing player to have 2 events generated at the + end of the game. One for leaving and one for the end of the game. """ name = 'PlayerStatsEvent' @@ -231,15 +234,14 @@ def __str__(self): class UnitBornEvent(TrackerEvent): """ - Generated when a unit is created in a finished state in the game. Examples - include the Marine, Zergling, and Zealot (when trained from a gateway). - Units that enter the game unfinished (all buildings, warped in units) generate - a :class:`UnitInitEvent` instead. - - Unfortunately, units that are born do not have events marking their beginnings - like :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to - it are the :class:`~sc2reader.event.game.AbilityEvent` game events where the ability - is a train unit command. + Generated when a unit is created in a finished state in the game. Examples include the Marine, + Zergling, and Zealot (when trained from a gateway). Units that enter the game unfinished (all + buildings, warped in units) generate a :class:`UnitInitEvent` instead. + + Unfortunately, units that are born do not have events marking their beginnings like + :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to it are the + :class:`~sc2reader.event.game.AbilityEvent` game events where the ability is a train unit + command. """ name = 'UnitBornEvent' @@ -441,10 +443,9 @@ def __str__(self): class UnitInitEvent(TrackerEvent): """ - The counter part to :class:`UnitDoneEvent`, generated by the game engine - when a unit is initiated. This applies only to units which are started - in game before they are finished. Primary examples being buildings and - warp-in units. + The counter part to :class:`UnitDoneEvent`, generated by the game engine when a unit is + initiated. This applies only to units which are started in game before they are finished. + Primary examples being buildings and warp-in units. """ name = 'UnitInitEvent' @@ -501,9 +502,8 @@ def __str__(self): class UnitDoneEvent(TrackerEvent): """ - The counter part to the :class:`UnitInitEvent`, generated by the game engine - when an initiated unit is completed. E.g. warp-in finished, building finished, - morph complete. + The counter part to the :class:`UnitInitEvent`, generated by the game engine when an initiated + unit is completed. E.g. warp-in finished, building finished, morph complete. """ name = 'UnitDoneEvent' From 1c83190ed8d50d2265f60a426dcaeba8fc52d4c3 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 17 Nov 2013 18:33:45 -0500 Subject: [PATCH 074/238] Remove unused player_names. closes #158. --- sc2reader/resources.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 3cdda56e..08945c8e 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -193,7 +193,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_level = None #default values, filled in during file read - self.player_names = list() self.other_people = set() self.speed = "" self.type = "" From 53498df124639b2e438c7ee519ce686cf694532f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:03:10 -0500 Subject: [PATCH 075/238] Remove map specific attributes from the listing. People that want map attribute information can run the relevant s2gs files through and get proper mappings for their use case. --- sc2reader/data/attributes.json | 32 +------------------------------- sc2reader/objects.py | 5 ++++- 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index cc2149b2..d2d0eab4 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -1,35 +1,5 @@ { "attributes": { - "0001": [ - "Korhal (Urban)", - { - "0001": "Unclassified game type.", - "0002": "4v4 Team Monobattles", - "0003": "Work with your team to select a strong composition of units", - "0004": "Each player must select a single combat unit at the start of the game." - } - ], - "0002": [ - "Rated", - { - "0001": "Yes", - "0002": "No" - } - ], - "0003": [ - "Balance Teams", - { - "0001": "Yes", - "0002": "No" - } - ], - "0004": [ - "Ship Limit", - { - "0001": "No", - "0002": "Yes" - } - ], "0500": [ "Controller", { @@ -1046,4 +1016,4 @@ ] }, "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\na(I3009\nS'Amm'\np51\ntp52\naS'Automated Match Making'\np53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nI3141\naVAI Build (Terran)\np64\naS'AI Build'\np65\natp66\nRp67\ng64\nsg1\n((lp68\n(I2001\nS'3v3'\np69\ntp70\naS'3 v 3'\np71\naV3v3\np72\natp73\nRp74\ng72\nsg1\n((lp75\nI3142\naVAI Build (Terran)\np76\naS'AI Build'\np77\natp78\nRp79\ng76\nsg1\n((lp80\n(I3200\nS'AB04'\np81\ntp82\naS'Agressive Push'\np83\naVAggressive Push\np84\natp85\nRp86\ng84\nsg1\n((lp87\nVAI Build (Protoss)\np88\naI3174\naS'AI Build'\np89\natp90\nRp91\ng88\nsg1\n((lp92\nS'Very Hard'\np93\naVElite\np94\na(I3004\nS'VyHd'\np95\ntp96\natp97\nRp98\ng94\nsg1\n((lp99\nS'Agressive Push'\np100\naVAggressive Push\np101\na(I3167\nS'AB04'\np102\ntp103\natp104\nRp105\ng101\nsg1\n((lp106\nI3204\naVAI Build (Zerg)\np107\naS'AI Build'\np108\natp109\nRp110\ng107\nsg1\n((lp111\nVInsane\np112\naS'Cheater 3 (Insane)'\np113\na(I3004\nS'Insa'\np114\ntp115\natp116\nRp117\ng112\nsg1\n((lp118\n(I3007\nS'Watc'\np119\ntp120\naS'Observer'\np121\naS'Watcher'\np122\natp123\nRp124\ng121\nsg1\n((lp125\nI3205\naVAI Build (Zerg)\np126\naS'AI Build'\np127\natp128\nRp129\ng126\nsg1\n((lp130\nVTeams5v5\np131\naI2007\naS'Team'\np132\natp133\nRp134\ng131\nsg1\n((lp135\n(I2001\nS'FFA'\np136\ntp137\naVFFA\np138\naS'Free For All'\np139\natp140\nRp141\ng138\nsg1\n((lp142\nS'Unknown'\np143\naI2012\naS'Team'\np144\natp145\nRp146\ng144\nsg1\n((lp147\nI3206\naVAI Build (Zerg)\np148\naS'AI Build'\np149\natp150\nRp151\ng148\nsg1\n((lp152\n(I3168\nS'AB04'\np153\ntp154\naS'Agressive Push'\np155\naVAggressive Push\np156\natp157\nRp158\ng156\nsg1\n((lp159\nI3172\naVAI Build (Protoss)\np160\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nS'Level 1 (Very Easy)'\np165\na(I3004\nS'VyEy'\np166\ntp167\naVVery Easy\np168\natp169\nRp170\ng168\nsg1\n((lp171\nS'Agressive Push'\np172\naVAggressive Push\np173\na(I3135\nS'AB04'\np174\ntp175\natp176\nRp177\ng173\nsg1\n((lp178\nV2v2\np179\naS'2 v 2'\np180\na(I2001\nS'2v2'\np181\ntp182\natp183\nRp184\ng179\nsg1\n((lp185\nS'Agressive Push'\np186\na(I3166\nS'AB04'\np187\ntp188\naVAggressive Push\np189\natp190\nRp191\ng189\nsg1\n((lp192\nVTeamsFFA\np193\naI2006\naS'Team'\np194\natp195\nRp196\ng193\nsg1\n((lp197\nVAI Build (Terran)\np198\naS'AI Build'\np199\naI3143\natp200\nRp201\ng198\nsg1\n((lp202\nVTeams7v7\np203\naI2011\naS'Team'\np204\natp205\nRp206\ng203\nsg1\n((lp207\nVMedium\np208\naS'Level 3 (Medium)'\np209\na(I3004\nS'Medi'\np210\ntp211\natp212\nRp213\ng208\nsg1\n((lp214\nI3140\naVAI Build (Terran)\np215\naS'AI Build'\np216\natp217\nRp218\ng215\nsg1\n((lp219\nS'Level 2 (Easy)'\np220\na(I3004\nS'Easy'\np221\ntp222\naVEasy\np223\natp224\nRp225\ng223\nsg1\n((lp226\n(I3136\nS'AB04'\np227\ntp228\naS'Agressive Push'\np229\naVAggressive Push\np230\natp231\nRp232\ng230\nsg1\n((lp233\nI2008\naVTeams6v6\np234\naS'Team'\np235\natp236\nRp237\ng234\nsg1\n((lp238\nS'Agressive Push'\np239\naVAggressive Push\np240\na(I3103\nS'AB04'\np241\ntp242\natp243\nRp244\ng240\nsg1\n((lp245\nV4v4\np246\naS'4 v 4'\np247\na(I2001\nS'4v4'\np248\ntp249\natp250\nRp251\ng246\nsg1\n((lp252\nS'Agressive Push'\np253\na(I3134\nS'AB04'\np254\ntp255\naVAggressive Push\np256\natp257\nRp258\ng256\nsg1\n((lp259\nVTeams1v1\np260\naI2002\naS'Team'\np261\natp262\nRp263\ng260\nsg1\n((lp264\nI3139\naVAI Build (Terran)\np265\naS'AI Build'\np266\natp267\nRp268\ng265\nsg1\n((lp269\nVAI Build (Zerg)\np270\naS'AI Build'\np271\naI3207\natp272\nRp273\ng270\nsg1\n((lp274\nI3171\naVAI Build (Protoss)\np275\naS'AI Build'\np276\natp277\nRp278\ng275\nsg1\n((lp279\nI3173\naS'AI Build'\np280\naVAI Build (Protoss)\np281\natp282\nRp283\ng281\nsg1\n((lp284\nVTeams3v3\np285\naI2004\naS'Team'\np286\natp287\nRp288\ng285\nsg1\n((lp289\nVAI Build (Protoss)\np290\naS'AI Build'\np291\naI3175\natp292\nRp293\ng290\nsg1\n((lp294\nVTeams4v4\np295\naI2005\naS'Team'\np296\natp297\nRp298\ng295\nsg1\n((lp299\nI3203\naVAI Build (Zerg)\np300\naS'AI Build'\np301\natp302\nRp303\ng300\nsg1\n((lp304\nS'Agressive Push'\np305\na(I3198\nS'AB04'\np306\ntp307\naVAggressive Push\np308\natp309\nRp310\ng308\ns." -} \ No newline at end of file +} diff --git a/sc2reader/objects.py b/sc2reader/objects.py index a0557145..e5391b66 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -62,6 +62,7 @@ def __repr__(self): return str(self) +@log_utils.loggable class Attribute(object): def __init__(self, header, attr_id, player, value): @@ -70,7 +71,9 @@ def __init__(self, header, attr_id, player, value): self.player = player if self.id not in LOBBY_PROPERTIES: - raise ValueError("Unknown attribute id: "+self.id) + self.logger.info("Unknown attribute id: {0}".format(self.id)) + self.name = "Unknown" + self.value = None else: self.name, lookup = LOBBY_PROPERTIES[self.id] self.value = lookup[value.strip("\x00 ")[::-1]] From 760858ac1b470a7861dab7dce4bc412e934bdae2 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:15:20 -0500 Subject: [PATCH 076/238] Raise an informative error on corrupt tracker file This way people can reliably catch this issue and deal with it as they wish. Conflicts: sc2reader/resources.py --- sc2reader/exceptions.py | 4 ++++ sc2reader/resources.py | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/sc2reader/exceptions.py b/sc2reader/exceptions.py index 15845101..caf13b86 100644 --- a/sc2reader/exceptions.py +++ b/sc2reader/exceptions.py @@ -10,6 +10,10 @@ class SC2ReaderLocalizationError(SC2ReaderError): pass +class CorruptTrackerFileError(SC2ReaderError): + pass + + class MPQError(SC2ReaderError): pass diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 08945c8e..d09c9718 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -16,7 +16,7 @@ from sc2reader import readers from sc2reader import exceptions from sc2reader.data import builds as datapacks -from sc2reader.exceptions import SC2ReaderLocalizationError +from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES @@ -184,7 +184,7 @@ class Replay(Resource): #: SC2 Expansion. One of 'WoL', 'HotS' expasion = str() - def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options): + def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options): super(Replay, self).__init__(replay_file, filename, **options) self.datapack = None self.raw_data = dict() @@ -279,13 +279,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_players() # Load tracker events if requested - if load_level >= 3: + if load_level >= 3 and do_tracker_events: self.load_level = 3 for data_file in ['replay.tracker.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_tracker_events() - # Load events if requested if load_level >= 4: self.load_level = 4 @@ -295,6 +294,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Run this replay through the engine as indicated if engine: + resume_events = [ev for ev in self.game_events if ev.name == 'HijackReplayGameEvent'] + if self.base_build <= 26490 and self.tracker_events and len(resume_events) > 0: + raise CorruptTrackerFileError( + "Cannot run engine on resumed games with tracker events. Run again with the " + + "do_tracker_events=False option to generate context without tracker events.") + engine.run(self) def load_details(self): From 10940127eea3107ba55955c11e5810518992a78a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:18:50 -0500 Subject: [PATCH 077/238] Fix python3 bug in plugin error handling routine. --- sc2reader/engine/engine.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index fffc3246..4c22020e 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -178,11 +178,11 @@ def run(self, replay): else: new_events.appendleft(new_event) except Exception as e: - if event_handler.im_self.name in ['ContextLoader']: + if event_handler.__self__.name in ['ContextLoader']: # Certain built in plugins should probably still cause total failure raise # Maybe?? else: - new_event = PluginExit(event_handler.im_self, code=1, details=dict(error=e)) + new_event = PluginExit(event_handler.__self__, code=1, details=dict(error=e)) new_events.append(new_event) event_queue.extendleft(new_events) From f4fe8bb1a0f3502c44abf0c407d76ff4cbaede87 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 22:19:08 -0500 Subject: [PATCH 078/238] Remove some old % style string formatting. --- sc2reader/decoders.py | 2 +- sc2reader/events/game.py | 6 +++--- sc2reader/events/message.py | 2 +- sc2reader/objects.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index bb0bbd4c..63324649 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -374,6 +374,6 @@ def read_struct(self, datatype=None): data = self.read_vint() else: - raise TypeError("Unknown Data Structure: '%s'" % datatype) + raise TypeError("Unknown Data Structure: '{0}'".format(datatype)) return data diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 56ad5fdd..a4eb5446 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -37,7 +37,7 @@ def __init__(self, frame, pid): def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) + return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): return self._str_prefix() + self.name @@ -575,7 +575,7 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}" % (self.minerals, self.vespene, self.terrazine, self.custom, self.reciever) + return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}".format(self.minerals, self.vespene, self.terrazine, self.custom, self.recipient) class ResourceRequestEvent(GameEvent): @@ -600,7 +600,7 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom" % (self.minerals, self.vespene, self.terrazine, self.custom) + return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format(self.minerals, self.vespene, self.terrazine, self.custom) class ResourceRequestFulfillEvent(GameEvent): diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 259ae0c8..aeadc568 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -22,7 +22,7 @@ def __init__(self, frame, pid): def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) + return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): return self._str_prefix() + self.name diff --git a/sc2reader/objects.py b/sc2reader/objects.py index e5391b66..784ef9e2 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -82,7 +82,7 @@ def __repr__(self): return str(self) def __str__(self): - return "[%s] %s: %s" % (self.player, self.name, self.value) + return "[{0}] {1}: {2}".format(self.player, self.name, self.value) class Entity(object): From d21c50a5f8a0f265f4b84bed2f334f3b627cf0d5 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 21:22:04 -0500 Subject: [PATCH 079/238] Remove a couple more defunct replay attributes. Conflicts: CHANGELOG.rst --- CHANGELOG.rst | 3 +++ sc2reader/resources.py | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 997bce39..082ccc4a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,9 @@ CHANGELOG 0.6.5 - December ?? 2013 --------------------------- +* Removed the defunct replay.player_names attribute. +* Removed the defunct replay.events_by_type attribute. +* Removed the defunct replay.other_people attribute. * PingEvents now have new attributes: * event.to_all - true if ping seen by all * event.to_allies - true if ping seen by allies diff --git a/sc2reader/resources.py b/sc2reader/resources.py index d09c9718..751f7daa 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -193,7 +193,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_level = None #default values, filled in during file read - self.other_people = set() self.speed = "" self.type = "" self.game_type = "" @@ -205,7 +204,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.map_hash = "" self.gateway = "" self.events = list() - self.events_by_type = defaultdict(list) self.teams, self.team = list(), dict() self.player = utils.PersonDict() From e373ac4d9416b203d88b43c92bb6865176174893 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 22:46:19 -0500 Subject: [PATCH 080/238] Use generic UnitType and Ability classes for data. The dynamically created classes don't play well with pickle and were unncessarily complex. The only change here is that you can't use this anymore. unit._type_class.__class__.__name__ Instead you can use the shorter: unit._type_class.name No problem. Conflicts: CHANGELOG.rst --- CHANGELOG.rst | 1 + sc2reader/data/__init__.py | 77 ++++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 082ccc4a..cd71c9ed 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,7 @@ CHANGELOG 0.6.5 - December ?? 2013 --------------------------- +* Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. * Removed the defunct replay.player_names attribute. * Removed the defunct replay.events_by_type attribute. * Removed the defunct replay.other_people attribute. diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index fd345a34..d3ba0d58 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -33,10 +33,7 @@ class Unit(object): - """ - Represents an in-game unit. - """ - + """Represents an in-game unit.""" def __init__(self, unit_id): #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. self.owner = None @@ -195,22 +192,64 @@ def __repr__(self): return str(self) +class UnitType(object): + """ Represents an in game unit type """ + def __init__(self, type_id, str_id=None, name=None, title=None, race=None, minerals=0, + vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): + #: The internal integer id representing this unit type + self.id = type_id + + #: The internal string id representing this unit type + self.str_id = str_id + + #: The name of this unit type + self.name = name + + #: The printable title of this unit type; has spaces and possibly punctuation + self.title = title + + #: The race this unit type belongs to + self.race = race + + #: The mineral cost of this unit type + self.minerals = minerals + + #: The vespene cost of this unit type + self.vespene = vespene + + #: The supply cost of this unit type + self.supply = supply + + #: Boolean flagging this unit type as a building + self.is_building = is_building + + #: Boolean flagging this unit type as a worker + self.is_worker = is_worker + + #: Boolean flagging this unit type as an army unit + self.is_army = is_army + + class Ability(object): + """ Represents an in-game ability """ + def __init__(self, id, name=None, title=None, is_build=False, build_time=0, build_unit=None): + #: The internal integer id representing this ability. + self.id = id - #: The internal integer id representing this ability. - id = None + #: The name of this ability + self.name = name - #: The name of this ability - name = "" + #: The printable title of this ability; has spaces and possibly punctuation. + self.title = title - #: Boolean flagging this ability as creating a new unit. - is_build = False + #: Boolean flagging this ability as creating a new unit. + self.is_build = is_build - #: The number of seconds required to build this unit. 0 if not ``is_build``. - build_time = 0 + #: The number of seconds required to build this unit. 0 if not ``is_build``. + self.build_time = build_time - #: A reference to the :class:`Unit` type built by this ability. None if not ``is_build``. - build_unit = None + #: A reference to the :class:`UnitType` type built by this ability. Default to None. + self.build_unit = build_unit @loggable @@ -260,20 +299,20 @@ def change_type(self, unit, new_type, frame): self.logger.error("Unable to change type of {0} to {1} [frame {2}]; unit type not found in build {3}".format(unit, new_type, frame, self.id)) def add_ability(self, ability_id, name, title=None, is_build=False, build_time=None, build_unit=None): - ability = type(str(name), (Ability,), dict( - id=ability_id, + ability = Ability( + ability_id, name=name, title=title or name, is_build=is_build, build_time=build_time, build_unit=build_unit - )) + ) setattr(self, name, ability) self.abilities[ability_id] = ability def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', minerals=0, vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): - unit = type(str(name), (Unit,), dict( - id=type_id, + unit = UnitType( + type_id, str_id=str_id, name=name, title=title or name, From 23b36f5742942e75c5ee3a17b093de299efba73f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 22:51:20 -0500 Subject: [PATCH 081/238] datapacks is a better word than builds here. --- sc2reader/data/__init__.py | 2 +- sc2reader/resources.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index d3ba0d58..d5e7f97b 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -388,4 +388,4 @@ def load_build(expansion, version): for version in ('base', '23925', '24247', '24764'): hots_builds[version] = load_build('HotS', version) -builds = {'WoL': wol_builds, 'HotS': hots_builds} +datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds} diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 751f7daa..5e6aceed 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -4,7 +4,6 @@ from collections import defaultdict, namedtuple from datetime import datetime import hashlib -import sys from xml.etree import ElementTree import zlib @@ -15,7 +14,7 @@ from sc2reader import log_utils from sc2reader import readers from sc2reader import exceptions -from sc2reader.data import builds as datapacks +from sc2reader.data import datapacks from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES From e836c6a3159f93d530d358013020273ad3bd9cf5 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:21:45 -0500 Subject: [PATCH 082/238] Fix typo. --- sc2reader/data/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index d5e7f97b..4c69d516 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -323,7 +323,7 @@ def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', miner is_building=is_building, is_worker=is_worker, is_army=is_army, - )) + ) setattr(self, name, unit) self.units[type_id] = unit self.units[str_id] = unit From fc79bbb2b3ff781ab859a98c3b8b72f8894964a0 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:22:28 -0500 Subject: [PATCH 083/238] Use a regular dict for raw data results. --- sc2reader/readers.py | 4 ++-- sc2reader/resources.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index e4f373b9..f3fa55c4 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -8,7 +8,7 @@ from sc2reader.events.game import * from sc2reader.events.message import * from sc2reader.events.tracker import * -from sc2reader.utils import AttributeDict, DepotFile +from sc2reader.utils import DepotFile from sc2reader.decoders import BitPackedDecoder, ByteDecoder @@ -206,7 +206,7 @@ def __call__(self, data, replay): data.byte_align() - return AttributeDict(pings=pings, messages=messages, packets=packets) + return dict(pings=pings, messages=messages, packets=packets) class GameEventsReader_Base(object): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 5e6aceed..3e3b508f 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -470,9 +470,9 @@ def load_message_events(self): if 'replay.message.events' not in self.raw_data: return - self.messages = self.raw_data['replay.message.events'].messages - self.pings = self.raw_data['replay.message.events'].pings - self.packets = self.raw_data['replay.message.events'].packets + self.messages = self.raw_data['replay.message.events']['messages'] + self.pings = self.raw_data['replay.message.events']['pings'] + self.packets = self.raw_data['replay.message.events']['packets'] self.message_events = self.messages+self.pings+self.packets self.events = sorted(self.events + self.message_events, key=lambda e: e.frame) From a7c7e2101d9de4b3e0cfbae0269a91f263c409ac Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:24:12 -0500 Subject: [PATCH 084/238] Misc import and documentation improvements. --- sc2reader/__init__.py | 56 +++++++++++++++++++++++++++++++-- sc2reader/events/__init__.py | 5 ++- sc2reader/factories/__init__.py | 2 +- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 60b5eead..040febcb 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,4 +1,23 @@ # -*- coding: utf-8 -*- +""" + sc2reader + ~~~~~~~~~~~ + + A library for loading data from Starcraft II game resources. + + SC2Factory methods called on the package will be delegated to the default + SC2Factory. To default to a cached factory set one or more of the following + variables in your environment: + + SC2READER_CACHE_DIR = '/absolute/path/to/existing/cache/directory/' + SC2READER_CACHE_MAX_SIZE = MAXIMUM_CACHE_ENTRIES_TO_HOLD_IN_MEMORY + + You can also set the default factory via setFactory, useFileCache, useDictCache, + or useDoubleCache functions. + + :copyright: (c) 2011 by Graylin Kim. + :license: MIT, see LICENSE for more details. +""" from __future__ import absolute_import, print_function, unicode_literals, division __version__ = "0.6.4" @@ -13,12 +32,25 @@ # setup the library logging log_utils.setup() -# For backwards compatibility +# For backwards compatibility, goes away in 0.7 SC2Reader = factories.SC2Factory def setFactory(factory): - # Expose a nice module level interface + """ + :param factory: The new default factory for the package. + + Links the following sc2reader global methods to the specified factory:: + + * sc2reader.load_replay(s) + * sc2reader.load_map(s) + * sc2reader.load_game_summar(y|ies) + * sc2reader.configure + * sc2reader.reset + * sc2reader.register_plugin + + These methods when called will delegate to the factory for execution. + """ module = sys.modules[__name__] module.load_replays = factory.load_replays module.load_replay = factory.load_replay @@ -35,14 +67,34 @@ def setFactory(factory): def useFileCache(cache_dir, **options): + """ + :param cache_dir: Absolute path to the existing cache directory + + Set the default factory to a new FileCachedSC2Factory with the given cache_dir. + All remote resources are saved to the file system for faster access times. + """ setFactory(factories.FileCachedSC2Factory(cache_dir, **options)) def useDictCache(cache_max_size=0, **options): + """ + :param cache_max_size: The maximum number of cache entries to hold in memory + + Set the default factory to a new DictCachedSC2Factory with the given cache_dir. + A limited number of remote resources are cached in memory for faster access times. + """ setFactory(factories.DictCachedSC2Factory(cache_max_size, **options)) def useDoubleCache(cache_dir, cache_max_size=0, **options): + """ + :param cache_dir: Absolute path to the existing cache directory + :param cache_max_size: The maximum number of cache entries to hold in memory + + Set the default factory to a new DoubleCachedSC2Factory with the given cache_dir. + A limited number of remote resources are cached in memory for faster access times. + All remote resources are saved to the file system for faster access times. + """ setFactory(factories.DoubleCachedSC2Factory(cache_dir, cache_max_size, **options)) diff --git a/sc2reader/events/__init__.py b/sc2reader/events/__init__.py index db2cc164..6ceaa632 100644 --- a/sc2reader/events/__init__.py +++ b/sc2reader/events/__init__.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -import sc2reader.events.base -import sc2reader.events.game -import sc2reader.events.message +# Export all events of all types to the package interface +from sc2reader.events import base, game, message, tracker from sc2reader.events.base import * from sc2reader.events.game import * from sc2reader.events.message import * diff --git a/sc2reader/factories/__init__.py b/sc2reader/factories/__init__.py index 583b67ea..c6c469f6 100644 --- a/sc2reader/factories/__init__.py +++ b/sc2reader/factories/__init__.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, print_function, unicode_literals, division from sc2reader.factories.sc2factory import SC2Factory from sc2reader.factories.sc2factory import FileCachedSC2Factory From 3b0a9d5c73c1403d082c53b1d502814841bd08fd Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 21:30:24 -0500 Subject: [PATCH 085/238] Clarify the highest leauge user attribute. --- sc2reader/objects.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index 784ef9e2..d243d3a1 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -234,7 +234,8 @@ def __init__(self, uid, init_data): #: The user's combined Battle.net race levels self.combined_race_levels = init_data['combined_race_levels'] - #: The user's highest leauge in the current season + #: The highest 1v1 league achieved by the user in the current season with 1 as Bronze and + #: 7 as Grandmaster. 8 seems to indicate that there is no current season 1v1 ranking. self.highest_league = init_data['highest_league'] #: A flag indicating if this person was the one who recorded the game. From b829379b907b9ad592a215f842e27c435c29f3cc Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 00:51:45 -0500 Subject: [PATCH 086/238] Fixes #165, properly parse mouse click events. --- sc2reader/readers.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index f3fa55c4..e8bd0173 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -936,7 +936,7 @@ def trigger_mouse_clicked_event(self, data): position_world=dict( x=data.read_bits(20), y=data.read_bits(20), - z=data.read_uint32()-2147483648, + z=data.read_uint32() - 2147483648, ), ) @@ -1421,15 +1421,15 @@ def trigger_mouse_clicked_event(self, data): button=data.read_uint32(), down=data.read_bool(), position_ui=dict( - x=data.read_uint32(), - y=data.read_uint32(), + x=data.read_bits(11), + y=data.read_bits(11), ), position_world=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, + x=data.read_bits(20) - 2147483648, + y=data.read_bits(20) - 2147483648, + z=data.read_uint32() - 2147483648, ), - flags=data.read_uint8()-128, + flags=data.read_uint8() - 128, ) def trigger_mouse_moved_event(self, data): @@ -1441,9 +1441,9 @@ def trigger_mouse_moved_event(self, data): position_world=dict( x=data.read_bits(20), y=data.read_bits(20), - z=data.read_uint32()-2147483648, + z=data.read_uint32() - 2147483648, ), - flags=data.read_uint8()-128, + flags=data.read_uint8() - 128, ) From e4fd2312b9cd14dcc163653fc455f2f09fa01123 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 01:47:23 -0500 Subject: [PATCH 087/238] Bring the changelog for 0.6.5 up to speed. --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cd71c9ed..bdb986d7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,7 @@ CHANGELOG --------------------------- * Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. +* Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) * Removed the defunct replay.player_names attribute. * Removed the defunct replay.events_by_type attribute. * Removed the defunct replay.other_people attribute. From 1a709119a02d11d7fe6bdf97484a515a4ac04b88 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 02:29:38 -0500 Subject: [PATCH 088/238] Fix initdata parsing for base_build 23260 replays. --- sc2reader/readers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index e8bd0173..1c71ed3f 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -105,7 +105,7 @@ def __call__(self, data, replay): is_single_player=data.read_bool(), game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7) if replay.base_build >= 23260 else None, + default_ai_build=data.read_bits(7) if replay.base_build >= 24764 else None, ), ) if not data.done(): From 14c99b3c3fda43519d43023aa84209dcdb58d5b6 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Fri, 13 Dec 2013 11:35:24 -0500 Subject: [PATCH 089/238] fix creepTracker so it runs as part of the test suite. and fix it to pass --- test_replays/test_all.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index b2dc584b..42ac3d6e 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -319,10 +319,10 @@ def test_factory_plugins(self): self.assertTrue(result["is_ladder"]) -def test_creepTracker(): - from sc2reader.engine.plugins import CreepTracker + def test_creepTracker(self): + from sc2reader.engine.plugins import CreepTracker - for replayfilename in [ + for replayfilename in [ "test_replays/2.0.8.25605/ggtracker_3621322.SC2Replay", "test_replays/2.0.8.25605/ggtracker_3621402.SC2Replay", "test_replays/2.0.8.25605/ggtracker_3663861.SC2Replay", @@ -340,10 +340,10 @@ def test_creepTracker(): assert replay.player[player_id].creep_spread_by_minute - replay =factory.load_replay("test_replays/2.0.8.25605/ggtracker_3621402.SC2Replay",load_map= True,engine=pluginEngine,load_level=4) - assert replay.player[2].max_creep_spread == (14,22.95) - assert replay.player[2].creep_spread_by_minute[7] == 8.21 - assert replay.player[2].creep_spread_by_minute[13] == 22.42 + replay =factory.load_replay("test_replays/2.0.8.25605/ggtracker_3621402.SC2Replay",load_map= True,engine=pluginEngine,load_level=4) + assert replay.player[2].max_creep_spread == (840,24.83) + assert replay.player[2].creep_spread_by_minute[420] == 9.4 + assert replay.player[2].creep_spread_by_minute[780] == 22.42 if __name__ == '__main__': unittest.main() From 2f419eb9389948e756a1ee3ba791efac6dc5178d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 31 Jul 2013 16:16:05 -0400 Subject: [PATCH 090/238] Updates to the project documentation. --- sc2reader/data/__init__.py | 17 ++++++++++++----- sc2reader/events/tracker.py | 28 +++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 013ff81c..769f7287 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -38,19 +38,26 @@ class Unit(object): """ def __init__(self, unit_id, flags): - #: A reference to the player that owns this unit + #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. self.owner = None - #: The frame the unit was started at + #: The frame the unit was started at. Only available for 2.0.8+ replays. + #: Specifically, it is the frame the :class:`~sc2reader.events.tracker.UnitInitEvent` is received. For units + #: that are born and not initiated this will be the same as :attr:`finished_at`. self.started_at = None - #: The frame the unit was finished at + #: The frame the unit was finished at. Only available for 2.0.8+ replays. + #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDoneEvent` is received. For units + #: that are born and not initiated this will be the same as :attr:`started_at`. self.finished_at = None - #: The frame the unit died at + #: The frame the unit died at. Only available for 2.0.8+ replays. + #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDiedEvent` is received. self.died_at = None - #: A reference to the player that killed this unit. Not always available. + #: A reference to the player that killed this unit. Only available for 2.0.8+ replays. + #: This value is not set if the killer is unknown or not relevant (morphed into a + #: different unit or used to create a building, etc) self.killed_by = None #: The unique in-game id for this unit. The id can sometimes be zero because diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index eb914fff..b343ad46 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -39,6 +39,7 @@ class PlayerStatsEvent(TrackerEvent): events generated at the end of the game. One for leaving and one for the end of the game. """ + name = 'PlayerStatsEvent' def __init__(self, frames, data, build): @@ -211,6 +212,13 @@ def __str__(self): class UnitBornEvent(TrackerEvent): + """ + Generated when a unit is created in a finished state in the game. Examples + include the Marine, Zergling, and Zealot (when trained from a gateway). + Units that enter the game unfinished (all buildings, warped in units) generate + a :class:`UnitInitEvent` instead. + """ + name = 'UnitBornEvent' def __init__(self, frames, data, build): @@ -257,6 +265,11 @@ def __str__(self): class UnitDiedEvent(TrackerEvent): + """ + Generated when a unit dies or is removed from the game for any reason. Reasons include + morphing, merging, and getting killed. + """ + name = 'UnitDiedEvent' def __init__(self, frames, data, build): @@ -375,6 +388,13 @@ def __str__(self): class UnitInitEvent(TrackerEvent): + """ + The counter part to :class:`UnitDoneEvent`, generated by the game engine + when a unit is initiated. This applies only to units which are started + in game before they are finished. Primary examples being buildings and + warp-in units. + """ + name = 'UnitInitEvent' def __init__(self, frames, data, build): @@ -417,10 +437,16 @@ def __init__(self, frames, data, build): self.location = (self.x, self.y) def __str__(self): - return self._str_prefix()+"{0: >15} - Unit inititated {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix()+"{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) class UnitDoneEvent(TrackerEvent): + """ + The counter part to the :class:`UnitInitEvent`, generated by the game engine + when an initiated unit is completed. E.g. warp-in finished, building finished, + morph complete. + """ + name = 'UnitDoneEvent' def __init__(self, frames, data, build): From aff260de0adcb555a1b274af13d3c973e68f2546 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 31 Jul 2013 21:00:13 -0400 Subject: [PATCH 091/238] Small event documentation improvements. --- docs/source/conf.py | 2 + docs/source/events/game.rst | 6 +- docs/source/events/tracker.rst | 4 + sc2reader/events/game.py | 226 +++++++++++++++++++++++++++------ sc2reader/events/tracker.py | 5 + 5 files changed, 201 insertions(+), 42 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 4699a931..72686655 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -13,6 +13,8 @@ import sys, os +autodoc_member_order = "bysource" + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. diff --git a/docs/source/events/game.rst b/docs/source/events/game.rst index c2a442b6..ec253718 100644 --- a/docs/source/events/game.rst +++ b/docs/source/events/game.rst @@ -3,7 +3,11 @@ Game Events ============= -Coming soon! +Game events are what the Starcraft II engine uses to reconstruct games for you to watch +and take over in. Because the game is deterministic, only event data directly created by +a player action is recorded. These player actions are then replayed automatically when +watching a replay. Because the AI is 100% deterministic no events are ever recorded for a +computer player. .. automodule:: sc2reader.events.game :members: diff --git a/docs/source/events/tracker.rst b/docs/source/events/tracker.rst index 5d619846..77df8ccf 100644 --- a/docs/source/events/tracker.rst +++ b/docs/source/events/tracker.rst @@ -3,6 +3,10 @@ Tracker Events ===================== +Tracker events are new in Starcraft patch 2.0.8. These events are generated by +the game engine when important non-player events occur in the game. Some of them +are also periodically recorded to snapshot aspects of the current game state. + .. automodule:: sc2reader.events.tracker :members: :undoc-members: \ No newline at end of file diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index a61cda5d..7ff46188 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -10,12 +10,28 @@ @loggable class GameEvent(Event): + """ + This is the base class for all game events. The attributes below are universally available. + """ name = 'GameEvent' def __init__(self, frame, pid): + #: The id of the player generating the event. This is 16 for global non-player events. + #: Prior to Heart of the Swarm this was the player id. Since HotS it is + #: now the user id (uid), we still call it pid for backwards compatibility. self.pid = pid + + #: A reference to the :class:`~sc2reader.objects.Player` object representing + #: this player in the replay. Not available for global events (:attr:`pid` = 16) + self.player = None + + #: The frame of the game that this event was recorded at. 16 frames per game second. self.frame = frame + + #: The second of the game that this event was recorded at. 16 frames per game second. self.second = frame >> 4 + + #: A flag indicating if it is a local or global event. self.is_local = (pid != 16) def _str_prefix(self): @@ -27,6 +43,11 @@ def __str__(self): class GameStartEvent(GameEvent): + """ + Recorded when the game starts and the frames start to roll. This is a global non-player + event. + """ + name = 'GameStartEvent' def __init__(self, frame, pid, data): @@ -34,6 +55,10 @@ def __init__(self, frame, pid, data): class PlayerLeaveEvent(GameEvent): + """ + Recorded when a player leaves the game. + """ + name = 'PlayerLeaveEvent' def __init__(self, frame, pid, data): @@ -41,6 +66,11 @@ def __init__(self, frame, pid, data): class UserOptionsEvent(GameEvent): + """ + This event is recorded for each player at the very beginning of the game before the + :class:`GameStartEvent`. + """ + name = 'UserOptionsEvent' def __init__(self, frame, pid, data): @@ -94,7 +124,18 @@ class PlayerActionEvent(GameEvent): @loggable class AbilityEvent(PlayerActionEvent): + """ + Ability events are generated when ever a player in the game issues a command + to a unit or group of units. They are split into three subclasses of ability, + each with their own set of associated data. The attributes listed below are + shared across all ability event types. + + See :class:`LocationAbilityEvent`, :class:`TargetAbilityEvent`, and :class:`SelfAbilityEvent` + for individual details. + """ + name = 'AbilityEvent' + is_player_action = True def __init__(self, frame, pid, data): @@ -157,47 +198,8 @@ def __init__(self, frame, pid, data): #: The type of ability, one of: None (no target), TargetPoint, TargetUnit, or Data self.ability_type = data['data'][0] - ability_type_data = data['data'][1] - - if self.ability_type == 'TargetUnit': - #: Flags set on the target unit. Available for TargetUnit type events - self.target_flags = ability_type_data.get('flags', None) - - #: Timer?? Available for TargetUnit type events. - self.target_timer = ability_type_data.get('timer', None) - - #: Unique id of the target unit. Available for TargetUnit type events. - self.target_unit_id = ability_type_data.get('unit_tag', None) - - #: A reference to the targetted unit - self.target_unit = None - - #: Current integer type id of the target unit. Available for TargetUnit type events. - self.target_unit_type = ability_type_data.get('unit_link', None) - - #: Integer player id of the controlling player. Available for TargetUnit type events starting in 19595. - #: When the targetted unit is under fog of war this id is zero. - self.control_player_id = ability_type_data.get('control_player_id', None) - - #: Integer player id of the player paying upkeep. Available for TargetUnit type events. - self.upkeep_player_id = ability_type_data.get('upkeep_player_id', None) - - if self.ability_type in ('TargetPoint', 'TargetUnit'): - #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.x = ability_type_data['point'].get('x', 0)/4096.0 - - #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.y = ability_type_data['point'].get('y', 0)/4096.0 - - #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. - self.z = ability_type_data['point'].get('z', 0) - - #: The location of the target. Available for TargetPoint and TargetUnit type events - self.location = (self.x, self.y, self.z) - - if self.ability_type == 'Data': - #: Other target data. Available for Data type events. - self.target_data = ability_type_data.get('data', None) + #: The raw data associated with this ability type + self.ability_type_data = data['data'][1] #: Other unit id?? self.other_unit_id = data['other_unit_tag'] @@ -224,19 +226,118 @@ def __str__(self): class LocationAbilityEvent(AbilityEvent): + """ + Extends :class:`AbilityEvent` + + This event is recorded when ever a player issues a command that targets a location + and NOT a unit. Commands like Psistorm, Attack Move, Fungal Growth, and EMP fall + under this category. + + Note that like all AbilityEvents, the event will be recorded regardless + of whether or not the command was successful. + """ + name = 'LocationAbilityEvent' + def __init__(self, frame, pid, data): + super(LocationAbilityEvent, self).__init__(frame, pid, data) + + #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. + self.x = self.ability_type_data['point'].get('x', 0)/4096.0 + + #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. + self.y = self.ability_type_data['point'].get('y', 0)/4096.0 + + #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. + self.z = self.ability_type_data['point'].get('z', 0) + + #: The location of the target. Available for TargetPoint and TargetUnit type events + self.location = (self.x, self.y, self.z) + class TargetAbilityEvent(AbilityEvent): + """ + Extends :class:`AbilityEvent` + + TargetAbilityEvents are recorded when ever a player issues a command that targets a unit. + The location of the target unit at the time of the command is also recorded. Commands like + Chronoboost, Transfuse, and Snipe fall under this category. + + Note that all AbilityEvents are recorded regardless of whether or not the command was successful. + """ + name = 'TargetAbilityEvent' + def __init__(self, frame, pid, data): + super(TargetAbilityEvent, self).__init__(frame, pid, data) + + #: Flags set on the target unit. Available for TargetUnit type events + self.target_flags = self.ability_type_data.get('flags', None) + + #: Timer?? Available for TargetUnit type events. + self.target_timer = self.ability_type_data.get('timer', None) + + #: Unique id of the target unit. Available for TargetUnit type events. + self.target_unit_id = self.ability_type_data.get('unit_tag', None) + + #: A reference to the targetted unit + self.target_unit = None + + #: Current integer type id of the target unit. Available for TargetUnit type events. + self.target_unit_type = self.ability_type_data.get('unit_link', None) + + #: Integer player id of the controlling player. Available for TargetUnit type events starting in 19595. + #: When the targetted unit is under fog of war this id is zero. + self.control_player_id = self.ability_type_data.get('control_player_id', None) + + #: Integer player id of the player paying upkeep. Available for TargetUnit type events. + self.upkeep_player_id = self.ability_type_data.get('upkeep_player_id', None) + + #: The x coordinate of the target. Available for TargetPoint and TargetUnit type events. + self.x = self.ability_type_data['point'].get('x', 0)/4096.0 + + #: The y coordinate of the target. Available for TargetPoint and TargetUnit type events. + self.y = self.ability_type_data['point'].get('y', 0)/4096.0 + + #: The z coordinate of the target. Available for TargetPoint and TargetUnit type events. + self.z = self.ability_type_data['point'].get('z', 0) + + #: The location of the target. Available for TargetPoint and TargetUnit type events + self.location = (self.x, self.y, self.z) + class SelfAbilityEvent(AbilityEvent): + """ + Extends :class:`AbilityEvent` + + SelfAbilityEvents are recorded when ever a player issues a command that has no target. Commands + like Burrow, SeigeMode, Train XYZ, and Stop fall under this category. + + Note that all AbilityEvents are recorded regardless of whether or not the command was successful. + """ + name = 'SelfAbilityEvent' + def __init__(self, frame, pid, data): + super(SelfAbilityEvent, self).__init__(frame, pid, data) + + #: Other target data. Available for Data type events. + self.target_data = self.ability_type_data.get('data', None) + @loggable class SelectionEvent(PlayerActionEvent): + """ + Selection events are generated when ever the active selection of the + player is updated. Unlike other game events, these events can also be + generated by non-player actions like unit deaths or transformations. + + Starting in Starcraft 2.0.0, selection events targetting control group + buffers are also generated when control group selections are modified + by non-player actions. When a player action updates a control group + a :class:`HotkeyEvent` is generated. + """ + name = 'SelectionEvent' is_player_action = True @@ -300,6 +401,22 @@ def create_control_group_event(frame, pid, data): @loggable class HotkeyEvent(PlayerActionEvent): + """ + Hotkey events are recorded when ever a player action modifies a control + group. I know that calling control group events hotkey events doesn't make + sense but for backwards compatibility I haven't changed it yet. Sorry. + + There are three kinds of hotkey events, generated by each of the possible + player actions: + + * :class:`SetToHotkeyEvent` - Recorded when a user sets a control group (ctrl+#). + * :class:`GetFromHotkeyEvent` - Recorded when a user retrieves a control group (#). + * :class:`AddToHotkeyEvent` - Recorded when a user adds to a control group (shift+ctrl+#) + + All three events have the same set of data (shown below) but are interpretted differently. + See the class entry for details. + """ + name = 'HotkeyEvent' is_player_action = True @@ -326,19 +443,46 @@ def __init__(self, frame, pid, data): class SetToHotkeyEvent(HotkeyEvent): + """ + Extends :class:`HotkeyEvent` + + This event does a straight forward replace of the current control group contents + with the player's current selection. This event doesn't have masks set. + """ + name = 'SetToHotkeyEvent' class AddToHotkeyEvent(HotkeyEvent): + """ + Extends :class:`HotkeyEvent` + + This event adds the current selection to the control group. + """ + name = 'AddToHotkeyEvent' class GetFromHotkeyEvent(HotkeyEvent): + """ + Extends :class:`HotkeyEvent` + This event replaces the current selection with the contents of the control group. + The mask data is used to limit that selection to units that are currently selectable. + You might have 1 medivac and 8 marines on the control group but if the 8 marines are + inside the medivac they cannot be part of your selection. + """ + name = 'GetFromHotkeyEvent' @loggable class CameraEvent(GameEvent): + """ + Camera events are generated when ever the player camera moves, zooms, or rotates. + It does not matter why the camera changed, this event simply records the current + state of the camera after changing. + """ + name = 'CameraEvent' def __init__(self, frame, pid, data): diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index b343ad46..c689a07e 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -217,6 +217,11 @@ class UnitBornEvent(TrackerEvent): include the Marine, Zergling, and Zealot (when trained from a gateway). Units that enter the game unfinished (all buildings, warped in units) generate a :class:`UnitInitEvent` instead. + + Unfortunately, units that are born do not have events marking their beginnings + like :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to + it are the :class:`~sc2reader.event.game.AbilityEvent` game events where the ability + is a train unit command. """ name = 'UnitBornEvent' From ace37086abcf98681f1c74a484856cff52818a45 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 4 Aug 2013 20:35:26 -0400 Subject: [PATCH 092/238] Better team string formatting. --- sc2reader/objects.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index cd56afdf..a0557145 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -56,7 +56,10 @@ def hash(self): return hashlib.sha256(raw_hash).hexdigest() def __str__(self): - return "Team {0}".format(self.number) + return "Team {0}: {1}".format(self.number, ", ".join([str(p) for p in self.players])) + + def __repr__(self): + return str(self) class Attribute(object): From 78f4fe62ac4cadbd96230dd3c59776a5ed02f992 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 5 Aug 2013 00:16:11 -0400 Subject: [PATCH 093/238] Improvements to documentation. --- docs/source/articles/addingnewdatapacks.rst | 5 ++ docs/source/articles/conceptsinsc2reader.rst | 73 ++++++++++++++++++++ docs/source/articles/whatsinareplay.rst | 59 ++++++++++++++++ docs/source/index.rst | 54 +++++++++++++-- sc2reader/factories/sc2factory.py | 15 +++- 5 files changed, 196 insertions(+), 10 deletions(-) create mode 100644 docs/source/articles/addingnewdatapacks.rst create mode 100644 docs/source/articles/conceptsinsc2reader.rst create mode 100644 docs/source/articles/whatsinareplay.rst diff --git a/docs/source/articles/addingnewdatapacks.rst b/docs/source/articles/addingnewdatapacks.rst new file mode 100644 index 00000000..ac64d5bd --- /dev/null +++ b/docs/source/articles/addingnewdatapacks.rst @@ -0,0 +1,5 @@ + +Adding new Datapacks +======================= + +TODO \ No newline at end of file diff --git a/docs/source/articles/conceptsinsc2reader.rst b/docs/source/articles/conceptsinsc2reader.rst new file mode 100644 index 00000000..62a05fc8 --- /dev/null +++ b/docs/source/articles/conceptsinsc2reader.rst @@ -0,0 +1,73 @@ +Concepts in sc2reader +======================= + +Some of the important concepts in sc2reader in no particular order. + + +Factories +-------------- + +All resources are loaded through a factory. There are four kinds: + +* SC2Factory - Basic factory. Loads resources. +* DictCachedSC2Factory - Caches remote resources in memory. When loading remote resources, the dict cache is checked first. +* FileCachedSC2Factory - Caches remote resources on the file system. When loading remote resources, the file system is checked first. +* DoubleCachedSC2Factory - Caches remote resource in memory and on the file system. + +A default factory is automatically configured and attached to the ``sc2reader`` module when the library is imported. Calling any factory method on the sc2reader module will use this default factory:: + + sc2reader.configure(debug=True) + replay = sc2reader.load_replay('my_replay.SC2Replay') + +The default factory can be configured with the following environment variables: + +* SC2READER_CACHE_DIR - Enables caching to file at the specified directory. +* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries (not based on memory imprint!) + + +Resources +---------------- + +A Starcraft II resource is any Starcraft II game file. This primarily refers to :class:`~sc2reader.resources.Replay` and :class:`~sc2reader.resources.Map` resources but also includes less common resources such as :class:`~sc2reader.resources.GameSummary`, :class:`~sc2reader.resources.Localization`, and SC2Mods. + + +Player vs User +----------------- + +All entities in a replay fall into one of two overlapping buckets: + +* User: A human entity, only users have game and message events. +* Player: A entity that actively plays in the game, only players have tracker events. + +As such the following statements are true: + +* A Participant is a Player **and** a User +* An Observer is a User **and not** a Player +* An Computer is a Player **and not** a User + + +Game vs Real +---------------- + +Many attributes in sc2reader are prefixed with ``game_`` and ``real_``. Game refers to the value encoded in the replay. Real refers to the real life value, as best as we can tell. For instance, ``game_type`` might be 2v2 but by looking at the teams we know that ``real_type`` is 1v1. + + +GameEngine +---------------- + +The game engine is used to process replay events and augument the replay with new statistics and game state. It implements a plugin system that allows developers +to inject their own logic into the game loop. It also allows plugins to ``yield`` new +events to the event stream. This allows for basic message passing between plugins. + +A default engine is automatically configured and attached to the ``sc2reader.engine`` module when the library is imported. Calling any game engine method on the engine module will use this default factory:: + + sc2reader.engine.register_plugin(MyPlugin()) + sc2reader.engine.run(replay) + + +Datapack +----------------- + +A datapack is a collection of :class:`~sc2reader.data.Unit` and :class:`~sc2reader.data.Ability` classes that represent the game meta data for a given replay. Because this information is not stored in a replay, sc2reader ships with a datapack for standard ladder games from each Starcraft patch. + +For non-standard maps, this datapack will be both wrong and incomplete and the Unit/Ability data should not be trusted. If you want to add a datapack for your map, see the article on :doc:`addingnewdatapacks`. diff --git a/docs/source/articles/whatsinareplay.rst b/docs/source/articles/whatsinareplay.rst new file mode 100644 index 00000000..a9b690c6 --- /dev/null +++ b/docs/source/articles/whatsinareplay.rst @@ -0,0 +1,59 @@ + +What is in a Replay? +======================= + +A SC2Replay file is an archive, just like a like zip or tar file. Inside there are several files, each with a specific purpose. The important ones can be split into three categories. + + +Initial State: +---------------- + +These first three files describe the initial state of the game before any events occur. + +* replay.initData - Records game client information and lobby slot data. +* replay.details - Records basic player and game data. +* replay.attributes.events - Records assorted player and game attributes from the lobby. + +The Starcraft II game client can be thought of as a deterministic state machine. Given an initial state and a list of events, the end state can be exactly replicated. + + +Input Events: +---------------- + +The next two files provide a feed of player actions in the game. + +* replay.message.events - Records chat messages and pings. +* replay.game.events - Records every action of every person in the game. + +When you watch a replay the game just reads from these feeds. When you take over from a replay, the game client cuts the feeds and switches over to live mouse/keyboard input. Because the AI is deterministic the replay never contains message/game events for them. + + +Output Events: +---------------- + +The last file provides a record of important events from the game. + +* replay.tracker.events - Records important game events and game state updates. + +This file was introduced in 2.0.4 and is unncessary for the Starcraft II to reproduce the game. Instead, it records interesting game events and game state for community developers to use when analyzing replays. + + +What isn't in a replay? +-------------------------- + +Replays are specifically designed to only include data essential to recreate the game. Game state is not recorded because the game engine can recreate it based off the other information. That means no player resource counts, colleciton rates, supply values, vision, unit positions, unit deaths, etc. Information that you are super interested in probably is not directly recorded. Fortunately since 2.0.4 tracker events now record some of this information; prior to that patch we had to run our own simulations to guess at most of the data. + + +The other important aspect of this is that instead of completely describing all of the game data (unit data, ability data, map info, etc), replays maintain a list of dependencies. These dependencies might look like this: + +* Core.SC2Mod +* Liberty (multi).SC2Mod +* Swarm (multi).SC2Mod +* Teams2.SC2Mod +* Current Patch.SC2mod +* GameHeart.SC2Mod +* Map.SC2Map + +As part of the replay pre-load process, each of these dependencies is fetched and all of their associated data is loaded into memory. When Battle.net tells you it is "Fetching Files", it can often be referring to dependencies like this. + +sc2reader has attempted to mitigate this serious deficiency by packaging its own game data files. Basic cost, build time, and race information has been packaged. For many people this will be enough. Future versions of sc2reader will provide support for game data exports from the World Editor (introduced in patch 2.0.10). These exports should provide a much more robust dataset to work with. diff --git a/docs/source/index.rst b/docs/source/index.rst index 93b6f03b..a9b6c8e5 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,13 +1,11 @@ SC2Reader User Manual ========================= -Thanks for choosing sc2reader for your Starcraft analysis needs. - There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created with -out first being able to open up replay files and analyse the content within. -That's why SC2Reader was built, to provide a solid foundation on which the next +out first being able to open up replay files and analyze the content within. +That's why **sc2reader** was built, to provide a solid foundation on which the next generation of tools and websites can be built and benefit the community. So lets get you started right away! Through the linked tutorials and reference @@ -24,10 +22,52 @@ Freenode if you want to chat or need some live support. .. _IRC Channel: http://webchat.freenode.net/?channels=#sc2reader +About sc2reader +-------------------- + +**sc2reader** is an open source, MIT licensed, python library for extracting game play information from Starcraft II replay and map files. It is production ready, actively maintained, and hosted publicly on Github [`source`_]. + +Features: + +* Fully parses and extracts all available data from all replay files (arcade included) from every official release (plus the HotS Beta). +* Automatically retrieves maps; extracts basic map data and images. Maps unit type and ability link ids to unit/ability game data. +* Processes replay data into an interlinked set of Team, Player, and Unit objects for easy data manipulation + +Plugins: + +* Selection Tracking: See every player's current selection and hotkeys at every frame of the game. +* APM Tracking: Provides basic APM information for each player by minute and as game averages. +* GameHeartNormalizer: Fixes teams, races, times, and other oddities typical of GameHeart games. + +Scripts: + +* sc2printer: Print basic replay information to the terminal. +* sc2json: Render basic replay information to json for use in other languages. +* sc2replayer: Play back a replay one event at a time with detailed printouts. + +I am actively looking for community members to assist in documenting the replay data and in creating plugins that enhance functionality. Contact me! + +.. _source: http://github.com/GraylinKim/sc2reader + + +Getting Started +-------------------- + +I recommend the following steps when getting started: + +* Follow the `installation guide`_ +* Read this article on replays: :doc:`articles/whatsinareplay` (5 minutes). +* Read this article on sc2reader: :doc:`articles/conceptsinsc2reader` (5 minutes). + +After that, you can see sc2reader in action by working through a couple of the tutorials below. + +.. _installation guide: https://github.com/GraylinKim/sc2reader#installation + + Tutorials --------------- -The best way to learn how to pick sc2Reader up and get started is probably by example. With that in mind, we've written up a series of tutorials on getting various simple tasks done with sc2reader; hopefully they can serve as a quick on ramp for you. +The best way to pick sc2reader up and get started is probably by example. With that in mind, we've written up a series of tutorials on getting various simple tasks done with sc2reader; hopefully they can serve as a quick on ramp for you. * :doc:`tutorials/prettyprinter` (10-15 minutes) @@ -35,11 +75,10 @@ The best way to learn how to pick sc2Reader up and get started is probably by ex Reference Pages ----------------------- -The following reference pages were put together to help you quickly find the information you need. +Don't forget to check the :doc:`faq` if you can't find the answer you are looking for! .. toctree:: - faq sc2reader mainobjects supportobjects @@ -66,5 +105,6 @@ The following reference pages were put together to help you quickly find the inf factories decoders utilities + articles/* tutorials/* events/index diff --git a/sc2reader/factories/sc2factory.py b/sc2reader/factories/sc2factory.py index 61cee2a3..ebc2e6c7 100644 --- a/sc2reader/factories/sc2factory.py +++ b/sc2reader/factories/sc2factory.py @@ -47,9 +47,18 @@ class SC2Factory(object): See the :meth:`configure` method for more details on configuration options. - sc2reader comes with some post processing capabilities which, depending - on your needs, may be useful. You can register these plugins to the load - process with the :meth:`register_plugins` method. + Resources can be loaded in the singular context from the following inputs: + + * URLs - Uses the built-in package ``urllib`` + * File path - Uses the built-in method ``open`` + * File-like object - Must implement ``.read()`` + * DepotFiles - Describes remote Battle.net depot resources + + In the plural context the following inputs are acceptable: + + * An iterable of the above inputs + * Directory path - Uses :meth:`~sc2reader.utils.get_files` with the appropriate extension to fine files. + """ _resource_name_map = dict(replay=Replay, map=Map) From ea023523d8b7af68bdabafbfcfd3b2a91ed77429 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 5 Aug 2013 22:33:09 -0400 Subject: [PATCH 094/238] Plugins can now yield PluginExit events. --- .../articles/creatingagameengineplugin.rst | 84 +++++++++++++++++++ sc2reader/engine/__init__.py | 3 +- sc2reader/engine/engine.py | 64 ++++++++++++-- sc2reader/engine/plugins/apm.py | 1 + sc2reader/engine/plugins/context.py | 1 + sc2reader/engine/plugins/selection.py | 2 + test_replays/test_all.py | 4 + 7 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 docs/source/articles/creatingagameengineplugin.rst diff --git a/docs/source/articles/creatingagameengineplugin.rst b/docs/source/articles/creatingagameengineplugin.rst new file mode 100644 index 00000000..d014e7a4 --- /dev/null +++ b/docs/source/articles/creatingagameengineplugin.rst @@ -0,0 +1,84 @@ +Creating a GameEngine Plugin +================================ + +Handling Events +-------------------- + +Plugins can opt in to handle events with methods with the following naming convention:: + + def handleEventName(self, event, replay) + +In addition to handling specific event types, plugins can also handle events more generally by handling built-in parent classes from the list below: + +* handleEvent - called for every single event of all types +* handleMessageEvent - called for events in replay.message.events +* handleGameEvent - called for events in replay.game.events +* handleTrackerEvent - called for events in replay.tracker.events +* handlePlayerActionEvent - called for all game events indicating player actions +* handleAbilityEvent - called for all types of ability events +* handleHotkeyEvent - called for all player hotkey events + +For every event in a replay, the GameEngine will loop over all of its registered plugins looking for functions to handle that event. Matching handlers are called in order of plugin registration from most general to most specific. + +Given the following plugins:: + + class Plugin1(): + def handleAbilityEvent(self, event, replay): + pass + + class Plugin2(): + def handleEvent(self, event, replay): + pass + + def handleTargetAbilityEvent(self, event, replay): + pass + +An engine handling a ``TargetAbilityEvent`` would call handlers in the following order:: + + Plugin1.handleAbilityEvent(event, replay) + Plugin2.handleEvent(event, replay) + Plugin2.handleTargetAbilityEvent(event, replay) + +Setup and Cleanup +--------------------- + +Plugins may also handle special ``InitGame`` and ``EndGame`` events. These handlers for these events are called directly before and after the processing of the replay events: + +* handleInitGame - is called prior to processing a new replay to provide + an opportunity for the plugin to clear internal state and set up any + replay state necessary. + +* handleEndGame - is called after all events have been processed and + can be used to perform post processing on aggrated data or clean up + intermediate data caches. + +Message Passing +-------------------- + +Event handlers can choose to ``yield`` additional events which will be injected into the event stream directly after the event currently being processed. This feature allows for message passing between plugins. An ExpansionTracker plugin could notify all other plugins of a new ExpansionEvent that they could opt to process:: + + def handleUnitDoneEvent(self, event, replay): + if event.unit.name == 'Nexus': + yield ExpansionEvent(event.frame, event.unit) + ... + +Early Exits +-------------------- + +If a plugin wishes to stop processing a replay it can yield a PluginExit event:: + + def handleEvent(self, event, replay): + if len(replay.tracker_events) == 0: + yield PluginExit(self, code=0, details=dict(msg="tracker events required")) + ... + + def handleAbilityEvent(self, event, replay): + try: + possibly_throwing_error() + catch Error as e: + logger.error(e) + yield PluginExit(self, code=0, details=dict(msg="Unexpected exception")) + +The GameEngine will intercept this event and remove the plugin from the list of active plugins for this replay. The exit code and details will be available from the replay:: + + code, details = replay.plugins['MyPlugin'] diff --git a/sc2reader/engine/__init__.py b/sc2reader/engine/__init__.py index 77e20fe0..8f5967b3 100644 --- a/sc2reader/engine/__init__.py +++ b/sc2reader/engine/__init__.py @@ -2,7 +2,8 @@ from __future__ import absolute_import, print_function, unicode_literals, division import sys -from sc2reader.engine.engine import GameEngine +from sc2reader.engine.engine import GameEngine, PluginExit +from sc2reader.engine.utils import GameState from sc2reader.engine.plugins.apm import APMTracker from sc2reader.engine.plugins.selection import SelectionTracker from sc2reader.engine.plugins.context import ContextLoader diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 1ab11244..d1e148c9 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -13,6 +13,15 @@ class EndGameEvent(object): name = 'EndGame' +class PluginExit(object): + name = 'PluginExit' + + def __init__(self, plugin, code=0, details=None): + self.plugin = plugin + self.code = code + self.details = details or {} + + class GameEngine(object): """ GameEngine Specification -------------------------- @@ -80,8 +89,35 @@ def handleEventName(self, event, replay) intermediate data caches. Event handlers can choose to ``yield`` additional events which will be injected - into the event stream directly after the event currently being processed. This is - a great way to send messages to downstream plugins. + into the event stream directly after the event currently being processed. This + feature allows for message passing between plugins. An ExpansionTracker plugin + could notify all other plugins of a new ExpansionEvent that they could opt to + process:: + + def handleUnitDoneEvent(self, event, replay): + if event.unit.name == 'Nexus': + yield ExpansionEvent(event.frame, event.unit) + .... + + If a plugin wishes to stop processing a replay it can yield a PluginExit event:: + + def handleEvent(self, event, replay): + if len(replay.tracker_events) == 0: + yield PluginExit(self, code=0, details=dict(msg="tracker events required")) + ... + + def handleAbilityEvent(self, event, replay): + try: + possibly_throwing_error() + catch Error as e: + logger.error(e) + yield PluginExit(self, code=0, details=dict(msg="Unexpected exception")) + + The GameEngine will intercept this event and remove the plugin from the list of + active plugins for this replay. The exit code and details will be available from the + replay:: + + code, details = replay.plugins['MyPlugin'] """ def __init__(self, plugins=[]): self._plugins = list() @@ -102,6 +138,13 @@ def run(self, replay): # ranked from most generic to most specific handlers = dict() + # Create a local copy of the plugins list. As plugins exit we can + # remove them from this list and regenerate event handlers. + plugins = list(self._plugins) + + # Create a dict for storing plugin exit codes and details + replay.plugins = dict() + # Fill event event queue with the replay events, bookmarked by Init and End events. event_queue = collections.deque() event_queue.append(InitGameEvent()) @@ -113,9 +156,15 @@ def run(self, replay): while len(event_queue) > 0: event = event_queue.popleft() + if event.name == 'PluginExit': + # Remove the plugin and reset the handlers. + plugins.remove(event.plugin) + handlers.clear() + replay.plugins[event.plugin.name] = (event.code, event.details) + # If we haven't compiled a list of handlers for this event yet, do so! if event.name not in handlers: - event_handlers = self._get_event_handlers(event) + event_handlers = self._get_event_handlers(event, plugins) handlers[event.name] = event_handlers else: event_handlers = handlers[event.name] @@ -130,8 +179,13 @@ def run(self, replay): # need to reverse the list first to have them added in order. event_queue.extendleft(new_events) - def _get_event_handlers(self, event): - return sum([self._get_plugin_event_handlers(plugin, event) for plugin in self._plugins], []) + # For any plugins that didn't yield a PluginExit event, record a successful + # completion. + for plugin in plugins: + replay.plugins[plugin.name] = (0, dict()) + + def _get_event_handlers(self, event, plugins): + return sum([self._get_plugin_event_handlers(plugin, event) for plugin in plugins], []) def _get_plugin_event_handlers(self, plugin, event): handlers = list() diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py index 843ef367..1074cd47 100644 --- a/sc2reader/engine/plugins/apm.py +++ b/sc2reader/engine/plugins/apm.py @@ -15,6 +15,7 @@ class APMTracker(object): APM is 0 for games under 1 minute in length. """ + name = 'APMTracker' def handleInitGame(self, event, replay): for player in replay.players: diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index b59a707b..1a652170 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -8,6 +8,7 @@ @loggable class ContextLoader(object): + name='ContextLoader' def handleInitGame(self, event, replay): replay.units = set() diff --git a/sc2reader/engine/plugins/selection.py b/sc2reader/engine/plugins/selection.py index e8816d05..79e9d995 100644 --- a/sc2reader/engine/plugins/selection.py +++ b/sc2reader/engine/plugins/selection.py @@ -23,6 +23,8 @@ class SelectionTracker(object): # TODO: list a few error inducing sitations """ + name = 'SelectionTracker' + def handleInitGame(self, event, replay): for person in replay.entities: person.selection = dict() diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 42ac3d6e..c46697ae 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -297,6 +297,10 @@ def test_engine_plugins(self): ]) ) + code, details = replay.plugins['ContextLoader'] + self.assertEqual(code, 0) + self.assertEqual(details, dict()) + def test_factory_plugins(self): from sc2reader.factories.plugins.replay import APMTracker, SelectionTracker, toJSON From 94ec71b0386615242bf4d6152db2b894ea11418e Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 5 Aug 2013 23:20:42 -0400 Subject: [PATCH 095/238] More documentation changes. --- docs/source/articles/conceptsinsc2reader.rst | 8 ++++---- docs/source/index.rst | 14 +++++++++++--- sc2reader/engine/engine.py | 8 ++++---- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/docs/source/articles/conceptsinsc2reader.rst b/docs/source/articles/conceptsinsc2reader.rst index 62a05fc8..8813d646 100644 --- a/docs/source/articles/conceptsinsc2reader.rst +++ b/docs/source/articles/conceptsinsc2reader.rst @@ -9,10 +9,10 @@ Factories All resources are loaded through a factory. There are four kinds: -* SC2Factory - Basic factory. Loads resources. -* DictCachedSC2Factory - Caches remote resources in memory. When loading remote resources, the dict cache is checked first. -* FileCachedSC2Factory - Caches remote resources on the file system. When loading remote resources, the file system is checked first. -* DoubleCachedSC2Factory - Caches remote resource in memory and on the file system. +* :class:`~sc2reader.factories.SC2Factory` - Basic factory. Loads resources. +* :class:`~sc2reader.factories.DictCachedSC2Factory` - Caches remote resources in memory. When loading remote resources, the dict cache is checked first. +* :class:`~sc2reader.factories.FileCachedSC2Factory` - Caches remote resources on the file system. When loading remote resources, the file system is checked first. +* :class:`~sc2reader.factories.DoubleCachedSC2Factory` - Caches remote resource in memory and on the file system. A default factory is automatically configured and attached to the ``sc2reader`` module when the library is imported. Calling any factory method on the sc2reader module will use this default factory:: diff --git a/docs/source/index.rst b/docs/source/index.rst index a9b6c8e5..039b041c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -45,10 +45,10 @@ Scripts: * sc2json: Render basic replay information to json for use in other languages. * sc2replayer: Play back a replay one event at a time with detailed printouts. -I am actively looking for community members to assist in documenting the replay data and in creating plugins that enhance functionality. Contact me! +I am actively looking for community members to assist in documenting the replay data and in creating plugins that enhance functionality. `Contact me`_! .. _source: http://github.com/GraylinKim/sc2reader - +.. _Contact me: mailto://sc2reader@googlegroups.com Getting Started -------------------- @@ -59,7 +59,7 @@ I recommend the following steps when getting started: * Read this article on replays: :doc:`articles/whatsinareplay` (5 minutes). * Read this article on sc2reader: :doc:`articles/conceptsinsc2reader` (5 minutes). -After that, you can see sc2reader in action by working through a couple of the tutorials below. +Now that you've been oriented, you can see sc2reader in action by working through a couple of the tutorials below. .. _installation guide: https://github.com/GraylinKim/sc2reader#installation @@ -72,6 +72,14 @@ The best way to pick sc2reader up and get started is probably by example. With t * :doc:`tutorials/prettyprinter` (10-15 minutes) +Articles +---------------- + +* :doc:`articles/whatsinareplay` (5 minutes). +* :doc:`articles/conceptsinsc2reader` (5 minutes). +* :doc:`articles/creatingagameengineplugin` (10 minutes). + + Reference Pages ----------------------- diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index d1e148c9..80c4e2d7 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -51,11 +51,11 @@ def handleTargetAbilityEvent(self, event, replay): engine.reigster_plugin(Plugin(5)) engine.run(replay) - Calls functions in the following order for a ``TargetUnitEvent``:: + Calls functions in the following order for a ``TargetAbilityEvent``:: - Plugin1.handleAbilityEvent(replay, event) - Plugin2.handleEvent(replay, event) - Plugin2.handleTargetAbilityEvent(replay, event) + Plugin1.handleAbilityEvent(event, replay) + Plugin2.handleEvent(event, replay) + Plugin2.handleTargetAbilityEvent(event, replay) Plugin Specification From 3cc1cd08234ac3ff1baea051a0a226f35b80c29d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 6 Aug 2013 22:35:24 -0400 Subject: [PATCH 096/238] Move get_real_type to utils. --- sc2reader/resources.py | 11 +---------- sc2reader/utils.py | 9 +++++++++ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index da84d5a8..dab6fc16 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -21,15 +21,6 @@ from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES -def real_type(teams): - # Special case FFA games and sort outmatched games in ascending order - team_sizes = [len(team.players) for team in teams] - if len(team_sizes) > 2 and sum(team_sizes) == len(team_sizes): - return "FFA" - else: - return "v".join(str(size) for size in sorted(team_sizes)) - - class Resource(object): def __init__(self, file_object, filename=None, factory=None, **options): self.factory = factory @@ -442,7 +433,7 @@ def get_team(team_id): self.client = self.human self.person = self.entity - self.real_type = real_type(self.teams) + self.real_type = utils.get_real_type(self.teams) # Assign the default region to computer players for consistency # We know there will be a default region because there must be diff --git a/sc2reader/utils.py b/sc2reader/utils.py index d0e424a6..be1f1253 100644 --- a/sc2reader/utils.py +++ b/sc2reader/utils.py @@ -150,6 +150,15 @@ def __str__(self): return self.name +def get_real_type(teams): + # Special case FFA games and sort outmatched games in ascending order + team_sizes = [len(team.players) for team in teams] + if len(team_sizes) > 2 and sum(team_sizes) == len(team_sizes): + return "FFA" + else: + return "v".join(str(size) for size in sorted(team_sizes)) + + def extract_data_file(data_file, archive): def recovery_attempt(): From 1d497d8979be36c8d6b383f3a8ede9993733eeee Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 6 Aug 2013 22:35:55 -0400 Subject: [PATCH 097/238] Improve conflicting results message. --- sc2reader/resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index dab6fc16..3985b026 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -422,7 +422,7 @@ def get_team(team_id): if team.result == 'Win': self.winner = team else: - self.logger.warn("Conflicting results: {0}".format(results)) + self.logger.warn("Conflicting results for Team {0}: {1}".format(team.number, results)) team.result = 'Unknown' self.teams.sort(key=lambda t: t.number) From 0bc00ce2152d2eff1056d34d7736253b98952a7a Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Mon, 5 Aug 2013 00:14:34 -0400 Subject: [PATCH 098/238] GameHeart Plugin --- sc2reader/engine/plugins/__init__.py | 2 + sc2reader/engine/plugins/gameheart.py | 92 +++++++++++++++++++ test_replays/gameheart/gameheart.SC2Replay | Bin 0 -> 91692 bytes test_replays/gameheart/gh_sameteam.SC2Replay | Bin 0 -> 73842 bytes test_replays/test_all.py | 31 +++++++ 5 files changed, 125 insertions(+) create mode 100644 sc2reader/engine/plugins/gameheart.py create mode 100644 test_replays/gameheart/gameheart.SC2Replay create mode 100644 test_replays/gameheart/gh_sameteam.SC2Replay diff --git a/sc2reader/engine/plugins/__init__.py b/sc2reader/engine/plugins/__init__.py index 2f978deb..9afff5a5 100644 --- a/sc2reader/engine/plugins/__init__.py +++ b/sc2reader/engine/plugins/__init__.py @@ -6,3 +6,5 @@ from sc2reader.engine.plugins.context import ContextLoader from sc2reader.engine.plugins.supply import SupplyTracker from sc2reader.engine.plugins.creeptracker import CreepTracker +from sc2reader.engine.plugins.gameheart import GameHeartNormalizer +>>>>>>> GameHeart Plugin diff --git a/sc2reader/engine/plugins/gameheart.py b/sc2reader/engine/plugins/gameheart.py new file mode 100644 index 00000000..62015323 --- /dev/null +++ b/sc2reader/engine/plugins/gameheart.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, print_function, unicode_literals, division + +from sc2reader import objects, utils + + +def GameHeartNormalizer(replay): + """ + normalize a GameHeart replay to: + 1) reset frames to the game start + 2) remove observing players + 3) fix race selection + 4) fix team selection + If a replay is not a GameHeart replay, it should be left untouched + Hopefully, the changes here will also extend to other replays that use + in-game lobbies + + This makes a few assumptions + 1) 1v1 game + """ + + PRIMARY_BUILDINGS = set (['Hatchery', 'Nexus', 'CommandCenter']) + start_frame = -1 + actual_players = {} + + if not replay.tracker_events: + return replay # necessary using this strategy + + for event in replay.tracker_events: + if start_frame != -1 and event.frame > start_frame + 5: # fuzz it a little + break + if event.name == 'UnitBornEvent' and event.control_pid and \ + event.unit_type_name in PRIMARY_BUILDINGS: + if event.frame == 0: # it's a normal, legit replay + return replay + start_frame = event.frame + actual_players[event.control_pid] = event.unit.race + + # set game length starting with the actual game start + replay.frames -= start_frame + replay.game_length = utils.Length(seconds=replay.frames / 16) + + # this should cover events of all types + # not nuking entirely because there are initializations that may be relevant + for event in replay.events: + if event.frame < start_frame: + event.frame = 0 + event.second = 0 + else: + event.frame -= start_frame + event.second = event.frame >> 4 + + # replay.humans is okay because they're all still humans + # replay.person and replay.people is okay because the mapping is still true + + # add observers + # not reinitializing because players appear to have the properties of observers + # TODO in a better world, these players would get reinitialized + replay.observers += [player for player in replay.players if not player.pid in actual_players] + for observer in replay.observers: + observer.is_observer = True + observer.team_id = None + + # reset team + # reset teams + replay.team = {} + replay.teams = [] + + # reset players + replay.players = [player for player in replay.players if player.pid in actual_players] + for i, player in enumerate(replay.players): + race = actual_players[player.pid] + player.pick_race = race + player.play_race = race + + team = objects.Team(i + 1) + team.players.append(player) + team.result = player.result + player.team = team + replay.team[i + 1] = team + replay.teams.append(team) + + # set winner + if team.result == 'Win': + replay.winner = team + + # clear observers out of the players list + for pid in replay.player.keys(): + if not pid in actual_players: + del replay.player[pid] + + return replay diff --git a/test_replays/gameheart/gameheart.SC2Replay b/test_replays/gameheart/gameheart.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..bfdbb68ccaf64630a379543d7a4997baa1b244b7 GIT binary patch literal 91692 zcmeFXRd5|alQnq7EL}0nVz%&#nVFfHnJu!InVFfHnVHFASdcO=(|xitvPw=-2_FCs001BX0N#HmC|CeEy^5=mvxu{ixht`h6tT0JqpguA zJ~J~o6e0i)92^c35)J?j2ZV(SkB5MV+Y5n!goA{Jn=AwS=l;L=Uk3h{f&ULNAg8E= zH~;T>>5ahv5CABEt^pW8*9Z(i{BI2D|1ppM*!%~=`v2#AsrTQK|4;n*hyUE?e?t7f zJMjN)1`q@QCRMqrBuK&THbb9iH(nvGQ(qwsYaSGJeMj{oZ9aZb|4;w_v?YcQR3h6X z*H|p5OKd3!&)6GTA%8<=u<1c6(t`sW1NDpApX-&i3tioP5eS zIK<`kgY&L&tyIG*;nAFfo>*lws4C)zs5h)|nVEo(nXHn=%uI_`W%+WTCDSa)aTc$b z;7LU2q6MO0W{8D^(oC;(m2oy277#9g3{M1PC*Yt98h$7;dVqq6bc!7*GU zbE1%7fPnP`ZI^^}G72SNwK;;~4fxn?ASQ>fc>$U2hO$yM_` zj#$SK_;$7&b^Il?3~d??+^~U60&^eFE@jU5GGi{2$I4Q=bRQP3nkQ{c1`tU&{&t!B zvW!Hr#1hma_KM*h@b&2kxZeUi+6o8jS1jYkZRhW%NO9<><0Kl@1?3}hUtHo z$7V(viVGs{^4Oh!3L8X}K4+vg__tPr(pgDTUu55;k_e$SPgeXOM9l=AIf@V(`e;!)E7PsX+*G`@ za{8Dke5PN3oSpPSj7f7QA!fBy`0rQgu8t$6{f?-iNP+K(U}xlt{#KR zA|yD0oH_ycwPYDQ8eX`j7%{v^9z@7x{;fRgW?yZ65%T}gr|zStKLD`z^&j-@-uV6f z`A?Z&U%UT$e~G;3{(gNuf9l*^Tz}0&=py%Ux_U3)Akm=9DTsPeRg`904i7I0otv`! zEH)%FUG&P$ANCSiB+B;!j&G18v_OZ3W`Mk6aDph|-U^znkjj_PtwA$nlz3zciu1He z`A7f=AOK*A1R)3(4*)h$7^w0jk)c-G&0?S`f{O5xj z>i&rUsF@a zCq_qHkN_*#Un!wlQfkMZk(w1F*nW8OB}7HT?3@^M%X+sW7LSBp2Bd8yAxfOd_Z(u> zZ04(dw#*eQ6*NP(N{3axw-stnSHmi7j$p>y@E(NR;U?v}=;~g+Fu+!j7_6cpS%RvR zmRFw!9*TUt(PK*cdFx!-*Oo+a{)X!&=#9OYOc}8nRck2a&F92NW5DSk^Jl<;p+@Kh zbT(&KLT%!4t7b98r)Uk`fdjn={eIv>66DRi+Weg%4CZ?gXQ~SL$*3O) zKm5Qk%-IvYIcn!*KLpGm)%@Py!@SX&U1@%-q-&ovcUH-4c>*vEA?9K34O`#>4TAO? z5%P(;-scdDz@1xLo{V{s;Ag=yW3n#zotzM`7LY@sAYO=of1KstpEa&gaEea7C9drV zn>S6XRj}VB(HZvoP302PFq`sVd3qrcO3>|^Q>f!C`p59I9RG2OJ<0EI4I01k7Hk7uxpY0ro`ElUk)Ohz30+tDjw69MGEe_$MFRsIor9VQ6~gnH1Ft5mvJ z$gIk~y+R^`a}6KIPwrmRQb|()DN2ptOx4Mk`~X}&U{}Dq3~L{-t+^ zS5m)fm?$aq-?Xk3v~Klz07VT!Ul8D(kDdWB`1B1U1maQTYjz;!1^kGLsFAaaUn)Bc zfp?S`)TkN6tb>NoL}Ve3w>EHne;WLw-G(5%%;@9cx5l&DtYNkgx5v9aUSk<(3w7Zq z+P>4>Y`9rJs4z<}sWTEQ9;yiJ2Q-3S9ptP4d^gh|nEZ`}qZg<0#NcaBB0-i|;Zxuq ztRV&1#$I7;1#%%V;V)4D5OV7lK$!^m6{GUk>)30go45c4GEnpErU}3RIU6!!e^3_B?ACw z%kMwo^ZylltbH)WomZwBUA+f9$Edv8%F2A!Brnsye*^P`418Z4La3SEdY{_AaqUd6 z_dNFQylg$YKiJzZ?DSl0cA0fh>+w1RQg50`0x}&1k+_fiq@8amXyHZ;dwBBaev5( z05+yYZ^`kA0$$ltO3OvBOsa&)A7zd=Ql(|dkC}FrKSS8btZ)@* zlHfA)%F!vQ%JD_LLh*tmk{_ev6rb2LLuI2;1Njt0H!?vG;sNBN-bdL(Pm6f3Mxw~6XkXgLP;VbLg(m!ILXn>+}wOf#Awqv;;@P& zSpX7T3ur@*nHe-cQ3`j?1bR%ABVJJY6Y-|{SA-G|-iuFkr!=DI33B3%vSJ5ILS{tD3 z+=>?7qUC!ds_;xt&?284p4Azjg31EEh_D=5k{iNnaV4D^p1qeTj5^Gsh)O*^pgM9q z0IrHS4OWqi)}Sr`!ilWl~$#a@pV z2?rdOj6fwNC632F7=3%K`}>--&Y zk^+YeIlz~6SUH}RA^92=-THSamK8aeaMns_XjblUu1v;_9!%7}7Y%?IXSo6u5?%Ax zqGT~xz1GHfRHT&4L!wy5g^Uf4>_}}GbPV6^4|X9f$Y{)ntm?h~$$|pr0-O>}a5pvD zEeO44K*MG_DJF$5x}z9`H7pGe!LU7xUP*NTEkWV$4AyPYj=EVW^G>iaf}luJiDp$; zXk!S&S8Y`~jhebOn+|!M)T0JE^4i9>!sezHdd293)vf-NycBA3Ji|a(C=^J|kxmzm zbQc6xm-Nn#;?A@L&wu%uuU1dLgVSX_N23dU^bHUx^2zLz;d5KF(1 zUzVmVGNVN4WtaTM&(O#u1H#~>(z3#$;-od3Gk2VGo9od$)8joAa+Q%#aM$=PC6e!o zOv^!NR+vmE(>McKGAzw~3a(Av+E)gjW(|&)Pg%8)j~jLN&sp7?jJFwMqaPGcUa8gz z%F6<$8}f^ndrhk+-z*lj?LAP_1(Z??`^cu|zkX?`w^SsUZSa$EWpfy{^kUd#7!b870@Xm6w;OV5$!u?}5x3UWDcY$r5@KV|G zdDZ#RS&NQdB@TZGJgqn3R0!6l*8s+lIqfTdj4&M$iszHJF1TZHY422hU&XUT_pXEE z?=tC6)_vDcT2n>~6}|&2!T>^R4XYgn#A`wadCwEvBc8?Q3d>UR;shwkzOv0aXn-IY zM_n}?z?^uK6^uOL)HVrxJ^#Fjl?_M;RHN;`{%S2HKXWH4OC{h5LJ$fJZWpmlrWCf; zhAd7_0FuD#Qf7|_?BT!$?Fa&Kgs~^?IC%A80#xWGrjAX=dKL{&=rvn*H1pET^$AQH z_2FK&k{TM!t(*?KLF;uhVd&hE=`*V=ZdyDUJ>8#hon9f8p3{l0JKkq#XG zf8L+PmM_oU)?QNPT_4_Hr6-{mN*XK*I7i0kz!VW zGVK>o2`tbtvjWlWMn;gRDKJPOB=i@wnV^}&Esd=p@Ga3jt|;c~F{}nfPsshN*$kfi z7L08ay2V3;0_4s9UJb)S2*R|_?OWjj{jrhRQ%IrM@!T;M7j+Mej&k}?^9M>i{HkKH zH1KxbbU0w=aO%zf3l=*sa_Z)^)6)x5shj#zq!|B=fsmz zqL>*lB6GDRfM|uF%mP@Fa%4=7ZgDE5AZgbIYWA0`W@UfFg8L;*X?QT5S<7BUN_B)r85r?$ zu0%)Lrc>&o>jMm~7#ZT|k;CKl;%e#0KE8F07kL4o7?=+Moeml(B_D_g0xm&kN(fMW zpLoDS#vb^q)}hDVrK5$wVFNxi)Y=)II4>zJM&aSOFGm3fauHf9Vv6L31lR&0V!3Q3 z0<{;HB>%dJl6+6^Tu`%Y27p0Rm4E3g)rdlH36=ohg^{typh3pfKzad%&GE~RC_4v@ z1K(Khy1Sk}cdxwwZDviwnq8sFL&jp%%Ff(XOJ|YReGa`&D;=#t0F(ryO`cO?nO_-Q z?^Vyqs}4S?W4#{k-eE)go4}G*;rYg@D^N%{9On9W&%@`p+1uCNIG4%KrDE&^$oVCbr-bS*zr0W^O&Uj9g4NN=YAjgi45}hM1&y+~f?lDA%k?bgP*}`9}e9 zq)`ILR(RAFeuQa3Sli~&gp_uL=ZN;i3GwePtQYFUI!IVR?Y4OT;OP33wj6Y3qZ*z* z%A)`0ZpW3Nx}lZ^JhdfpvM8r+TIQ}q_S{)}Rg3$?AV-SJ8J~%B+U|j0&Y+}M9_WuO zM;q(>yjqTpwOoE>$dPo+fXAi#Zacgz$$5yv%Ig$N_P+Cp9>-8VMvSxTZroEn@ zchsj6we4gr&}ofta^?TNpxpB}^Wg466@8^*DmeSFlfkes6JGI!K>Sre&lZ?Xy>W@@ zQgT)PwMm$Acuv$$eou0KTTZ~xacZV4=;X|6sdq0 ztb{J&38eESWV9j`d1W2Jch8axGcy%lKcfHbev=&%PAI=|i2H=$^tt)rF*NHUlR3B^ zdy1G!m~W6|mkqc4sF%c9x$?-vQuz;0FZMQ>s?buob+oS+iybpDAB~|{4;p$}ar1`} zeYAHQ%Lg}g_@OP#nj<%6|AHY`69wCYB^)D_SxQr5l17PZBd1zN;kWq(sj2UT=Dzwm zCMI({y^>54^gR7c+Vdhbss~&V-L{IuDJ9VUb-nL*04X{JY0iQOi3od>`>!5h&b}Kp%3FZvvl@?>+rG?0mwS&!`G^V|MJg)Dkb)wX|Gb)-U_rdIbZb zk|nk=SGdV8y_B=q&T3c)R|g&WiiXNlv;ILol8I=YRdUloA6||iV3Z8`I#A(HPo_dog6+p z2*ta<#AXU3&D6>K?;pOjvWX*uY}iq(F`HmbXd8%G`U?Ub1smttP6wV=A!^`4ilGAO z4|+NQd$vZo4uR7IO_<8K4Yc!y!^|Erp~Jix@oLd;d-Wq5y!EOYE+{JS^;-ux?zB}# zDY!_YzMk6iDUfL2g)3)qv_jHhp@QL=3p+7IW#JLq<3)ubflvhGRkV!rhE8{iU5Vv2zDG-kixi1W?qx)yrKSAh}e4t(?48TmPQovHH@^>Rft>KJ#8@6vd-d~3U5JPoahKG@+VUeDy8q>v8mds&LlV7mWpsS)#OYIOKWu0_Gg7qh^R-}Q~3@l*2 zC;&udNbyf91g^6tb8(y299cO5ohZ?@Q-o1zT5w0Lv3T=G-@fwM#PyV+!wwpebl5sfD;(<$|QaPXSQgNtn5;1txBB|KJhlEU}#NzmUA!68(g z*oYubJz-6hY{PpFn$v&PZBih+#B)(-$ReX?=6ydS3a3)>HOrJd>~_|Efa7(MteB)5 zr4miu1`Uput07Y2!2lH_J(Dj+i0oa+GWfklQRHxmewczpy;6gA zZQl7}&4-$)Q3+i(;rM!(=9KejX!K`Dz{WtiWXa@#;T09%%#;#D>;e`7%Gz2^VF8QoNw_O z|1OG594(UT371U?ed01?)b(@j92qNj5c!2QcwSgdpQv3|&qAipal{Ig#V??;_eu0K z^GE+YfLIjqk0NTY4EH;{wA6I1j6-r?@vDO)Lw&ukU(+9ZaxXva*}k7$M~}^4Ox}Ix zn+fmU9O<8b9a=Yi$6F_yI)4-fj0{NIy9yN2Thns#Jgx^iX&9-8EBK!rt8r2vxjtL< z$@)9Tv~JqnC9$%y(oZif?$LSZ3JVT@GCp7RH8no;-TeLL@ztcyHW;wjn7?7i>)zY- ze{lZ#x~+c+PV+9HvG-Be^M||2N&ewSx9)npD}Rp5{7;r#TmH{loJbDAz?bkZcK?uM z_$p^L|AdjDm`ox@#N`=l>18+gY@64F2$mX$LP^ZvMAIci=Z{- zfY+qG50cZ@ObH($b#zAuoY$6=Jxq1;;});RyLRmirV`Z#qgRc>WNkb`KZ#S^t0*?_ zBAPH-@JMztI>xqn{>}XNGN19rAX;%!Z0mkG5GlqUJ4oo+_DjaojsEK5y3Lqak`rFI z*r1reyqH?!`U$*$ktAM)Wu)=&^1jgQh;P8#MJJ169BF&?@(TjFoT7J7>G=5Df(0!p zH@s1r^Qv8omaW(GbyV5FZ)74V{<|JzQtW&FOmxJxyNVkZT(kQmz7$Pl&yQCXsD@fV zq3+pTcn^NH@Lx#AUleV>dxsyopQDl=zQSxo8|B{)aR0rF*3IJS-ig^nNzp=J(EF(n z>Y3>gz|q@VY$qmWMg89Hf~%#n6lI(dTfnYk2XyuGnHQy-&w;I>g2^N3Qo10{romGo zt9Y%a0Mu=iTTI2jfO4y-k5O)@wT*IGCtRc3H@ZMCiyT-;QjuPzi3t^sCj#Zahx+$8 zm)5;*QaFW@>U*yPl$c(1=T+SrXCBUU>eY9>hyi`?V?TZO!tm|37HK6-m(Uf63%CF! z7kciyw6{{@<$hx=UW5>cRW~DED(hG-HWv z34)+T_tO_07sr2vZRA0_*u}T>P{1(lmi*S{-oEWTpbTdY!W)pBKG9G{B@fTM<4H$% zy;>HN7{7SodS<%?NE+adQO6dllNk8nXoLRxL&XYf(RBelft}OyA`w+3Jz`}AFBnOL z&o7c5Q}2g&%_ydt%s*D`4ln;Lm;nH2QrsKEi9VfO8$?*7B>Q-zB+E%Zwo>g^%#uyM z(fqpAmp?}TgR}94KQ(pg=Gtj7diJ#wmgl-0w{{wT1@GHvAawlA-Ni$^c=8DyR6@A@ zl9}yQJU!jj)mQV$Xn4cZ%VqbUgl}W&KZ#K3s?NV-4gW+&t2c5RzayLkET)=Y2J~0W zYwkA$u3-rFV(jUpfS48&UsQ6{!c;sAlBJ}-a z3!W?CAn2u3IFtr|o11)j2sr0TI8iC+23kQ?L4cV+vtWNaizvgj(q`4&R-V<`?ddPI zUJ^nNX}83BFtNO*ChoYVTYXJ*7TGTJw2^DneY#sztyu&=gn*b)&$Nd^#Y9}F7w9D+ znXjTC*A%AlXy$*bk1vld)kXgyj?OLNC=XONRdup>dj?^SEZMVTbRl4&|jmgx{(K&G}amOFQdvhi~I5?meR1= zbIO+02mhR@Cm;JRQSg@giHb(xrhqiKt^#`<^riZ)95uoU1}Y>TuGP^YfHDJ=9?wjy z+AEi{gT25!lA3jW)uiy&<$Wq=*njZ(7a0l5z3;4RVE44sXA(tt?KpJoaIvt-yK;PC zZxkjbk(88l^rg4?9NeFK{WDtrCh1DU*Fc@NvRlg=^#ypn-Li~s15xB+bKAjZM$i&0 zo+Q2>u7-ao1C>%Nk}RPIJhX$5jAEBX$Atk0!dA-R|8yVGqgziAXdYw68JTrF>OQp423~sk)$YPo0Ghwd5t;J?JrG?^SWGDpDMpGUk zPlE`{2!ubo^n6cQd2DzM_yuU|X!N#bv))|rQV7hhTJd$ev%Lk{FQ-gk5ruh5LZu!F9BJj#FqAlxoM{8rD3`KqEwq5U77(c8gXw&mXp~SwIiL}<3}JPSQQO&a-4juyr}8A zd(nwGi7A;Ta=OGvWa?{ZU;J<=`W}(FpxMNZ*H0?-Je%1$GV3* zFx2^f(iFYa*Elfx24u)Jd``WKYcT8m9@pG9+M=BO5vJ2Pq?#XL?fGX@bZ)_~JA2uc zD}9$GBRzRI9UfdKR@M7KR-4wL`90N^<_lbF!r<&S@hSLw9Yz5sz{*hq$e2?xDSoiV z`seuHt|(mG-tYHyK8HD?-TdxUN}lyKwSS}aWb*DddCeCGF{)d_nSz{fkRYVQK!+;4 zlqz<0j?U5n2urrSK?3P`)Lv&$VJVgvg^6GV*AuAV5+D)~h6zGzxKqu8e1+GdYMIi8 zuwJK=oOgHT;5{i$$Xa3%^>-o>j)SktA4^N8-H_(Cd)iG-)E-los``UFH$*Qac zSxTmdgG$kWk(na5IHXcUDyDg8rhIKNFbrcmpI1mUN_5PwuL1OT@=yqV)>s;HUvr_j zr9gk{M<#WLP-aT9^26WQ)~V(VwQ{g}*W{B%i;h<{)K|~R2``&h&zpZ*fB{vrp3+vp z2_Nt9&aV|bq)O!OwJ3LKkOBuY53SivHX&=$butM!Sq;|DqiZ}q{k4sY+IM`8wPr9B zY_BJh_u)-(>eFrmhguqXx0)$!a2giy!;3Flr$vEXOiqK(KPd3=KP`sKQ-2E|%qN

7@A>ftkCwjz1?^X+v2mJd&_&2g~;An`uMUI2%2BBMr>v{5%iNO{FJh<`SQQY#6#R3| z%^?Ju{>A<0c)SNzssONogB%4AP%wLJhJpeB5DTEqPyi31f&$~%(f$Uuww#Egg-obC z!6!w{eH)KfOw(|pkeXZ_4_>YQ@bR5kkzr6QIGz}Leio_k`p72Rs`3zCl_cy`#dFd) z_)UJoNFx@C2zNcvHEk>3Te(pmz=_4wAW7(lH^Kv)sP?D9e7o#{9R^Zv$lf9HOsN;} z1@W7D%S1+kUwx0POTxxi{U~BAk#@`d$fG#Q=an?bR0aJQVvs#|N!3Qh&el^vNl;0( zSd;@8taLJC!x3+xFNz_KuYPLJ742xWF|^o{tC6-;;d@lwOit@Li-NyCgcMA{iD z7eiC^&AZPMF}{87m8g+(BrY%!`PcAj{Rj$PTPT1Zj-I6n9A$)L1V23A0po;a#HRd) z?<~oulJHM6RE>c-NW7zzv8rzvqQ$h9|68xn(|;rdpt1eaD*t!cB@ggZ0RU1$Ki4D9 zGi>Xg)Sh&PFE`iO&k0{tM_<(WU86mCZ1?(c=iUj2T=!MAMtA1AQ)Y)Wxz()k+<*6i z`4&_)Au6khqp~Pw2^f{_dJ5Y)K8TS8Qs zC=n81Nf}apF2ryIxeE_UY(=aKK|L%3{esAq$Fd z>Znn9Ws%d6>_uhuCCDp>`Z~k8m-Kml!V=G1wrp9kvQ(Cd9Arv;y*ydPQbgk+PUfCR z-8

ydZTtXN_r3N@OS;Hx9ia7&eKr0Ed3&YB9kw%jhk0Ef3of&`XaEk&IFiV6@bP zHcue{8hTo7Aaet$Xc6T_F9th_%g?&k9*8dD9M5);&Htpfd zJ&_Ee8_6lBJt=kga0C%45^2#n^5d5#6YxKPWtB>Sz(d7g%JH7i;9#tn`k(!|{2FH} zyd316;?UKY?hbPU1<9oe+LhqGGZOONt{FMwf4K zPvY_$P^(DCCl;jgGR`{`j}jUc&0Od}bXY{}&5q%B@?`rEe0(vK#dK04e}5VLtkh}S zyun1E&p**XJ3&0I+$C9*A;0&9Li)qw6SW1_usjAVgXwl=Tx9Ju&$bedHr|z59ZrmT zN<`iWN=Vk#o%f&O6MfqoL2KM1RMxS=WR5u8XZCM4rsI)cTRzUD=^@eckGIjF(1uMs zcI!*ByxP-QLE-s>z2wA>F@wC3`xuL5LaBogGH1k$CGI;ziv|$hd38{Bg^W5UF7Mp! zn7(g(9EL>$6Tkc3Kshdki7+=$IR{lB-;h91hq2OjQybS%Gcm3h6r&~~wrf&ho%@DK zQ!uAJ#wOTy3Tc`ZQ;SAw2_-0is6(ss6%4OnM07<=5TMTwM*M`uhuB1BSj0v^31X%)=Efc1Ms*PXU{Jt^;69! z&viOaMY|c;>Js8`E&J0bA_roBqRJMS0NL$gO^6VfjB;Oo$Yxqwg(VdO~nCD|*_v!FR;n8HIPSTrxEVu&61 zc)LnmzanQyuGhtsTw3G7DExNCEsy zFk`_7fsqKW%AlrYYx&TY$U!+lqdf z@~P$EH&0W86)a)ILNfU0lOib>RFZMc!$fZi(P>I30%11E3EO*MF@C|b$s*I7<5TbO zJSkI<>pc8Ei=+l{%NinCl6#FvFUf%TFK4XH_tjKa_*<(CDXeKl%@btUw)6^6y|z#X z=t8gbEMjMT66Bb{eet}=HJp((>`!@=4BQvL>6$)6qeoJH+Mo~#Y#fQku8S-XrMYWCIFEv6clK=ZzhTt+6>9KebU&Rr?H(P?cPS40wSo)5R%9z zti)9-gZh4Ohh^;C@joT>2aCWZa?yoJt6(8O#4l_=tn%bSKG8;*zDUZ zV7kWm42bcYeyi)I7-L#O9+;-r4Zn`C;Z8^|9=}KZP2qj+_OY(8>{;mJ*~0cOr=_9N zn2CB3;rH*E6;KrIKlti;uof^Muu?GUDOfSHs&E!n9H4x9ZY@(Q*V+i&P}0*KP{X13 zGfgQNWKd#5d+k}Imd)v|Y!;IzJA56{ETO5pkyvG$&-@Dx`W4aTOGxwF2@3Lp}h^Kn@dDo zih{)`=*P{J%*NxS$xS~8U*WUGGsN4-AkGC=5EVe#ek_qAsc(7xlm(;sDUwshL)7rAzU@AuN<02WCj4Nj!Y^FW!@1r zEet;@wGerHVym9?bj+?QQI^&_r%btvB%)aT!!_eDrh7u+sar^#Q6O4hpQWGg(y@z zG!~4s?IyEBWoobSwXEZTajCRWc zG>0a2uPdvdAKz!r$YWc36`8Dd(u>`2DCl}&fQY3XeM5u4x@u_O8g|r5=@C?Qiv2d< zWg&2dArRDz(7rf>%z!U}vb>6;p9`@dG6PhO1z=hK$jaD~H8qw! zuIuB>BnA$UMuu8&xLJ3r=^9gXx@<aRHMowgpa-#ONB#xCS{dGFS$?y3!V(=Xk@SSGhLcY0r zI8`|{SAYS+*jD9YYLJ2`V-Z#K@?*t=p`l6vm_Ka={}}YL=dG!_y(TYK^K63iNC~l` zl7r=_j}M2M#MG%ee*35D^EXm6e3J=gBr3J9U$8hv^Z<29XtBiX|~)j^#yy)EY?@)r#3#L-KHsT?GC=0s(7Wl zHN0#2cKd~OSuFC}O5LITBEz_&)>2_2)tNUSB81uoBjbhY)3;}~obzYx&Z%Vs;amFA zgdj}IcVSp0ZWsr#AB|yQk%Hp=B)sa4YUuMDM&!hF(^>b%fg2gd9AAC8i#;8zS|>dE zDW8WL%3)-o{sLnYE?cK zc}qHP4z_TO4m6?JmKv(?(3=Zf*}MKq5i^1>x!~69=eA3TY>#saRn_`o%-6X@dXXZa zMWC)Ib>ba>_Y}vo!01!p26FDOok{yzBUsH1XUm5=ZKO`TzQ(=s+0Gd~C>=r=7ayFQ zqxB-xcqW2(Zq!~i4J#I0x}k#uySZtid)e`Xnjq==?axL`zAZ+|EW3}&bt4t%zo3sM;%Hl$uf%)9L%WSBjS&rd`VYeS3w92ID76;R9LYQfi8 zM$A(3VCoQlXrfULfT<9$kjTp$YIe~`8_S z3Y8|UCu}bEw*-nOis`QOgj8zuvGkE!>u(1$=<;p@OK*816uq(zs(RTbH6A^mKYYLc zqe(YWtekV%g2_lZGv88icgbr9h>WlR7OrkeT70scjZ5a(P!>13wv0~p_9a7uiVdW7 zWt!AwKD5(RvIbDt{i=KER(hHBwVvr3BE@9$qOQ)jewaGuf_*|oXp-4~B}mFEUT_hr z3b<^*3S57*8EtQEIH0m}N&rRG$nfB8zdZnVG}BE9{m$=YRRr;0F4CHLul-Uw(YTsJHl0F^H|_P zd7lf0QLa|%s@%_PD%()+rfjZ$77gPu2B!t~X$w%#x(WftEFpdfXXy@@y+)_%jj!K4 z`t6xt-ls2|=SD4wLeX=jStSsIl2g29%88m?!1*h-B_Tg;FeaQILkkroynisZ?CezT zUZbh?nau~0#n8we%u(y`rw2W0md2jOE+hiSGaaVQ=sgSI7g4=YOneRH7uwvJsh=08 z78IuzhVHlt++B(>o*%m2zm}>^RsyPqHr?Ybmi@CX<-dN)Ol&%Id98D>5F1vGA(bjG zf7;kWBFffl!{=AT!cUNeGbW!$d}ZM}+N1@>tWK1hcT=Om#1JcMi6!EG5JbNsC{Csw zO$)HQr&9MjnjLD$ALvyx;jzr?%p$h zNeNPdlrGL~!R;(WLZOsCG9pKj&Kp5I@RP?t_xnHiLKWRH?@=6ISNGQ<)|MgREyLTr z=h@nz)C!e+B23Ica*?^0v180cR{KEFKt^A(O=qtB;cr_7>?e2tNV7|&vcHdjE@G-6Mm*egDkG@Sl9-_V!%j8-tPxb-aE;DjMt=yr^ePb z{EEw7ddibUQ(5#4!`+89?HyUcG(*;{dG7h8!rRgFj;@x)^=n#F#SY0;ESc2E$7|@R z^Mn>=aGJgSOP;rB-S^H9n(p_Q1~b+}liks35(21i=_FDg*w<{S%4|}1uIY1WY*~3B z?^*xcxTE-PRv)0De4*z(C~;Ayav7uh(zS2g*(PYP5+Y;X8<$O@hkjwO%f%HNFR|PfnQpv=$s!V_f=Zjal~l^OuR^9FSiSlIyKq$UQ%LpRG5z!n z_~9)xKY2Y!RqnUo)o6EW`^NKkta>o!C!VLI zD2PXAS=@NF#PQ^rQvKGhA+wQrwja5~R3=|NzBwW#+~jFM#0Gg}YIw$Ada(yTc@?FV{o#Hn^5A?lxy71VEYv!pSKb4OGgw2H`%%C^@Y zu7l12IJO>?*@`Q&-|N*2twN>d&!hug!xBR#^SIv;d&K>a547z64M5V4s-sCmDYF|A(3>!H9Dp6YaK;{Go zNAP1eMa3H&K`-ioetk&iv2A_ziWU#y=4W;s-R7$YeHK>aN@l7IO^d#J`IH$dP(UV7 z>>af^0=ogO)$wEM3XN3^;cpRK(~>{_Y0}`K72pZR)Df z6C$F={!j)V(mzWcN72uH$n%jTh%A@}36DlPezU*xcR*bKXw`2mwtcf37wuHbuU@lC zmXF6wu%n5ol17b36km5a=PwQjelB8y`POb@k=tgg=0smr7j5>lIQo+Jc(*wssK>ee zx0?fEJh!Vq1es^ExaI44+>Pn$7vl?hQ=9k^|B>0^QPf#nhAGk(E$J?REkr1A&?fc?enQ72X?VeFjYEg(Fdk_Ad&U-a6-ZV_wPtnERvd0l<&ro7Y7jiETn zCg*uuMjq*j_XRSvfGsrZShSi_p;~|Ba4AA~?uFNvx4{?h^P712Ej^R3hcykf+SxY( zCmGuKRES`w0Maydto&ZWHRZ)5ju*xE1baj7T8U%57li6=AF zW#6~2D*vR%+;0FSC!%b@vc+7cBF&ds{-g``lX#4;K!#YU3IHMU4djsGhlXRH3!*>y z%g-n?C5N4-2_>Ay0H-3uZ!l%g;#ys<*6j5CdR@`}$hVFhBdJYGh5B#-*)26lsn zzwhXNZn>c;fs-lHrm28kx~{F5pK%hDXMQrrG$nxqtI8lSLsd8xr7G$k1j!z4oHXdp zP~;__hdZEtye^ImzBg10%vF~pro8}9akR^P*{-CU<&mSZ>D$V$@2z7QVUaOU8Kdx} z0W&(I)Al6vWrwl&0dMu>x4wgj)Z$wbG^o}Mc4=@Gym0~9WM-d~%Qzx!2d5TSe8qNF zlG&|?wd)fzA#iBV;1!q^emEC9<{;P^%m2c@Nnm?xdGt%T;Kjzv53%vaXFd`Qr#U@%Kfg&kd-q zZ5%m1zKbP=PpN8O@yHzL5yG+U*OgW%D_iK@zq)84Cc>wWM+}(gjLCRlo!)nKk^5xR z+g+aWYZiB2<-UufTJwrsF7oQLT)=wEFC4qSHW6sr>MeSV8M zFa4Dxt=zQHcl)4X&z2_qIInmuK={S3k%Oc!dsFx9QC~n~lR2DQdcNvg^)Wg6{_fQE zYMiR`jmDN;Z7k;6>5AezWHZyZe4PcYp*k3$Q~@=%r<0#j^rwxd3&;!}${!V|PbtXb zcOjvds3lt;ve_!Fu6}j!Ne4O2q|NQRaXVkW>qVkxeXeBk7P zI)4NG8Y^D0qO}WkkF+B5y+OB<(9+i<$sxtf)|p1ZDS44SFoup$TE6M^kgD+!%K*9z zcA~2oYc^Xbc7!6taF?Vp`SmZ9e@|_`i0(h0OSH8w^H809wYDj9HB84dA!bLC5+%@c z*l9!TDT1WwoL+&b(yNHve3$ zb!Ovs=UP+($9EqPJ{;K6ywf{RJKFL%ajr>XMm;}gbyF<)r3;mq5*c12gCn_S`{+-ih&F9Y0pf#5fF z?$j7`)f>W}1OhRYScUH2SS_sGVJZ0srJjBd0<218y;bP~%^qcfeAd#Jr^K}oF>?!te!{eDF48qN0>1z^Qb-aHP? zcPqyQpMU1va$Xy8RJbbVc$K88`i0AKa>MjJZrK11gZ@+|Rzi#6gjdO5x$uSO{VS@k zIbqGMihYB5n-h#ADoQ>$7-K^sSo*?eu*8>b%?gp_c#vi-&X;+eONaPN`YT5E#rouS zZpfY2g$99|fndyubJtt=V}yrS-R?MXKC$NqoD*@|0r>BmPNxJuLHQ42(bYUd^kzsq z57Xq6g$cODQsm0<;inS^-h~l#nVL4VaxP12p8X7?I2}B0b;^w=Mpt`M<9kTUUo_vk zvZ0~B4sBxI<4WvrRi=4`JPn;UIjhKMPo?D=+Bp$5YOxXuU0T*f0LA^6jh`hj#X)xp$Hc!=gHA ze%a)L6F~fh@P*$~(EZJRlx*a;ghcnE^W#sK>WLrZ+trQT>G7*Bww30|%&^f}2(ML~AjdIgFUezN2 z5jV^0g#wyLvy?H-PYd=qof2itp%arlMqoQf0ih=CPGLi}rG*^3qx`i5eC3ye4l5-i z=w+hMT89g|5!y}?ErHYPAqlem$58(#I3zyfRDE0sgA4vDJM~uh`BrgXG7B491(zwe zFee#)`S6Av!|XVF;;IlHN%4r;#iIp#-QtkkdC|pvLh|letN>isLWX^~vEeb%&sUV7 zQ)`20;RZk#l?sn)U8v=PGI>t#&{*Z-AW^+7YnMRjs=@9r-o{~R5dZv#>!67=EVm_g-A!o7KInxQZj+_KK zAr=Y8x(ngQ?4jsz3u>CXAtr}kx!dp^N^5I-e9hMQ7QC^qT8ArBuI8PYc(d zdUIPfO8hm{0Uzvg0jO^nX*1rx^7D82aouts#Bc5@7K+v4bRZ$Mg8UJpo;9wTy^8#t zBtmLPx@yWV|bVbvtKW@XO6`k^ChDp+G`sU`F-~a@szU zwUORZto4D2cw@dh9!10XuuZkcuci#k`bo-xN{Y_=-!>r$Oag7JL%N5?cv^W^z6;ym zJEtZ|(sM<=McJA7Y6pcY4b5CH<+4gvgPBL?V%Lg+aNc1?1B2kf00w~4jM6hJv z%OjUh^EKX)ouXHA!`~m$87A)ys-D7g@er}Q4-UFIuzg5m4;OW8B!2h z^LCG|gBq~8N4Eqif*Zp37`3-tUXbyjCe$iT4TLHnRGH z_Rz7XlPziZjO6mimWqib5m6g%>g7=PXUFm?Ik69+PKZj)zbJkQOvs74Ro4GLm2fwN z5jA)A=V9$OQ2F7Tv-$(T$c$_KCc?u30-zzeaKA4>125t5msq@c9X2__O+&*to@Nh} zGl%T6*3IWn&=T%mzfYHKJoc3hOE858N)IGI{GyAQ@)VSNO;3EZbhrXCIiMF*ne({7 zeyNZn!<3PX1*ta9o*K-)r*C^Fm&o8Wy+-vORWds`6YQQ>&)8l zIDXCZ2=~o)DcOXFJ^!9_-6&iZer(1psLU9LGwP*FV$Y`j>daKFOSStUVku0B_&W+$ z%ic)Xv!l`8a&d5|5ZjbV{sPY;<7HP%p-I4=gTfPyt}O{n z@OwNV(D#HMJyx7{_26P4I#7QRBbBeic_t0LHA|hKOMHp3U$DjVNwkWL_oT^cXO?d18i(n_G;WG7 zV`0U${4{-jQ~NettoeBFme@#CfX)fV$@}zuILqXhG9nm(z*QF{uJ}+tkK|oB;{J6> zh8_}yS&Hm>4EdRvYA!OVKMRG_664;VwYx+*qitW5e021U4;>jig3FiIonKRI3w28S zsw3ID-f~u?$ZwY;QXLFc6cWnkOXLVUZdv|(2D@)+kYYaGo7o1(W7CS;XLSTl7T%Q@ zId}>MBstJ)&BJ|2=Lm%v#$ZES+%;4)r8L3?j6kv5D8e(sHvVS)yb^L{61$J@V<{G5;X8GnuwJlgA7Gh02>RKS_57ZjI zy(g@>c{}$4G1_j+Be_bpbyI0P>GlPg_585D;J2}T%g_3r z&W=wqCwFBY(sa3f7lP~Ko3$)2Df+RO)M#XA!K9>PAeX0CwvaI*I!Ut>mm7$l zswBl6@%(W1B_=&l^!0yiU7Ne#?2BgpMU!+mAH!5Yqxf1w^?T8!KWOA+e+nB}l>Nze ztZk#ddGZ0V9vi*4=snrbWgz9}Ia}7|8}`cf?ffDViu-Z&*(>Ak(aet80PoamQj*Hd z&+lZt+X`S1tw7wc)A-c~f`V=IX-TFl-`K{-#-+|^Dh0;3U)ghQr3Sbf7SCbD{(iS^ zq|-}v4w?94kN5u5te@>|G+A(`)vFP}JkM3|{mZeUL9?%5MrWVYh@`$s6x(C=pK>hq2*`H|sYD)rMbPyX$5aBn z&*ZhOz0zCR)4v&r&?nZ65if~az^)+)MlWEE{^>-m9UXL#nb)W6BYG{#fvjS9k6%w@ zIM_t*7aT_v=h9=KO-#pg_pA@*3VG^eto##+sJ)Qba8){IZv4}_PNyA?+^(2 z6+z%dS2UehKg!NK-&>I$+UU#gXjhO2IHX*YujKG)%M?FYyCG@I+TO??T`%NEoO^W8FDx z3RzMT=|^_$Z-r_$4FC~Kc0WGR8YPEeSzqyyIn7Aw-DW>rOE869y-N^7Gd4EXYlYpU za||FMt~p@DkH%NFw@{3jU~XT%#dps;v{{@Q7RH+tiAh}mvwrEc`ZRFAmyKAfu_$il z*|ACk(@~K8jHNw28Dyy|Wh0IG?!ykFpA<-}Yv}$203g;HSuKAyKwL#J&-Ym|+OGS> z|G3C?>ND0kTl4&cX#U+NFRvPL#{|sM`p)Ob-AWi+t|~=V&evN7K>7ve4pME15T2m; zFy;bRP=Jg`Dy}X8#RdcBKxLK33fPM5alktWLI^{MB0@$SnzABbq8Mt5kYx%PnKus| zm6;~WmJJ=b=O|=1MF<218?h^7Bv>W_U?2l=sNxFYaX?N(O9fg*$jAaWgeXrDGDlaK zWK^ce=vB68m9m|Z<-cfH`J5NW&@$;G=cDG8puVntuWT)(yhvA8R$iG*Rxw?fa{ulx zGgWy(U4@$yAQcD(ie;N3O+xO#2=S`P$|?(rXheUBlW0Vib5>0KtO|=4A#l(+PFO{?B=3llN$+?St77OqVhJa}bUjOmqPzlN z`K`e6FB@GP3bDjc`O960cn3lNL@>pF3GIK4zt)^=C6=XBG8E^bRKz-4PDHA5PuX-l zD~oIia+8)k0n;WJQ#Nq4u z9{6?zJ4Yu>3qZ(eEQbs;5Is^oq!w0~B%4n-{Etw!-~;G#Og-W-zk1G>x~`R3PTL6L zza`avF-zcv*M>1C6RM*bN8*XBCE+Z}8rM1DDnhxWDinE+OQgm@T)nK3L4iNOpd-Co z?llgFTyBs13g!rYfo*mbD4s8a=eoxIV6qozgKA9rpvK9|1uy|5fsV(Do>=Qu@rRb;^d+*2*+mm+3p<@IB7%%%yg*xrSrD)Wvw z=rg(7fNVuBcqD2L9EH}JIsvZZP&mvnlq4f=g1{tV7u@7$S2?(sA>TLn3oI&#i)~LW zSdB)Em0=?mEvh+lBB+;yo-G+C6%SzJgd#T&LXK0D^is=NT?}&|GJMG5=7d8lxlsuA zd7b?1OF{Jp0-YZujwF@ao7M^mnik*5B~+a2S}k`-~zQobh%YI62q z7+7+NU?7w{3Pe81sm}#h2%6zjM(zo2JWCHiWsj8P9Q!fAwO${ zv&e*Hnf>Y2zVe3d#El}7w0`-_;sQ5J7YaXTzvH9Jvz@Qv@L*p1y&DTvCymyR&8)a@ zUFj9HT~3?)$%V(d%XxZ&q8=7{fdwOEI$hTb&ra4&?2YNr5bE?1f2s+1 zZk6zc$M!x!S;QBmb$}u42%ew#HMfk<%O{${x$dCr$N-Sd1=sNOhuJarnsyB})YCJR zm5h>P5WgccP>xk$`%(6*>pAIn*!vGy*z4AF(G zhZ)tflnl`7B?Hk)$9bH=>gg-jFW14Q8rwk?-I?m1>8x^9KneEiuPKWe_NScZyuWx6 zzArO5!tRdmIMpxxXl`=q!kVP_ZD+>JDZvQ$s*GH-FBo&VS%ukHe0V`f)Jvp!a5PpM=NC_syq=FU~p@vTF*_P3OJ zr>9$4aCcp7$?n#*#a`^0&vPB6jY#zRnS2TR$Y}-FjMaY5>d&R);*#B_HP6)-?Plcm zEvwUeUidsOk}HzywX(5BN1dPU92wb~flRpCMpKCAP$(1Bgi_yUv7NawTbKS4Xj@h> zA!<(=kG_Q*y2^r!76d%NQY6b$2}iV{Z`z3G^8gk{^T$8 zX#iB1u&OW&?KpR?(WrMOkWZWT|T_hsln4)4n#V8^gNLU{|M+p`EePq4zwAkCQW<2NzUG6ubgC#WPzH|o;9nH@?++;>c6x3z6n<{F6Krjhca9>$#VV6 z?l&%$`=82)a1Hy}FxY&8v6-2hmETi4G`9G+NHem#fIp&Opzjk_jOTFAWN}TVkKwI& zw>7DkWq9Bj_~|TDn@$IW)ajL2EsWCs5Z|JQ0>~}kxVmyF-Qe$k3tH%UU;J{$XF1^G z8d_$wB6-jyRC#4NY55}{kXPOTJ1231T z*PK4N(HOJPQ~dO)cs+M}*6=qMASg4m1Z~r}F=!qhhHcmz3l}Dd8vG1BD+n4+?+yM* zpH?L$^C6paeGcp1M}FPRIYXDG{<9Sg1&9ZW+-n&2Pk`QhgBAZ~Ekzl1wE{_JBrzZr z2*wa1P~hO=MCbhR5nyn0K&#UU7^D!mnpS2IATqBh{WMi>kh zmj!}&eCbIoDtsUXj0(X--5j+xP*Va&i(OL-b-g7T8AOFNK5o(`MENDW@j3?8JKG8x8ej+a!cN#1b$L9yyLW9Fs0k8bvCDd(n3 zSdAq0`6%>D!ctKu#}_y$2$AiAqA)JJfQ}mlqwrC9HfI^hmh4J1CXxcSfI}ZCo+Ex* zk(X7`@knFh5rJks3pdk6t-@fEVz_up3+up-4Dk#sU|45wT+g=WieAL#PTA0p?XK0U zT_2QGnz!|G!uMpncL(1eo?st^M2edC>k1SjT3#A&MA>d)+}B;isUt@HQasqww0&Fe z8a_NQM&8MyJIl7A4>gMy77S!7@BxLLUw(%3$t7fVdgGIqCL30)&4*ua^ba3-@~miX z>3;Gn_^?_eg$Y(!tiqKH#U!UkmTTKzW6`pTsFBQfP4vs(ePok|vx5&@(0Wks@C)+p z+A9CUo+nF@O}jrJstCivhYIvdj1oi34XYhmyPgd8D_WK=A9SzIvQ)@@@W;{`&01U7K<4?}xWF}^+t)00Y<)p#kEp-btheCl9*R^UM zGg7oVJmRP;Oi?%0^Tg*lz7d1%pTi~*^uwuqLs75CP5xE(ZQ1V3DDtq5QU1}}9CzzSdK`%2l+DpM3`(1xUb48bdV@mN} z{!7r~1YeDij`t%NX&AjJkV8n(-x@lIQ7Jy*Z03h=GGTrD%f1$xR%g=t@OAqE;qiwS zg>LHf56b%*3>LTvYcUq%3uX1GC%rnvZQJ_k;YpslkWiil1zK%^81Jv7cTV-~?}tf` zVkviN$a~9lvpkKQw3V`DgFexvZ)ZD>M`a0GQ3&l#fGF;~-Z@q_Shp<6RI9gHI_sZY zpW*%Nbe`q4H942k}(G)$tsIeE@j z9ynBkmbhjt%&kkpQJX3as_*1$7^O&NT+3Q{@-C<<%vZ~SkDfM6f$aMf3tVZs!r+;v z820j5iAHqKiZWh~}PH7~lbW16KD+_zX|G9=r`N?o$+ z%~oubh4xvclwpu%FuMc0HphQCy@n zsS6Yh%5LC2mJkomfI$$>F3>9tQNhToJCMei{?jW+a|EMZ5%aa?YKrJ%yV+H_~LbBm7$ zljHC)=}+MRhQ6MUF`_7Sks^GdveQ<+v||qs3%&OUy})N09Rf{mfAgcu$2Nxc+-h2} zHuZ=~>Ts}(ESxZk_jxRFO7B_(Hz^y>y22WU-F#xmwG0z}a7Q$tu8sojhRDj`XF zYrjQqldC6UQbfNamIwdO-rJ^P!XIkg@lIbTth{de1CYeiwlt_O)i!@`dpoE;YI|#% zibp;jYGTh?e2o9vlLRw>j+h^Hw@yz9pWB!-x8V-C9%^#>gF6B4tK9#IlCI4E^^PFy zRa5!G0zuK_z=v#O_`+8#-mMJBk-oMqx7B|8F*2kc0_w|N1imL>>zO%pqF$cI`)< zWm0VWVplOgHK6If02k>YgB+=4jxV9O?~Lc8VyLG^rb|xUGe%``a>yACKC1B;D zO4or(>JkEXu>;cI@#0R6V8zbS*TG2@YMA+SdqmX82#RKML@nxk>_jzLb|JRHMsrbR z&n%v$)&tA2ysgW72os{oygn-M$mg^yr~24wVXkh-yq2p|Ev44`jwKxO-DVACMPgNM zDdueP1ucvxw_z;GMcZz!o|^EOx6YMCOYm;HXa3--RbAa!y|58)W>oZl^!3isl{9hJ z=m{sziEZ0XCeFmRZ5xw`ZQHhO+cqb*lL>B~@BRLG*S%}qI;&UrI;X3;*6CeU{j09M zx994W7M55NE?T%tqlx5I3){m@0{cl8f)S2(Mhk&Zp(8jR2TNsS7^0Wm5GpHfNhzj$Y6FP$$lGT@Xc$l=1jg z+w+RXL)~sB)vUS5yqE;=921&6aMBA%=UDKY0F4VIGpa;*csnVO*Uz&tldc=tj6 zdqxNG-uo-Dw;W_K>T?_yb4&6dReN+8!-6I-KnaN@R+Xp#Z{DLj3a;9aSl&?HHQ8UG zHyAnJ!Zuall1YN04JOR9XItxyuNy5#t>S5WHUt7y462VXRESxeSj1QX$r#DMv=$YW zR0Tpkd{BP~7)pYwN)025styMf!~%&6rG=1J(TB>XM1}>2P!@~?F^qtsB8-QD6Lk%! z9oDt|8L@Rv(ELY_tyq|8>bSAZry8TRy5ah-vnqld#{SmdNufS8ixZ z`K!<)jgn(v@w@8<{c5D?tFYq&RwX7RBy4CLpaKl?vT{Sa47J3?;5cizg}IUW+`U;M zu$wLt9913q{)^-G4{MC9d3OCo&fUZS(&0N9hFG|c#m!DvTpZdWDYtaBGI~4&S9E4E zh_*pPfqg*%zwa4JTf{|Jm8lK*W3zYoS;hITMEK?u4mO7;5O6 z^n#~5S`cJ>y5!m)IwQ{kjqq`bk$D~AcHPti)oVUhlf=~$=i>A_X|z8HuC#Yk=|_)d zPBp=wxRp0Ggb4()nReA%?{<@q2P&u)_>#v)t~{U(xU!rZCA@e^k4y0qWvln6B&Ff~ zD1RkwI4D9YNHN-5q|GG7cxO}^x-}ahOj;xb_cJ8eC1!G<>$e7>93eqx7#~)Ss~K*t zt%U8|wzSfh9&lana);S(XM6j>{XmgaOCqPU@-F0N`Ei}ds2?`@!^3&O4`fd{5O|@} zbmrBHR$a+UHFQ;L`n(#@l&jBja@O@QJj0KCq1+VfUBs_9b*Z1W9)i6sK~fS+v<%Wx zb}t^A5Z0zZ>LCpynMoiRjvL-Jdiir-ooz%3v&hYnH_0srz3y=5)UG3^;9c_v>&Oe3DdL}B1xwc|zVg|QNSAt)%reQZ0KCGACMp&#Y zOi|4z-t5#3TP@kqV4_r)AfX|9k)@xrzu0e`GWCf`>!E&4^N0B%pzz(IUYNv{<}&|` zZ~v0gzHem6s@PQ?1ti(Y)IC!FQ6i<>F~0y#AF)}4aS@BXS@&H}OqxQVHRm>vrf^jK z8*+ja!*1aiEplk)X?a9ea)Ujy3^gNPr{tA1y2lCgJyi`X3!S6v2roI9>E5c#-~R$P{S=hU*t-#~|JysB)Bdv+=TspowVbL_&1) zHEzdCz&&}{tevU+7Z`;E_bi=yRWRL?I}Y{(ofKlW5 z>FO*l2*oozm!VvS>E-%B`X2*=zI+py#|kx z(~C^vmkBIBt)c|Ta%%DsEwGWzTx-7q9DI%$_EKJoR$J4Z59u+zq6+TBU{O-$Zt1+% zpTVGFsbZ*VhAzyg_Nz_Gz311Z&R68&^nIfk+W81+NM_gtIPrg&CYWWO-7mPwS<1(> zYf8Gm9Mk{(Y0?s7!IF#bdzcm?)iNE+4=m9sxr=pfSDB<@#!Mq}Jf)OS@}XF+D0}$l zo%++u=0qv%=raBI67hW#_uLv6D=L|VtVV9Gd|-;l?PHKHx5@;dz061i!#MlimCeJ- z8;GuuNV&_#`%6-I=gr|61LF@mBH0`N-^*9651)~z?V0-Z$DE2)7mBzCgV?uxZawGK z`!b+@eA|P{I@EZ*9-9!e-~J09!t~D!{y5JDYPLi|JgH)S;jgZh^Yg}s&h3~E&*dAq zA8;)41&6=#kM!nN*Z%dzt}+IWA1n?qwQE@FXyui~-&XgCO}?9yetwFHf>p{i_dl2M z&3=v~OWUBF|9*7QE7QYgrKoC@CtVD0z|YIY;$?b`1eqeNZBm4SJ9vLAS|hpT(h|

@-l?$Idw>OebF3t?D&=qQQQ<_*yu*k8da zAtlFnRM)>btppdM2SON}92^Q>P0Xd{ZhkF|GE^mNeJzdV8sO1j zStVSWe1S>0J2tLuc>(s(|1|TqVNAfT(`$UH$>q&+pLH$u(^*yKt$Qelf7Z5{CI+Fu zPV|^a&;O%uA}eS*CbmaZx+*{Zy)-a55sUhu?2@WA8@mmL*!jhjjZc{&w43w{Z{<*EF1UcAn!h!0g#580GNkGBmBr`)`kp`;F_xf&~(e1co z^-%)}V5oS0gK7qF46-81J=Ywk9nwH%73R>gJgZEIgtQ8bbj~=r29`o?0?LUNqD6-h zq8;}S*ZtS+ZRZq|T_JC^55aUzw$*0MWO3#%zR9!L?p8nsrz^gw7Tw>y;&FSD07| zVZQ%V-0F>Y1e@UguFJ2F31THjvO>$2Wk1memw7clMc11xSFNk`%keJCX27I4qVzq` z)dwZbCX=_!k(ZG#W?u26;z7}=aim?a4gbsj=&3+{OgFMyb>NZHnwp!LiQlLJx0uTj zEa5;Z;k}Uhj8`fBh;ZQ1H9gI%E7- zkIXgqvCXPzb;(L5v!L?A%8}`YGRn-w;9|nk^(W7v5SiwlUiI< zW_7G0V~{Rh9^J%;2y+z44TN0P4wfK=%aklg58H2S#q7fxtfu5>4qz-a-EHp}FE2nUhj}5Ik zB@|ug2TEFy&~~ySoQ{&*FS3r~I~z63{IR44Q{qGw3-VT<@?=TcG#cE+&VJi1E6sGov&%k{m?%kIW;^Kl%E5o5b4|8}@)e-tsw8H( zOf9T0Ss}%zA3PdPF^BJf?1QPQnE*E&;gaNjkc=aXx$;XywTlIbA=9G6#;e_pc&JLt z6-cAKZm)Vop?3+HZClrt=A7Z2OO+nAYjdn}ffu=rZ~n2p#8XsjC`GKP_)M1|si~<~ z7EFJS^3MttK~?M~8m1BzTTYaq$HQ`ik~f_(8~&t2`ad3L5l;LnN%pSJ6y}mKY_K^C zKOg@fd6je%JiUP7l(=pLYG@^n9cTvkAMnxD5{aVWM*ZpyLw>hEzRO)w`+cJuk^Jb= z>JV)5M;M8ax3pxC91?&Z{Mp~U;IyCUo` zZxNMXI2&OYL;{@Lg1?9U*3;pO;1M~(?kD=el&}d|IrgdeFc4ouXQHcE)AR?X5`jj%S4h%Zq~X>)WGTFIx?7Kt}UH4@941dXk~Q8 zTE!n0ttbBJ%`$sGf4}B~Fs`rzyv0v z%Y+6IhGQ0j3653;++_A5as1>VP`cj!Wo1&9VEMN=pblf@SjE+bT1Q_<+;|*LBytuc z2vYduBb`ahbS-JiZOi^l!M`nm;+QmZKg4CMO>s({HuG(S{c7py4Q+Ee`s$DS${vLy z^)OtV23ja15|Wr~dB835IIVXEj3H$y3@j$IZF!J?oqT9q9EGpvmKVgT!KDr9&UO$a z!tOG)h6-_YlcX?|vWR5T)JEJ59F`sfe-|ROrmF_B3+gG@8u*faX0m9a@K| z`6w>Pdu6gt6122jR;l?8(e$#F85GvbKuB4-mervk@CpddU(2>3s5+cQlp9dpl z4RPhaGxUr^Day+;z-fj8z}j$evSlN{*?`=hI$kmHufLR>GKjY29XA_Ac%;jiY`*Y* z5DY({sn6rLM&W4FEn8)3A>eiL(9-!DF=N{>&qG%Tl0WG$;ZF(q-?JDEaX0;jkI_7^ z)HeSsKRbC8k8?Q9QSvi@iE%pQ{D*hVz_#vBkK&+O;HNwh|Uoc4ELfGYb=v%x*F)MtGSe>vEtI# zk%6tGJ~omHn$Zh6je(amZmIxch>pB~y7$o6iYSBNUCe_ADve@OzG_);@NFsK`j?|C z>l)FEG_LgPW10K7)`Lanvbly0b`>)s2P?yTBeHHA?oiXG5tWG%{Gqzr&fzsn#6%K8 zl@rha_c(I6UOvviT!Eu-O*%OaL9qo9mtr0UC0W8#Ynqjcv(HFHjS9bgJ&a1@n!iYl zA>D-Oi(F4oxW|ma+(1X=U!>G{af+o@T^U!k^=DneEg2eWQx_Zc#v`C}bo)(aS8s?M zIOT06$`mxo*yjt;Ex!2q-QnC(EM<*;&eD?8& z=(*Dh#qzJx zXm`Xo!IUsG9ueQ{SvazAQ;n&s>Oy;kKSxucWd9j{#S0H;a_0oI#x2u&OOeN&^&(_= zu}v$ilNHTN`;sgyBj}BPwO+@#{%6B`C2*LAd(@on0LQ=p8In$vI#-irSijHy*TQO=%luR~Ap9}WO z)Q%&gB4OcsW3=>?w}as{X){$qZ{AV?jcNqb#aHt@G*7kDf}h^(Q6Pb-%~4Kck1_z3 zepf>0pUL1NKL~Ddn&vnU>ig5=VwhIu_i4iHt`F9?FM8n-B$Y-3<`K=Sj0HZpKM!voBOmo6R0JMqFm{x7?{U z?mBgsz2E~=lav4Gc5KnOMe0$GA5}fX?KR^R6Z#V0PD8U~|J--uU$!)9PjM8f9(=OV z9cHV&k`2$VwIebt??je#`suP?^Sa85^W^eXeP|1@-FAPWKD1vwX_YPmLSPRs(7($0 zuV7XltyQuPRO{HW(N1j!)Q%(uk8mV!3F+i>t)2a_oFw6|c6M+vqkd9GA5ryV=a~d8 zF&Z8!=*mu7ko!X%s4=&|I%F7O5o0>s@U{J5YwrHvV50L-c&p^8ls<=!8HL%kce~n} z_l?)GXNu~oV|BB2@7el&Fp9F#*t}r>DTyP^?-Ie`sXl`91I7|1fY#xGQ$n@mP-2Q? z?doQk}|wngIohTh<|1 zUwi#>awh$@K4VFbe0P96o}DBjvU18O`9M(^2dkfRXn{H87yQlWw~F6fUb;Z~I5D(y z7({M#A9fL>oo6Rxa-nZv2hyRmu>&cJrAVwt5OcF>!yH#_o|n0Nq@=&H%4SH9te;w; z1)MUZj4~$-js>{Oc`&)^n|^4ZqInRFE#W?iBn9do)q@;FZrMwk*vYGUk0 zzQNxF3`VH1SNss zvv3e(Q*Ghk8bnLrYKXlMRk{QXYl09kpww@{N#{tDe)<{HYi!T5nnF+8Z3Dsq;UWUM zN^&w9R5~Mz`2?wlSb_%}1XUJiYJhL}K6V4FI^HQ4?;_ADYhTd3fP8Yt^&`9^w}_6xpE!nx|9#LFHh`!ei4KUykU}(%=hAHLqShTwc4I zOs*}sX_-FhoZ}lg(L&A)ZChuv-y*o{Ma}DumNF%o@njQ3v4&AdmaIPH%Y_ga9{$~h zD0?5JlGjqDKBw=F@jEuQ5hgGOUL?VX3zFVe{U8I`SY>}PikeCL?9V15s4;+tX$}aEYsHkd6QxZIycXR-u1Fnp4l8Uo9K!yg#6DlcUz4AyvHnGcem`LEDrpE z1IN$A77+2n3xz0#(Vv!i4!9u;MR$FUM)>`if5duN@s8bBAY_+)vdo=gMiYb@mPqcTVuPp| z{*7iG2^7{fc!liy&Y^BAqKQf;P0}kqmIttZ@U8BQxmftiI4=vp$rRQT+$Q zDf=|g(1dTiG6&?V&oY^bf-0xMBF**?sYc%Si|FR5vHy&7Tco7z(9ru`q2<6LLVa{b zN%uwW!RAcrI^xmHT({0OQqY~YOHtLVv8KnT7r4enat}?C@2{;C*}fAW3fA#fr%@D1 z(bs>bhuiBr#d(IXL1D+IEp?fxQ>0SyTPNB6akImCs6W`+zQY)Sg%>bm0>sRtSh$2J zDbZ=@)`d_%qnPo`F8tHM?XYc%ZPxybw(8x}ToPZ~56+qM(LTvOdykr4fAIJoip7G* znblT!`gd#qgpp})+1pONy5F54AwW>(%<^~F%hq3=A8e}6(fn!DA2ij1dOx|tY!V0V zb+bG7k-;xNRGE3Ny6R>N|90`pwq#L@(0*qGrf51}R*ud$kg3h%stpo{b9#bCrH>A>V~gT8 z;X-xW;xR*I5kGt8!Aob1zo5&`xdGn>51K&|Mv4(zB!GYzEhvCF1uQ6hjF6&<9y&y9 zu%t95Z$@ZwTEm#TtEc%ufqDBpquK2gC!dS5+lRGhn`|Wmdw8^xz2lnRL$GSNkbG*B9p5DeQcMypdg#UZz;h-?T5{-1_@0 zve#>EXP0is1kqHzwJVu3?`^#4_{W=(uYsw59z05Gx=j%5$9`bY-Y>n^>{Ls?Mx2lI zLfi)n1)Pc@rNQi!DDw&jB50lUe)bFcua%d;x4fW4ofg>OZA}KrWtT-oX~2&!HxfS?aTgcW#nC@GXg87Q}tV}#; zw%j~>1vm~sZSXAD-=(@FvbZ6{*@3Q{=|3;!@O}9?{?7O#1gEO|*?#~ygM<8V=<}rw z*E3}3`*-!%Z=&8=FH!-CO&ymVqBcKm_-j30gLo)50wUfvjnQ}!*p8%6E20kjW4kc` z2~`6GnJLpbaR^`pAAs-jfQN)dBUq9|Ol zua>SaG-8OY!(z_&n(EUn(zIK1ogmrCfHgHE?9^fVlxEYYu=_Np;mr=K>?*QmM&3=< zV2t^(?Uf{wi5!d+(L{y2InZ%&7^t7xmd1+f4|K&~!Cvt^XheWZV1d>iQtHXc`XyP( zzD!E}8t0>EU!=gds2UaMZ}KO_%S zF)Sq}2FGgZx+t`(nOCHi0q+?eDr20Qi2?F+u3NXv)mZhlyhVc^?I>AYi8~{Sxdc*g zLBVY;*^{zZ+7zPEUP=0atJ|l~xz8j4jc=T4`BV}#8HOlyX|>$qv+WO+WR*h}54J}n zabhZ1BJ77A_KV$O_rx=5j;20H+h@Ik^|U0dGlHrNh@8U8+Wysthy_!ky3b1Z*vJfG zOX`-F1|O6DPF+Gqukf5+fr7+$!gANmDO-JC*29?C@0X?Z4?`324X4g0W+qkdBd%02 zLKBQcLxVtylvnSE>Xj$#7tkQpuT$QNvGOQ5Ez>QU?iUFqGZ87PIn97yAK*bzS|1Jo zQiGfWEJO%p5?c)g=oy8S4|$j63KJojI=s~k-F=Egzt`bguML>j<~rg)*_n`JkdkY%3z%XDU#;S^=QvgB+Yhd|V%mb=Hd zH)R{wP=35@{m>)v$t^nNCZg^I5uW>{aAh?im0G}eZ?)H98W7XqpZU%$wODm|)8mxx z!n~T0xT{P>U7*W8kEBplzr3f(*aG=3?OB!eGjL&;>q4IS)bg<~BSHbXVUrOlj8x)A z)*15*p&*O(+P$VZqhP`Sky}j2!ipLxu~L*7w8X{pA97J@5zMIG`zVp(re-XRHr3d` z%-S^L(u94PDQ#YdMO9LwUiEwG>NSY`8*`Rd)>(Q&Z}<48^c=PsR&7@OuiTa0jNeXf z;py>);B9envH74J*c1-!o9GjRZBdX@;5qQ!Jr}J-cGQFFXCzgJrF|=PrTsIbpiX(| zzgF`{#?%ge-GcG_UFGqpQLTQ`HPWwg-cHEo*ywCaNruHz72;A+>Bt@$oz7X>;{B}D zJe|QpcZWCj;alo_x*bFGaY%t34eZ)xrzfmJj8(L9zp`prh}bc%qrupJk~wl(cvXNP z0Sy0ugh&1ki~SK8cgqKAvG@KwUvzKSkXxk^ZT&LXbqS`=C1u^9#`yG|6K3#Ao_liAzlrRQB=bRqIKRxKpZjxR?UVmB zJb73xX|uLyGN6m&(*!y$R#%MabVwnGeQp_IKt9uZXMDMYnsw#2bQwZ%8GY0=tg`^) z%9SxIbM0IIY>c^CF3nd)ubgTN&)8W=5wF-5brkAP zLXrh5uW{>a|B#X}==P&xqVwb9FD@O;)G+OLbrc;lxHWFEtl=naVftIS?s4@a)S0y? zZ>886fs;AVK#&V`I+l>O74Fc?+=guN5e)|YA&4@X!$q{*WJG(yAxGrXq+d{*g&GFF zWxc8P-=g4=e*52fcdw;D)yUBndNy_F_sRgeuyZxdjxpuyDUaVp)7NN(Rl~sDk%j(u zTpipcSw0>dnhLz%TjwwTrUxv~8i*lP!L9Lm?qfo`3x}tgT=*_0_oIA{78$xqTc)OK z8{ZJXi@DjJo|?q&uZPNHXZyq2I+Ud}OY7d;|Gq$$z*aZy*(bzJ-YpOn+6epf<|t~O z!|pjXdA8GerJVc20hU$a@qK|k)Y1UF0Ay--LCV;`%p?I6ca)^)bR(U|&B-1YQa8C# z2tJmYN~MU+&yU2X_&h5VP-8lP^)%B21rJNbj#Fogf#>WvQ=er{LIg7DrDD;6#utsL zQ63+O;2sfA1Fg%_B+HwC5KaOMq$wQS6Rpdahc8`9mS;l*?6^%4Q_OWGTaikpK z6`B>g)^wG!dS9f1;h=(`ih6#z-;kt)t<~I)cM;1}aV&O6c5t+ZGNZ9aOqhyTsSiV2+hHedSab@oFw7w``RfDr!t$jR*`Bm_7TXBVd~8bAK$ zJ@L(G%KK5oB9S}FtZ#9aCX5;~BTZfJpvefq2TdBRqV0Og2=@9fGQ+0@&R8qBxtGya z3_S8}kW=IehFYPY4!N!vvFSJj12sCCaXTW{&Owr%yeZdG^Y^21O)z+R#Tp0@asNuZ z1O^#l?j|j_VdjPK!)93t>w^G)r4b_Yf7KWMW|8HaW+V;}`2G+AhyeZp|6@Jy-w&K^ za+Rm10ncGM_q9uuOdy6R@E-!b6t5_UOZu4 z9&_DMYRCv;1ShKe2xbWx?E46kApOm40z)cJH{=uhRk|PmnU2jm%3eJ02_}&Gy~v3f zN{HzD@4^4(K7pKp@6kkBSnS&%KsrDyfEz=|CX?(Er>t3SN0Dme3H}e?YV`BTDY`8a9i%DTHsB@Pg0S{xev~-nbg4 zSIUf3tMld_Eqh@qu;FL)T1~yF(p{q>n6OyW;`pvWL@V8wzvuRn-hmx|^t0krbQH<3 z4a>6Rg?^qlwf|Yk{Xx%BE>VizFE03|CLq!_9-ulH%B3se}U3qU~%2|yDC z5(@YQ24iA^LkaYPK|z9(5?H{Rk6^99v736#&;BEZoXl_FF+!-{xV&FS1qyTP+hz zS<@YbpD*UPv$w${t<{J{A^f4hYB$Tc48*9U3`F@1A_k?JrD62V7j!4R(5%IQ3Zf3b z<=%2|yzG>OI{F`^{09X;vgjRD$e%X|g%Ne$Ry0cg3n@8@qRRm2(f{a)&tE%_Dk?rp zk19UT-$yzs|C7}IXQvPB@qS*6eC{~Woy2GG;^omS+rU58Iremz5NntP4W>4KEOPO* zjZ+to|94J%kQ|IgONGeZf#@Vohav*@q^@HjHUGVo1;Wha7= z{>mE?WtUV{p?U_@=vKYMh;Jff` z?D;CFc6 zy5#YQ8I>gTi_i&!_Czp9V?lv%4t$VoWm5Qp(`gH)tIHTz4w4&01D>Eu1E5BW=#j zp(3p^?a>BtJ0Z+~on9(EG94Be{X$S4582kCf`eYHAE3g!FQ^x5GWMcueZ*lFNWe(^ z+TX}fNI)9-8goI(VIovPWHQat5@O8!=fNs6)0ndKQr%E4B;*t)YE)Kf_>GEbjL(}lY>L~>6RnftV<%|WF6!?NTKep48Y%*O%BR9dz;w{W7bK%-isuuHaT5E} zp(T}=x6UIUp0;dS@LZt`q-OL@_m%<>kt)_ShBIeoy(M7sjEUeF)llQ>Cp4=A1;I}; zN}Pf)Udx{7H}|&f?MUX7iX>6H1fMs(pLH7>Q_Q%E(=A*j1m*UvMiw646r^9Tm8P zfw%%hP|v|3h@)N3xaQ)>c829#KruvYxNSaTluRQj6R${07{7YC{Wip6HL?eAt}n3<05{piiEsrdM6csgxtDsy%o<@SDl5Rnu4YVb+|dZDTxc<+Bf2i zX6fVZzgla@tzHYq0u6%rt%qpSe#?X3GJbdekJt=EQ4#`$hky70bVVpmxc>$ho0e!m zo~Rp8ckUS|8mAxL?7fS>$!>Gs?_#k!5z8^lF}0`)MI6RDVDnRNGD}KO0hdlvj%tg# zl1IHO6@Sy)NlZ8JPfp{V90DGbq5ivCoV0@) zlHZZyGo-%0i~<5M;3y__Ejy~Wm-?tIe#}eKCcr5LxJ7}tM8`y7-+Y`0K!2%|(Gw-4 zW~c+I@S*}jdtPt!3!%pu(X0Z3P^itKHyiLxSvU)oy9hX`fH)_@0u5H~zUT+~(Eg17 zGYUaXSNGhjcM4~u@1UDPXXIwnn%4RYgR<6!R<)tU)o|*MH3YeSo^b4&>no=I&nsP3 z?DLr^ZG!1#8|P+6rL>Mt={i?Igw2H%Pg$f-bai?2t0L6tnj?3R4VWKpdGJ@(6dW1Q zw64F~%w3<}OpCxc^O~VS;N_S%m=rNv+6VqDcX0m&lfDhGoZ+QU)k7016Y1ZO)t3l@ z|AZUPR#hiz89gi*18Bu^OiyINk*&zwdvkBkP;Xf% zp}?GLg>wqlnc3hs9{>y2^FHC~R;K9|>oEsjOm@|85M{L~sFF->RqkgBgQ!CJw_5p) zjO5y11wW*^xM*+SnX9z4RBw$s{(_k4>r1xqizbOan$_3ly2xk-R~j)67FJG1_Zv?2 zXBOe<5Ly$B!|d~)_6i0m9S!wooW{$fj8!^G`QAeOol0%`vOm>b6(=Gb1N*3yvmeW>~{e>jN z5uQisJc7D$25P@1h$xXZmUU)kw1bQj_KNpHi3ou<$5sY-Gx9{Zs-r?_Yc4;D8i;ns z_F5)~7wcQ8@e?g#XFW6SBTb6LV@*nnGNBIcRTE=HAtccF&K@3OLCU-c&c?!l?zWE$ zrg8Z{>r3NgYNG> zS6h^|^;lu0`u#SJ*@;Lp7a1;$7#$ry9Lj+g9O;e%mhQPQ2gyEdC5~uAmaVF*B4=m) zbH8|h|JDf`#U2?M{Fe)4k^yFD(%j%^LI6!Ge70BQ;Heq4QCZ542 zTJ+sa-r=KX>zhX#SfIe9N&0F%%5(N7gxWxe+gjt!bfV>r*fj~2@`A+iKm}mC@(n^U6j(k zj>_X`*B41+kd>I@oSePoU7B})&qeY}n*-6mlJO3+PS-VP z*C;Q=Bn;(Ar;vAZ5{@#`RQE&(+kN!37ngmJp}{<;r;0i?M0~a8DOJD_g%tTa{`!fBEA}U>1*Xv_7EqhVMI{jVys}Of`O5N zkYYk$EQN57Y0x67DMi|{)p@MZ6GGOUAl#G>Owb^aWB`#Q4`O|mL3z%2=2{0+NteSq z)Mn9_D|Qdvx?EbF3Owgw{i2BE)<% z(=hV2d1%B$a3sIw$ElSo<;xft<1~;ZU_mqz&^y$(F(MK6P-!ddv zHK8&k>I&q==P!`1&ceQ16IKPYG8u)ol5<)wm!J2eY38PE!}PAg-h$^YqB4!i7}Ukp z<@NfxsB}Z$APAJIG_=_1c0}kD`!V7wQJ^vWAg9Ls+8y28q7e+{M<&^d6c0tF0Yaz` zh5|_dMySL9pfM6iXuwxQ8*wJ3xLg_WIlyozDE_B7goQW9t$HBbxXu3x|C+{M_W^)l zpa0^&uO(?S`!i8%+24ICQv2S+HZ}r+J|OzN(#9e(LIR*pz9xjC%u0(77RAMjw=&H5 z1%!rtGC%UcgoOnF3*TBS-vQOP@TPQ05KPHQtZ5vd*y1CLbit$8w{adLbS@ZFKPxi; zQU*+h85;n_2#^MV_c8t#l}Ur@6Zry2zFk47;wiCnvEh9G`y?0rii@8ku9_%H3RJ7{RNP^U!u$}HCaOeXf=i;M#~HgouRlB-3z#D{5%u42 z_7*GbRRODfR6|Zo5P&c!lX$O?ya`H=qcr=3+Rf4CI-NY-6e;nb9Q@FdjX~}pyi=q} zq}K2AXwXD`$JzEw@b<3PpwT8I8yyKut{?>GYX&VrE2Jb~A}Ug#Z+fdt3yUZv8RV2O zYOWAbdAR(Ty|8s|F(onHFX~d8L`e-=3lwOoG=CBD5LA>rfs2oiZ70zP&pmrd!uC*c zAxqp68*jNp@evbXtm4dve*}Yl)nB^CXkJQz*JH! zpySSCdL(t^a!6<&@k~|Lcpk=|g&+>7Z$QXsjX%$JJMsd; z)VN6Ps1WbZX$}nqRVa6Bff~D8nF}rMGzIj%52e>OE`kz@Aa2oNGdMWhWw1!qMYZDK zl1X2_vQ;~EqxPej4c2FM>+n2RHD@36c=*BWRXT#N%;gx4SO`gg#is-Gpv%{!f9lx&nv)g>nzoxAkuveeJwN z_JVx*+Jk%zEFyiCH`4YHvpee;4V0T5hTqDpqeN*n;-)zEW`e-z!OKFhQ)*l zKmqED1$!zSf9sCTeuJDbSj^Yhd=?~^86E%`={pO}CLuS*CM=d6my070=?h@}Po&5k z%(M8E?Rpd(Hx_wSzCoUF8C10~1s(+oSyq7uuQ}Dmf=Ip{7;hB`FKWy}6gnydfC>cx zfY~0leSDtxi=xXqJ!)?CiC712z5O2 zZ}#JmZ>`=H>+JOY(OR`Dw=-;ziuGJqgA-j4*#Fhgx~qC@^tD&*R453e>-_xiweWJ_ zTqXWiT>}2sEdc-}iWp+!VgB+op?j$yH7D%<>((YB(|(_*yyOc&{`MsX@Yn1R5(1JS zCD`-c($iSs0+37gEx;5`Vib^hKz}mM!wzNyWRoNU-td>??3|XF)`;{fd+M0V^RdVW zga0KpJcI>@H3p~j5s$rhzgFgqBFole26!XWE?y7;SA6@F--e%({EgLEWmw_~UOM8b z`U3-V;|zd{7g*y#rE6xpd((rqI03Q$0RZBAg9%cB*T1^bX_?qN`6TY9ZX9%Yt3{-l zw1JCfKb=9XNje>a^l#FD!*+dDS2N%D`_A(JabLFCw{nXp$}S+@4&Hub|9t(bDvWPT zhdU7lCFr~ji(eb|FhJMvDorXP`<@@-i9ppJ)D~IkQixW@8L_FclSvgzFGUA|%M9i! z!>}_{2&>_u;(^6Mo0r#_qES=&1uz`&IMvyX&WeRJn}bp0os-@IndT0_M&4d3KL`ova z5c%1LKh-R^Ersnz2BkEsMeFIj#AcXEpQ6N|#AL=JPPFM5W6du1&Na<#6GW-fTz1Ov zgR$9P@8Z$>q-y`13?Bd8`+i?j6NV7+gSPBgB&{w%!T}X`m$d<-x&@9q2-Iw?(+TvW z!jo9I@y@Qd`JbsVPY%Czfc@U_F<_AG5Ll(g3Md9Vw){l2np{FE@p$D&e099}GbgC^ zQ3unh>QB4jm{@aosv=|Q7N2W+bygdzRAc47VijWfN!xtx%vDRXp_ zX5=mzB&MkgB}mpTUi^%)lKzf`aV612=oUH%J2w|wJ{ljTaRjabx>feO+$GtD@YW?5 zG(tDlqmPjtd4{S^wugyfL!qDzdxYIL572LM1|pO}gzS8_Ma@iu))c2n@p~sK%_aw- zND=^oZo$kg(~=UPkS3y78g>8(VU1Le%BYe~Li738bbqW=Evo_T-P3a_Gv{`6NJ>e! zA*OlWBGaRR{9%0=U;+!W9MP!Lxw-UI_`Bq+owriRW%Bi2n22*NxyO$uHB|rP7j>Ex zsr2L2zTY_``pfW6fNCdP7inj!Pz*&2v9z`60YzJk>)Fc%ZjIo`t~qGDYLxSNjuDp5 z+YF?(b<$s<$=2z0&r${qmR>=0_`Bn!GrDCum=j4X&|Z@t1ZT@v+UukH4hok)Vcj*| z)A-Y~@ZgVtJRHjbmHmN#hc33P*BvE|WfRMkt`m^K0Vnt7IyXVNeiV|8$UwEUm{nD3 zHGREWL&4o_G*{$A0prvh>LV#>;2m1g6nQY5HuWzNpLmU>K$r~JO|Jil_AW2(;Q+}_-ma4wgQ0YS01|IDU}-sNdo-CtS4v3w9fbWmt=c_j zhqM2cpCKk3%@TW=Ta~3>g0}UCh_qc`Qu#Fs@VqLB410Y@?Aqjrb7Vam2Wr~#3YQB3 c(d3GD;69|+ki`|}1@=tmGKnNt2PyLZ0Ca(@qW}N^ literal 0 HcmV?d00001 diff --git a/test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay b/test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..d8c389f56d886f97ee7e599bda5e8c5631604539 GIT binary patch literal 44982 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 Cf&9h* literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 5bdb2c40..d63d898d 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -387,6 +387,11 @@ def test_creepTracker(self): assert replay.player[2].creep_spread_by_minute[420] == 9.4 assert replay.player[2].creep_spread_by_minute[780] == 22.42 + def test_bad_unit_ids(self): + replay = sc2reader.load_replay("test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay", load_level=4) + replay = sc2reader.load_replay("test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay", load_level=4) + + class TestGameEngine(unittest.TestCase): class TestEvent(object): From 18ca54c09f215efb13ca236f2eb00d9dbaeadfa6 Mon Sep 17 00:00:00 2001 From: Eddie Yan Date: Wed, 29 Jan 2014 22:50:14 -0800 Subject: [PATCH 164/238] fix name of 'ControlGroupEvent' in comments --- sc2reader/events/game.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index e3948f26..03d69bba 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -354,7 +354,7 @@ class SelectionEvent(GameEvent): Starting in Starcraft 2.0.0, selection events targetting control group buffers are also generated when control group selections are modified by non-player actions. When a player action updates a control group - a :class:`HotkeyEvent` is generated. + a :class:`ControlGroupEvent` is generated. """ def __init__(self, frame, pid, data): super(SelectionEvent, self).__init__(frame, pid) From 9277ec45eca06085ccda35c7b6e9c84c0b002845 Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Sun, 13 Apr 2014 15:20:32 +0200 Subject: [PATCH 165/238] No more lints. --- sc2reader/data/create_lookup.py | 26 ++++++++++++-------------- sc2reader/engine/plugins/context.py | 2 +- sc2reader/resources.py | 9 ++++----- sc2reader/scripts/sc2printer.py | 18 +++++++++--------- 4 files changed, 26 insertions(+), 29 deletions(-) diff --git a/sc2reader/data/create_lookup.py b/sc2reader/data/create_lookup.py index 459685f2..73623836 100755 --- a/sc2reader/data/create_lookup.py +++ b/sc2reader/data/create_lookup.py @@ -1,16 +1,14 @@ - - abilities = dict() with open('hots_abilities.csv', 'r') as f: - for line in f: - num, ability = line.strip('\r\n ').split(',') - abilities[ability] = [""]*32 - -with open('command_lookup.csv','r') as f: - for line in f: - ability, commands = line.strip('\r\n ').split('|',1) - abilities[ability] = commands.split('|') - -with open('new_lookup.csv','w') as out: - for ability, commands in sorted(abilities.items()): - out.write(','.join([ability]+commands)+'\n') + for line in f: + num, ability = line.strip('\r\n ').split(',') + abilities[ability] = [""]*32 + +with open('command_lookup.csv', 'r') as f: + for line in f: + ability, commands = line.strip('\r\n ').split('|', 1) + abilities[ability] = commands.split('|') + +with open('new_lookup.csv', 'w') as out: + for ability, commands in sorted(abilities.items()): + out.write(','.join([ability]+commands)+'\n') diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index d9d1241f..e978ea1f 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -8,7 +8,7 @@ @loggable class ContextLoader(object): - name='ContextLoader' + name = 'ContextLoader' def handleInitGame(self, event, replay): replay.units = set() diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 325be41b..0a31b939 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -1,4 +1,4 @@ - # -*- coding: utf-8 -*- +# -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division from collections import defaultdict, namedtuple @@ -192,7 +192,6 @@ class Replay(Resource): #: Lists info for each user that is resuming from replay. resume_user_info = None - def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options): super(Replay, self).__init__(replay_file, filename, **options) self.datapack = None @@ -201,7 +200,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # The current load level of the replay self.load_level = None - #default values, filled in during file read + # default values, filled in during file read self.speed = "" self.type = "" self.game_type = "" @@ -333,7 +332,7 @@ def load_details(self): self.map_hash = details['cache_handles'][-1].hash self.map_file = details['cache_handles'][-1] - #Expand this special case mapping + # Expand this special case mapping if self.region == 'sg': self.region = 'sea' @@ -367,7 +366,7 @@ def load_map(self): self.map = self.factory.load_map(self.map_file, **self.opt) def load_players(self): - #If we don't at least have details and attributes_events we can go no further + # If we don't at least have details and attributes_events we can go no further if 'replay.details' not in self.raw_data: return if 'replay.attributes.events' not in self.raw_data: diff --git a/sc2reader/scripts/sc2printer.py b/sc2reader/scripts/sc2printer.py index 52b39c1e..5a1bf94e 100755 --- a/sc2reader/scripts/sc2printer.py +++ b/sc2reader/scripts/sc2printer.py @@ -84,31 +84,31 @@ def main(): description="""Prints basic information from Starcraft II replay and game summary files or directories.""") parser.add_argument('--recursive', action="store_true", default=True, - help="Recursively read through directories of Starcraft II files [default on]") + help="Recursively read through directories of Starcraft II files [default on]") required = parser.add_argument_group('Required Arguments') required.add_argument('paths', metavar='filename', type=str, nargs='+', - help="Paths to one or more Starcraft II files or directories") + help="Paths to one or more Starcraft II files or directories") shared_args = parser.add_argument_group('Shared Arguments') shared_args.add_argument('--date', action="store_true", default=True, - help="print(game date [default on]") + help="print(game date [default on]") shared_args.add_argument('--length', action="store_true", default=False, - help="print(game duration mm:ss in game time (not real time) [default off]") + help="print(game duration mm:ss in game time (not real time) [default off]") shared_args.add_argument('--map', action="store_true", default=True, - help="print(map name [default on]") + help="print(map name [default on]") shared_args.add_argument('--teams', action="store_true", default=True, - help="print(teams, their players, and the race matchup [default on]") + help="print(teams, their players, and the race matchup [default on]") replay_args = parser.add_argument_group('Replay Options') replay_args.add_argument('--messages', action="store_true", default=False, - help="print(in-game player chat messages [default off]") + help="print(in-game player chat messages [default off]") replay_args.add_argument('--version', action="store_true", default=True, - help="print(the release string as seen in game [default on]") + help="print(the release string as seen in game [default on]") s2gs_args = parser.add_argument_group('Game Summary Options') s2gs_args.add_argument('--builds', action="store_true", default=False, - help="print(player build orders (first 64 items) [default off]") + help="print(player build orders (first 64 items) [default off]") arguments = parser.parse_args() for path in arguments.paths: From 214cd7c0f88d794453a4592bbd0e74d00cd3ef83 Mon Sep 17 00:00:00 2001 From: Emmanuel Hadoux Date: Wed, 23 Apr 2014 23:34:00 +0200 Subject: [PATCH 166/238] Fixes SelectionTracker plugin with new handler names. --- sc2reader/engine/plugins/selection.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sc2reader/engine/plugins/selection.py b/sc2reader/engine/plugins/selection.py index 79e9d995..69aa12a7 100644 --- a/sc2reader/engine/plugins/selection.py +++ b/sc2reader/engine/plugins/selection.py @@ -40,17 +40,17 @@ def handleSelectionEvent(self, event, replay): if error: event.player.selection_errors += 1 - def handleGetFromHotkeyEvent(self, event, replay): + def handleGetControlGroupEvent(self, event, replay): selection = event.player.selection[event.control_group] new_selection, error = self._deselect(selection, event.mask_type, event.mask_data) event.player.selection[10] = new_selection if error: event.player.selection_errors += 1 - def handleSetToHotkeyEvent(self, event, replay): + def handleSetControlGroupEvent(self, event, replay): event.player.selection[event.control_group] = event.player.selection[10] - def handleAddToHotkeyEvent(self, event, replay): + def handleAddToControlGroupEvent(self, event, replay): selection = event.player.selection[event.control_group] new_selection, error = self._deselect(selection, event.mask_type, event.mask_data) new_selection = self._select(new_selection, event.player.selection[10]) From 846bfaf0b82b1f2ad28460b418370b7269297b91 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Mon, 23 Jun 2014 13:36:46 -0400 Subject: [PATCH 167/238] fixes so that we can parse loaded games --- sc2reader/events/tracker.py | 5 +++-- sc2reader/resources.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 8a97c0ac..767a9fdf 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -15,10 +15,11 @@ class TrackerEvent(Event): """ def __init__(self, frames): #: The frame of the game this event was applied - self.frame = frames + # ignore all but the lowest 32 bits of the frame + self.frame = frames % 2**32 #: The second of the game (game time not real time) this event was applied - self.second = frames >> 4 + self.second = self.frame >> 4 def load_context(self, replay): pass diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 3e3b508f..42efcea2 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -487,7 +487,7 @@ def load_game_events(self): self.events = sorted(self.events+self.game_events, key=lambda e: e.frame) # hideous hack for HotS 2.0.0.23925, see https://github.com/GraylinKim/sc2reader/issues/87 - if self.events and self.events[-1].frame > self.frames: + if self.base_build == 23925 and self.events and self.events[-1].frame > self.frames: self.frames = self.events[-1].frame self.length = utils.Length(seconds=int(self.frames/self.game_fps)) From b35d88c774ee9c90c592a98d6342979f5ed4a5c3 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Mon, 30 Jun 2014 07:57:03 -0400 Subject: [PATCH 168/238] new failing test for replays that started by loading a saved game --- .../Habitation Station LE (54).SC2Replay | Bin 0 -> 11543 bytes test_replays/test_all.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100755 test_replays/2.1.3.28667/Habitation Station LE (54).SC2Replay diff --git a/test_replays/2.1.3.28667/Habitation Station LE (54).SC2Replay b/test_replays/2.1.3.28667/Habitation Station LE (54).SC2Replay new file mode 100755 index 0000000000000000000000000000000000000000..1b46fd1411cb9324b2980ceb0d9ee37d907f968f GIT binary patch literal 11543 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 4d11301c..81c5eadd 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -366,6 +366,10 @@ def test_replay_event_order(self): def test_daedalus_point(self): replay = sc2reader.load_replay("test_replays/2.0.11.26825/DaedalusPoint.SC2Replay") + def test_reloaded(self): + replay = sc2reader.load_replay("test_replays/2.1.3.28667/Habitation Station LE (54).SC2Replay") + + class TestGameEngine(unittest.TestCase): class TestEvent(object): From c860d8e23d6fbd3a9258deff9fcbe8796da6c900 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Mon, 30 Jun 2014 08:00:33 -0400 Subject: [PATCH 169/238] fix for replays that started with a load from a saved game --- sc2reader/events/tracker.py | 5 +++-- sc2reader/resources.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 62e25099..5466d4d5 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -15,10 +15,11 @@ class TrackerEvent(Event): """ def __init__(self, frames): #: The frame of the game this event was applied - self.frame = frames + #: Ignore all but the lowest 32 bits of the frame + self.frame = frames % 2**32 #: The second of the game (game time not real time) this event was applied - self.second = frames >> 4 + self.second = self.frame >> 4 #: Short cut string for event class name self.name = self.__class__.__name__ diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 0a31b939..44a26c7a 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -496,7 +496,7 @@ def load_game_events(self): self.events = sorted(self.events+self.game_events, key=lambda e: e.frame) # hideous hack for HotS 2.0.0.23925, see https://github.com/GraylinKim/sc2reader/issues/87 - if self.events and self.events[-1].frame > self.frames: + if self.base_build == 23925 and self.events and self.events[-1].frame > self.frames: self.frames = self.events[-1].frame self.length = utils.Length(seconds=int(self.frames/self.game_fps)) From 0988a58400b949d2acab3bbe5193fb8a0ccb9565 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Tue, 23 Sep 2014 17:20:16 -0400 Subject: [PATCH 170/238] 2.1.4 now works hooray --- sc2reader/readers.py | 1 + test_replays/test_all.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 1c71ed3f..4af87ae2 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -95,6 +95,7 @@ def __call__(self, data, replay): ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, handicap=data.read_bits(7), observe=data.read_bits(2), + logo_index=data.read_uint32() if replay.base_build >= 32283 else None, working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, rewards=[data.read_uint32() for i in range(data.read_bits(6 if replay.base_build >= 24764 else 5))], toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, diff --git a/test_replays/test_all.py b/test_replays/test_all.py index d63d898d..d908f350 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -391,6 +391,9 @@ def test_bad_unit_ids(self): replay = sc2reader.load_replay("test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay", load_level=4) replay = sc2reader.load_replay("test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay", load_level=4) + def test_214(self): + replay = sc2reader.load_replay("test_replays/2.1.4/Catallena LE.SC2Replay", load_level=4) + class TestGameEngine(unittest.TestCase): From 762a8aba9154f8585a57f1f052b6256fa99dbd29 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Tue, 23 Sep 2014 17:20:25 -0400 Subject: [PATCH 171/238] test replay for 2.1.4 --- test_replays/2.1.4/Catallena LE.SC2Replay | Bin 0 -> 38284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 test_replays/2.1.4/Catallena LE.SC2Replay diff --git a/test_replays/2.1.4/Catallena LE.SC2Replay b/test_replays/2.1.4/Catallena LE.SC2Replay new file mode 100755 index 0000000000000000000000000000000000000000..2bc76c617acdf42b9fed7eb420dbe812fdeb6910 GIT binary patch literal 38284 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%0D2_Sa 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 IlGYFY3sV=Xi2wiq literal 0 HcmV?d00001 From 89f4eeed7d0208525a0895e23726749dfb304405 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Fri, 26 Sep 2014 12:07:17 -0400 Subject: [PATCH 172/238] amended author info --- test_replays/2.1.4/Catallena LE.SC2Replay | Bin 0 -> 38284 bytes test_replays/test_all.py | 3 +++ 2 files changed, 3 insertions(+) create mode 100755 test_replays/2.1.4/Catallena LE.SC2Replay diff --git a/test_replays/2.1.4/Catallena LE.SC2Replay b/test_replays/2.1.4/Catallena LE.SC2Replay new file mode 100755 index 0000000000000000000000000000000000000000..2bc76c617acdf42b9fed7eb420dbe812fdeb6910 GIT binary patch literal 38284 zcmeEtb8seKyX_m>w(aB%C$?>8V%xTD+nSgY+qOCJ#Gc&wopb7br%v6f`}eK;t?J(D zXRqD;RPFBF{q&MkRKf#*0ssJT06^ex1_28IrB`t=auRVeGIJr8k|K68b+9q=#A9Ir zg@6aZfP%t+gTsJA!azgAw7!7B{*!>ifJ4IEg@Qms{w4S~{_TN(d*J^W56CGh;m-X% z+n7WE01N;D=#B#bx)T5Z;=gSO|KlqDvH1tpvHzK?{a5}U_m96#|M2{Gi2qjw1mwR8 zf&c(r&0aR^&ZN+fd2ny@qdb+gS8&7HdqrK}5xpqu4-e}9-v6JniNfihOzMM;aZIKN zyEK&`jz%`{eeg_nJ#a;OP=G^FcYs;WOt-=}R9sEjq2!q8|JncF^?!Td-yZn?#{&?g z0B{fhI0QNXlu}1kK|+t$*@1~)LPFKa$k^J{2^0eQpEV2=0HDJ9cNqf>6LBO54vMJg zWbb0{>-VW=Ttc%fmyVPOF9Fk>KyFaTs2P*iXb7{EW=s4C_zilz<@ z{|Cmr@GsE+10?_)CIkfXFZ+LRg8pw#@P9Z#K|!%aj9iRtY)tKph-JmVK>?5upa4)z zIZHcBTO$WX7jq+MNDx?<#+cAQa~l`4VDK>QF)uL%3xA7YAUuz7+{@KbL#3GaQ2|S?SYnWIFVh(8V!vYMXH|MkMIAo6vmG#xHrl+WgshZ z*8B4dwc13OnoQrz({E??SF3L^;=e4-V7OROLsV|Qx;%UW+7_?-YXg5C>jsZA@091r zD{6!P%hE|HVN}8*z-w9q=L|9_F@|L0jsYKefj7+59g{!|!cK=%KS@#Kr_j ztYuOojna?68E8kdIiI$n&Y$D7|FYymbDoneaQ|BBRXv(1Q~t;`n$|sha(FqRUXuKB zP}9JK1YpBJF!5E^c?T4!WoZ3}J|AuUQ3t@9O2 z8UP5n|JT>oj{mi`|HZD_h_kN@O6b$)}1?Agg7TEO?)+ESfAOF>s{(9J{=Q7yty!;Q#<22|%C; z@IRlbAO&-C2)K|jSvUX-Tm;;|LnftISXs$COq+!RvOMDpl(UKfKm6Z@0lewUUe(<{$s`Ch3R9v`5S7=;<0eKu5YD5vRVm}HK zB$KjCrsyC{%#K7V2lR;4t58!6`UqJbRJ#ibFh@2o5BQLMz*en?gt?B}rN?>8lnIzp z&^10bi_j4SA;=U6Ed+pi=)77!RcjE6m z{&n9npHQo-IVf_ffml&!Pgvg*tPB1WV@BrV z{e8C^RDFrzDfe5$h_bTs$9|^xsXo4$YF)b%hOfUSy`Uy|72CzYP}Qc!?!l4NaDNps z_Ej@)OzBllen!3Ibaf@EJi1qWvA-Y>FChRnUvPDX_sq6ZtWJcbjl6toitIKSCy2(8 z#3hm9BLS7UCm*#rBG5jlw-4tm;D}FyBEZBpXye72zSy(pR>TvAqQMt6{MOt`nfz1S z`u(A;QW|!B&Dj*NX-#sw3;uSQhoUCPDjBP+0RwVSzo%WdePKC?aVaMJGp}v!+_|`J`4IPmfHm3F;Ozfx z+E=APp#qS4|4#G&3-+i9pC=7rhm{&}XpYE#>M+I2B; zZ?Smc4BBN?NL*C~fxILP!kiIHRRF;&BAYz4kYAQ%Wm|-6vS5ot{uF?KCbc&=pI88& z5hD}?iH1@p^=oLpSSc1aThz-WPY$Rc$4WUy6XG%`i*kZZWllC*I9pumq%4*NN%dhGZBdL* zc9^j2L9WQkWJ9h3DEfCmSvfQS+B|SrLH2Kn{E>wZsG#(gm6wsFK$*M^&(rc4C&`XTjG;QdE_W~6i{NdRZuF6Sz;+N881^%L;xzGcZ(w(w@6G{^zL7682E z6~GOVrANYI5jmX70+0d#WR_O|U|KX*SaxYBTiILMUUb2es`A`c!IDquEXm@Qsu1X@ zK(nu)Vwp^nc+5wcWnqEEHASl^~!baFlll#n^JyM39GjyA^)wMRsaTKTF9qe zM)>}^9Ii|MYGFdkYQ7O^m64f+VZ_8=fl+@sb*n+KIXd8d(yJmGROMPnYqT z`_u{8ndvGEbzzb;AV5jG0AC9R%Ik_nE-LAO)Zd;o+z{9p(Pm+`#w8SE7`)u$z(58t zk`$7FAIEXqu#xY{o75^3EWkjKu9%{RNaszdZ7)3+F6jgZ?%X$8Z_=@Ih=8!Gspj$E zfn)RHw|CegisV%c_mQHi8x!-#73=)i z*g0nGt(T$0pM2B)Y?YaoPU0;Z1i|+`p*@hM=ZbT77-eNJK|O>*&`)X6?@u#w{nT$V zw%^dRq#Vb@(*xzV8^=E(Go$HzbtENeMgYqR3yTqgVNb2768*@w)WO)YWKQRz8r>ez zvoa%AUU#v(&jt`E>hFv}{$iO6p-*8pJKxGCAFk4QTgb?P*d&Jyxe_~uGPSv|A)k`u zrv$(5JxHM*cpz^aQwpFrX(t>PMDhzfEFmok(G(XRU-M}=K9;X;PlmHQo&r(fJPP-O z!h#dR7>F7Y>cDmsam{WiH6bgITu__K0YO@Nl^N73%x50)Mh3Hx1lmRp%+hiw zhkDg=r2=jxVxXecuAN8E%?e96tt#q?V8a0P)+Z0O2xZnp84R?&=ByyZ-+?(mbG~yJ zL31CPMcA3bJT%lL2MP`;a&i5@h7=AyR1D_FR3^*0T21+KtkjH|rBlgRJR%7Ecl@X_ z%vNb=fEhMG3RDsV8q}y1;S3dDK(9$b0{Dk8-ZV1#yG0&4>&x{Db6vBeuZB@xKmpx} zFz6lz?2FABC)XyOCjI%O%p_M6)d6-N`%PGJ&U4G<4%#7|l-Lq6Qy;PC+1T{nqrP

^53HxpWFu8KZxRVB0#$$A=+Ea}u>T4``tx#picLQb@7-0_0R{Xz5C?ntM&un|1E zY?YU8F2vQX#ahxop6@m0dzxhfQO}kR@I>DkU|cg|=mu<+KJK=+{7l!G<+} zEFrWMwBZC3XU$S|ITR*!^W)hd>?MUp(y*ka##z}kwdiFa!09C8*pf~x8VC>}2wLTc zy5>I!CG}PTHj0{R>XK8IgHi6SQ!&)8s2#MeHqO|vh=G;+@YG|{!h*6{nrg=c^hrrW zNn_^ZNiBuSNdd5&EpCBIFxrdUm?x}QDwD{u!i%F0p0OrQ=x4Hz@*73Up<>B6KPqDi zWl;jHlw790H->>pn`puq=_KVAmw1&%hBa`^dc8Z7bT-_zG+gNOJ=nU?&_(5FdzCwy zs=_qWc@jVq+qs)PE?65R-^eJwD)itZX(+ry_^3>0Y30U1sX2W(#Ym|;lkM%@Hf^l6 zz0+?GTm0Wio}%dG!)l_K)H7$x$$Un_w?MCRw9=sSwOJCVCN7VEQ9&z#fug3&%cXO< zw2yrcyhi4yLe=z!1s{V^0*{i4e`NmqtP3UO`EC=~ypCLfz&zIVR<#y`LqqUsW83?4 zz`0@ds{Pp`Co8HtPfvj@*Z$rmJqT15U1)58UyX2;vJ^ju`i2DGoz2+LKoHXP)S#VPXvi(dk(?5zXuuvr0xV+B9UAfleRumo(nA+HM9NNam_QXtL-M=T z#Fr!^i(IZ>?SYptN2rCRZn(il1R^t1^k!sjmkEhY%x)m=GW6KxQ*1x^xO2$qG;g%$ z=k5<^9yn)2L?kxEEVa}rt|B7=n(Uh#oZWhS`@R88!>| z`*91-I=EIUWdRqE&?<%rhT-ZCsU%B|uU0QS58gY3+v1NrRnlVB@-$kCA~|mJjRdT- zaZVp?A4INM%$M4*Cu$=L8uHZ|ZFW7f02reADb;Pe9oP*w!i}axJloZ)W{iRlr~P!; z<@-g1Aq%i^q^Dff3l|*q?a}gYu_C1YkpWZ!H zOQ~U&&Aq+7zlkz8HI=66UR?a5QEv_|iek*ISYq+!YI&a`tn|lXD_M2pf14ykSmU>Y z$vJp1hk3rH!Em5{$g|?dqO7tcZ%UG9d=LGFX0DF$`5`AmbE_T|6QCKr^E0dreb~Ir z=j_d<7b)S&eF6Nj7Q9hyn5gQ&+GGDOub8U&&_YGW-&%Bj zrL;Sbs_xF!7T{*|-;%HjJiR)QC`Ss1Z_|_+0n8UblnxgOA+5^gKBMmhK{=k;# z?Ccu2&KJ*L(b2{YLq0Lezu56&5*|!Ia$eR(p`?{snq^aDPe;az%S3f5$optC@M)8* z@L-K-=`+-t;d;czCcjH%G`DD9^=}R}=@>>VX>S>hWh@}LnI@xDwA3baCy8(He^fi$ z&bF-`?j8=un_X3_H@xG=jjGjt@Z9{Yj|zF`s9BEc#n7n*a}hElod1p6uRe!OAe%tn z`bi0i(X1OEe^Hb2I~4{-aoR`K7=;!N=vM(Y46x|QS{pzUMAm)_O+>v|!3puiL3mUs zyFIwvdEyHj>k0&xCT`P7FKpUoB?(I*3yKPo_vEKswz;{}3}lsRDC6+-)UMi24envW)v~$N3TOmr_gT;df2ky&?ELO!>n3gQwnm^luzc9fYEsh(4=U=8t zF#e2ZGWOmw`*;b1E9&4xnC~e(_HuO17>w=RY-Y{cm(QJf$}7X?JES zpcbZ4$p|4OM2R#LC1Ku_6!{LqEEwkyQxOQw!H9x_f()fYD^UJNhoJ5~Uufqq+j9*9 zq}nqXaNZxe0PtH9OO+|i&l$~e=8DoCmB#?lAoSFIgYUSODJUXQf_(Kk`-bpN2tX3L zXO|<;jONu_O%i{-}YIhNKL zUwVs(ZXA~Fg0I08vBT1cD#>zRxx*;2n;XN{#V)SRyLx4#4yw^dIAv0UONODUf(C(7 zip1wmkVGaIj$1kBA$_Yj?bbEh6f3AN*GeOySI7@bQRcyHcO((AX?Lc>CUb3hN`I64 zv{PaK-Qf75fj6T&#KdZ3kOw{tEd&})K+lN=jrRA$ApjMb1eB##UdoFgT*1HPHxZu3 zz=2&i7F6iGe@>@?9(FV)alplXAETjSTd{5fl@jv8MIB{wUQJ;^(>U&~3&*TztEO2Z!^fx1P3`0j2f`7X@(w?l*_502ulEr%I}^f|jQ5B8%K>8z z9Oa(!6RAk4Yx>2Ki3H_-+~|t~B%H}hfx-?Ao%1fM$zIOpKf_FX!5pNS)}iEN+gZ6_ zpXB3FlPQI6w*_SgS$12d@6D)!(Jt(%Bq;UiY|tWd&7j~=BzQg9t<#%7bRdf`FQ~?B zJGP{|u^v5g9=c`N6H-1@`3Yvc-JA{v;K57uU8}RE&Lu++B&3em zsPE)^)2PtzhwPh3Uj?~L8Q${TvWAK|?GM299e@gib?`v4^&XRYnH zBxYzV5L*-~?A6MXBlYC;jK0#z&I{^V4v1Rl6%Y^`p46vt-n4Id85GEZ zd_)%Y`k6^E0DUpZHw$Y0tsE{_{t_f2x`;I3U&1-Z2f-OS-v5)`nN_=*&L6^|`gTJ0$K zhGpyQm8Sw#k_zJ5n+Y^9BYRzi|9SspT_n1?Vc z%ilBW7hM4h^ZlANf@gbqAPH1ctmVqv+D*O3lxl+_AR_?0pII;v6dZ>`A3GlU+i3?D zGyC>~YofW>Z@Rn1S>Y0ZS48(VR`KYH*6cppN6Sj=7-)){q8_VbExCJGJ~?slx-hC# zLsEYVt~xBT_(WqP-iqU+9rpJ2M%4@Tist34HqCmeo$R(JVloD?eNS)fnU_v6V~ROEJ=YX-Gh2L!yfg}E zWa-X9`N;%+R5)&f9)5=(ZIrD*rl#eq+Gj2=-+oMicxj^2-HwY zo`u^f{tv?(cP&+^h__w(d<*6-}1J5#Pic`U6C;D#nnFsaB)v^ff4EJ>wPJ!=}xD? z0l3^+ZdEn{Df`ac&*Zv4!kM{4aAJ_peyZp7YSk=C3|RkJq?5!VB*KI>R!bmN7d9=y zeEeJ&m5=l$WE*96@j~5vELEz7Yoh z(#*nS{^H3?H#o8n*);|jM9jjNx0mNCX&`0st~lZ}p>GgNM$C^FP$UHLoCMbNicc_; zvl^GL6MN+?{m>!Uy;#a9(7B>Vm=c?o&iK*gYa=SYNkpn9FOV(MW&N7~Wf>);xLwvs z0JBYex+JG8u@t5rB2S5XHz8G##*J(}DO>E1oQ0+9KjukvD zgvvulf#yP7l^}jx9tV8#`{{e_59Ah$!)}-|LDoVWBcRUM>mcwEvdjJc4b^bUuyy!t z{@Ce(h}8FSECP%b8xnaxv!|+N@xabbm~+R9+4H8lH+>bNl(-%XhZ? z}0~7su%tzw4Z%cXQyJb7i6=hW>YxueH`*X{oh7a(`}p_sq=9 z%*~~dmYw>55mp@7L8)VX56#-};D$#I{GEZ& z*MtoQ=N;yUtWde-j{$|cLIup!bxu(?W?Dv!0zJvK5}(v7$Q0FI*<*@FN*3ge)iuuJ8qWv+Is8>UGpxsyKV@EJmV6TFILqrSkf7 zBYRkuW5NKvtsXCZ18&ryr4oIkEQhz|n--*XxP=W9Tf4;ol-+gREv^KqB7~0FdV{Jo zLZ}jwB58&(XrZVcNKCDe*0b+?YD!Uf17{*CWErD-mOF}V)qk4julOI1DD4v5o{);K z_WH)^OUP>v&9Vv;*n7Es4N}AO_8VS2xa0UG#+&w=j6cZ^i_dLG?MOD(GxOG`U)KU| zO~pxxPEHnBqW4D;_xnQU;a7{BS-?Bh=vU30AqiEtp6gLBsE{qLM6ow-*LsjmOHO>g zX!!gj3MUYrGVGdBGB9g zPEp^d$ZR-JqnpAF00%DNr&G1Qukukyf>8HUfZz(!Xc#MKslKR@M+D!$%QbtC(mai+IL~WfJD3B0Y)`~UA zG#E;?aZPY|zIe0k!}F7-qSE||zINMhJvwDKU=K_GeJ!C}P-9(*3v_RkevX4< zLGp}o88z;AD##_A*|m|gp?=h1zs$YrJybq0J29a@On$m`*L~!;f#vWazJ2*h<9vE- z_N3~r5~34x55?UVRM(j>1y&QpToRA5h`9(cv!V;S+d5ljw453LSc!Z-dsNO7`iEnx zCHtj>XlV)UPUj!h$|L^Qzya17j(g>cZ!6QpQYP@ZVn}WEd)Mhqls2z_?D%(f+k<)r zcOs@)N>WbDZ0h|P0wD(3(%j+gnyM}6%X`^%YA3hj9c46Zsx5W<>mIAPPna|H=pDxB zU{niA1sVCoeMf%;X8}u4X`{w%kpkbPxFgrE#`%8(oMaEND-J6QhFBaPDUm7I*Ch)_ z6i{U?g>FZE2=W*<(63Y^Wz|aLR9OcRyX+mGa62efoJy*hyX>o}F7DU;%SMgHnjjJD z^6G&_>H8uKG!e!GI2OVvK1Ls87FmY{?5n@zpN0cmZ_0$2$4W2Z4D+%`P$>(O)c6nL zRA#>9ftuEZ|kyH079MEuT+k zTP$!7qN4=IrWe2IBQ%%FpafRyfB#*z4&@V(ZKWz{E-@2hA+ba-5CBoxRx*40ShZhW zrr}B_Z?hA~y2PkHEdyHhXlM$IsMm30NV+AfM=vBj6Jwj6Uc(${9r)w9OK#4mPUoF) zX_vqhJO6EdZN|*GnkH4iUD+WeC>`!anX;Z#)HJTBRwa!9%H5mB zo})-_|o#@PW=s9l2w;BH_e>i*yfY$<7XZGYi1{C4?V@d;s#$` z{3Y^bZE|w?_0u-^*>|*Y-3=gA2+&?UdALwL%37M^6Wz3@az~0o2D<{c8){GPDt3On z0@MHado?ka{#+(4*8?@TtZb)=%n*q&pYw29(XJ$>piWrxT#uhH*)GLx5b$@Om3~dw zYCT9QdpEaf)!mtOHXT^Ld+wwZSEqnOXM4)(*I||W-alX|+q+(Mud7@58nxHHWp-Kq z?0cEt6!5FIA&)$R2cg%N^|kf#fNLQ0dO+Ru#H4O5eSE|}!*x7~g(R8%*-Ru*mX_7< zXJ^z6YFXP)_#v2yxsf802A}ddTuW_15!O(Up;LtwB~~V;BjB1oud8{ZYrIH`=eoe_ zTe=_PpMf-#hCg2-%bt0DZ5Vs!J)bwb2aeZCWnZ$aM6(@Kta#`*#70<@$aLhEbpSIh z7skawYHL$V4*4i9`0lXOv{v(4M|pB2I5;>??i-)t4^8NqeqYDI`3P}XX+;8yLc!~& z%&iEXxcKcbaH8rDjyw+S#?EgL@+V7vJN1>_$FAw=T^sDqW-s{n`|FyKj3R(uzY~QMT1F1Wrp!ou& za^H8CeZv?4Sc3UFi)w=(bHUZui-A|joGnsdJjWH!KQMs57S=ZgP^(`(h5T<_0#>M%dQ$ z3UIbIv91f4ifHJkUx?sy7*xn-e58oJ> zlrhzGQ8eXW$1(y~x>h=trMkfZ z(&`dfW`C44Vvz+ByU+WZ#Js&~xCqRI#t7JR;Kqcc)$l7{jx zd7Xcn2PZ}E)o>kPWT4vBP&?U5Qf3d}+6Ea$c2f{fpM4S_9TVs8cZV^xx0}z$d$_}% zgyc7##c_bbCeIbc7}!|xF zSQ!f4vlS11AO2a*r^EX>D!^h;_?hu#hd;h}QRxSduUyGuc%_`B{pobh)1WZ&l!25)b|`zi41IIy#j--Gil&D458Z7B9cLF zamKq1w8h4xQvPPU%?)W3aQve;o7{YUSOR~G3~c-CBI(t+WnKP$pz!LD6|(8!+m)l! zTXNa+tLnVREaG-&PBcTl#cPknOelJy3)diqHgC#``$9)iO) zLzVq|xuVe*Su%>*qq#y|j(zff5Q&J+1O@-Nh}W;MZ>9@*EU1{$S|McCpqFbHnH%x8 zvHp>oJKwuGeWn^Aa7os`fZeC6HS3+KE%^9Tuyi)$2>EJqkKw*Ug#F%^{7iDjVZ0w< z2@dAJhfxT2L4ITj<{N}yhOIGW%HLcotzS%b`}q^Gh0GXBjpDYmfy9w!1N_2wUzSWa z`_D?1aYtH`04B;(&kfe?T~~>PhrIAbCfLK)Zm_-OChWpab;2Fw*41ZsGj$jrV?605 zL(@+yX0dNCKwZmnyxi&p^_)UaQ#0*^?wJhCEzIud&8?t%@4o^2UmoEq8Hb8`iHGXz zQAsbZry8FRt+~r$wKTX2iM#rH+%`yaWSJo(2o#6eyd?|VEEYg|4nS+m8+x0>?O?$5WQxM<7U(%(3X z=r*FrQonf_h;@hrf_+WvIG)zfyNT7H7<;Jc7oEw-qz>!naXm?5_hNlg!n2z;FLA`Oky z5pYMBem?ccoD{_Fj4P@NZIp#e;1dTOW^XgG4C;MevuNWwf4MO-qUs=9+ zRQ;5@zA$)D5Ldagye%N(850bWRiFL97tWfpHWagN4Tu-axUnsegXejv8&u3uD4i0* zNyB@cuX9}P(XA&A7dpz7q&LhY7LVXR3}GCgkdWxv&(gh7G(~y&tXn6|DN|m&k~unH zHF-!H-u{B_M^B(~y@(Z+sANa84t0^MSJJb?F~=V^g)hCUtl4!g4^XgqR3a*EDcb)j zgCtMqGF6lzA4fCt)ff;a(^Lu|(hiO*Gg`OB;Iu3DgSLgYkO1eZ!r$7OL@VuTSgJKi z9K?6kflPfPMB0khE4Ws2;(^Bc#ejidJoMNob!4ikL)mPc0fEhd=506z-b5)HM8_*< z>(*98)Ol(>Hff^FjnSc|W`GhCd7Q;YwlQlIUzfGWj_qwycI;R9S`-4*xlT9@)1)rUM+UvQM$NHKXCT!3%Uy2c0J)mx>7Cu9K7?f4|imwds2B zX$#(18SA1|;S(1L)o-9S@+9LY)1t^V^NA5qfY(6*C&5qi;f~ZFH!dpyU^Qu{@Mu{+StGha!_`vB(&NF04;>>i z^j*)W;ilmSn|3B_-*bzXykisVln1G_vX7X0t;7ru=5}0ldd0}F6R*DA6l!Xb5g)l@>_Wwb?z>T>bC{KVI~)&INC~Rosr+;Lw|&T z6of8rygq{QhuIFEO+Mmsn;&pE*>9_!rtmOHbOs$7d^XAZ<#r3#s^MnY>n%1Lgc3?n zX$@V~3RK7IdkN=@jkTGO_oPWNyO7lt6^yQbjeA*71&hM%9Ou|CJ{Cp7gh|EiH^9du zIm3eHCU~S(x`}D=8(4TU**m%smbxHzYNs{dILCg*m>F#C_Bq~ybL*X5o9r$6qHHR*PA?x3fbdsy$)7Y3 zoen!l=Quuo6L*~L|0Pu=sx^0Rf=qYyix~WgQ*$!RJA0kCJ7;TKc;JMo`qO9Sr08}q z#Z|$bLiX>9fz9pD#`Z})EIjIqf=VabGv2w-qz?o=5@R#kCH1TQuEgRnw7uPgHGhzxDRr6@#MtHUF8z_B%K@oGn*-1mLxR)MU0BE+#7nX z<*k=dSy3XgF9b1jiNcDTPAAOQZ1UPX2azq2Hq~s6neM}%nZrCne}SZ!;(#R%B+tgY zOA%a#C#=TmrNyfxG{?5gz~9f9Z#}vdUG*w3hp1mWjEVH)R7g_?T9+KA8Xnoed8Gfo= zSLQvfCKkGM9isX-XIDqIb_}4 zXEHD4L~lazpp7`iEsTwf2%pH-bRaV~eZs_Yil-mr>k%z(S+aUK8)c*etKj){58cF_ zoU)a<-TSTHIZLN=331=G^F~v4vaxZ9&tBBQU8G{PHdRKI5p=MHvN-1oqIV#7`=T?} zBc$xatO;J)IF*vdMrL#Ch(rD6%iDVlOdKootUAL&)k&vH6qad=uU!i2!O-rG${;7; z>RsPFa(6>xlr|XXjv#9=|k#(R|MFSc~CUi08u06%40|1a-FjxARX8PiTq(S0`e* z4(DN925amSA?$~kHRCjF<6!e0m@SdHd8%w&Ld3RH4Ewnpx4Hm1zRo9z)OYSM+t*Y7 z2_%3einIyTsal-s>cmgQ%#TL@L)WECa?Ty`9E3yJachH4->6RFuj`j5 zj_>6@`}HS~^~2K4o|n(OBm$gjZtQbRXc)+!3SGkWM^s zz=mrgtwUpR$`o?t>(Gx)pp4Zeetm~or(tp_Lq3%9gHmQH7I@F=RwX--sa)@nd{S)f ztn?Y1sY}JPugB8F!T+hL_<$r!4t|vak`l7fCSyjAz9Ox?-$1Oe=dF9MGdRhs&2`Cp z#bQqG(MW&_p1d&UC)kmimS6qst^a0=V(p--9YCOSwGj(x+U~p1KRU#LpoWNul!bjA zQoI|2oLEXs67_3jBQyUVm$=Zm%Jq$&j=$VSbN>@7Y7yO+-AA{N4>g(aYcVQ%PLy~m zp_Ew5#48S;(lmKfbHKUEfbEHTkj|(~y?dOf!^?HVxT*vRIiGa~9ihP~63^+pG-!Q4 zz47A)O-nz;)daa*dZOvuEgxA?TGEDu4VkOnVnMPvHQbx&NqCIn%*SybMzgmT0#Gjw zwA|DTet8A_aCY*JnLsE!+r}I_=dkJKJK@j6`PxoNx+uYNY$HoLd$7XL#-X3VDaa&I z2W8UWOp9*4G0acZ1iWF1iKai|*eeK6U1`D?9A!X^m9>Ny!hX1?;~9LV`7 z$AV$uH88^K=FtS z;;i#Jds3BU3`HAR#Hq?zT<5M64C&LacsmlLk%j>2rETW#)qK&xJ%aTROO#=+?o0Yi zew?{8Z3*}B#-rG02?bW+%WvGU5m0Z8pM$Q`NJP_3+esm*C`-Qh{0QcF+Az>j#a5Jy z36Q8LuWVTfa&=$XLSjQ}qtI&$H@$H%SDq==Rjz+b(!1jf-ys215{kbIgk3)CD#=M4 zd|zTjVSl&V9|yU$t$gVw4}H_g{UuH0Y|}h1-Ko7A=ZA*N1_L&=2VDsMVpkvDKdy+n zf%F4gh)TS2%3#O%TQ2xr@zzy4HWu#imOSPj&T;v6QN+V7c#T3dsXkjp%rfTtRR3Qg z5eSY93X|yl(1pShA}wr-;bre^JZ}z&_#$xWma}z}duy6-+d=5m)8rE)@#~t zc_Qj^YNGq0p@mb6&?Z<_t_qTAT<)K41xi?rhNy`VLYYInhz*HtHDlfDg^q6p;fB(E z)SLCrRb#z2=lgQ!E)R!CvzWYew+aD0<`*7*BZ#EODlkl#s9U)xS)PFyjV~_1}a*=8YhK!+gsA{}&n1*Vi6x(4a`q&prak z;0m;|YwN8a0F}0_`MG7+pUm<#I45?&-&kOwq;QeCp-I1WK9pkyxKJbN5g-Gen*;FQ zFWiH-*oy*Kf4?35qZc$0WCsRiWZ@!!Frx&q0D(iyVWPJ{!v%eV98``z8HY~9X<;HvtgZ0w@zJ zBa^A~$`ex-#bYQlf!~3+API9o%VNPrL68IhfKQMWqyX3ApFk)AM2K5Wk!)Fs(83zO6!7@>MK@lhUu4Oz;*r(z{I8bLD_%wJoHD!!s`A|O zEn&U|PwAXPjzvM~++xmRBVOs81v>yq5i)=77hOoT;sFAUpM-MG zo#H`C-g8#q@EfF0eEk(bBux)6XpDH=R=A~}ymL?X6?WBM^QzGUTa}^SWb1TTRP8@K zgT=)$K}i>3Ow5EVf+%c~Y6?^f@`N4m<04<1Z$lv#C-u-Du!PQsxH`T0%4w%0D2_Sa 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 IlGYFY3sV=Xi2wiq literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 81c5eadd..2b3b28f1 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -15,6 +15,7 @@ sc2reader.log_utils.log_to_console("INFO") +print("YO YO YO THIS IS FOR REAL") class TestReplays(unittest.TestCase): @@ -369,6 +370,8 @@ def test_daedalus_point(self): def test_reloaded(self): replay = sc2reader.load_replay("test_replays/2.1.3.28667/Habitation Station LE (54).SC2Replay") + def test_214(self): + replay = sc2reader.load_replay("test_replays/2.1.4/Catallena LE.SC2Replay", load_level=4) class TestGameEngine(unittest.TestCase): From 6f30900c70a4d5ac95abb11bf98fe8a61f949cad Mon Sep 17 00:00:00 2001 From: David Joerg Date: Fri, 26 Sep 2014 12:09:07 -0400 Subject: [PATCH 173/238] fix for 2.1.4 --- sc2reader/readers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index e3434fd7..65cc3d5e 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -95,6 +95,7 @@ def __call__(self, data, replay): ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, handicap=data.read_bits(7), observe=data.read_bits(2), + logo_index=data.read_uint32() if replay.base_build >= 32283 else None, working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, rewards=[data.read_uint32() for i in range(data.read_bits(6 if replay.base_build >= 24764 else 5))], toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, From 6580ebb3584bdbdbd65f8feb9a9089d68b809cb9 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 28 Dec 2014 23:26:42 -0500 Subject: [PATCH 174/238] Fix various issues related to issue #180. --- sc2reader/engine/plugins/context.py | 4 ++-- sc2reader/scripts/sc2parse.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index e978ea1f..4bead0b9 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -28,7 +28,7 @@ def handleCommandEvent(self, event, replay): if not getattr(replay, 'marked_error', None): replay.marked_error = True event.logger.error(replay.filename) - event.logger.error("Release String: "+replay.release_string) + event.logger.error("Release String: " + replay.release_string) for player in replay.players: event.logger.error("\t{0}".format(player)) @@ -254,7 +254,7 @@ def load_message_game_player(self, event, replay): event.player = replay.human[event.pid] event.player.events.append(event) elif event.pid != 16: - self.logger.error("Bad pid ({0}) for event {1} at {2} [{3}].".format(event.pid, event.__class__, Length(seconds=event.second), event.frames)) + self.logger.error("Bad pid ({0}) for event {1} at {2} [{3}].".format(event.pid, event.__class__, Length(seconds=event.second), event.frame)) else: pass # This is a global event diff --git a/sc2reader/scripts/sc2parse.py b/sc2reader/scripts/sc2parse.py index d0808340..8885c671 100755 --- a/sc2reader/scripts/sc2parse.py +++ b/sc2reader/scripts/sc2parse.py @@ -66,10 +66,10 @@ def main(): print("") print(path) print('{build} - {real_type} on {map_name} - Played {start_time}'.format(**e.replay.__dict__)) - print('[ERROR]', e.message) + print('[ERROR] {}', e) for event in e.game_events[-5:]: print('{0} - {1}'.format(hex(event.type), event.bytes.encode('hex'))) - print(e.buffer.read_range(e.location, e.location+50).encode('hex')) + print(e.buffer.read_range(e.location, e.location + 50).encode('hex')) print except Exception as e: print("") @@ -77,20 +77,20 @@ def main(): try: replay = sc2reader.load_replay(path, debug=True, load_level=2) print('{build} - {real_type} on {map_name} - Played {start_time}'.format(**replay.__dict__)) - print('[ERROR] {0}'.format(e.message)) + print('[ERROR] {0}'.format(e)) for pid, attributes in replay.attributes.items(): print("{0} {1}".format(pid, attributes)) - for pid, info in enumerate(replay.raw_data['replay.details'].players): + for pid, info in enumerate(replay.players): print("{0} {1}".format(pid, info)) - for message in replay.raw_data['replay.message.events'].messages: + for message in replay.messages: print("{0} {1}".format(message.pid, message.text)) traceback.print_exc() print("") except Exception as e2: replay = sc2reader.load_replay(path, debug=True, load_level=0) print('Total failure parsing {release_string}'.format(**replay.__dict__)) - print('[ERROR] {0}'.format(e.message)) - print('[ERROR] {0}'.format(e2.message)) + print('[ERROR] {0}'.format(e)) + print('[ERROR] {0}'.format(e2)) traceback.print_exc() print From 0dbe56191137c773ff717842ccbc9b28b3b4d677 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 29 Dec 2014 02:29:05 -0500 Subject: [PATCH 175/238] Fix gameheart plugin handling of teams and observers. Closes #174. --- sc2reader/engine/plugins/gameheart.py | 3 +++ sc2reader/objects.py | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sc2reader/engine/plugins/gameheart.py b/sc2reader/engine/plugins/gameheart.py index 2812f5b1..08bfc67e 100644 --- a/sc2reader/engine/plugins/gameheart.py +++ b/sc2reader/engine/plugins/gameheart.py @@ -69,6 +69,9 @@ def fix_events(self, replay, start_frame): def fix_entities(self, replay, actual_players): # Change the players that aren't playing into observers for p in [p for p in replay.players if p.pid not in actual_players]: + # Fix the slot data to be accurate + p.slot_data['observe'] = 1 + p.slot_data['team_id'] = None obs = Observer(p.sid, p.slot_data, p.uid, p.init_data, p.pid) # Because these obs start the game as players the client diff --git a/sc2reader/objects.py b/sc2reader/objects.py index 684c8180..711203a6 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -101,7 +101,9 @@ def __init__(self, sid, slot_data): self.handicap = slot_data['handicap'] #: The entity's team number. None for observers - self.team_id = slot_data['team_id']+1 + self.team_id = None + if slot_data['team_id'] is not None: + self.team_id = slot_data['team_id'] + 1 #: A flag indicating if the person is a human or computer #: Really just a shortcut for isinstance(entity, User) From 83d38092ad2c80f86a1b4324022038f1a4f044e2 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 29 Dec 2014 02:30:38 -0500 Subject: [PATCH 176/238] Add option to print observers to sc2printer. --- sc2reader/scripts/sc2printer.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/sc2reader/scripts/sc2printer.py b/sc2reader/scripts/sc2printer.py index 5a1bf94e..c780d16e 100755 --- a/sc2reader/scripts/sc2printer.py +++ b/sc2reader/scripts/sc2printer.py @@ -28,6 +28,11 @@ def printReplay(filepath, arguments): print(" Team {0}\t{1} ({2})".format(team.number, team.players[0].name, team.players[0].pick_race[0])) for player in team.players[1:]: print(" \t{0} ({1})".format(player.name, player.pick_race[0])) + if arguments.observers: + print(" Observers:") + for observer in replay.observers: + print(" {0}".format(observer.name)) + if arguments.messages: print(" Messages:") for message in replay.messages: @@ -43,9 +48,9 @@ def printReplay(filepath, arguments): print("\nVersion {0} replay:\n\t{1}".format(e.replay.release_string, e.replay.filepath)) print("\t{0}, Type={1:X}".format(e.msg, e.type)) print("\tPrevious Event: {0}".format(prev.name)) - print("\t\t"+prev.bytes.encode('hex')) + print("\t\t" + prev.bytes.encode('hex')) print("\tFollowing Bytes:") - print("\t\t"+e.buffer.read_range(e.location, e.location+30).encode('hex')) + print("\t\t" + e.buffer.read_range(e.location, e.location + 30).encode('hex')) print("Error with '{0}': ".format(filepath)) print(e) except Exception as e: @@ -92,13 +97,15 @@ def main(): shared_args = parser.add_argument_group('Shared Arguments') shared_args.add_argument('--date', action="store_true", default=True, - help="print(game date [default on]") + help="print game date [default on]") shared_args.add_argument('--length', action="store_true", default=False, - help="print(game duration mm:ss in game time (not real time) [default off]") + help="print game duration mm:ss in game time (not real time) [default off]") shared_args.add_argument('--map', action="store_true", default=True, - help="print(map name [default on]") + help="print map name [default on]") shared_args.add_argument('--teams', action="store_true", default=True, - help="print(teams, their players, and the race matchup [default on]") + help="print teams, their players, and the race matchup [default on]") + shared_args.add_argument('--observers', action="store_true", default=True, + help="print observers") replay_args = parser.add_argument_group('Replay Options') replay_args.add_argument('--messages', action="store_true", default=False, From 26c569e501bdac7af9a84fd342bdebceb4d62f55 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 29 Dec 2014 16:09:55 -0500 Subject: [PATCH 177/238] Harden up the code for processing s2ma files. --- sc2reader/resources.py | 60 ++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 44a26c7a..50b47623 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -612,17 +612,20 @@ def __getstate__(self): class Map(Resource): url_template = 'http://{0}.depot.battle.net:1119/{1}.s2ma' - #: The localized (only enUS supported right now) map name - name = str() + def __init__(self, map_file, filename=None, region=None, map_hash=None, **options): + super(Map, self).__init__(map_file, filename, **options) - #: The map's author - author = str() + #: The localized (only enUS supported right now) map name. + self.name = str() - #: The map description as written by author - description = str() + #: The localized (only enUS supported right now) map author. + self.author = str() - def __init__(self, map_file, filename=None, region=None, map_hash=None, **options): - super(Map, self).__init__(map_file, filename, **options) + #: The localized (only enUS supported right now) map description. + self.description = str() + + #: The localized (only enUS supported right now) map website. + self.website = str() #: The unique hash used to identify this map on bnet's depots. self.hash = map_hash @@ -643,9 +646,9 @@ def __init__(self, map_file, filename=None, region=None, map_hash=None, **option # Clearly this isn't a great solution but we can't be throwing exceptions # just because US English wasn't a concern of the map author. # TODO: Make this work regardless of the localizations available. - game_strings = self.archive.read_file('enUS.SC2Data\LocalizedData\GameStrings.txt').decode('utf8') - if game_strings: - for line in game_strings.split('\r\n'): + game_strings_file = self.archive.read_file('enUS.SC2Data\LocalizedData\GameStrings.txt') + if game_strings_file: + for line in game_strings_file.decode('utf8').split('\r\n'): if len(line) == 0: continue @@ -660,21 +663,26 @@ def __init__(self, map_file, filename=None, region=None, map_hash=None, **option self.website = value #: A reference to the map's :class:`~sc2reader.objects.MapInfo` object - self.map_info = MapInfo(self.archive.read_file('MapInfo')) - - doc_info = ElementTree.fromstring(self.archive.read_file('DocumentInfo').decode('utf8')) - - icon_path_node = doc_info.find('Icon/Value') - #: (Optional) The path to the icon for the map, relative to the archive root - self.icon_path = icon_path_node.text if icon_path_node is not None else None - - #: (Optional) The icon image for the map in tga format - self.icon = self.archive.read_file(self.icon_path) if self.icon_path is not None else None - - #: A list of module names this map depends on - self.dependencies = list() - for dependency_node in doc_info.findall('Dependencies/Value'): - self.dependencies.append(dependency_node.text) + self.map_info = None + map_info_file = self.archive.read_file('MapInfo') + if map_info_file: + self.map_info = MapInfo(map_info_file) + + doc_info_file = self.archive.read_file('DocumentInfo') + if doc_info_file: + doc_info = ElementTree.fromstring(doc_info_file.decode('utf8')) + + icon_path_node = doc_info.find('Icon/Value') + #: (Optional) The path to the icon for the map, relative to the archive root + self.icon_path = icon_path_node.text if icon_path_node is not None else None + + #: (Optional) The icon image for the map in tga format + self.icon = self.archive.read_file(self.icon_path) if self.icon_path is not None else None + + #: A list of module names this map depends on + self.dependencies = list() + for dependency_node in doc_info.findall('Dependencies/Value'): + self.dependencies.append(dependency_node.text) @classmethod def get_url(cls, region, map_hash): From 6c48e8a93216c9371b6b935029d1c8e92da850dd Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 29 Dec 2014 17:15:16 -0500 Subject: [PATCH 178/238] This is a polish translation. --- sc2reader/constants.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc2reader/constants.py b/sc2reader/constants.py index 7b701dee..43c2d66e 100644 --- a/sc2reader/constants.py +++ b/sc2reader/constants.py @@ -23,7 +23,7 @@ '프로토스': 'Protoss', '저그': 'Zerg', - # ??eu + # plPL 'Terranie': 'Terran', 'Protosi': 'Protoss', 'Zergi': 'Zerg', @@ -126,6 +126,7 @@ 1: 'kr', 2: 'tw', }, + # Taiwan - appear to both map to same place 'tw': { 1: 'kr', From a194b677c5f702c6d122cb956a076a39b324478f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 31 Dec 2014 14:06:55 -0500 Subject: [PATCH 179/238] Remove PersonDict and AttributeDict implementations. --- sc2reader/factories/plugins/replay.py | 2 +- sc2reader/factories/sc2factory.py | 4 +-- sc2reader/readers.py | 2 +- sc2reader/resources.py | 30 ++++++++-------- sc2reader/utils.py | 52 ++------------------------- 5 files changed, 22 insertions(+), 68 deletions(-) diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index f6b19e79..ccf29401 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -123,7 +123,7 @@ def APMTracker(replay): @plugin def SelectionTracker(replay): - debug = replay.opt.debug + debug = replay.opt['debug'] logger = log_utils.get_logger(SelectionTracker) for person in replay.entities: diff --git a/sc2reader/factories/sc2factory.py b/sc2reader/factories/sc2factory.py index 7518767b..36020b2d 100644 --- a/sc2reader/factories/sc2factory.py +++ b/sc2reader/factories/sc2factory.py @@ -156,7 +156,7 @@ def _get_plugins(self, cls): return plugins def _get_options(self, cls, **new_options): - options = utils.AttributeDict() + options = dict() for opt_cls, cls_options in self.options.items(): if issubclass(cls, opt_cls): options.update(cls_options) @@ -175,7 +175,7 @@ def _load_resources(self, resources, options=None, **new_options): yield self._load_resource(resource, options=options) def load_remote_resource_contents(self, resource, **options): - self.logger.info("Fetching remote resource: "+resource) + self.logger.info("Fetching remote resource: " + resource) return urlopen(resource).read() def load_local_resource_contents(self, location, **options): diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 65cc3d5e..ad539a0c 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -297,7 +297,7 @@ def __call__(self, data, replay): # method short cuts, avoid dict lookups EVENT_DISPATCH = self.EVENT_DISPATCH - debug = replay.opt.debug + debug = replay.opt['debug'] tell = data.tell read_frames = data.read_frames read_bits = data.read_bits diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 50b47623..0aedcffd 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -23,7 +23,7 @@ class Resource(object): def __init__(self, file_object, filename=None, factory=None, **options): self.factory = factory - self.opt = utils.AttributeDict(options) + self.opt = options self.logger = log_utils.get_logger(self.__class__) self.filename = filename or getattr(file_object, 'name', 'Unavailable') @@ -137,7 +137,7 @@ class Replay(Resource): #: A dual key dict mapping player names and numbers to #: :class:`Player` objects - player = utils.PersonDict() + player = dict() #: A list of :class:`Observer` objects from the game observers = list() @@ -148,7 +148,7 @@ class Replay(Resource): #: A dual key dict mapping :class:`Person` object to their #: person id's and names - person = utils.PersonDict() + person = dict() #: A list of :class:`Person` objects from the game representing #: only the human players from the :attr:`people` list @@ -214,11 +214,11 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.events = list() self.teams, self.team = list(), dict() - self.player = utils.PersonDict() - self.observer = utils.PersonDict() - self.human = utils.PersonDict() - self.computer = utils.PersonDict() - self.entity = utils.PersonDict() + self.player = dict() + self.observer = dict() + self.human = dict() + self.computer = dict() + self.entity = dict() self.players = list() self.observers = list() # Unordered list of Observer @@ -599,7 +599,7 @@ def _read_data(self, data_file, reader): data = utils.extract_data_file(data_file, self.archive) if data: self.raw_data[data_file] = reader(data, self) - elif self.opt.debug and data_file not in ['replay.message.events', 'replay.tracker.events']: + elif self.opt['debug'] and data_file not in ['replay.message.events', 'replay.tracker.events']: raise ValueError("{0} not found in archive".format(data_file)) def __getstate__(self): @@ -862,7 +862,7 @@ def load_translations(self): self.lang_sheets = dict() self.translations = dict() for lang, files in self.localization_urls.items(): - if lang != self.opt.lang: + if lang != self.opt['lang']: continue sheets = list() @@ -873,9 +873,9 @@ def load_translations(self): for uid, (sheet, item) in self.id_map.items(): if sheet < len(sheets) and item in sheets[sheet]: translation[uid] = sheets[sheet][item] - elif self.opt.debug: + elif self.opt['debug']: msg = "No {0} translation for sheet {1}, item {2}" - raise SC2ReaderLocalizationError(msg.format(self.opt.lang, sheet, item)) + raise SC2ReaderLocalizationError(msg.format(self.opt['lang'], sheet, item)) else: translation[uid] = "Unknown" @@ -883,7 +883,7 @@ def load_translations(self): self.translations[lang] = translation def load_map_info(self): - map_strings = self.lang_sheets[self.opt.lang][-1] + map_strings = self.lang_sheets[self.opt['lang']][-1] self.map_name = map_strings[1] self.map_description = map_strings[2] self.map_tileset = map_strings[3] @@ -942,7 +942,7 @@ def use_property(prop, player=None): activated[(prop.id, player)] = use return use - translation = self.translations[self.opt.lang] + translation = self.translations[self.opt['lang']] for uid, prop in properties.items(): name = translation.get(uid, "Unknown") if prop.is_lobby: @@ -956,7 +956,7 @@ def use_property(prop, player=None): self.player_settings[index][name] = translation[(uid, value)] def load_player_stats(self): - translation = self.translations[self.opt.lang] + translation = self.translations[self.opt['lang']] stat_items = sum([p[0] for p in self.parts[3:]], []) diff --git a/sc2reader/utils.py b/sc2reader/utils.py index e728c983..44634de7 100644 --- a/sc2reader/utils.py +++ b/sc2reader/utils.py @@ -48,57 +48,11 @@ def __str__(self): return self.url -class PersonDict(dict): - """ - Deprecated! - - Supports lookup on both the player name and player id - - :: - - person = PersonDict() - person[1] = Player(1,"ShadesofGray") - me = person.name("ShadesofGray") - del person[me.pid] - - Delete is supported on the player id only - """ - def __init__(self): - super(PersonDict, self).__init__() - self._key_map = dict() - - def name(self, player_name): - """ deprecated because it is possible for multiple players to have the same name. """ - return self[self._key_map[player_name]] - - def __setitem__(self, key, value): - self._key_map[value.name] = key - super(PersonDict, self).__setitem__(key, value) - - def windows_to_unix(windows_time): # This windows timestamp measures the number of 100 nanosecond periods since # January 1st, 1601. First we subtract the number of nanosecond periods from # 1601-1970, then we divide by 10^7 to bring it back to seconds. - return int((windows_time-116444735995904000)/10**7) - - -class AttributeDict(dict): - """ - Support access to dictionary items via the dot syntax as though they - were class attributes. Also support setting new keys via dot syntax. - """ - def __getattr__(self, name): - try: - return self[name] - except KeyError: - raise AttributeError('No such attribute {0}'.format(name)) - - def __setattr__(self, name, value): - self[name] = value - - def copy(self): - return AttributeDict(self.items()) + return int((windows_time - 116444735995904000) / 10 ** 7) @loggable @@ -252,12 +206,12 @@ class Length(timedelta): @property def hours(self): """ The number of hours in represented. """ - return self.seconds//3600 + return self.seconds // 3600 @property def mins(self): """ The number of minutes in excess of the hours. """ - return self.seconds//60 % 60 + return self.seconds // 60 % 60 @property def secs(self): From 3e1cea3759a912775f45d45ab6f5eb12ee307f1f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 5 Jan 2015 10:53:50 -0500 Subject: [PATCH 180/238] Remove dead code. --- sc2reader/utils.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sc2reader/utils.py b/sc2reader/utils.py index 44634de7..2ee3d382 100644 --- a/sc2reader/utils.py +++ b/sc2reader/utils.py @@ -151,12 +151,6 @@ def recovery_attempt(): raise MPQError("Unable to extract file: {0}".format(data_file), e) -def merged_dict(a, b): - c = a.copy() - c.update(b) - return c - - def get_files(path, exclude=list(), depth=-1, followlinks=False, extension=None, **extras): """ Retrieves files from the given path with configurable behavior. From 722ae4f16430c023bafa32fa69a1773909b1f867 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 5 Jan 2015 10:54:47 -0500 Subject: [PATCH 181/238] Bump version to a pre-release (for clarity). --- sc2reader/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 040febcb..8ae84731 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -20,7 +20,7 @@ """ from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.4" +__version__ = "0.7.0-pre" import os import sys diff --git a/setup.py b/setup.py index c9dee97d..9e4b3f82 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.4', + version='0.7.0-pre', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From c5d22d68ba802f36068ed7199cc157ee0521819b Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Wed, 11 Feb 2015 10:51:15 -0800 Subject: [PATCH 182/238] decoding this so that it reads as a string not bytes in python 3 --- sc2reader/events/tracker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 5466d4d5..41b5c2f2 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -442,7 +442,7 @@ def __init__(self, frames, data, build): self.player = None #: The name of the upgrade - self.upgrade_type_name = data[1] + self.upgrade_type_name = data[1].decode('utf8') #: The number of times this upgrade as been researched self.count = data[2] From 20156ecd41d03cb581071dc74e23b63a3fffe2f0 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Mar 2015 13:46:32 -0400 Subject: [PATCH 183/238] Fix ancient typo in struct decoder. refs #184 --- sc2reader/decoders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index 63324649..b2ff35f9 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -368,7 +368,7 @@ def read_struct(self, datatype=None): data = self._buffer.read_bytes(4) # self.read_uint32() elif datatype == 0x08: # u64 - data = self._buffer.read_unit64() + data = self._buffer.read_uint64() elif datatype == 0x09: # vint data = self.read_vint() From 1ccc57c865cccb1e323e74d03c59aa206ccf4a1f Mon Sep 17 00:00:00 2001 From: David Joerg Date: Tue, 15 Sep 2015 15:38:21 -0400 Subject: [PATCH 184/238] beginning of LotV support. ported over from mainline. --- sc2reader/data/LotV/base_abilities.csv | 397 +++++++++++++++++++ sc2reader/data/LotV/base_units.csv | 521 +++++++++++++++++++++++++ sc2reader/data/__init__.py | 7 +- sc2reader/data/attributes.json | 262 +++++++++++++ sc2reader/decoders.py | 2 +- sc2reader/objects.py | 12 + sc2reader/readers.py | 240 +++++++++++- sc2reader/resources.py | 20 +- test_replays/lotv/lotv1.SC2Replay | Bin 0 -> 114700 bytes test_replays/lotv/lotv2.SC2Replay | Bin 0 -> 73471 bytes test_replays/test_all.py | 6 +- 11 files changed, 1461 insertions(+), 6 deletions(-) create mode 100755 sc2reader/data/LotV/base_abilities.csv create mode 100755 sc2reader/data/LotV/base_units.csv create mode 100644 test_replays/lotv/lotv1.SC2Replay create mode 100644 test_replays/lotv/lotv2.SC2Replay diff --git a/sc2reader/data/LotV/base_abilities.csv b/sc2reader/data/LotV/base_abilities.csv new file mode 100755 index 00000000..8da0580d --- /dev/null +++ b/sc2reader/data/LotV/base_abilities.csv @@ -0,0 +1,397 @@ +0,CAbil +1,CAbilEffect +2,CAbilQueueable +3,CAbilProgress +4,CAbilRedirect +5,CAbilArmMagazine +6,CAbilAttack +7,CAbilAugment +8,CAbilBattery +9,CAbilBeacon +10,CAbilBehavior +11,CAbilBuild +12,CAbilBuildable +13,CAbilEffectInstant +14,CAbilEffectTarget +15,CAbilHarvest +16,CAbilInteract +17,CAbilInventory +18,CAbilLearn +19,CAbilMerge +20,CAbilMergeable +21,CAbilMorph +22,CAbilMorphPlacement +23,CAbilMove +24,CAbilPawn +25,CAbilQueue +26,CAbilRally +27,CAbilResearch +28,CAbilRevive +29,CAbilSpecialize +30,CAbilStop +31,CAbilTrain +32,CAbilTransport +33,CAbilWarpable +34,CAbilWarpTrain +35,Taunt +36,stop +37,HoldFire +38,move +39,Beacon +40,ReviveSelf +41,ReviveSelfAtTarget +42,ReviveSelfReplaceTarget +43,ReviveSelfOnCreep +45,attack +47,MetalGateDefaultLower +48,MetalGateDefaultRaise +49,TerranAddOns +50,TerranBuildingLiftOff +51,TerranBuildingLand +52,Refund +53,Salvage +54,DisguiseChangeling +55,SalvageShared +56,Corruption +57,GhostHoldFire +58,GhostWeaponsFree +59,MorphToInfestedTerran +60,Explode +61,FleetBeaconResearch +62,FungalGrowth +63,GuardianShield +64,MULERepair +65,MorphZerglingToBaneling +66,NexusTrainMothership +67,Feedback +68,MassRecall +69,PlacePointDefenseDrone +70,HallucinationArchon +71,HallucinationColossus +72,HallucinationHighTemplar +73,HallucinationImmortal +74,HallucinationPhoenix +75,HallucinationProbe +76,HallucinationStalker +77,HallucinationVoidRay +78,HallucinationWarpPrism +79,HallucinationZealot +80,MULEGather +81,SeekerMissile +82,CalldownMULE +83,GravitonBeam +84,BuildinProgressNydusCanal +85,Siphon +86,Leech +87,SpawnChangeling +88,DisguiseAsZealot +89,DisguiseAsMarineWithShield +90,DisguiseAsMarineWithoutShield +91,DisguiseAsZerglingWithWings +92,DisguiseAsZerglingWithoutWings +93,PhaseShift +94,Rally +95,ProgressRally +96,RallyCommand +97,RallyNexus +98,RallyHatchery +99,RoachWarrenResearch +100,SapStructure +101,InfestedTerrans +102,NeuralParasite +103,SpawnLarva +104,StimpackMarauder +105,SupplyDrop +106,250mmStrikeCannons +107,TemporalRift +108,TimeWarp +109,UltraliskCavernResearch +110,WormholeTransit +111,SCVHarvest +112,ProbeHarvest +113,AttackWarpPrism +114,que1 +115,que5 +116,que5CancelToSelection +117,que5LongBlend +118,que5Addon +119,BuildInProgress +120,Repair +121,TerranBuild +122,RavenBuild +123,Stimpack +124,GhostCloak +125,Snipe +126,MedivacHeal +127,SiegeMode +128,Unsiege +129,BansheeCloak +130,MedivacTransport +131,ScannerSweep +132,Yamato +133,AssaultMode +134,FighterMode +135,BunkerTransport +136,CommandCenterTransport +137,CommandCenterLiftOff +138,CommandCenterLand +139,BarracksAddOns +140,BarracksLiftOff +141,FactoryAddOns +142,FactoryLiftOff +143,StarportAddOns +144,StarportLiftOff +145,FactoryLand +146,StarportLand +147,CommandCenterTrain +148,BarracksLand +149,SupplyDepotLower +150,SupplyDepotRaise +151,BarracksTrain +152,FactoryTrain +153,StarportTrain +154,EngineeringBayResearch +155,MercCompoundResearch +156,ArmSiloWithNuke +157,BarracksTechLabResearch +158,FactoryTechLabResearch +159,StarportTechLabResearch +160,GhostAcademyResearch +161,ArmoryResearch +162,ProtossBuild +163,WarpPrismTransport +164,GatewayTrain +165,StargateTrain +166,RoboticsFacilityTrain +167,NexusTrain +168,PsiStorm +169,HangarQueue5 +170,BroodLordQueue2 +171,CarrierHangar +172,ForgeResearch +173,RoboticsBayResearch +174,TemplarArchivesResearch +175,ZergBuild +176,DroneHarvest +177,evolutionchamberresearch +178,UpgradeToLair +179,UpgradeToHive +180,UpgradeToGreaterSpire +181,LairResearch +182,SpawningPoolResearch +183,HydraliskDenResearch +184,SpireResearch +185,LarvaTrain +186,MorphToBroodLord +187,BurrowBanelingDown +188,BurrowBanelingUp +189,BurrowDroneDown +190,BurrowDroneUp +191,BurrowHydraliskDown +192,BurrowHydraliskUp +193,BurrowRoachDown +194,BurrowRoachUp +195,BurrowZerglingDown +196,BurrowZerglingUp +197,BurrowInfestorTerranDown +198,BurrowInfestorTerranUp +199,RedstoneLavaCritterBurrow +200,RedstoneLavaCritterInjuredBurrow +201,RedstoneLavaCritterUnburrow +202,RedstoneLavaCritterInjuredUnburrow +203,OverlordTransport +204,Mergeable +205,Warpable +206,WarpGateTrain +207,BurrowQueenDown +208,BurrowQueenUp +209,NydusCanalTransport +210,Blink +211,BurrowInfestorDown +212,BurrowInfestorUp +213,MorphToOverseer +214,UpgradeToPlanetaryFortress +215,InfestationPitResearch +216,BanelingNestResearch +217,BurrowUltraliskDown +218,BurrowUltraliskUp +219,UpgradeToOrbital +220,UpgradeToWarpGate +221,MorphBackToGateway +222,OrbitalLiftOff +223,OrbitalCommandLand +224,ForceField +225,PhasingMode +226,TransportMode +227,FusionCoreResearch +228,CyberneticsCoreResearch +229,TwilightCouncilResearch +230,TacNukeStrike +231,SalvageBunkerRefund +232,SalvageBunker +233,EMP +234,Vortex +235,TrainQueen +236,BurrowCreepTumorDown +237,Transfusion +238,TechLabMorph +239,BarracksTechLabMorph +240,FactoryTechLabMorph +241,StarportTechLabMorph +242,ReactorMorph +243,BarracksReactorMorph +244,FactoryReactorMorph +245,StarportReactorMorph +246,AttackRedirect +247,StimpackRedirect +248,StimpackMarauderRedirect +249,burrowedStop +250,StopRedirect +251,GenerateCreep +252,QueenBuild +253,SpineCrawlerUproot +254,SporeCrawlerUproot +255,SpineCrawlerRoot +256,SporeCrawlerRoot +257,CreepTumorBuild +258,BuildAutoTurret +259,ArchonWarp +260,BuildNydusCanal +261,BroodLordHangar +262,Charge +263,TowerCapture +264,HerdInteract +265,Frenzy +266,Contaminate +267,Shatter +268,InfestedTerransLayEgg +269,que5Passive +270,que5PassiveCancelToSelection +292,BridgeExtend +293,BridgeRetract +294,DigesterCreepSpray +295,MorphToCollapsibleTerranTowerDebris +296,MorphToCollapsibleTerranTowerDebrisRampLeft +297,MorphToCollapsibleTerranTowerDebrisRampRight +298,MorphToMothership +299,MothershipStasis +300,MothershipCoreWeapon +301,NexusTrainMothershipCore +302,MothershipCoreTeleport +303,SalvageDroneRefund +304,SalvageDrone +305,SalvageZerglingRefund +306,SalvageZergling +307,SalvageQueenRefund +308,SalvageQueen +309,SalvageRoachRefund +310,SalvageRoach +311,SalvageBanelingRefund +312,SalvageBaneling +313,SalvageHydraliskRefund +314,SalvageHydralisk +315,SalvageInfestorRefund +316,SalvageInfestor +317,SalvageSwarmHostRefund +318,SalvageSwarmHost +319,SalvageUltraliskRefund +320,SalvageUltralisk +321,DigesterTransport +322,SpectreShield +323,XelNagaHealingShrine +324,NexusInvulnerability +325,NexusPhaseShift +326,SpawnChangelingTarget +327,QueenLand +328,QueenFly +329,OracleCloakField +330,FlyerShield +331,LocustTrain +332,MothershipCoreMassRecall +333,SingleRecall +334,MorphToHellion +335,RestoreShields +336,Scryer +337,BurrowChargeTrial +338,LeechResources +339,SnipeDoT +340,SwarmHostSpawnLocusts +341,Clone +342,BuildingShield +343,MorphToCollapsibleRockTowerDebris +344,MorphToHellionTank +345,BuildingStasis +346,ResourceBlocker +347,ResourceStun +348,MaxiumThrust +349,Sacrifice +350,BurrowChargeMP +351,BurrowChargeRevD +352,MorphToSwarmHostBurrowedMP +353,MorphToSwarmHostMP +354,SpawnInfestedTerran +355,attackProtossBuilding +356,burrowedBanelingStop +357,stopProtossBuilding +358,BlindingCloud +359,EyeStalk +360,Yoink +361,ViperConsume +362,ViperConsumeMinerals +363,ViperConsumeStructure +364,ProtossBuildingQueue +365,que8 +366,TestZerg +367,VolatileBurstBuilding +368,PickupScrapSmall +369,PickupScrapMedium +370,PickupScrapLarge +371,PickupPalletGas +372,PickupPalletMinerals +373,MassiveKnockover +374,WidowMineBurrow +375,WidowMineUnburrow +376,WidowMineAttack +377,TornadoMissile +378,MothershipCoreEnergize +379,LurkerAspectMPFromHydraliskBurrowed +380,LurkerAspectMP +381,BurrowLurkerMPDown +382,BurrowLurkerMPUp +383,UpgradeToLurkerDenMP +384,HallucinationOracle +385,MedivacSpeedBoost +386,ExtendingBridgeNEWide8Out +387,ExtendingBridgeNEWide8 +388,ExtendingBridgeNWWide8Out +389,ExtendingBridgeNWWide8 +390,ExtendingBridgeNEWide10Out +391,ExtendingBridgeNEWide10 +392,ExtendingBridgeNWWide10Out +393,ExtendingBridgeNWWide10 +394,ExtendingBridgeNEWide12Out +395,ExtendingBridgeNEWide12 +396,ExtendingBridgeNWWide12Out +397,ExtendingBridgeNWWide12 +398,InvulnerabilityShield +399,CritterFlee +400,OracleRevelation +401,OracleRevelationMode +402,OracleNormalMode +403,MorphToCollapsibleRockTowerDebrisRampRight +404,MorphToCollapsibleRockTowerDebrisRampLeft +405,VoidSiphon +406,UltraliskWeaponCooldown +407,MothershipCorePurifyNexusCancel +408,MothershipCorePurifyNexus +409,TemporalField +431,ArmoryResearchSwarm +432,ArmorpiercingMissiles +433,ExplosiveMissiles +434,LightofAiur +435,MothershipMassRecall +436,OracleWeapon +437,PulsarBeam +438,PulsarCannon +439,VoidRaySwarmDamageBoost +440,SeekerDummyChannel diff --git a/sc2reader/data/LotV/base_units.csv b/sc2reader/data/LotV/base_units.csv new file mode 100755 index 00000000..1e2b8e9d --- /dev/null +++ b/sc2reader/data/LotV/base_units.csv @@ -0,0 +1,521 @@ +1,System_Snapshot_Dummy +5,BeaconRally +6,BeaconArmy +7,BeaconAttack +8,BeaconDefend +9,BeaconHarass +10,BeaconIdle +11,BeaconAuto +12,BeaconDetect +13,BeaconScout +14,BeaconClaim +15,BeaconExpand +16,BeaconCustom1 +17,BeaconCustom2 +18,BeaconCustom3 +19,BeaconCustom4 +22,DESTRUCTIBLE +23,ITEM +24,POWERUP +25,SMCAMERA +26,SMCHARACTER +27,STARMAP +28,SMSET +29,MISSILE +30,MISSILE_INVULNERABLE +31,MISSILE_HALFLIFE +32,PLACEHOLDER +33,PLACEHOLDER_AIR +34,PATHINGBLOCKER +35,BEACON +36,Ball +37,StereoscopicOptionsUnit +38,Colossus +39,TechLab +40,Reactor +42,InfestorTerran +43,BanelingCocoon +44,Baneling +45,Mothership +46,PointDefenseDrone +47,Changeling +48,ChangelingZealot +49,ChangelingMarineShield +50,ChangelingMarine +51,ChangelingZerglingWings +52,ChangelingZergling +54,CommandCenter +55,SupplyDepot +56,Refinery +57,Barracks +58,EngineeringBay +59,MissileTurret +60,Bunker +61,SensorTower +62,GhostAcademy +63,Factory +64,Starport +66,Armory +67,FusionCore +68,AutoTurret +69,SiegeTankSieged +70,SiegeTank +71,VikingAssault +72,VikingFighter +73,CommandCenterFlying +74,BarracksTechLab +75,BarracksReactor +76,FactoryTechLab +77,FactoryReactor +78,StarportTechLab +79,StarportReactor +80,FactoryFlying +81,StarportFlying +82,SCV +83,BarracksFlying +84,SupplyDepotLowered +85,Marine +86,Reaper +87,Ghost +88,Marauder +89,Thor +90,Hellion +91,Medivac +92,Banshee +93,Raven +94,Battlecruiser +95,Nuke +96,Nexus +97,Pylon +98,Assimilator +99,Gateway +100,Forge +101,FleetBeacon +102,TwilightCouncil +103,PhotonCannon +104,Stargate +105,TemplarArchive +106,DarkShrine +107,RoboticsBay +108,RoboticsFacility +109,CyberneticsCore +110,Zealot +111,Stalker +112,HighTemplar +113,DarkTemplar +114,Sentry +115,Phoenix +116,Carrier +117,VoidRay +118,WarpPrism +119,Observer +120,Immortal +121,Probe +122,Interceptor +123,Hatchery +124,CreepTumor +125,Extractor +126,SpawningPool +127,EvolutionChamber +128,HydraliskDen +129,Spire +130,UltraliskCavern +131,InfestationPit +132,NydusNetwork +133,BanelingNest +134,RoachWarren +135,SpineCrawler +136,SporeCrawler +137,Lair +138,Hive +139,GreaterSpire +140,Egg +141,Drone +142,Zergling +143,Overlord +144,Hydralisk +145,Mutalisk +146,Ultralisk +147,Roach +148,Infestor +149,Corruptor +150,BroodLordCocoon +151,BroodLord +152,BanelingBurrowed +153,DroneBurrowed +154,HydraliskBurrowed +155,RoachBurrowed +156,ZerglingBurrowed +157,InfestorTerranBurrowed +158,RedstoneLavaCritterBurrowed +159,RedstoneLavaCritterInjuredBurrowed +160,RedstoneLavaCritter +161,RedstoneLavaCritterInjured +162,QueenBurrowed +163,Queen +164,InfestorBurrowed +165,OverlordCocoon +166,Overseer +167,PlanetaryFortress +168,UltraliskBurrowed +169,OrbitalCommand +170,WarpGate +171,OrbitalCommandFlying +172,ForceField +173,WarpPrismPhasing +174,CreepTumorBurrowed +175,CreepTumorQueen +176,SpineCrawlerUprooted +177,SporeCrawlerUprooted +178,Archon +179,NydusCanal +180,BroodlingEscort +181,RichMineralField +183,XelNagaTower +187,InfestedTerransEgg +188,Larva +189,ReaperPlaceholder +190,NeedleSpinesWeapon +191,CorruptionWeapon +192,InfestedTerransWeapon +193,NeuralParasiteWeapon +194,PointDefenseDroneReleaseWeapon +195,HunterSeekerWeapon +196,MULE +198,ThorAAWeapon +199,PunisherGrenadesLMWeapon +200,VikingFighterWeapon +201,ATALaserBatteryLMWeapon +202,ATSLaserBatteryLMWeapon +203,LongboltMissileWeapon +204,D8ChargeWeapon +205,YamatoWeapon +206,IonCannonsWeapon +207,AcidSalivaWeapon +208,SpineCrawlerWeapon +209,SporeCrawlerWeapon +210,GlaiveWurmWeapon +211,GlaiveWurmM2Weapon +212,GlaiveWurmM3Weapon +213,StalkerWeapon +214,EMP2Weapon +215,BacklashRocketsLMWeapon +216,PhotonCannonWeapon +217,ParasiteSporeWeapon +219,Broodling +220,BroodLordBWeapon +223,AutoTurretReleaseWeapon +224,LarvaReleaseMissile +225,AcidSpinesWeapon +226,FrenzyWeapon +227,ContaminateWeapon +228,BroodlingDefault +229,Critter +230,CritterStationary +231,Shape +232,FungalGrowthMissile +233,NeuralParasiteTentacleMissile +234,Beacon_Protoss +235,Beacon_ProtossSmall +236,Beacon_Terran +237,Beacon_TerranSmall +238,Beacon_Zerg +239,Beacon_ZergSmall +240,Lyote +241,CarrionBird +242,KarakMale +243,KarakFemale +244,UrsadakFemaleExotic +245,UrsadakMale +246,UrsadakFemale +247,UrsadakCalf +248,UrsadakMaleExotic +249,UtilityBot +250,CommentatorBot1 +251,CommentatorBot2 +252,CommentatorBot3 +253,CommentatorBot4 +254,Scantipede +255,Dog +256,Sheep +257,Cow +258,InfestedTerransEggPlacement +259,InfestorTerransWeapon +260,MineralField +261,VespeneGeyser +262,SpacePlatformGeyser +263,RichVespeneGeyser +264,DestructibleSearchlight +265,DestructibleBullhornLights +266,DestructibleStreetlight +267,DestructibleSpacePlatformSign +268,DestructibleStoreFrontCityProps +269,DestructibleBillboardTall +270,DestructibleBillboardScrollingText +271,DestructibleSpacePlatformBarrier +272,DestructibleSignsDirectional +273,DestructibleSignsConstruction +274,DestructibleSignsFunny +275,DestructibleSignsIcons +276,DestructibleSignsWarning +277,DestructibleGarage +278,DestructibleGarageLarge +279,DestructibleTrafficSignal +280,TrafficSignal +281,BraxisAlphaDestructible1x1 +282,BraxisAlphaDestructible2x2 +283,DestructibleDebris4x4 +284,DestructibleDebris6x6 +285,DestructibleRock2x4Vertical +286,DestructibleRock2x4Horizontal +287,DestructibleRock2x6Vertical +288,DestructibleRock2x6Horizontal +289,DestructibleRock4x4 +290,DestructibleRock6x6 +291,DestructibleRampDiagonalHugeULBR +292,DestructibleRampDiagonalHugeBLUR +293,DestructibleRampVerticalHuge +294,DestructibleRampHorizontalHuge +295,DestructibleDebrisRampDiagonalHugeULBR +296,DestructibleDebrisRampDiagonalHugeBLUR +297,MengskStatueAlone +298,MengskStatue +299,WolfStatue +300,GlobeStatue +301,Weapon +302,GlaiveWurmBounceWeapon +303,BroodLordWeapon +304,BroodLordAWeapon +305,CreepBlocker1x1 +306,PathingBlocker1x1 +307,PathingBlocker2x2 +308,AutoTestAttackTargetGround +309,AutoTestAttackTargetAir +310,AutoTestAttacker +311,HelperEmitterSelectionArrow +312,MultiKillObject +313,ShapeGolfball +314,ShapeCone +315,ShapeCube +316,ShapeCylinder +317,ShapeDodecahedron +318,ShapeIcosahedron +319,ShapeOctahedron +320,ShapePyramid +321,ShapeRoundedCube +322,ShapeSphere +323,ShapeTetrahedron +324,ShapeThickTorus +325,ShapeThinTorus +326,ShapeTorus +327,Shape4PointStar +328,Shape5PointStar +329,Shape6PointStar +330,Shape8PointStar +331,ShapeArrowPointer +332,ShapeBowl +333,ShapeBox +334,ShapeCapsule +335,ShapeCrescentMoon +336,ShapeDecahedron +337,ShapeDiamond +338,ShapeFootball +339,ShapeGemstone +340,ShapeHeart +341,ShapeJack +342,ShapePlusSign +343,ShapeShamrock +344,ShapeSpade +345,ShapeTube +346,ShapeEgg +347,ShapeYenSign +348,ShapeX +349,ShapeWatermelon +350,ShapeWonSign +351,ShapeTennisball +352,ShapeStrawberry +353,ShapeSmileyFace +354,ShapeSoccerball +355,ShapeRainbow +356,ShapeSadFace +357,ShapePoundSign +358,ShapePear +359,ShapePineapple +360,ShapeOrange +361,ShapePeanut +362,ShapeO +363,ShapeLemon +364,ShapeMoneyBag +365,ShapeHorseshoe +366,ShapeHockeyStick +367,ShapeHockeyPuck +368,ShapeHand +369,ShapeGolfClub +370,ShapeGrape +371,ShapeEuroSign +372,ShapeDollarSign +373,ShapeBasketball +374,ShapeCarrot +375,ShapeCherry +376,ShapeBaseball +377,ShapeBaseballBat +378,ShapeBanana +379,ShapeApple +380,ShapeCashLarge +381,ShapeCashMedium +382,ShapeCashSmall +383,ShapeFootballColored +384,ShapeLemonSmall +385,ShapeOrangeSmall +386,ShapeTreasureChestOpen +387,ShapeTreasureChestClosed +388,ShapeWatermelonSmall +389,UnbuildableRocksDestructible +390,UnbuildableBricksDestructible +391,UnbuildablePlatesDestructible +407,HellionTank +408,CollapsibleTerranTowerDebris +409,DebrisRampLeft +410,DebrisRampRight +411,MothershipCore +415,LocustMP +416,CollapsibleRockTowerDebris +417,NydusCanalAttacker +418,NydusCanalCreeper +419,SwarmHostBurrowedMP +420,SwarmHostMP +421,Oracle +422,Tempest +423,WarHound +424,WidowMine +425,Viper +426,WidowMineBurrowed +427,LurkerMPEgg +428,LurkerMP +429,LurkerMPBurrowed +430,LurkerDenMP +431,ExtendingBridgeNEWide8Out +432,ExtendingBridgeNEWide8 +433,ExtendingBridgeNWWide8Out +434,ExtendingBridgeNWWide8 +435,ExtendingBridgeNEWide10Out +436,ExtendingBridgeNEWide10 +437,ExtendingBridgeNWWide10Out +438,ExtendingBridgeNWWide10 +439,ExtendingBridgeNEWide12Out +440,ExtendingBridgeNEWide12 +441,ExtendingBridgeNWWide12Out +442,ExtendingBridgeNWWide12 +444,CollapsibleRockTowerDebrisRampRight +445,CollapsibleRockTowerDebrisRampLeft +447,CollapsibleTerranTowerPushUnitRampLeft +448,CollapsibleTerranTowerPushUnitRampRight +451,CollapsibleRockTowerPushUnit +452,CollapsibleTerranTowerPushUnit +453,CollapsibleRockTowerPushUnitRampRight +454,CollapsibleRockTowerPushUnitRampLeft +455,DigesterCreepSprayTargetUnit +456,DigesterCreepSprayUnit +457,NydusCanalAttackerWeapon +458,ViperConsumeStructureWeapon +461,ResourceBlocker +462,TempestWeapon +463,YoinkMissile +465,YoinkVikingAirMissile +467,YoinkVikingGroundMissile +469,WarHoundWeapon +471,EyeStalkWeapon +474,WidowMineWeapon +475,WidowMineAirWeapon +476,MothershipCoreWeaponWeapon +477,TornadoMissileWeapon +478,TornadoMissileDummyWeapon +479,TalonsMissileWeapon +480,CreepTumorMissile +481,LocustMPEggAMissileWeapon +482,LocustMPEggBMissileWeapon +483,LocustMPWeapon +485,RepulsorCannonWeapon +486,ExtendingBridge +487,PhysicsPrimitiveParent +488,CollapsibleRockTowerDiagonal +489,CollapsibleTerranTowerDiagonal +490,CollapsibleTerranTowerRampLeft +491,CollapsibleTerranTowerRampRight +492,IceProtossCrates +493,ProtossCrates +494,TowerMine +495,PickupPalletGas +496,PickupPalletMinerals +497,PickupScrapSalvage1x1 +498,PickupScrapSalvage2x2 +499,PickupScrapSalvage3x3 +500,RoughTerrain +501,UnbuildableBricksSmallUnit +502,UnbuildablePlatesSmallUnit +503,UnbuildablePlatesUnit +504,UnbuildableRocksSmallUnit +505,XelNagaHealingShrine +506,InvisibleTargetDummy +507,ProtossVespeneGeyser +508,CollapsibleRockTower +509,CollapsibleTerranTower +510,ThornLizard +511,CleaningBot +512,DestructibleRock6x6Weak +513,ProtossSnakeSegmentDemo +514,PhysicsCapsule +515,PhysicsCube +516,PhysicsCylinder +517,PhysicsKnot +518,PhysicsL +519,PhysicsPrimitives +520,PhysicsSphere +521,PhysicsStar +522,CreepBlocker4x4 +523,DestructibleCityDebris2x4Vertical +524,DestructibleCityDebris2x4Horizontal +525,DestructibleCityDebris2x6Vertical +526,DestructibleCityDebris2x6Horizontal +527,DestructibleCityDebris4x4 +528,DestructibleCityDebris6x6 +529,DestructibleCityDebrisHugeDiagonalBLUR +530,DestructibleCityDebrisHugeDiagonalULBR +531,TestZerg +532,PathingBlockerRadius1 +533,DestructibleRockEx12x4Vertical +534,DestructibleRockEx12x4Horizontal +535,DestructibleRockEx12x6Vertical +536,DestructibleRockEx12x6Horizontal +537,DestructibleRockEx14x4 +538,DestructibleRockEx16x6 +539,DestructibleRockEx1DiagonalHugeULBR +540,DestructibleRockEx1DiagonalHugeBLUR +541,DestructibleRockEx1VerticalHuge +542,DestructibleRockEx1HorizontalHuge +543,DestructibleIce2x4Vertical +544,DestructibleIce2x4Horizontal +545,DestructibleIce2x6Vertical +546,DestructibleIce2x6Horizontal +547,DestructibleIce4x4 +548,DestructibleIce6x6 +549,DestructibleIceDiagonalHugeULBR +550,DestructibleIceDiagonalHugeBLUR +551,DestructibleIceVerticalHuge +552,DestructibleIceHorizontalHuge +553,DesertPlanetSearchlight +554,DesertPlanetStreetlight +555,UnbuildableBricksUnit +556,UnbuildableRocksUnit +557,ZerusDestructibleArch +558,Artosilope +559,Anteplott +560,LabBot +561,Crabeetle +562,CollapsibleRockTowerRampRight +563,CollapsibleRockTowerRampLeft +564,LabMineralField +580,ThorAALance +581,OracleWeapon +582,TempestWeaponGround +583,SeekerMissile diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 833aa434..c845388d 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -402,4 +402,9 @@ def load_build(expansion, version): for version in ('base', '23925', '24247', '24764'): hots_builds[version] = load_build('HotS', version) -datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds} +# Load LotV Data +lotv_builds = dict() +for version in ('base', ): + lotv_builds[version] = load_build('LotV', version) + +datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds, 'LotV': lotv_builds} diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index d2d0eab4..38f64bb2 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -27,6 +27,7 @@ { "Cust": "Custom Teams", "FFA": "Free For All", + "FFAT": "Free For All Teams", "t1": "1 Team", "t10": "10 Teams", "t11": "11 Teams", @@ -384,6 +385,267 @@ "yes": "Yes" } ], + "3011": [ + "Player Logo Index", + { + "0": "0", + "1": "1", + "10": "10", + "100": "100", + "101": "101", + "102": "102", + "103": "103", + "104": "104", + "105": "105", + "106": "106", + "107": "107", + "108": "108", + "109": "109", + "11": "11", + "110": "110", + "111": "111", + "112": "112", + "113": "113", + "114": "114", + "115": "115", + "116": "116", + "117": "117", + "118": "118", + "119": "119", + "12": "12", + "120": "120", + "121": "121", + "122": "122", + "123": "123", + "124": "124", + "125": "125", + "126": "126", + "127": "127", + "128": "128", + "129": "129", + "13": "13", + "130": "130", + "131": "131", + "132": "132", + "133": "133", + "134": "134", + "135": "135", + "136": "136", + "137": "137", + "138": "138", + "139": "139", + "14": "14", + "140": "140", + "141": "141", + "142": "142", + "143": "143", + "144": "144", + "145": "145", + "146": "146", + "147": "147", + "148": "148", + "149": "149", + "15": "15", + "150": "150", + "151": "151", + "152": "152", + "153": "153", + "154": "154", + "155": "155", + "156": "156", + "157": "157", + "158": "158", + "159": "159", + "16": "16", + "160": "160", + "161": "161", + "162": "162", + "163": "163", + "164": "164", + "165": "165", + "166": "166", + "167": "167", + "168": "168", + "169": "169", + "17": "17", + "170": "170", + "171": "171", + "172": "172", + "173": "173", + "174": "174", + "175": "175", + "176": "176", + "177": "177", + "178": "178", + "179": "179", + "18": "18", + "180": "180", + "181": "181", + "182": "182", + "183": "183", + "184": "184", + "185": "185", + "186": "186", + "187": "187", + "188": "188", + "189": "189", + "19": "19", + "190": "190", + "191": "191", + "192": "192", + "193": "193", + "194": "194", + "195": "195", + "196": "196", + "197": "197", + "198": "198", + "199": "199", + "2": "2", + "20": "20", + "200": "200", + "201": "201", + "202": "202", + "203": "203", + "204": "204", + "205": "205", + "206": "206", + "207": "207", + "208": "208", + "209": "209", + "21": "21", + "210": "210", + "211": "211", + "212": "212", + "213": "213", + "214": "214", + "215": "215", + "216": "216", + "217": "217", + "218": "218", + "219": "219", + "22": "22", + "220": "220", + "221": "221", + "222": "222", + "223": "223", + "224": "224", + "225": "225", + "226": "226", + "227": "227", + "228": "228", + "229": "229", + "23": "23", + "230": "230", + "231": "231", + "232": "232", + "233": "233", + "234": "234", + "235": "235", + "236": "236", + "237": "237", + "238": "238", + "239": "239", + "24": "24", + "240": "240", + "241": "241", + "242": "242", + "243": "243", + "244": "244", + "245": "245", + "246": "246", + "247": "247", + "248": "248", + "249": "249", + "25": "25", + "250": "250", + "251": "251", + "252": "252", + "253": "253", + "254": "254", + "255": "255", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "31": "31", + "32": "32", + "33": "33", + "34": "34", + "35": "35", + "36": "36", + "37": "37", + "38": "38", + "39": "39", + "4": "4", + "40": "40", + "41": "41", + "42": "42", + "43": "43", + "44": "44", + "45": "45", + "46": "46", + "47": "47", + "48": "48", + "49": "49", + "5": "5", + "50": "50", + "51": "51", + "52": "52", + "53": "53", + "54": "54", + "55": "55", + "56": "56", + "57": "57", + "58": "58", + "59": "59", + "6": "6", + "60": "60", + "61": "61", + "62": "62", + "63": "63", + "64": "64", + "65": "65", + "66": "66", + "67": "67", + "68": "68", + "69": "69", + "7": "7", + "70": "70", + "71": "71", + "72": "72", + "73": "73", + "74": "74", + "75": "75", + "76": "76", + "77": "77", + "78": "78", + "79": "79", + "8": "8", + "80": "80", + "81": "81", + "82": "82", + "83": "83", + "84": "84", + "85": "85", + "86": "86", + "87": "87", + "88": "88", + "89": "89", + "9": "9", + "90": "90", + "91": "91", + "92": "92", + "93": "93", + "94": "94", + "95": "95", + "96": "96", + "97": "97", + "98": "98", + "99": "99" + } + ], "3102": [ "AI Build", { diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index 63324649..b2ff35f9 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -368,7 +368,7 @@ def read_struct(self, datatype=None): data = self._buffer.read_bytes(4) # self.read_uint32() elif datatype == 0x08: # u64 - data = self._buffer.read_unit64() + data = self._buffer.read_uint64() elif datatype == 0x09: # vint data = self.read_vint() diff --git a/sc2reader/objects.py b/sc2reader/objects.py index d243d3a1..63460242 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -114,6 +114,15 @@ def __init__(self, sid, slot_data): #: A flag marking this entity as a referee (can talk to players) self.is_referee = slot_data['observe'] == 2 + #: + self.hero_name = slot_data['hero'] + + #: + self.hero_skin = slot_data['skin'] + + #: + self.hero_mount = slot_data['mount'] + #: The unique Battle.net account identifier in the form of #: -S2-- self.toon_handle = slot_data['toon_handle'] @@ -135,6 +144,9 @@ def __init__(self, sid, slot_data): #: played offline when a user was not logged in to battle.net. self.toon_id = int(parts[3]) + #: A index to the user that is the leader of the archon team + self.archon_leader_id = slot_data['tandem_leader_user_id'] + #: A list of :class:`Event` objects representing all the game events #: generated by the person over the course of the game self.events = list() diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 4af87ae2..3c1fb85a 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -29,7 +29,12 @@ def __call__(self, data, replay): test_auto=data.read_bool(), examine=data.read_bool() if replay.base_build >= 21955 else None, custom_interface=data.read_bool() if replay.base_build >= 24764 else None, + test_type=data.read_uint32() if replay.base_build >= 34784 else None, observe=data.read_bits(2), + hero=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, + skin=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, + mount=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, + toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 34784 else None, ) for i in range(data.read_bits(5))], game_description=dict( @@ -42,8 +47,12 @@ def __call__(self, data, replay): random_races=data.read_bool(), battle_net=data.read_bool(), amm=data.read_bool(), + ranked=data.read_bool() if replay.base_build >= 34784 else None, competitive=data.read_bool(), + practice=data.read_bool() if replay.base_build >= 34784 else None, + cooperative=data.read_bool() if replay.base_build >= 34784 else None, no_victory_or_defeat=data.read_bool(), + hero_duplicates_allowed=data.read_bool() if replay.base_build >= 34784 else None, fog=data.read_bits(2), observers=data.read_bits(2), user_difficulty=data.read_bits(2), @@ -96,14 +105,24 @@ def __call__(self, data, replay): handicap=data.read_bits(7), observe=data.read_bits(2), logo_index=data.read_uint32() if replay.base_build >= 32283 else None, + hero=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, + skin=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, + mount=data.read_aligned_string(data.read_bits(9)) if replay.base_build >= 34784 else None, + artifacts=[dict( + type_struct=data.read_aligned_string(data.read_bits(9)), + ) for i in range(data.read_bits(4))] if replay.base_build >= 34784 else None, working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, - rewards=[data.read_uint32() for i in range(data.read_bits(6 if replay.base_build >= 24764 else 5))], + rewards=[data.read_uint32() for i in range(data.read_bits(17 if replay.base_build >= 34784 else 6 if replay.base_build >= 24764 else 5))], toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, licenses=[data.read_uint32() for i in range(data.read_bits(9))] if replay.base_build >= 19132 else [], + tandem_leader_user_id=data.read_bits(4) if replay.base_build >= 34784 and data.read_bool() else None, + commander=data.read_aligned_bytes(data.read_bits(9)) if replay.base_build >= 34784 else None, + commander_level=data.read_uint32() if replay.base_build >= 36442 else None, ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, is_single_player=data.read_bool(), + picked_map_tag=data.read_uint8() if replay.base_build >= 36442 else None, game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), default_ai_build=data.read_bits(7) if replay.base_build >= 24764 else None, @@ -155,6 +174,7 @@ def __call__(self, data, replay): observe=p[7], result=p[8], working_set_slot=p[9] if replay.build >= 24764 else None, + hero=p[10] if replay.build >= 34784 and 10 in p else None, # hero appears to be present in Heroes replays but not StarCraft 2 replays ) for p in details[0]], map_name=details[1].decode('utf8'), difficulty=details[2], @@ -205,6 +225,10 @@ def __call__(self, data, replay): elif flag == 3: # Server ping message pass + elif flag == 4: # Reconnect notify message + status = data.read_bits(2) + pass # TODO: Store this somewhere + data.byte_align() return dict(pings=pings, messages=messages, packets=packets) @@ -1484,6 +1508,220 @@ def game_user_join_event(self, data): clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) +class GameEventsReader_34784(GameEventsReader_27950): + + def __init__(self): + super(GameEventsReader_34784, self).__init__() + + self.EVENT_DISPATCH.update({ + 25: (None, self.command_manager_reset_event), # Re-using this old number + 61: (None, self.trigger_hotkey_pressed_event), + 103: (None, self.command_manager_state_event), + 104: (None, self.command_update_target_point_event), + 105: (None, self.command_update_target_unit_event), + 106: (None, self.trigger_anim_length_query_by_name_event), + 107: (None, self.trigger_anim_length_query_by_props_event), + 108: (None, self.trigger_anim_offset_event), + 109: (None, self.catalog_modify_event), + 110: (None, self.hero_talent_tree_selected_event), + 111: (None, self.trigger_profiler_logging_finished_event), + 112: (None, self.hero_talent_tree_selection_panel_toggled_event), + }) + + def hero_talent_tree_selection_panel_toggled_event(self, data): + return dict( + shown=data.read_bool(), + ) + + def trigger_profiler_logging_finished_event(self, data): + return dict() + + def hero_talent_tree_selected_event(self, data): + return dict( + index=data.read_uint32() + ) + + def catalog_modify_event(self, data): + return dict( + catalog=data.read_uint8(), + entry=data.read_uint16(), + field=data.read_aligned_string(data.read_uint8()), + value=data.read_aligned_string(data.read_uint8()), + ) + + def trigger_anim_offset_event(self, data): + return dict( + anim_wait_query_id=data.read_uint16(), + ) + + def trigger_anim_length_query_by_props_event(self, data): + return dict( + query_id=data.read_uint16(), + length_ms=data.read_uint32(), + ) + + def trigger_anim_length_query_by_name_event(self, data): + return dict( + query_id=data.read_uint16(), + length_ms=data.read_uint32(), + finish_game_loop=data.read_uint32(), + ) + + def command_manager_reset_event(self, data): + return dict( + sequence=data.read_uint32(), + ) + + def command_manager_state_event(self, data): + return dict( + state=data.read_bits(2), + sequence=data.read_uint32() + 1 if data.read_bool() else None, + ) + + def command_update_target_point_event(self, data): + return dict( + target=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ) + ) + + def command_update_target_unit_event(self, data): + return dict( + target=dict( + target_unit_flags=data.read_uint16(), + timer=data.read_uint8(), + tag=data.read_uint32(), + snapshot_unit_link=data.read_uint16(), + snapshot_control_player_id=data.read_bits(4) if data.read_bool() else None, + snapshot_upkeep_player_id=data.read_bits(4) if data.read_bool() else None, + snapshot_point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_bits(32) - 2147483648, + ) + ) + ) + + def command_event(self, data): + return dict( + flags=data.read_bits(23), + ability=dict( + ability_link=data.read_uint16(), + ability_command_index=data.read_bits(5), + ability_command_data=data.read_uint8() if data.read_bool() else None, + ) if data.read_bool() else None, + data={ # Choice + 0: lambda: ('None', None), + 1: lambda: ('TargetPoint', dict( + point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ) + )), + 2: lambda: ('TargetUnit', dict( + flags=data.read_uint16(), + timer=data.read_uint8(), + unit_tag=data.read_uint32(), + unit_link=data.read_uint16(), + control_player_id=data.read_bits(4) if data.read_bool() else None, + upkeep_player_id=data.read_bits(4) if data.read_bool() else None, + point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ), + )), + 3: lambda: ('Data', dict( + data=data.read_uint32() + )), + }[data.read_bits(2)](), + sequence=data.read_uint32() + 1, + other_unit_tag=data.read_uint32() if data.read_bool() else None, + unit_group=data.read_uint32() if data.read_bool() else None, + ) + + def user_options_event(self, data): + return dict( + game_fully_downloaded=data.read_bool(), + development_cheats_enabled=data.read_bool(), + test_cheats_enabled=data.read_bool(), + multiplayer_cheats_enabled=data.read_bool(), + sync_checksumming_enabled=data.read_bool(), + is_map_to_map_transition=data.read_bool(), + starting_rally=data.read_bool(), + debug_pause_enabled=data.read_bool(), + use_galaxy_asserts=data.read_bool(), + platform_mac=data.read_bool(), + camera_follow=data.read_bool(), + base_build_num=data.read_uint32(), + build_num=data.read_uint32(), + version_flags=data.read_uint32(), + hotkey_profile=data.read_aligned_string(data.read_bits(9)), + use_ai_beacons=None, + ) + + def trigger_ping_event(self, data): + return dict( + point=dict( + x=data.read_uint32() - 2147483648, + y=data.read_uint32() - 2147483648, + ), + unit_tag=data.read_uint32(), + pinged_minimap=data.read_bool(), + option=data.read_uint32() - 2147483648, + ) + + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ) if data.read_bool() else None, + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=data.read_uint8() - 128 if data.read_bool() else None, + follow=data.read_bool(), + ) + + def trigger_hotkey_pressed_event(self, data): + return dict( + hotkey=data.read_uint32(), + down=data.read_bool(), + ) + + def game_user_join_event(self, data): + return dict( + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_bits(8)), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, + hijack=data.read_bool(), + hijack_clone_game_user_id=data.read_bits(4) if data.read_bool() else None, + ) + + def game_user_leave_event(self, data): + return dict( + leave_reason=data.read_bits(4) + ) + +class GameEventsReader_36442(GameEventsReader_34784): + + def control_group_update_event(self, data): + return dict( + control_group_index=data.read_bits(4), + control_group_update=data.read_bits(3), + remove_mask={ # Choice + 0: lambda: ('None', None), + 1: lambda: ('Mask', self.read_selection_bitmask(data, data.read_bits(9))), + 2: lambda: ('OneIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), + 3: lambda: ('ZeroIndices', [data.read_bits(9) for i in range(data.read_bits(9))]), + }[data.read_bits(2)](), + ) class TrackerEventsReader(object): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 42efcea2..f546229f 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -300,6 +300,17 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en engine.run(self) def load_details(self): + if 'replay.initData' in self.raw_data: + initData = self.raw_data['replay.initData'] + options = initData['game_description']['game_options'] + self.amm = options['amm'] + self.ranked = options['ranked'] + self.competitive = options['competitive'] + self.practice = options['practice'] + self.cooperative = options['cooperative'] + self.battle_net = options['battle_net'] + self.hero_duplicates_allowed = options['hero_duplicates_allowed'] + if 'replay.attributes.events' in self.raw_data: # Organize the attribute data to be useful self.attributes = defaultdict(dict) @@ -328,7 +339,9 @@ def load_details(self): self.gateway = 'sea' dependency_hashes = [d.hash for d in details['cache_handles']] - if hashlib.sha256('Standard Data: Swarm.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: + if hashlib.sha256('Standard Data: Void.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: + self.expansion = 'LotV' + elif hashlib.sha256('Standard Data: Swarm.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: self.expansion = 'HotS' elif hashlib.sha256('Standard Data: Liberty.SC2Mod'.encode('utf8')).hexdigest() in dependency_hashes: self.expansion = 'WoL' @@ -555,7 +568,9 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_23260(), lambda r: 23260 <= r.base_build < 24247) self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build < 27950) - self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build < 34784) + self.register_reader('replay.game.events', readers.GameEventsReader_34784(), lambda r: 34784 <= r.base_build < 36442) + self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) def register_default_datapacks(self): @@ -570,6 +585,7 @@ def register_default_datapacks(self): self.register_datapack(datapacks['HotS']['23925'], lambda r: r.expansion == 'HotS' and 23925 <= r.build < 24247) self.register_datapack(datapacks['HotS']['24247'], lambda r: r.expansion == 'HotS' and 24247 <= r.build <= 24764) self.register_datapack(datapacks['HotS']['24764'], lambda r: r.expansion == 'HotS' and 24764 <= r.build) + self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) # Internal Methods def _get_reader(self, data_file): diff --git a/test_replays/lotv/lotv1.SC2Replay b/test_replays/lotv/lotv1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..ff667dcbffb890235a6bfbd8ab77afbc0c290511 GIT binary patch literal 114700 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 L*`sVLaiRYYi}a;R literal 0 HcmV?d00001 diff --git a/test_replays/lotv/lotv2.SC2Replay b/test_replays/lotv/lotv2.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..2dd35820fd7e2110a1b7625673bbd955dd2f90c6 GIT binary patch literal 73471 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index d908f350..bd812d13 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -394,6 +394,11 @@ def test_bad_unit_ids(self): def test_214(self): replay = sc2reader.load_replay("test_replays/2.1.4/Catallena LE.SC2Replay", load_level=4) + def test_lotv1(self): + replay = sc2reader.load_replay("test_replays/lotv/lotv1.SC2Replay") + self.assertEqual(replay.expansion, "LotV") + replay = sc2reader.load_replay("test_replays/lotv/lotv2.SC2Replay") + self.assertEqual(replay.expansion, "LotV") class TestGameEngine(unittest.TestCase): @@ -451,6 +456,5 @@ def test_plugin1(self): self.assertEqual(replay.plugin_result['TestPlugin2'], (0, dict())) - if __name__ == '__main__': unittest.main() From 69976fce8f02df8a9eed64b68c15e2e1f58668b2 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Tue, 15 Sep 2015 15:38:32 -0400 Subject: [PATCH 185/238] pil is required --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0f2fc7a7..5b5c7879 100644 --- a/setup.py +++ b/setup.py @@ -46,7 +46,7 @@ ] }, - install_requires=['mpyq>=0.2.3', 'argparse', 'ordereddict', 'unittest2'] if float(sys.version[:3]) < 2.7 else ['mpyq>=0.2.3'], + install_requires=['mpyq>=0.2.3', 'argparse', 'ordereddict', 'unittest2', 'pil'] if float(sys.version[:3]) < 2.7 else ['mpyq>=0.2.3'], packages=setuptools.find_packages(), include_package_data=True, zip_safe=True From 109fbfca242c36c626680228a6a36e437d6418d7 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Mon, 21 Sep 2015 13:46:08 -0400 Subject: [PATCH 186/238] for LotV, stop parsing the map info we can't read. --- sc2reader/objects.py | 4 ++++ test_replays/test_all.py | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index 63460242..e1142c73 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -627,6 +627,10 @@ def __init__(self, contents): #: The number of players enabled via the data editor self.player_count = data.read_uint32() + # Leave early so we dont barf. Turns out ggtracker doesnt need + # any of the map data thats loaded below. + return + #: A list of references to :class:`MapInfoPlayer` objects self.players = list() for i in range(self.player_count): diff --git a/test_replays/test_all.py b/test_replays/test_all.py index bd812d13..b131180a 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -272,6 +272,7 @@ def test_outmatched_pids(self): self.assertEqual(len(replay.players), 2) self.assertEqual(len(replay.people), 3) + @unittest.expectedFailure def test_map_info(self): replay = sc2reader.load_replay("test_replays/1.5.3.23260/ggtracker_109233.SC2Replay", load_map=True) self.assertEqual(replay.map.map_info.tile_set, 'Avernus') @@ -401,6 +402,32 @@ def test_lotv1(self): self.assertEqual(replay.expansion, "LotV") + def test_lotv_creepTracker(self): + from sc2reader.engine.plugins import CreepTracker + + for replayfilename in [ + "test_replays/lotv/lotv1.SC2Replay", + ]: + factory = sc2reader.factories.SC2Factory() + pluginEngine=sc2reader.engine.GameEngine(plugins=[ + CreepTracker() + ]) + replay =factory.load_replay(replayfilename,engine=pluginEngine,load_map= True) + + for player_id in replay.player: + if replay.player[player_id].play_race == "Zerg": + assert replay.player[player_id].max_creep_spread >0 + assert replay.player[player_id].creep_spread_by_minute + + def test_lotv_map(self): + # This test currently fails in decoders.py with 'TypeError: ord() expected a character, but string of length 0 found' + for replayfilename in [ + "test_replays/lotv/lotv1.SC2Replay", + ]: + factory = sc2reader.factories.SC2Factory() + replay =factory.load_replay(replayfilename,load_level=1,load_map= True) + + class TestGameEngine(unittest.TestCase): class TestEvent(object): name='TestEvent' From e48f306873d163f4cafd38113638ae6ea6bf690a Mon Sep 17 00:00:00 2001 From: David Joerg Date: Mon, 21 Sep 2015 13:51:30 -0400 Subject: [PATCH 187/238] LotV data from @StoicLoofah's branch --- sc2reader/data/LotV/base_abilities.csv | 374 +++++--- sc2reader/data/LotV/base_units.csv | 1173 +++++++++++++----------- sc2reader/data/ability_lookup.csv | 126 ++- sc2reader/data/unit_lookup.csv | 135 ++- 4 files changed, 1160 insertions(+), 648 deletions(-) diff --git a/sc2reader/data/LotV/base_abilities.csv b/sc2reader/data/LotV/base_abilities.csv index 8da0580d..1708ccb7 100755 --- a/sc2reader/data/LotV/base_abilities.csv +++ b/sc2reader/data/LotV/base_abilities.csv @@ -269,129 +269,251 @@ 270,que5PassiveCancelToSelection 292,BridgeExtend 293,BridgeRetract -294,DigesterCreepSpray -295,MorphToCollapsibleTerranTowerDebris -296,MorphToCollapsibleTerranTowerDebrisRampLeft -297,MorphToCollapsibleTerranTowerDebrisRampRight -298,MorphToMothership -299,MothershipStasis -300,MothershipCoreWeapon -301,NexusTrainMothershipCore -302,MothershipCoreTeleport -303,SalvageDroneRefund -304,SalvageDrone -305,SalvageZerglingRefund -306,SalvageZergling -307,SalvageQueenRefund -308,SalvageQueen -309,SalvageRoachRefund -310,SalvageRoach -311,SalvageBanelingRefund -312,SalvageBaneling -313,SalvageHydraliskRefund -314,SalvageHydralisk -315,SalvageInfestorRefund -316,SalvageInfestor -317,SalvageSwarmHostRefund -318,SalvageSwarmHost -319,SalvageUltraliskRefund -320,SalvageUltralisk -321,DigesterTransport -322,SpectreShield -323,XelNagaHealingShrine -324,NexusInvulnerability -325,NexusPhaseShift -326,SpawnChangelingTarget -327,QueenLand -328,QueenFly -329,OracleCloakField -330,FlyerShield -331,LocustTrain -332,MothershipCoreMassRecall -333,SingleRecall -334,MorphToHellion -335,RestoreShields -336,Scryer -337,BurrowChargeTrial -338,LeechResources -339,SnipeDoT -340,SwarmHostSpawnLocusts -341,Clone -342,BuildingShield -343,MorphToCollapsibleRockTowerDebris -344,MorphToHellionTank -345,BuildingStasis -346,ResourceBlocker -347,ResourceStun -348,MaxiumThrust -349,Sacrifice -350,BurrowChargeMP -351,BurrowChargeRevD -352,MorphToSwarmHostBurrowedMP -353,MorphToSwarmHostMP -354,SpawnInfestedTerran -355,attackProtossBuilding -356,burrowedBanelingStop -357,stopProtossBuilding -358,BlindingCloud -359,EyeStalk -360,Yoink -361,ViperConsume -362,ViperConsumeMinerals -363,ViperConsumeStructure -364,ProtossBuildingQueue -365,que8 -366,TestZerg -367,VolatileBurstBuilding -368,PickupScrapSmall -369,PickupScrapMedium -370,PickupScrapLarge -371,PickupPalletGas -372,PickupPalletMinerals -373,MassiveKnockover -374,WidowMineBurrow -375,WidowMineUnburrow -376,WidowMineAttack -377,TornadoMissile -378,MothershipCoreEnergize -379,LurkerAspectMPFromHydraliskBurrowed -380,LurkerAspectMP -381,BurrowLurkerMPDown -382,BurrowLurkerMPUp -383,UpgradeToLurkerDenMP -384,HallucinationOracle -385,MedivacSpeedBoost -386,ExtendingBridgeNEWide8Out -387,ExtendingBridgeNEWide8 -388,ExtendingBridgeNWWide8Out -389,ExtendingBridgeNWWide8 -390,ExtendingBridgeNEWide10Out -391,ExtendingBridgeNEWide10 -392,ExtendingBridgeNWWide10Out -393,ExtendingBridgeNWWide10 -394,ExtendingBridgeNEWide12Out -395,ExtendingBridgeNEWide12 -396,ExtendingBridgeNWWide12Out -397,ExtendingBridgeNWWide12 -398,InvulnerabilityShield -399,CritterFlee -400,OracleRevelation -401,OracleRevelationMode -402,OracleNormalMode -403,MorphToCollapsibleRockTowerDebrisRampRight -404,MorphToCollapsibleRockTowerDebrisRampLeft -405,VoidSiphon -406,UltraliskWeaponCooldown -407,MothershipCorePurifyNexusCancel -408,MothershipCorePurifyNexus -409,TemporalField -431,ArmoryResearchSwarm -432,ArmorpiercingMissiles -433,ExplosiveMissiles -434,LightofAiur -435,MothershipMassRecall -436,OracleWeapon -437,PulsarBeam -438,PulsarCannon -439,VoidRaySwarmDamageBoost -440,SeekerDummyChannel +294,XelNaga_Caverns_DoorDefaultOpen +295,XelNaga_Caverns_DoorDefaultClose +296,DigesterCreepSpray +297,MorphToCollapsibleTerranTowerDebris +298,MorphToCollapsibleTerranTowerDebrisRampLeft +299,MorphToCollapsibleTerranTowerDebrisRampRight +300,MorphToMothership +301,MothershipStasis +302,MothershipCoreWeapon +303,NexusTrainMothershipCore +304,MothershipCoreTeleport +305,SalvageDroneRefund +306,SalvageDrone +307,SalvageZerglingRefund +308,SalvageZergling +309,SalvageQueenRefund +310,SalvageQueen +311,SalvageRoachRefund +312,SalvageRoach +313,SalvageBanelingRefund +314,SalvageBaneling +315,SalvageHydraliskRefund +316,SalvageHydralisk +317,SalvageInfestorRefund +318,SalvageInfestor +319,SalvageSwarmHostRefund +320,SalvageSwarmHost +321,SalvageUltraliskRefund +322,SalvageUltralisk +323,DigesterTransport +324,SpectreShield +325,XelNagaHealingShrine +326,NexusInvulnerability +327,NexusPhaseShift +328,SpawnChangelingTarget +329,QueenLand +330,QueenFly +331,OracleCloakField +332,FlyerShield +333,LocustTrain +334,MothershipCoreMassRecall +335,SingleRecall +336,MorphToHellion +337,RestoreShields +338,Scryer +339,BurrowChargeTrial +340,LeechResources +341,SnipeDoT +342,SwarmHostSpawnLocusts +343,Clone +344,BuildingShield +345,MorphToCollapsibleRockTowerDebris +346,MorphToHellionTank +347,BuildingStasis +348,ResourceBlocker +349,ResourceStun +350,MaxiumThrust +351,Sacrifice +352,BurrowChargeMP +353,BurrowChargeRevD +354,MorphToSwarmHostBurrowedMP +355,MorphToSwarmHostMP +356,SpawnInfestedTerran +357,attackProtossBuilding +358,burrowedBanelingStop +359,stopProtossBuilding +360,BlindingCloud +361,EyeStalk +362,Yoink +363,ViperConsume +364,ViperConsumeMinerals +365,ViperConsumeStructure +366,ProtossBuildingQueue +367,que8 +368,TestZerg +369,VolatileBurstBuilding +370,PickupScrapSmall +371,PickupScrapMedium +372,PickupScrapLarge +373,PickupPalletGas +374,PickupPalletMinerals +375,MassiveKnockover +376,WidowMineBurrow +377,WidowMineUnburrow +378,WidowMineAttack +379,TornadoMissile +380,MothershipCoreEnergize +381,LurkerAspectMPFromHydraliskBurrowed +382,LurkerAspectMP +383,BurrowLurkerMPDown +384,BurrowLurkerMPUp +385,UpgradeToLurkerDenMP +386,HallucinationOracle +387,MedivacSpeedBoost +388,ExtendingBridgeNEWide8Out +389,ExtendingBridgeNEWide8 +390,ExtendingBridgeNWWide8Out +391,ExtendingBridgeNWWide8 +392,ExtendingBridgeNEWide10Out +393,ExtendingBridgeNEWide10 +394,ExtendingBridgeNWWide10Out +395,ExtendingBridgeNWWide10 +396,ExtendingBridgeNEWide12Out +397,ExtendingBridgeNEWide12 +398,ExtendingBridgeNWWide12Out +399,ExtendingBridgeNWWide12 +400,InvulnerabilityShield +401,CritterFlee +402,OracleRevelation +403,OracleRevelationMode +404,OracleNormalMode +405,MorphToCollapsibleRockTowerDebrisRampRight +406,MorphToCollapsibleRockTowerDebrisRampLeft +407,VoidSiphon +408,UltraliskWeaponCooldown +409,MothershipCorePurifyNexusCancel +410,MothershipCorePurifyNexus +411,XelNaga_Caverns_DoorE +412,XelNaga_Caverns_DoorEOpened +413,XelNaga_Caverns_DoorN +414,XelNaga_Caverns_DoorNE +415,XelNaga_Caverns_DoorNEOpened +416,XelNaga_Caverns_DoorNOpened +417,XelNaga_Caverns_DoorNW +418,XelNaga_Caverns_DoorNWOpened +419,XelNaga_Caverns_DoorS +420,XelNaga_Caverns_DoorSE +421,XelNaga_Caverns_DoorSEOpened +422,XelNaga_Caverns_DoorSOpened +423,XelNaga_Caverns_DoorSW +424,XelNaga_Caverns_DoorSWOpened +425,XelNaga_Caverns_DoorW +426,XelNaga_Caverns_DoorWOpened +427,XelNaga_Caverns_Floating_BridgeNE8Out +428,XelNaga_Caverns_Floating_BridgeNE8 +429,XelNaga_Caverns_Floating_BridgeNW8Out +430,XelNaga_Caverns_Floating_BridgeNW8 +431,XelNaga_Caverns_Floating_BridgeNE10Out +432,XelNaga_Caverns_Floating_BridgeNE10 +433,XelNaga_Caverns_Floating_BridgeNW10Out +434,XelNaga_Caverns_Floating_BridgeNW10 +435,XelNaga_Caverns_Floating_BridgeNE12Out +436,XelNaga_Caverns_Floating_BridgeNE12 +437,XelNaga_Caverns_Floating_BridgeNW12Out +438,XelNaga_Caverns_Floating_BridgeNW12 +439,XelNaga_Caverns_Floating_BridgeH8Out +440,XelNaga_Caverns_Floating_BridgeH8 +441,XelNaga_Caverns_Floating_BridgeV8Out +442,XelNaga_Caverns_Floating_BridgeV8 +443,XelNaga_Caverns_Floating_BridgeH10Out +444,XelNaga_Caverns_Floating_BridgeH10 +445,XelNaga_Caverns_Floating_BridgeV10Out +446,XelNaga_Caverns_Floating_BridgeV10 +447,XelNaga_Caverns_Floating_BridgeH12Out +448,XelNaga_Caverns_Floating_BridgeH12 +449,XelNaga_Caverns_Floating_BridgeV12Out +450,XelNaga_Caverns_Floating_BridgeV12 +451,TemporalField +473,ArmoryResearchSwarm +474,CausticSpray +475,OracleCloakingFieldTargeted +476,ImmortalOverload +477,MorphToRavager +478,MorphToLurker +479,OraclePhaseShift +480,ReleaseInterceptors +481,RavagerCorrosiveBile +482,BurrowRavagerDown +483,BurrowRavagerUp +484,PurificationNova +485,Impale +486,LockOn +487,LockOnCancel +488,CorruptionBomb +489,Hyperjump +490,Overcharge +491,ThorAPMode +492,ThorNormalMode +493,LightofAiur +494,MothershipMassRecall +495,NydusWormTransport +496,OracleWeapon +497,PulsarBeam +498,PulsarCannon +499,VoidSwarmHostSpawnLocust +500,LocustMPFlyingMorphToGround +501,LocustMPMorphToAir +502,LocustMPFlyingSwoop +503,HallucinationDisruptor +504,HallucinationAdept +505,VoidRaySwarmDamageBoost +506,SeekerDummyChannel +507,AiurTempleBridgeNE8Out +508,AiurTempleBridgeNE8 +509,AiurTempleBridgeNE10Out +510,AiurTempleBridgeNE10 +511,AiurTempleBridgeNE12Out +512,AiurTempleBridgeNE12 +513,AiurTempleBridgeNW8Out +514,AiurTempleBridgeNW8 +515,AiurTempleBridgeNW10Out +516,AiurTempleBridgeNW10 +517,AiurTempleBridgeNW12Out +518,AiurTempleBridgeNW12 +519,VoidMPImmortalReviveRebuild +520,VoidMPImmortalReviveDeath +521,ArbiterMPStasisField +522,ArbiterMPRecall +523,CorsairMPDisruptionWeb +524,MorphToGuardianMP +525,MorphToDevourerMP +526,DefilerMPConsume +527,DefilerMPDarkSwarm +528,DefilerMPPlague +529,DefilerMPBurrow +530,DefilerMPUnburrow +531,QueenMPEnsnare +532,QueenMPSpawnBroodlings +533,QueenMPInfestCommandCenter +534,LightningBomb +535,Grapple +536,OracleStasisTrap +537,OracleStasisTrapBuild +538,OracleStasisTrapActivate +539,SelfRepair +540,ParasiticBomb +541,AdeptPhaseShift +542,PurificationNovaMorph +543,PurificationNovaMorphBack +544,LurkerHoldFire +545,LurkerRemoveHoldFire +546,LiberatorMorphtoAG +547,LiberatorMorphtoAA +548,LiberatorAGTarget +549,LiberatorAATarget +550,TimeStop +551,KD8Charge +552,AdeptPhaseShiftCancel +553,AdeptShadePhaseShiftCancel +557,LaunchInterceptors +558,SpawnLocustsTargeted +559,LocustMPFlyingSwoopAttack +560,MorphToTransportOverlord +561,BypassArmor +562,BypassArmorDroneCU +563,ChannelSnipe +564,LockOnAir +565,PurificationNovaTargetted diff --git a/sc2reader/data/LotV/base_units.csv b/sc2reader/data/LotV/base_units.csv index 1e2b8e9d..40b710c5 100755 --- a/sc2reader/data/LotV/base_units.csv +++ b/sc2reader/data/LotV/base_units.csv @@ -1,521 +1,654 @@ 1,System_Snapshot_Dummy -5,BeaconRally -6,BeaconArmy -7,BeaconAttack -8,BeaconDefend -9,BeaconHarass -10,BeaconIdle -11,BeaconAuto -12,BeaconDetect -13,BeaconScout -14,BeaconClaim -15,BeaconExpand -16,BeaconCustom1 -17,BeaconCustom2 -18,BeaconCustom3 -19,BeaconCustom4 -22,DESTRUCTIBLE -23,ITEM -24,POWERUP -25,SMCAMERA -26,SMCHARACTER -27,STARMAP -28,SMSET -29,MISSILE -30,MISSILE_INVULNERABLE -31,MISSILE_HALFLIFE -32,PLACEHOLDER -33,PLACEHOLDER_AIR -34,PATHINGBLOCKER -35,BEACON -36,Ball -37,StereoscopicOptionsUnit -38,Colossus -39,TechLab -40,Reactor -42,InfestorTerran -43,BanelingCocoon -44,Baneling -45,Mothership -46,PointDefenseDrone -47,Changeling -48,ChangelingZealot -49,ChangelingMarineShield -50,ChangelingMarine -51,ChangelingZerglingWings -52,ChangelingZergling -54,CommandCenter -55,SupplyDepot -56,Refinery -57,Barracks -58,EngineeringBay -59,MissileTurret -60,Bunker -61,SensorTower -62,GhostAcademy -63,Factory -64,Starport -66,Armory -67,FusionCore -68,AutoTurret -69,SiegeTankSieged -70,SiegeTank -71,VikingAssault -72,VikingFighter -73,CommandCenterFlying -74,BarracksTechLab -75,BarracksReactor -76,FactoryTechLab -77,FactoryReactor -78,StarportTechLab -79,StarportReactor -80,FactoryFlying -81,StarportFlying -82,SCV -83,BarracksFlying -84,SupplyDepotLowered -85,Marine -86,Reaper -87,Ghost -88,Marauder -89,Thor -90,Hellion -91,Medivac -92,Banshee -93,Raven -94,Battlecruiser -95,Nuke -96,Nexus -97,Pylon -98,Assimilator -99,Gateway -100,Forge -101,FleetBeacon -102,TwilightCouncil -103,PhotonCannon -104,Stargate -105,TemplarArchive -106,DarkShrine -107,RoboticsBay -108,RoboticsFacility -109,CyberneticsCore -110,Zealot -111,Stalker -112,HighTemplar -113,DarkTemplar -114,Sentry -115,Phoenix -116,Carrier -117,VoidRay -118,WarpPrism -119,Observer -120,Immortal -121,Probe -122,Interceptor -123,Hatchery -124,CreepTumor -125,Extractor -126,SpawningPool -127,EvolutionChamber -128,HydraliskDen -129,Spire -130,UltraliskCavern -131,InfestationPit -132,NydusNetwork -133,BanelingNest -134,RoachWarren -135,SpineCrawler -136,SporeCrawler -137,Lair -138,Hive -139,GreaterSpire -140,Egg -141,Drone -142,Zergling -143,Overlord -144,Hydralisk -145,Mutalisk -146,Ultralisk -147,Roach -148,Infestor -149,Corruptor -150,BroodLordCocoon -151,BroodLord -152,BanelingBurrowed -153,DroneBurrowed -154,HydraliskBurrowed -155,RoachBurrowed -156,ZerglingBurrowed -157,InfestorTerranBurrowed -158,RedstoneLavaCritterBurrowed -159,RedstoneLavaCritterInjuredBurrowed -160,RedstoneLavaCritter -161,RedstoneLavaCritterInjured -162,QueenBurrowed -163,Queen -164,InfestorBurrowed -165,OverlordCocoon -166,Overseer -167,PlanetaryFortress -168,UltraliskBurrowed -169,OrbitalCommand -170,WarpGate -171,OrbitalCommandFlying -172,ForceField -173,WarpPrismPhasing -174,CreepTumorBurrowed -175,CreepTumorQueen -176,SpineCrawlerUprooted -177,SporeCrawlerUprooted -178,Archon -179,NydusCanal -180,BroodlingEscort -181,RichMineralField -183,XelNagaTower -187,InfestedTerransEgg -188,Larva -189,ReaperPlaceholder -190,NeedleSpinesWeapon -191,CorruptionWeapon -192,InfestedTerransWeapon -193,NeuralParasiteWeapon -194,PointDefenseDroneReleaseWeapon -195,HunterSeekerWeapon -196,MULE -198,ThorAAWeapon -199,PunisherGrenadesLMWeapon -200,VikingFighterWeapon -201,ATALaserBatteryLMWeapon -202,ATSLaserBatteryLMWeapon -203,LongboltMissileWeapon -204,D8ChargeWeapon -205,YamatoWeapon -206,IonCannonsWeapon -207,AcidSalivaWeapon -208,SpineCrawlerWeapon -209,SporeCrawlerWeapon -210,GlaiveWurmWeapon -211,GlaiveWurmM2Weapon -212,GlaiveWurmM3Weapon -213,StalkerWeapon -214,EMP2Weapon -215,BacklashRocketsLMWeapon -216,PhotonCannonWeapon -217,ParasiteSporeWeapon -219,Broodling -220,BroodLordBWeapon -223,AutoTurretReleaseWeapon -224,LarvaReleaseMissile -225,AcidSpinesWeapon -226,FrenzyWeapon -227,ContaminateWeapon -228,BroodlingDefault -229,Critter -230,CritterStationary -231,Shape -232,FungalGrowthMissile -233,NeuralParasiteTentacleMissile -234,Beacon_Protoss -235,Beacon_ProtossSmall -236,Beacon_Terran -237,Beacon_TerranSmall -238,Beacon_Zerg -239,Beacon_ZergSmall -240,Lyote -241,CarrionBird -242,KarakMale -243,KarakFemale -244,UrsadakFemaleExotic -245,UrsadakMale -246,UrsadakFemale -247,UrsadakCalf -248,UrsadakMaleExotic -249,UtilityBot -250,CommentatorBot1 -251,CommentatorBot2 -252,CommentatorBot3 -253,CommentatorBot4 -254,Scantipede -255,Dog -256,Sheep -257,Cow -258,InfestedTerransEggPlacement -259,InfestorTerransWeapon -260,MineralField -261,VespeneGeyser -262,SpacePlatformGeyser -263,RichVespeneGeyser -264,DestructibleSearchlight -265,DestructibleBullhornLights -266,DestructibleStreetlight -267,DestructibleSpacePlatformSign -268,DestructibleStoreFrontCityProps -269,DestructibleBillboardTall -270,DestructibleBillboardScrollingText -271,DestructibleSpacePlatformBarrier -272,DestructibleSignsDirectional -273,DestructibleSignsConstruction -274,DestructibleSignsFunny -275,DestructibleSignsIcons -276,DestructibleSignsWarning -277,DestructibleGarage -278,DestructibleGarageLarge -279,DestructibleTrafficSignal -280,TrafficSignal -281,BraxisAlphaDestructible1x1 -282,BraxisAlphaDestructible2x2 -283,DestructibleDebris4x4 -284,DestructibleDebris6x6 -285,DestructibleRock2x4Vertical -286,DestructibleRock2x4Horizontal -287,DestructibleRock2x6Vertical -288,DestructibleRock2x6Horizontal -289,DestructibleRock4x4 -290,DestructibleRock6x6 -291,DestructibleRampDiagonalHugeULBR -292,DestructibleRampDiagonalHugeBLUR -293,DestructibleRampVerticalHuge -294,DestructibleRampHorizontalHuge -295,DestructibleDebrisRampDiagonalHugeULBR -296,DestructibleDebrisRampDiagonalHugeBLUR -297,MengskStatueAlone -298,MengskStatue -299,WolfStatue -300,GlobeStatue -301,Weapon -302,GlaiveWurmBounceWeapon -303,BroodLordWeapon -304,BroodLordAWeapon -305,CreepBlocker1x1 -306,PathingBlocker1x1 -307,PathingBlocker2x2 -308,AutoTestAttackTargetGround -309,AutoTestAttackTargetAir -310,AutoTestAttacker -311,HelperEmitterSelectionArrow -312,MultiKillObject -313,ShapeGolfball -314,ShapeCone -315,ShapeCube -316,ShapeCylinder -317,ShapeDodecahedron -318,ShapeIcosahedron -319,ShapeOctahedron -320,ShapePyramid -321,ShapeRoundedCube -322,ShapeSphere -323,ShapeTetrahedron -324,ShapeThickTorus -325,ShapeThinTorus -326,ShapeTorus -327,Shape4PointStar -328,Shape5PointStar -329,Shape6PointStar -330,Shape8PointStar -331,ShapeArrowPointer -332,ShapeBowl -333,ShapeBox -334,ShapeCapsule -335,ShapeCrescentMoon -336,ShapeDecahedron -337,ShapeDiamond -338,ShapeFootball -339,ShapeGemstone -340,ShapeHeart -341,ShapeJack -342,ShapePlusSign -343,ShapeShamrock -344,ShapeSpade -345,ShapeTube -346,ShapeEgg -347,ShapeYenSign -348,ShapeX -349,ShapeWatermelon -350,ShapeWonSign -351,ShapeTennisball -352,ShapeStrawberry -353,ShapeSmileyFace -354,ShapeSoccerball -355,ShapeRainbow -356,ShapeSadFace -357,ShapePoundSign -358,ShapePear -359,ShapePineapple -360,ShapeOrange -361,ShapePeanut -362,ShapeO -363,ShapeLemon -364,ShapeMoneyBag -365,ShapeHorseshoe -366,ShapeHockeyStick -367,ShapeHockeyPuck -368,ShapeHand -369,ShapeGolfClub -370,ShapeGrape -371,ShapeEuroSign -372,ShapeDollarSign -373,ShapeBasketball -374,ShapeCarrot -375,ShapeCherry -376,ShapeBaseball -377,ShapeBaseballBat -378,ShapeBanana -379,ShapeApple -380,ShapeCashLarge -381,ShapeCashMedium -382,ShapeCashSmall -383,ShapeFootballColored -384,ShapeLemonSmall -385,ShapeOrangeSmall -386,ShapeTreasureChestOpen -387,ShapeTreasureChestClosed -388,ShapeWatermelonSmall -389,UnbuildableRocksDestructible -390,UnbuildableBricksDestructible -391,UnbuildablePlatesDestructible -407,HellionTank -408,CollapsibleTerranTowerDebris -409,DebrisRampLeft -410,DebrisRampRight -411,MothershipCore -415,LocustMP -416,CollapsibleRockTowerDebris -417,NydusCanalAttacker -418,NydusCanalCreeper -419,SwarmHostBurrowedMP -420,SwarmHostMP -421,Oracle -422,Tempest -423,WarHound -424,WidowMine -425,Viper -426,WidowMineBurrowed -427,LurkerMPEgg -428,LurkerMP -429,LurkerMPBurrowed -430,LurkerDenMP -431,ExtendingBridgeNEWide8Out -432,ExtendingBridgeNEWide8 -433,ExtendingBridgeNWWide8Out -434,ExtendingBridgeNWWide8 -435,ExtendingBridgeNEWide10Out -436,ExtendingBridgeNEWide10 -437,ExtendingBridgeNWWide10Out -438,ExtendingBridgeNWWide10 -439,ExtendingBridgeNEWide12Out -440,ExtendingBridgeNEWide12 -441,ExtendingBridgeNWWide12Out -442,ExtendingBridgeNWWide12 -444,CollapsibleRockTowerDebrisRampRight -445,CollapsibleRockTowerDebrisRampLeft -447,CollapsibleTerranTowerPushUnitRampLeft -448,CollapsibleTerranTowerPushUnitRampRight -451,CollapsibleRockTowerPushUnit -452,CollapsibleTerranTowerPushUnit -453,CollapsibleRockTowerPushUnitRampRight -454,CollapsibleRockTowerPushUnitRampLeft -455,DigesterCreepSprayTargetUnit -456,DigesterCreepSprayUnit -457,NydusCanalAttackerWeapon -458,ViperConsumeStructureWeapon -461,ResourceBlocker -462,TempestWeapon -463,YoinkMissile -465,YoinkVikingAirMissile -467,YoinkVikingGroundMissile -469,WarHoundWeapon -471,EyeStalkWeapon -474,WidowMineWeapon -475,WidowMineAirWeapon -476,MothershipCoreWeaponWeapon -477,TornadoMissileWeapon -478,TornadoMissileDummyWeapon -479,TalonsMissileWeapon -480,CreepTumorMissile -481,LocustMPEggAMissileWeapon -482,LocustMPEggBMissileWeapon -483,LocustMPWeapon -485,RepulsorCannonWeapon -486,ExtendingBridge -487,PhysicsPrimitiveParent -488,CollapsibleRockTowerDiagonal -489,CollapsibleTerranTowerDiagonal -490,CollapsibleTerranTowerRampLeft -491,CollapsibleTerranTowerRampRight -492,IceProtossCrates -493,ProtossCrates -494,TowerMine -495,PickupPalletGas -496,PickupPalletMinerals -497,PickupScrapSalvage1x1 -498,PickupScrapSalvage2x2 -499,PickupScrapSalvage3x3 -500,RoughTerrain -501,UnbuildableBricksSmallUnit -502,UnbuildablePlatesSmallUnit -503,UnbuildablePlatesUnit -504,UnbuildableRocksSmallUnit -505,XelNagaHealingShrine -506,InvisibleTargetDummy -507,ProtossVespeneGeyser -508,CollapsibleRockTower -509,CollapsibleTerranTower -510,ThornLizard -511,CleaningBot -512,DestructibleRock6x6Weak -513,ProtossSnakeSegmentDemo -514,PhysicsCapsule -515,PhysicsCube -516,PhysicsCylinder -517,PhysicsKnot -518,PhysicsL -519,PhysicsPrimitives -520,PhysicsSphere -521,PhysicsStar -522,CreepBlocker4x4 -523,DestructibleCityDebris2x4Vertical -524,DestructibleCityDebris2x4Horizontal -525,DestructibleCityDebris2x6Vertical -526,DestructibleCityDebris2x6Horizontal -527,DestructibleCityDebris4x4 -528,DestructibleCityDebris6x6 -529,DestructibleCityDebrisHugeDiagonalBLUR -530,DestructibleCityDebrisHugeDiagonalULBR -531,TestZerg -532,PathingBlockerRadius1 -533,DestructibleRockEx12x4Vertical -534,DestructibleRockEx12x4Horizontal -535,DestructibleRockEx12x6Vertical -536,DestructibleRockEx12x6Horizontal -537,DestructibleRockEx14x4 -538,DestructibleRockEx16x6 -539,DestructibleRockEx1DiagonalHugeULBR -540,DestructibleRockEx1DiagonalHugeBLUR -541,DestructibleRockEx1VerticalHuge -542,DestructibleRockEx1HorizontalHuge -543,DestructibleIce2x4Vertical -544,DestructibleIce2x4Horizontal -545,DestructibleIce2x6Vertical -546,DestructibleIce2x6Horizontal -547,DestructibleIce4x4 -548,DestructibleIce6x6 -549,DestructibleIceDiagonalHugeULBR -550,DestructibleIceDiagonalHugeBLUR -551,DestructibleIceVerticalHuge -552,DestructibleIceHorizontalHuge -553,DesertPlanetSearchlight -554,DesertPlanetStreetlight -555,UnbuildableBricksUnit -556,UnbuildableRocksUnit -557,ZerusDestructibleArch -558,Artosilope -559,Anteplott -560,LabBot -561,Crabeetle -562,CollapsibleRockTowerRampRight -563,CollapsibleRockTowerRampLeft -564,LabMineralField -580,ThorAALance -581,OracleWeapon -582,TempestWeaponGround -583,SeekerMissile +7,DESTRUCTIBLE +8,ITEM +9,POWERUP +10,SMCAMERA +11,SMCHARACTER +12,STARMAP +13,SMSET +14,MISSILE +15,MISSILE_INVULNERABLE +16,MISSILE_HALFLIFE +17,PLACEHOLDER +18,PLACEHOLDER_AIR +19,PATHINGBLOCKER +20,BEACON +21,Ball +22,StereoscopicOptionsUnit +23,Colossus +24,TechLab +25,Reactor +27,InfestorTerran +28,BanelingCocoon +29,Baneling +30,Mothership +31,PointDefenseDrone +32,Changeling +33,ChangelingZealot +34,ChangelingMarineShield +35,ChangelingMarine +36,ChangelingZerglingWings +37,ChangelingZergling +39,CommandCenter +40,SupplyDepot +41,Refinery +42,Barracks +43,EngineeringBay +44,MissileTurret +45,Bunker +46,SensorTower +47,GhostAcademy +48,Factory +49,Starport +51,Armory +52,FusionCore +53,AutoTurret +54,SiegeTankSieged +55,SiegeTank +56,VikingAssault +57,VikingFighter +58,CommandCenterFlying +59,BarracksTechLab +60,BarracksReactor +61,FactoryTechLab +62,FactoryReactor +63,StarportTechLab +64,StarportReactor +65,FactoryFlying +66,StarportFlying +67,SCV +68,BarracksFlying +69,SupplyDepotLowered +70,Marine +71,Reaper +72,Ghost +73,Marauder +74,Thor +75,Hellion +76,Medivac +77,Banshee +78,Raven +79,Battlecruiser +80,Nuke +81,Nexus +82,Pylon +83,Assimilator +84,Gateway +85,Forge +86,FleetBeacon +87,TwilightCouncil +88,PhotonCannon +89,Stargate +90,TemplarArchive +91,DarkShrine +92,RoboticsBay +93,RoboticsFacility +94,CyberneticsCore +95,Zealot +96,Stalker +97,HighTemplar +98,DarkTemplar +99,Sentry +100,Phoenix +101,Carrier +102,VoidRay +103,WarpPrism +104,Observer +105,Immortal +106,Probe +107,Interceptor +108,Hatchery +109,CreepTumor +110,Extractor +111,SpawningPool +112,EvolutionChamber +113,HydraliskDen +114,Spire +115,UltraliskCavern +116,InfestationPit +117,NydusNetwork +118,BanelingNest +119,RoachWarren +120,SpineCrawler +121,SporeCrawler +122,Lair +123,Hive +124,GreaterSpire +125,Egg +126,Drone +127,Zergling +128,Overlord +129,Hydralisk +130,Mutalisk +131,Ultralisk +132,Roach +133,Infestor +134,Corruptor +135,BroodLordCocoon +136,BroodLord +137,BanelingBurrowed +138,DroneBurrowed +139,HydraliskBurrowed +140,RoachBurrowed +141,ZerglingBurrowed +142,InfestorTerranBurrowed +143,RedstoneLavaCritterBurrowed +144,RedstoneLavaCritterInjuredBurrowed +145,RedstoneLavaCritter +146,RedstoneLavaCritterInjured +147,QueenBurrowed +148,Queen +149,InfestorBurrowed +150,OverlordCocoon +151,Overseer +152,PlanetaryFortress +153,UltraliskBurrowed +154,OrbitalCommand +155,WarpGate +156,OrbitalCommandFlying +157,ForceField +158,WarpPrismPhasing +159,CreepTumorBurrowed +160,CreepTumorQueen +161,SpineCrawlerUprooted +162,SporeCrawlerUprooted +163,Archon +164,NydusCanal +165,BroodlingEscort +166,RichMineralField +168,XelNagaTower +172,InfestedTerransEgg +173,Larva +174,ReaperPlaceholder +185,Cyclone +187,HellionTank +208,NeedleSpinesWeapon +209,CorruptionWeapon +210,InfestedTerransWeapon +211,NeuralParasiteWeapon +212,PointDefenseDroneReleaseWeapon +213,HunterSeekerWeapon +214,MULE +216,ThorAAWeapon +217,PunisherGrenadesLMWeapon +218,VikingFighterWeapon +219,ATALaserBatteryLMWeapon +220,ATSLaserBatteryLMWeapon +221,LongboltMissileWeapon +222,D8ChargeWeapon +223,YamatoWeapon +224,IonCannonsWeapon +225,AcidSalivaWeapon +226,SpineCrawlerWeapon +227,SporeCrawlerWeapon +228,GlaiveWurmWeapon +229,GlaiveWurmM2Weapon +230,GlaiveWurmM3Weapon +231,StalkerWeapon +232,EMP2Weapon +233,BacklashRocketsLMWeapon +234,PhotonCannonWeapon +235,ParasiteSporeWeapon +237,Broodling +238,BroodLordBWeapon +241,AutoTurretReleaseWeapon +242,LarvaReleaseMissile +243,AcidSpinesWeapon +244,FrenzyWeapon +245,ContaminateWeapon +253,BeaconRally +254,BeaconArmy +255,BeaconAttack +256,BeaconDefend +257,BeaconHarass +258,BeaconIdle +259,BeaconAuto +260,BeaconDetect +261,BeaconScout +262,BeaconClaim +263,BeaconExpand +264,BeaconCustom1 +265,BeaconCustom2 +266,BeaconCustom3 +267,BeaconCustom4 +268,BroodlingDefault +269,Critter +270,CritterStationary +271,Shape +272,Rocks2x2NonConjoined +273,FungalGrowthMissile +274,NeuralParasiteTentacleMissile +275,Beacon_Protoss +276,Beacon_ProtossSmall +277,Beacon_Terran +278,Beacon_TerranSmall +279,Beacon_Zerg +280,Beacon_ZergSmall +281,Lyote +282,CarrionBird +283,KarakMale +284,KarakFemale +285,UrsadakFemaleExotic +286,UrsadakMale +287,UrsadakFemale +288,UrsadakCalf +289,UrsadakMaleExotic +290,UtilityBot +291,CommentatorBot1 +292,CommentatorBot2 +293,CommentatorBot3 +294,CommentatorBot4 +295,Scantipede +296,Dog +297,Sheep +298,Cow +299,InfestedTerransEggPlacement +300,InfestorTerransWeapon +301,MineralField +302,VespeneGeyser +303,SpacePlatformGeyser +304,RichVespeneGeyser +305,DestructibleSearchlight +306,DestructibleBullhornLights +307,DestructibleStreetlight +308,DestructibleSpacePlatformSign +309,DestructibleStoreFrontCityProps +310,DestructibleBillboardTall +311,DestructibleBillboardScrollingText +312,DestructibleSpacePlatformBarrier +313,DestructibleSignsDirectional +314,DestructibleSignsConstruction +315,DestructibleSignsFunny +316,DestructibleSignsIcons +317,DestructibleSignsWarning +318,DestructibleGarage +319,DestructibleGarageLarge +320,DestructibleTrafficSignal +321,TrafficSignal +322,BraxisAlphaDestructible1x1 +323,BraxisAlphaDestructible2x2 +324,DestructibleDebris4x4 +325,DestructibleDebris6x6 +326,DestructibleRock2x4Vertical +327,DestructibleRock2x4Horizontal +328,DestructibleRock2x6Vertical +329,DestructibleRock2x6Horizontal +330,DestructibleRock4x4 +331,DestructibleRock6x6 +332,DestructibleRampDiagonalHugeULBR +333,DestructibleRampDiagonalHugeBLUR +334,DestructibleRampVerticalHuge +335,DestructibleRampHorizontalHuge +336,DestructibleDebrisRampDiagonalHugeULBR +337,DestructibleDebrisRampDiagonalHugeBLUR +338,OverlordGenerateCreepKeybind +339,MengskStatueAlone +340,MengskStatue +341,WolfStatue +342,GlobeStatue +343,Weapon +344,GlaiveWurmBounceWeapon +345,BroodLordWeapon +346,BroodLordAWeapon +347,CreepBlocker1x1 +348,PathingBlocker1x1 +349,PathingBlocker2x2 +350,AutoTestAttackTargetGround +351,AutoTestAttackTargetAir +352,AutoTestAttacker +353,HelperEmitterSelectionArrow +354,MultiKillObject +355,ShapeGolfball +356,ShapeCone +357,ShapeCube +358,ShapeCylinder +359,ShapeDodecahedron +360,ShapeIcosahedron +361,ShapeOctahedron +362,ShapePyramid +363,ShapeRoundedCube +364,ShapeSphere +365,ShapeTetrahedron +366,ShapeThickTorus +367,ShapeThinTorus +368,ShapeTorus +369,Shape4PointStar +370,Shape5PointStar +371,Shape6PointStar +372,Shape8PointStar +373,ShapeArrowPointer +374,ShapeBowl +375,ShapeBox +376,ShapeCapsule +377,ShapeCrescentMoon +378,ShapeDecahedron +379,ShapeDiamond +380,ShapeFootball +381,ShapeGemstone +382,ShapeHeart +383,ShapeJack +384,ShapePlusSign +385,ShapeShamrock +386,ShapeSpade +387,ShapeTube +388,ShapeEgg +389,ShapeYenSign +390,ShapeX +391,ShapeWatermelon +392,ShapeWonSign +393,ShapeTennisball +394,ShapeStrawberry +395,ShapeSmileyFace +396,ShapeSoccerball +397,ShapeRainbow +398,ShapeSadFace +399,ShapePoundSign +400,ShapePear +401,ShapePineapple +402,ShapeOrange +403,ShapePeanut +404,ShapeO +405,ShapeLemon +406,ShapeMoneyBag +407,ShapeHorseshoe +408,ShapeHockeyStick +409,ShapeHockeyPuck +410,ShapeHand +411,ShapeGolfClub +412,ShapeGrape +413,ShapeEuroSign +414,ShapeDollarSign +415,ShapeBasketball +416,ShapeCarrot +417,ShapeCherry +418,ShapeBaseball +419,ShapeBaseballBat +420,ShapeBanana +421,ShapeApple +422,ShapeCashLarge +423,ShapeCashMedium +424,ShapeCashSmall +425,ShapeFootballColored +426,ShapeLemonSmall +427,ShapeOrangeSmall +428,ShapeTreasureChestOpen +429,ShapeTreasureChestClosed +430,ShapeWatermelonSmall +431,UnbuildableRocksDestructible +432,UnbuildableBricksDestructible +433,UnbuildablePlatesDestructible +434,Debris2x2NonConjoined +435,EnemyPathingBlocker1x1 +436,EnemyPathingBlocker2x2 +437,EnemyPathingBlocker4x4 +438,EnemyPathingBlocker8x8 +439,EnemyPathingBlocker16x16 +440,ScopeTest +456,CollapsibleTerranTowerDebris +457,DebrisRampLeft +458,DebrisRampRight +459,MothershipCore +463,LocustMP +464,CollapsibleRockTowerDebris +465,NydusCanalAttacker +466,NydusCanalCreeper +467,SwarmHostBurrowedMP +468,SwarmHostMP +469,Oracle +470,Tempest +471,WarHound +472,WidowMine +473,Viper +474,WidowMineBurrowed +475,LurkerMPEgg +476,LurkerMP +477,LurkerMPBurrowed +478,LurkerDenMP +479,ExtendingBridgeNEWide8Out +480,ExtendingBridgeNEWide8 +481,ExtendingBridgeNWWide8Out +482,ExtendingBridgeNWWide8 +483,ExtendingBridgeNEWide10Out +484,ExtendingBridgeNEWide10 +485,ExtendingBridgeNWWide10Out +486,ExtendingBridgeNWWide10 +487,ExtendingBridgeNEWide12Out +488,ExtendingBridgeNEWide12 +489,ExtendingBridgeNWWide12Out +490,ExtendingBridgeNWWide12 +492,CollapsibleRockTowerDebrisRampRight +493,CollapsibleRockTowerDebrisRampLeft +494,XelNaga_Caverns_DoorE +495,XelNaga_Caverns_DoorEOpened +496,XelNaga_Caverns_DoorN +497,XelNaga_Caverns_DoorNE +498,XelNaga_Caverns_DoorNEOpened +499,XelNaga_Caverns_DoorNOpened +500,XelNaga_Caverns_DoorNW +501,XelNaga_Caverns_DoorNWOpened +502,XelNaga_Caverns_DoorS +503,XelNaga_Caverns_DoorSE +504,XelNaga_Caverns_DoorSEOpened +505,XelNaga_Caverns_DoorSOpened +506,XelNaga_Caverns_DoorSW +507,XelNaga_Caverns_DoorSWOpened +508,XelNaga_Caverns_DoorW +509,XelNaga_Caverns_DoorWOpened +510,XelNaga_Caverns_Floating_BridgeNE8Out +511,XelNaga_Caverns_Floating_BridgeNE8 +512,XelNaga_Caverns_Floating_BridgeNW8Out +513,XelNaga_Caverns_Floating_BridgeNW8 +514,XelNaga_Caverns_Floating_BridgeNE10Out +515,XelNaga_Caverns_Floating_BridgeNE10 +516,XelNaga_Caverns_Floating_BridgeNW10Out +517,XelNaga_Caverns_Floating_BridgeNW10 +518,XelNaga_Caverns_Floating_BridgeNE12Out +519,XelNaga_Caverns_Floating_BridgeNE12 +520,XelNaga_Caverns_Floating_BridgeNW12Out +521,XelNaga_Caverns_Floating_BridgeNW12 +522,XelNaga_Caverns_Floating_BridgeH8Out +523,XelNaga_Caverns_Floating_BridgeH8 +524,XelNaga_Caverns_Floating_BridgeV8Out +525,XelNaga_Caverns_Floating_BridgeV8 +526,XelNaga_Caverns_Floating_BridgeH10Out +527,XelNaga_Caverns_Floating_BridgeH10 +528,XelNaga_Caverns_Floating_BridgeV10Out +529,XelNaga_Caverns_Floating_BridgeV10 +530,XelNaga_Caverns_Floating_BridgeH12Out +531,XelNaga_Caverns_Floating_BridgeH12 +532,XelNaga_Caverns_Floating_BridgeV12Out +533,XelNaga_Caverns_Floating_BridgeV12 +536,CollapsibleTerranTowerPushUnitRampLeft +537,CollapsibleTerranTowerPushUnitRampRight +540,CollapsibleRockTowerPushUnit +541,CollapsibleTerranTowerPushUnit +542,CollapsibleRockTowerPushUnitRampRight +543,CollapsibleRockTowerPushUnitRampLeft +544,DigesterCreepSprayTargetUnit +545,DigesterCreepSprayUnit +546,NydusCanalAttackerWeapon +547,ViperConsumeStructureWeapon +550,ResourceBlocker +551,TempestWeapon +552,YoinkMissile +556,YoinkVikingAirMissile +558,YoinkVikingGroundMissile +560,YoinkSiegeTankMissile +562,WarHoundWeapon +564,EyeStalkWeapon +567,WidowMineWeapon +568,WidowMineAirWeapon +569,MothershipCoreWeaponWeapon +570,TornadoMissileWeapon +571,TornadoMissileDummyWeapon +572,TalonsMissileWeapon +573,CreepTumorMissile +574,LocustMPEggAMissileWeapon +575,LocustMPEggBMissileWeapon +576,LocustMPWeapon +578,RepulsorCannonWeapon +579,ExtendingBridge +580,PhysicsPrimitiveParent +581,XelNaga_Caverns_Door +582,CollapsibleRockTowerDiagonal +583,CollapsibleTerranTowerDiagonal +584,CollapsibleTerranTowerRampLeft +585,CollapsibleTerranTowerRampRight +586,Ice2x2NonConjoined +587,IceProtossCrates +588,ProtossCrates +589,TowerMine +590,PickupPalletGas +591,PickupPalletMinerals +592,PickupScrapSalvage1x1 +593,PickupScrapSalvage2x2 +594,PickupScrapSalvage3x3 +595,RoughTerrain +596,UnbuildableBricksSmallUnit +597,UnbuildablePlatesSmallUnit +598,UnbuildablePlatesUnit +599,UnbuildableRocksSmallUnit +600,XelNagaHealingShrine +601,InvisibleTargetDummy +602,ProtossVespeneGeyser +603,CollapsibleRockTower +604,CollapsibleTerranTower +605,ThornLizard +606,CleaningBot +607,DestructibleRock6x6Weak +608,ProtossSnakeSegmentDemo +609,PhysicsCapsule +610,PhysicsCube +611,PhysicsCylinder +612,PhysicsKnot +613,PhysicsL +614,PhysicsPrimitives +615,PhysicsSphere +616,PhysicsStar +617,CreepBlocker4x4 +618,DestructibleCityDebris2x4Vertical +619,DestructibleCityDebris2x4Horizontal +620,DestructibleCityDebris2x6Vertical +621,DestructibleCityDebris2x6Horizontal +622,DestructibleCityDebris4x4 +623,DestructibleCityDebris6x6 +624,DestructibleCityDebrisHugeDiagonalBLUR +625,DestructibleCityDebrisHugeDiagonalULBR +626,TestZerg +627,PathingBlockerRadius1 +628,DestructibleRockEx12x4Vertical +629,DestructibleRockEx12x4Horizontal +630,DestructibleRockEx12x6Vertical +631,DestructibleRockEx12x6Horizontal +632,DestructibleRockEx14x4 +633,DestructibleRockEx16x6 +634,DestructibleRockEx1DiagonalHugeULBR +635,DestructibleRockEx1DiagonalHugeBLUR +636,DestructibleRockEx1VerticalHuge +637,DestructibleRockEx1HorizontalHuge +638,DestructibleIce2x4Vertical +639,DestructibleIce2x4Horizontal +640,DestructibleIce2x6Vertical +641,DestructibleIce2x6Horizontal +642,DestructibleIce4x4 +643,DestructibleIce6x6 +644,DestructibleIceDiagonalHugeULBR +645,DestructibleIceDiagonalHugeBLUR +646,DestructibleIceVerticalHuge +647,DestructibleIceHorizontalHuge +648,DesertPlanetSearchlight +649,DesertPlanetStreetlight +650,UnbuildableBricksUnit +651,UnbuildableRocksUnit +652,ZerusDestructibleArch +653,Artosilope +654,Anteplott +655,LabBot +656,Crabeetle +657,CollapsibleRockTowerRampRight +658,CollapsibleRockTowerRampLeft +659,LabMineralField +675,RavagerCocoon +676,Ravager +677,RavagerBurrowed +679,ThorAP +680,LocustMPFlying +681,Disruptor +682,Adept +683,AiurTempleBridgeNE8Out +685,AiurTempleBridgeNE10Out +687,AiurTempleBridgeNE12Out +689,AiurTempleBridgeNW8Out +691,AiurTempleBridgeNW10Out +693,AiurTempleBridgeNW12Out +695,VoidMPImmortalReviveCorpse +696,GuardianCocoonMP +697,GuardianMP +698,DevourerCocoonMP +699,DevourerMP +700,DefilerMPBurrowed +701,DefilerMP +702,OracleStasisTrap +703,DisruptorPhased +704,LiberatorAG +705,Liberator +709,LocustMPPrecursor +710,ReleaseInterceptorsBeacon +711,AdeptPhaseShift +712,RavagerCorrosiveBileMissile +713,HydraliskImpaleMissile +714,CycloneMissile +715,ThorAALance +716,OracleWeapon +717,TempestWeaponGround +718,RavagerWeaponMissile +719,ScoutMPAirWeaponLeft +720,ScoutMPAirWeaponRight +721,ArbiterMPWeaponMissile +722,GuardianMPWeapon +723,DevourerMPWeaponMissile +724,QueenMPEnsnareMissile +725,QueenMPSpawnBroodlingsMissile +726,LightningBombWeapon +727,HERCPlacement +728,GrappleWeapon +731,CausticSprayMissile +732,ParasiticBombMissile +733,ParasiticBombDummy +734,AdeptWeapon +735,AdeptUpgradeWeapon +736,LiberatorMissile +737,LiberatorDamageMissile +738,LiberatorAGMissile +739,KD8Charge +740,KD8ChargeWeapon +742,XelNagaDestructibleRampBlocker +743,HERC +744,SeekerMissile +746,FlyoverUnit +747,ScoutMP +748,ScourgeMP +749,QueenMP +750,XelNagaDestructibleRampBlocker6S +751,XelNagaDestructibleRampBlocker6SE +752,XelNagaDestructibleRampBlocker6E +753,XelNagaDestructibleRampBlocker6NE +754,XelNagaDestructibleRampBlocker6N +755,XelNagaDestructibleRampBlocker6NW +756,XelNagaDestructibleRampBlocker6W +757,XelNagaDestructibleRampBlocker6SW +758,XelNagaDestructibleRampBlocker8S +759,XelNagaDestructibleRampBlocker8SE +760,XelNagaDestructibleRampBlocker8E +761,XelNagaDestructibleRampBlocker8NE +762,XelNagaDestructibleRampBlocker8N +763,XelNagaDestructibleRampBlocker8NW +764,XelNagaDestructibleRampBlocker8W +765,XelNagaDestructibleRampBlocker8SW +766,MineralField750 +767,RichMineralField750 +768,LabMineralField750 +769,TransportOverlordCocoon +770,OverlordTransport +771,BypassArmorDrone +772,CorrosiveParasiteWeapon diff --git a/sc2reader/data/ability_lookup.csv b/sc2reader/data/ability_lookup.csv index 20d1c59e..bec777b2 100755 --- a/sc2reader/data/ability_lookup.csv +++ b/sc2reader/data/ability_lookup.csv @@ -396,4 +396,128 @@ OracleWeapon,OracleWeapon,OracleWeaponOff,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, PulsarBeam,PulsarBeam,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, PulsarCannon,PulsarCannon,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, VoidRaySwarmDamageBoost,PrismaticAlignment,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -SeekerDummyChannel,SeekerDummyChannel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file +SeekerDummyChannel,SeekerDummyChannel,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +XelNaga_Caverns_DoorDefaultOpen,XelNaga_Caverns_DoorDefaultOpen +XelNaga_Caverns_DoorDefaultClose,XelNaga_Caverns_DoorDefaultClose +XelNaga_Caverns_DoorE,XelNaga_Caverns_DoorE +XelNaga_Caverns_DoorEOpened,XelNaga_Caverns_DoorEOpened +XelNaga_Caverns_DoorN,XelNaga_Caverns_DoorN +XelNaga_Caverns_DoorNE,XelNaga_Caverns_DoorNE +XelNaga_Caverns_DoorNEOpened,XelNaga_Caverns_DoorNEOpened +XelNaga_Caverns_DoorNOpened,XelNaga_Caverns_DoorNOpened +XelNaga_Caverns_DoorNW,XelNaga_Caverns_DoorNW +XelNaga_Caverns_DoorNWOpened,XelNaga_Caverns_DoorNWOpened +XelNaga_Caverns_DoorS,XelNaga_Caverns_DoorS +XelNaga_Caverns_DoorSE,XelNaga_Caverns_DoorSE +XelNaga_Caverns_DoorSEOpened,XelNaga_Caverns_DoorSEOpened +XelNaga_Caverns_DoorSOpened,XelNaga_Caverns_DoorSOpened +XelNaga_Caverns_DoorSW,XelNaga_Caverns_DoorSW +XelNaga_Caverns_DoorSWOpened,XelNaga_Caverns_DoorSWOpened +XelNaga_Caverns_DoorW,XelNaga_Caverns_DoorW +XelNaga_Caverns_DoorWOpened,XelNaga_Caverns_DoorWOpened +XelNaga_Caverns_Floating_BridgeNE8Out,XelNaga_Caverns_Floating_BridgeNE8Out +XelNaga_Caverns_Floating_BridgeNE8,XelNaga_Caverns_Floating_BridgeNE8 +XelNaga_Caverns_Floating_BridgeNW8Out,XelNaga_Caverns_Floating_BridgeNW8Out +XelNaga_Caverns_Floating_BridgeNW8,XelNaga_Caverns_Floating_BridgeNW8 +XelNaga_Caverns_Floating_BridgeNE10Out,XelNaga_Caverns_Floating_BridgeNE10Out +XelNaga_Caverns_Floating_BridgeNE10,XelNaga_Caverns_Floating_BridgeNE10 +XelNaga_Caverns_Floating_BridgeNW10Out,XelNaga_Caverns_Floating_BridgeNW10Out +XelNaga_Caverns_Floating_BridgeNW10,XelNaga_Caverns_Floating_BridgeNW10 +XelNaga_Caverns_Floating_BridgeNE12Out,XelNaga_Caverns_Floating_BridgeNE12Out +XelNaga_Caverns_Floating_BridgeNE12,XelNaga_Caverns_Floating_BridgeNE12 +XelNaga_Caverns_Floating_BridgeNW12Out,XelNaga_Caverns_Floating_BridgeNW12Out +XelNaga_Caverns_Floating_BridgeNW12,XelNaga_Caverns_Floating_BridgeNW12 +XelNaga_Caverns_Floating_BridgeH8Out,XelNaga_Caverns_Floating_BridgeH8Out +XelNaga_Caverns_Floating_BridgeH8,XelNaga_Caverns_Floating_BridgeH8 +XelNaga_Caverns_Floating_BridgeV8Out,XelNaga_Caverns_Floating_BridgeV8Out +XelNaga_Caverns_Floating_BridgeV8,XelNaga_Caverns_Floating_BridgeV8 +XelNaga_Caverns_Floating_BridgeH10Out,XelNaga_Caverns_Floating_BridgeH10Out +XelNaga_Caverns_Floating_BridgeH10,XelNaga_Caverns_Floating_BridgeH10 +XelNaga_Caverns_Floating_BridgeV10Out,XelNaga_Caverns_Floating_BridgeV10Out +XelNaga_Caverns_Floating_BridgeV10,XelNaga_Caverns_Floating_BridgeV10 +XelNaga_Caverns_Floating_BridgeH12Out,XelNaga_Caverns_Floating_BridgeH12Out +XelNaga_Caverns_Floating_BridgeH12,XelNaga_Caverns_Floating_BridgeH12 +XelNaga_Caverns_Floating_BridgeV12Out,XelNaga_Caverns_Floating_BridgeV12Out +XelNaga_Caverns_Floating_BridgeV12,XelNaga_Caverns_Floating_BridgeV12 +CausticSpray,CausticSpray +OracleCloakingFieldTargeted,OracleCloakingFieldTargeted +ImmortalOverload,ImmortalOverload +MorphToRavager,MorphToRavager +MorphToLurker,MorphToLurker +OraclePhaseShift,OraclePhaseShift +ReleaseInterceptors,ReleaseInterceptors +RavagerCorrosiveBile,RavagerCorrosiveBile +BurrowRavagerDown,BurrowRavagerDown +BurrowRavagerUp,BurrowRavagerUp +PurificationNova,PurificationNova +Impale,Impale +LockOn,LockOn +LockOnCancel,LockOnCancel +CorruptionBomb,CorruptionBomb +Hyperjump,Hyperjump +Overcharge,Overcharge +ThorAPMode,ThorAPMode +ThorNormalMode,ThorNormalMode +NydusWormTransport,NydusWormTransport +VoidSwarmHostSpawnLocust,VoidSwarmHostSpawnLocust +LocustMPFlyingMorphToGround,LocustMPFlyingMorphToGround +LocustMPMorphToAir,LocustMPMorphToAir +LocustMPFlyingSwoop,LocustMPFlyingSwoop +HallucinationDisruptor,HallucinationDisruptor +HallucinationAdept,HallucinationAdept +AiurTempleBridgeNE8Out,AiurTempleBridgeNE8Out +AiurTempleBridgeNE8,AiurTempleBridgeNE8 +AiurTempleBridgeNE10Out,AiurTempleBridgeNE10Out +AiurTempleBridgeNE10,AiurTempleBridgeNE10 +AiurTempleBridgeNE12Out,AiurTempleBridgeNE12Out +AiurTempleBridgeNE12,AiurTempleBridgeNE12 +AiurTempleBridgeNW8Out,AiurTempleBridgeNW8Out +AiurTempleBridgeNW8,AiurTempleBridgeNW8 +AiurTempleBridgeNW10Out,AiurTempleBridgeNW10Out +AiurTempleBridgeNW10,AiurTempleBridgeNW10 +AiurTempleBridgeNW12Out,AiurTempleBridgeNW12Out +AiurTempleBridgeNW12,AiurTempleBridgeNW12 +VoidMPImmortalReviveRebuild,VoidMPImmortalReviveRebuild +VoidMPImmortalReviveDeath,VoidMPImmortalReviveDeath +ArbiterMPStasisField,ArbiterMPStasisField +ArbiterMPRecall,ArbiterMPRecall +CorsairMPDisruptionWeb,CorsairMPDisruptionWeb +MorphToGuardianMP,MorphToGuardianMP +MorphToDevourerMP,MorphToDevourerMP +DefilerMPConsume,DefilerMPConsume +DefilerMPDarkSwarm,DefilerMPDarkSwarm +DefilerMPPlague,DefilerMPPlague +DefilerMPBurrow,DefilerMPBurrow +DefilerMPUnburrow,DefilerMPUnburrow +QueenMPEnsnare,QueenMPEnsnare +QueenMPSpawnBroodlings,QueenMPSpawnBroodlings +QueenMPInfestCommandCenter,QueenMPInfestCommandCenter +LightningBomb,LightningBomb +Grapple,Grapple +OracleStasisTrap,OracleStasisTrap +OracleStasisTrapBuild,OracleStasisTrapBuild +OracleStasisTrapActivate,OracleStasisTrapActivate +SelfRepair,SelfRepair +ParasiticBomb,ParasiticBomb +AdeptPhaseShift,AdeptPhaseShift +PurificationNovaMorph,PurificationNovaMorph +PurificationNovaMorphBack,PurificationNovaMorphBack +LurkerHoldFire,LurkerHoldFire +LurkerRemoveHoldFire,LurkerRemoveHoldFire +LiberatorMorphtoAG,LiberatorMorphtoAG +LiberatorMorphtoAA,LiberatorMorphtoAA +LiberatorAGTarget,LiberatorAGTarget +LiberatorAATarget,LiberatorAATarget +TimeStop,TimeStop +KD8Charge,KD8Charge +AdeptPhaseShiftCancel,AdeptPhaseShiftCancel +AdeptShadePhaseShiftCancel,AdeptShadePhaseShiftCancel +LaunchInterceptors,LaunchInterceptors +SpawnLocustsTargeted,SpawnLocustsTargeted +LocustMPFlyingSwoopAttack,LocustMPFlyingSwoopAttack +MorphToTransportOverlord,MorphToTransportOverlord +BypassArmor,BypassArmor +BypassArmorDroneCU,BypassArmorDroneCU +ChannelSnipe,ChannelSnipe +LockOnAir,LockOnAir +PurificationNovaTargetted,PurificationNovaTargetted diff --git a/sc2reader/data/unit_lookup.csv b/sc2reader/data/unit_lookup.csv index b7ecf82f..aa662358 100755 --- a/sc2reader/data/unit_lookup.csv +++ b/sc2reader/data/unit_lookup.csv @@ -521,4 +521,137 @@ ThorAALance,ThorAALance OracleWeapon,OracleWeapon TempestWeaponGround,TempestWeaponGround SeekerMissile,SeekerMissile -ProtossVespeneGeyser,ProtossVespeneGeyser \ No newline at end of file +ProtossVespeneGeyser,ProtossVespeneGeyser +Cyclone,Cyclone +Rocks2x2NonConjoined,Rocks2x2NonConjoined +OverlordGenerateCreepKeybind,OverlordGenerateCreepKeybind +Debris2x2NonConjoined,Debris2x2NonConjoined +EnemyPathingBlocker1x1,EnemyPathingBlocker1x1 +EnemyPathingBlocker2x2,EnemyPathingBlocker2x2 +EnemyPathingBlocker4x4,EnemyPathingBlocker4x4 +EnemyPathingBlocker8x8,EnemyPathingBlocker8x8 +EnemyPathingBlocker16x16,EnemyPathingBlocker16x16 +ScopeTest,ScopeTest +XelNaga_Caverns_DoorE,XelNaga_Caverns_DoorE +XelNaga_Caverns_DoorEOpened,XelNaga_Caverns_DoorEOpened +XelNaga_Caverns_DoorN,XelNaga_Caverns_DoorN +XelNaga_Caverns_DoorNE,XelNaga_Caverns_DoorNE +XelNaga_Caverns_DoorNEOpened,XelNaga_Caverns_DoorNEOpened +XelNaga_Caverns_DoorNOpened,XelNaga_Caverns_DoorNOpened +XelNaga_Caverns_DoorNW,XelNaga_Caverns_DoorNW +XelNaga_Caverns_DoorNWOpened,XelNaga_Caverns_DoorNWOpened +XelNaga_Caverns_DoorS,XelNaga_Caverns_DoorS +XelNaga_Caverns_DoorSE,XelNaga_Caverns_DoorSE +XelNaga_Caverns_DoorSEOpened,XelNaga_Caverns_DoorSEOpened +XelNaga_Caverns_DoorSOpened,XelNaga_Caverns_DoorSOpened +XelNaga_Caverns_DoorSW,XelNaga_Caverns_DoorSW +XelNaga_Caverns_DoorSWOpened,XelNaga_Caverns_DoorSWOpened +XelNaga_Caverns_DoorW,XelNaga_Caverns_DoorW +XelNaga_Caverns_DoorWOpened,XelNaga_Caverns_DoorWOpened +XelNaga_Caverns_Floating_BridgeNE8Out,XelNaga_Caverns_Floating_BridgeNE8Out +XelNaga_Caverns_Floating_BridgeNE8,XelNaga_Caverns_Floating_BridgeNE8 +XelNaga_Caverns_Floating_BridgeNW8Out,XelNaga_Caverns_Floating_BridgeNW8Out +XelNaga_Caverns_Floating_BridgeNW8,XelNaga_Caverns_Floating_BridgeNW8 +XelNaga_Caverns_Floating_BridgeNE10Out,XelNaga_Caverns_Floating_BridgeNE10Out +XelNaga_Caverns_Floating_BridgeNE10,XelNaga_Caverns_Floating_BridgeNE10 +XelNaga_Caverns_Floating_BridgeNW10Out,XelNaga_Caverns_Floating_BridgeNW10Out +XelNaga_Caverns_Floating_BridgeNW10,XelNaga_Caverns_Floating_BridgeNW10 +XelNaga_Caverns_Floating_BridgeNE12Out,XelNaga_Caverns_Floating_BridgeNE12Out +XelNaga_Caverns_Floating_BridgeNE12,XelNaga_Caverns_Floating_BridgeNE12 +XelNaga_Caverns_Floating_BridgeNW12Out,XelNaga_Caverns_Floating_BridgeNW12Out +XelNaga_Caverns_Floating_BridgeNW12,XelNaga_Caverns_Floating_BridgeNW12 +XelNaga_Caverns_Floating_BridgeH8Out,XelNaga_Caverns_Floating_BridgeH8Out +XelNaga_Caverns_Floating_BridgeH8,XelNaga_Caverns_Floating_BridgeH8 +XelNaga_Caverns_Floating_BridgeV8Out,XelNaga_Caverns_Floating_BridgeV8Out +XelNaga_Caverns_Floating_BridgeV8,XelNaga_Caverns_Floating_BridgeV8 +XelNaga_Caverns_Floating_BridgeH10Out,XelNaga_Caverns_Floating_BridgeH10Out +XelNaga_Caverns_Floating_BridgeH10,XelNaga_Caverns_Floating_BridgeH10 +XelNaga_Caverns_Floating_BridgeV10Out,XelNaga_Caverns_Floating_BridgeV10Out +XelNaga_Caverns_Floating_BridgeV10,XelNaga_Caverns_Floating_BridgeV10 +XelNaga_Caverns_Floating_BridgeH12Out,XelNaga_Caverns_Floating_BridgeH12Out +XelNaga_Caverns_Floating_BridgeH12,XelNaga_Caverns_Floating_BridgeH12 +XelNaga_Caverns_Floating_BridgeV12Out,XelNaga_Caverns_Floating_BridgeV12Out +XelNaga_Caverns_Floating_BridgeV12,XelNaga_Caverns_Floating_BridgeV12 +YoinkSiegeTankMissile,YoinkSiegeTankMissile +XelNaga_Caverns_Door,XelNaga_Caverns_Door +Ice2x2NonConjoined,Ice2x2NonConjoined +RavagerCocoon,RavagerCocoon +Ravager,Ravager +RavagerBurrowed,RavagerBurrowed +ThorAP,ThorAP +LocustMPFlying,LocustMPFlying +Disruptor,Disruptor +Adept,Adept +AiurTempleBridgeNE8Out,AiurTempleBridgeNE8Out +AiurTempleBridgeNE10Out,AiurTempleBridgeNE10Out +AiurTempleBridgeNE12Out,AiurTempleBridgeNE12Out +AiurTempleBridgeNW8Out,AiurTempleBridgeNW8Out +AiurTempleBridgeNW10Out,AiurTempleBridgeNW10Out +AiurTempleBridgeNW12Out,AiurTempleBridgeNW12Out +VoidMPImmortalReviveCorpse,VoidMPImmortalReviveCorpse +GuardianCocoonMP,GuardianCocoonMP +GuardianMP,GuardianMP +DevourerCocoonMP,DevourerCocoonMP +DevourerMP,DevourerMP +DefilerMPBurrowed,DefilerMPBurrowed +DefilerMP,DefilerMP +OracleStasisTrap,OracleStasisTrap +DisruptorPhased,DisruptorPhased +LiberatorAG,LiberatorAG +Liberator,Liberator +LocustMPPrecursor,LocustMPPrecursor +ReleaseInterceptorsBeacon,ReleaseInterceptorsBeacon +AdeptPhaseShift,AdeptPhaseShift +RavagerCorrosiveBileMissile,RavagerCorrosiveBileMissile +HydraliskImpaleMissile,HydraliskImpaleMissile +CycloneMissile,CycloneMissile +RavagerWeaponMissile,RavagerWeaponMissile +ScoutMPAirWeaponLeft,ScoutMPAirWeaponLeft +ScoutMPAirWeaponRight,ScoutMPAirWeaponRight +ArbiterMPWeaponMissile,ArbiterMPWeaponMissile +GuardianMPWeapon,GuardianMPWeapon +DevourerMPWeaponMissile,DevourerMPWeaponMissile +QueenMPEnsnareMissile,QueenMPEnsnareMissile +QueenMPSpawnBroodlingsMissile,QueenMPSpawnBroodlingsMissile +LightningBombWeapon,LightningBombWeapon +HERCPlacement,HERCPlacement +GrappleWeapon,GrappleWeapon +CausticSprayMissile,CausticSprayMissile +ParasiticBombMissile,ParasiticBombMissile +ParasiticBombDummy,ParasiticBombDummy +AdeptWeapon,AdeptWeapon +AdeptUpgradeWeapon,AdeptUpgradeWeapon +LiberatorMissile,LiberatorMissile +LiberatorDamageMissile,LiberatorDamageMissile +LiberatorAGMissile,LiberatorAGMissile +KD8Charge,KD8Charge +KD8ChargeWeapon,KD8ChargeWeapon +XelNagaDestructibleRampBlocker,XelNagaDestructibleRampBlocker +HERC,HERC +FlyoverUnit,FlyoverUnit +ScoutMP,ScoutMP +ScourgeMP,ScourgeMP +QueenMP,QueenMP +XelNagaDestructibleRampBlocker6S,XelNagaDestructibleRampBlocker6S +XelNagaDestructibleRampBlocker6SE,XelNagaDestructibleRampBlocker6SE +XelNagaDestructibleRampBlocker6E,XelNagaDestructibleRampBlocker6E +XelNagaDestructibleRampBlocker6NE,XelNagaDestructibleRampBlocker6NE +XelNagaDestructibleRampBlocker6N,XelNagaDestructibleRampBlocker6N +XelNagaDestructibleRampBlocker6NW,XelNagaDestructibleRampBlocker6NW +XelNagaDestructibleRampBlocker6W,XelNagaDestructibleRampBlocker6W +XelNagaDestructibleRampBlocker6SW,XelNagaDestructibleRampBlocker6SW +XelNagaDestructibleRampBlocker8S,XelNagaDestructibleRampBlocker8S +XelNagaDestructibleRampBlocker8SE,XelNagaDestructibleRampBlocker8SE +XelNagaDestructibleRampBlocker8E,XelNagaDestructibleRampBlocker8E +XelNagaDestructibleRampBlocker8NE,XelNagaDestructibleRampBlocker8NE +XelNagaDestructibleRampBlocker8N,XelNagaDestructibleRampBlocker8N +XelNagaDestructibleRampBlocker8NW,XelNagaDestructibleRampBlocker8NW +XelNagaDestructibleRampBlocker8W,XelNagaDestructibleRampBlocker8W +XelNagaDestructibleRampBlocker8SW,XelNagaDestructibleRampBlocker8SW +MineralField750,MineralField750 +RichMineralField750,RichMineralField750 +LabMineralField750,LabMineralField750 +TransportOverlordCocoon,TransportOverlordCocoon +OverlordTransport,OverlordTransport +BypassArmorDrone,BypassArmorDrone +CorrosiveParasiteWeapon,CorrosiveParasiteWeapon From 2139abc8b7c4fa27f74b26919b0c9a2d367a4163 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 7 Oct 2015 10:25:40 -0400 Subject: [PATCH 188/238] remove debugging print statement --- test_replays/test_all.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 2b3b28f1..32fd00e9 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -15,8 +15,6 @@ sc2reader.log_utils.log_to_console("INFO") -print("YO YO YO THIS IS FOR REAL") - class TestReplays(unittest.TestCase): def test_teams(self): From d69feb4e0be597581040588193579d29e8241431 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 7 Oct 2015 10:26:01 -0400 Subject: [PATCH 189/238] add failing test for 3.0 --- test_replays/3.0.0.38215/first.SC2Replay | Bin 0 -> 82735 bytes test_replays/test_all.py | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 test_replays/3.0.0.38215/first.SC2Replay diff --git a/test_replays/3.0.0.38215/first.SC2Replay b/test_replays/3.0.0.38215/first.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..373abc281c175d761b1cd76b0e9e0847fa6351bd GIT binary patch literal 82735 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%0Dq1U`;qn$u36EtnP`9ah;J{3wQ2J1>SbOQSs)?ku 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 Date: Wed, 7 Oct 2015 11:22:36 -0400 Subject: [PATCH 190/238] handle 3.0 replays, work in progress. test now passes, meaning that we can parse the replay without barfing. test doesn't check the parsed data at all; just confirms that no exception is thrown. Conflicts: sc2reader/readers.py test_replays/test_all.py --- sc2reader/readers.py | 45 +++++++++++++++++++++++ sc2reader/resources.py | 3 +- test_replays/3.0.0.38215/first.SC2Replay | Bin 0 -> 82735 bytes test_replays/test_all.py | 5 ++- 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 test_replays/3.0.0.38215/first.SC2Replay diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 3c1fb85a..d129ac50 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -118,6 +118,7 @@ def __call__(self, data, replay): tandem_leader_user_id=data.read_bits(4) if replay.base_build >= 34784 and data.read_bool() else None, commander=data.read_aligned_bytes(data.read_bits(9)) if replay.base_build >= 34784 else None, commander_level=data.read_uint32() if replay.base_build >= 36442 else None, + has_silence_penalty=data.read_bool() if replay.base_build >= 38215 else None, ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, @@ -1723,6 +1724,50 @@ def control_group_update_event(self, data): }[data.read_bits(2)](), ) +class GameEventsReader_38215(GameEventsReader_36442): + + def command_event(self, data): + # this function is exactly the same as command_event() from GameEventsReader_36442 + # with the only change being that flags now has 25 bits instead of 23. + return dict( + flags=data.read_bits(25), + ability=dict( + ability_link=data.read_uint16(), + ability_command_index=data.read_bits(5), + ability_command_data=data.read_uint8() if data.read_bool() else None, + ) if data.read_bool() else None, + data={ # Choice + 0: lambda: ('None', None), + 1: lambda: ('TargetPoint', dict( + point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ) + )), + 2: lambda: ('TargetUnit', dict( + flags=data.read_uint16(), + timer=data.read_uint8(), + unit_tag=data.read_uint32(), + unit_link=data.read_uint16(), + control_player_id=data.read_bits(4) if data.read_bool() else None, + upkeep_player_id=data.read_bits(4) if data.read_bool() else None, + point=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_uint32() - 2147483648, + ), + )), + 3: lambda: ('Data', dict( + data=data.read_uint32() + )), + }[data.read_bits(2)](), + sequence=data.read_uint32() + 1, + other_unit_tag=data.read_uint32() if data.read_bool() else None, + unit_group=data.read_uint32() if data.read_bool() else None, + ) + + class TrackerEventsReader(object): def __init__(self): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index f546229f..af0b7201 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -570,7 +570,8 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build < 27950) self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build < 34784) self.register_reader('replay.game.events', readers.GameEventsReader_34784(), lambda r: 34784 <= r.base_build < 36442) - self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build < 38215) + self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) def register_default_datapacks(self): diff --git a/test_replays/3.0.0.38215/first.SC2Replay b/test_replays/3.0.0.38215/first.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..373abc281c175d761b1cd76b0e9e0847fa6351bd GIT binary patch literal 82735 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%0Dq1U`;qn$u36EtnP`9ah;J{3wQ2J1>SbOQSs)?ku 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 Date: Wed, 7 Oct 2015 14:57:28 -0400 Subject: [PATCH 191/238] further support for 3.0. now two replays pass the parsing test. --- sc2reader/events/game.py | 7 +++- sc2reader/readers.py | 49 +++++++++++++++++++++- test_replays/3.0.0.38215/second.SC2Replay | Bin 0 -> 84678 bytes test_replays/test_all.py | 1 + 4 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 test_replays/3.0.0.38215/second.SC2Replay diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index a4eb5446..e21d81df 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -101,7 +101,7 @@ def __init__(self, frame, pid, data): self.use_ai_beacons = data['use_ai_beacons'] #: Are workers sent to auto-mine on game start - self.starting_rally = data['starting_rally'] + self.starting_rally = data['starting_rally'] if 'starting_rally' in data else None #: self.debug_pause_enabled = data['debug_pause_enabled'] @@ -427,7 +427,10 @@ def create_control_group_event(frame, pid, data): elif update_type == 3: # TODO: What could this be?!? return HotkeyEvent(frame, pid, data) - + elif update_type == 4: + # No idea what this is but we're seeing it now in 3.0 + return HotkeyEvent(frame, pid, data) + @loggable class HotkeyEvent(PlayerActionEvent): diff --git a/sc2reader/readers.py b/sc2reader/readers.py index d129ac50..038b8b33 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -47,7 +47,7 @@ def __call__(self, data, replay): random_races=data.read_bool(), battle_net=data.read_bool(), amm=data.read_bool(), - ranked=data.read_bool() if replay.base_build >= 34784 else None, + ranked=data.read_bool() if replay.base_build >= 34784 and replay.base_build < 38215 else None, competitive=data.read_bool(), practice=data.read_bool() if replay.base_build >= 34784 else None, cooperative=data.read_bool() if replay.base_build >= 34784 else None, @@ -1726,6 +1726,31 @@ def control_group_update_event(self, data): class GameEventsReader_38215(GameEventsReader_36442): + def __init__(self): + super(GameEventsReader_38215, self).__init__() + + self.EVENT_DISPATCH.update({ + 76: (None, self.trigger_command_error_event), + 92: (None, self.trigger_mousewheel_event), # 172 in protocol38125.py + }) + + def trigger_command_error_event(self, data): + return dict( + error=data.read_uint32() - 2147483648, + ability=dict( + ability_link=data.read_uint16(), + ability_command_index=data.read_bits(5), + ability_command_data=data.read_uint8() if data.read_bool() else None, + ) if data.read_bool() else None, + ) + + def trigger_mousewheel_event(self, data): + # 172 in protocol38125.py + return dict( + wheelspin=data.read_uint16()-32768, # 171 in protocol38125.py + flags=data.read_uint8() - 128, # 112 in protocol38125.py + ) + def command_event(self, data): # this function is exactly the same as command_event() from GameEventsReader_36442 # with the only change being that flags now has 25 bits instead of 23. @@ -1766,7 +1791,27 @@ def command_event(self, data): other_unit_tag=data.read_uint32() if data.read_bool() else None, unit_group=data.read_uint32() if data.read_bool() else None, ) - + + def user_options_event(self, data): + # only change: removes starting_rally + return dict( + game_fully_downloaded=data.read_bool(), + development_cheats_enabled=data.read_bool(), + test_cheats_enabled=data.read_bool(), + multiplayer_cheats_enabled=data.read_bool(), + sync_checksumming_enabled=data.read_bool(), + is_map_to_map_transition=data.read_bool(), + debug_pause_enabled=data.read_bool(), + use_galaxy_asserts=data.read_bool(), + platform_mac=data.read_bool(), + camera_follow=data.read_bool(), + base_build_num=data.read_uint32(), + build_num=data.read_uint32(), + version_flags=data.read_uint32(), + hotkey_profile=data.read_aligned_string(data.read_bits(9)), + use_ai_beacons=None, + ) + class TrackerEventsReader(object): diff --git a/test_replays/3.0.0.38215/second.SC2Replay b/test_replays/3.0.0.38215/second.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..66ca0d84411f257ff18e0b609ce7043b3f74c279 GIT binary patch literal 84678 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 Date: Wed, 7 Oct 2015 15:00:43 -0400 Subject: [PATCH 192/238] add third replay for fun --- test_replays/3.0.0.38215/third.SC2Replay | Bin 0 -> 33051 bytes test_replays/test_all.py | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 test_replays/3.0.0.38215/third.SC2Replay diff --git a/test_replays/3.0.0.38215/third.SC2Replay b/test_replays/3.0.0.38215/third.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..77947235659eda9f699c354b7dce29ef7bd2def8 GIT binary patch literal 33051 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index a14cc6b2..7e4db5e3 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -430,8 +430,9 @@ def test_lotv_map(self): def test_30(self): replay = sc2reader.load_replay("test_replays/3.0.0.38215/first.SC2Replay") replay = sc2reader.load_replay("test_replays/3.0.0.38215/second.SC2Replay") + replay = sc2reader.load_replay("test_replays/3.0.0.38215/third.SC2Replay") - + class TestGameEngine(unittest.TestCase): class TestEvent(object): name='TestEvent' From 0c9b27259bca314e83e42317d4292992631608b4 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 7 Oct 2015 15:40:43 -0400 Subject: [PATCH 193/238] read even less of the map data, because we can't read part of some maps anymore and its data ggtracker doesn't need anyway. --- sc2reader/objects.py | 8 ++++---- test_replays/test_all.py | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index e1142c73..eeedfe53 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -564,6 +564,10 @@ def __init__(self, contents): #: The map base height (what is that?). This value is 4096*Base Height in the editor (giving a decimal value). self.base_height = data.read_uint32()/4096 + # Leave early so we dont barf. Turns out ggtracker doesnt need + # any of the map data thats loaded below. + return + #: Load screen type: 0 = default, 1 = custom self.load_screen_type = data.read_uint32() @@ -627,10 +631,6 @@ def __init__(self, contents): #: The number of players enabled via the data editor self.player_count = data.read_uint32() - # Leave early so we dont barf. Turns out ggtracker doesnt need - # any of the map data thats loaded below. - return - #: A list of references to :class:`MapInfoPlayer` objects self.players = list() for i in range(self.player_count): diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 7e4db5e3..5e2e0232 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -432,6 +432,13 @@ def test_30(self): replay = sc2reader.load_replay("test_replays/3.0.0.38215/second.SC2Replay") replay = sc2reader.load_replay("test_replays/3.0.0.38215/third.SC2Replay") + def test_30_map(self): + for replayfilename in [ + "test_replays/3.0.0.38215/third.SC2Replay", + ]: + factory = sc2reader.factories.SC2Factory() + replay =factory.load_replay(replayfilename,load_level=1,load_map= True) + class TestGameEngine(unittest.TestCase): class TestEvent(object): From ea6a7a10ec24924b4726d03382bc65a170a523f3 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Thu, 8 Oct 2015 10:39:03 -0400 Subject: [PATCH 194/238] hack to make HotS 3.0 / 38215 use the LotV datapack so that mineral fields will be recognized, which we use for base placement logic adjust APM upward for 3.0 because people expect 1.4x their true APM. --- sc2reader/data/__init__.py | 2 ++ sc2reader/engine/plugins/apm.py | 4 ++-- sc2reader/factories/plugins/replay.py | 4 ++-- sc2reader/resources.py | 3 ++- test_replays/3.0.0.38215/fourth.SC2Replay | Bin 0 -> 81750 bytes test_replays/test_all.py | 13 ++++++++++++- 6 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 test_replays/3.0.0.38215/fourth.SC2Replay diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index c845388d..a17bac10 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -401,6 +401,8 @@ def load_build(expansion, version): hots_builds = dict() for version in ('base', '23925', '24247', '24764'): hots_builds[version] = load_build('HotS', version) +hots_builds['38215'] = load_build('LotV', 'base') +hots_builds['38215'].id = '38215' # Load LotV Data lotv_builds = dict() diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py index 0d69b293..5eec2ac2 100644 --- a/sc2reader/engine/plugins/apm.py +++ b/sc2reader/engine/plugins/apm.py @@ -24,8 +24,8 @@ def handleInitGame(self, event, replay): human.seconds_played = replay.length.seconds def handlePlayerActionEvent(self, event, replay): - event.player.aps[event.second] += 1 - event.player.apm[int(event.second/60)] += 1 + event.player.aps[event.second] += 1.4 + event.player.apm[int(event.second/60)] += 1.4 def handlePlayerLeaveEvent(self, event, replay): event.player.seconds_played = event.second diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index 8267dff3..4353d8c3 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -107,8 +107,8 @@ def APMTracker(replay): for event in player.events: if event.name == 'SelectionEvent' or 'AbilityEvent' in event.name or 'Hotkey' in event.name: - player.aps[event.second] += 1 - player.apm[int(event.second/60)] += 1 + player.aps[event.second] += 1.4 + player.apm[int(event.second/60)] += 1.4 elif event.name == 'PlayerLeaveEvent': player.seconds_played = event.second diff --git a/sc2reader/resources.py b/sc2reader/resources.py index af0b7201..834a260e 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -585,7 +585,8 @@ def register_default_datapacks(self): self.register_datapack(datapacks['HotS']['base'], lambda r: r.expansion == 'HotS' and r.build < 23925) self.register_datapack(datapacks['HotS']['23925'], lambda r: r.expansion == 'HotS' and 23925 <= r.build < 24247) self.register_datapack(datapacks['HotS']['24247'], lambda r: r.expansion == 'HotS' and 24247 <= r.build <= 24764) - self.register_datapack(datapacks['HotS']['24764'], lambda r: r.expansion == 'HotS' and 24764 <= r.build) + self.register_datapack(datapacks['HotS']['24764'], lambda r: r.expansion == 'HotS' and 24764 <= r.build < 38215) + self.register_datapack(datapacks['HotS']['38215'], lambda r: r.expansion == 'HotS' and 38215 <= r.build) self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) # Internal Methods diff --git a/test_replays/3.0.0.38215/fourth.SC2Replay b/test_replays/3.0.0.38215/fourth.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..245ffaa89f966bf87707a34d89abb4f7211aee02 GIT binary patch literal 81750 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 Cr#X!P literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 5e2e0232..416780c6 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -439,7 +439,18 @@ def test_30_map(self): factory = sc2reader.factories.SC2Factory() replay =factory.load_replay(replayfilename,load_level=1,load_map= True) - + def test_30_apms(self): + from sc2reader.factories.plugins.replay import APMTracker, SelectionTracker, toJSON + + factory = sc2reader.factories.SC2Factory() + factory.register_plugin("Replay", APMTracker()) + replay = factory.load_replay("test_replays/3.0.0.38215/fourth.SC2Replay") + for player in replay.players: + if player.name == 'Owl': + print player.name, player.avg_apm + self.assertTrue(player.avg_apm > 110) + + class TestGameEngine(unittest.TestCase): class TestEvent(object): name='TestEvent' From 7d12c2ac3f7647e575a4cd5d67263cf8546ac496 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 28 Oct 2015 09:51:57 -0400 Subject: [PATCH 195/238] introduce failing test for 38749 --- test_replays/3.0.0.38749/1.SC2Replay | Bin 0 -> 172810 bytes test_replays/test_all.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 test_replays/3.0.0.38749/1.SC2Replay diff --git a/test_replays/3.0.0.38749/1.SC2Replay b/test_replays/3.0.0.38749/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..5ec97702bc18b08409f1bc1c47677f581073bf3f GIT binary patch literal 172810 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≶ry1=mQ-%qQr*E6+6>W}b9r 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 416780c6..fe07c982 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -450,6 +450,10 @@ def test_30_apms(self): print player.name, player.avg_apm self.assertTrue(player.avg_apm > 110) + def test_38749(self): + replay = sc2reader.load_replay("test_replays/3.0.0.38749/1.SC2Replay") + self.assertEqual(replay.expansion, 'HotS') + class TestGameEngine(unittest.TestCase): class TestEvent(object): From 64217c7e7e1c0215f58ea49b9634214fd466790c Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 28 Oct 2015 11:01:04 -0400 Subject: [PATCH 196/238] handle 38749. test passes now. --- sc2reader/readers.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 038b8b33..43124e66 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -79,10 +79,10 @@ def __call__(self, data, replay): allowedDifficulty=data.read_bits(data.read_bits(6)), allowedControls=data.read_bits(data.read_uint8()), allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=data.read_bits(data.read_bits(7)) if replay.base_build >= 23925 else None, + allowed_ai_builds=data.read_bits(data.read_bits(8 if replay.base_build >= 38749 else 7)) if replay.base_build >= 23925 else None, ) for i in range(data.read_bits(5))], default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, + default_ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 23925 else None, cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], has_extension_mod=data.read_bool() if replay.base_build >= 27950 else None, is_blizzardMap=data.read_bool(), @@ -101,7 +101,7 @@ def __call__(self, data, replay): colorPref=data.read_bits(5) if data.read_bool() else None, race_pref=data.read_uint8() if data.read_bool() else None, difficulty=data.read_bits(6), - ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, + ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 23925 else None, handicap=data.read_bits(7), observe=data.read_bits(2), logo_index=data.read_uint32() if replay.base_build >= 32283 else None, @@ -126,7 +126,7 @@ def __call__(self, data, replay): picked_map_tag=data.read_uint8() if replay.base_build >= 36442 else None, game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7) if replay.base_build >= 24764 else None, + default_ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 24764 else None, ), ) if not data.done(): @@ -1215,6 +1215,14 @@ def trigger_ping_event(self, data): y=data.read_uint32()-2147483648, ), unit_tag=data.read_uint32(), + unit_link=data.read_uint16() if replay.build >= 38749 else None, + unit_control_player_id=(data.read_bits(4) if data.read_bool() else None) if replay.build >= 38749 else None, + unit_upkeep_player_id=(data.read_bits(4) if data.read_bool() else None) if replay.build >= 38749 else None, + unit_position=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_bits(32) - 2147483648, + ) if replay.build >= 38749 else None, pinged_minimap=data.read_bool(), ) From 650a9cb738d80ba1301b9c86a9014f0a434c2ac4 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Fri, 30 Oct 2015 09:35:20 -0400 Subject: [PATCH 197/238] add a failing replay --- test_replays/3.0.0.38749/2.SC2Replay | Bin 0 -> 145301 bytes test_replays/test_all.py | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 test_replays/3.0.0.38749/2.SC2Replay diff --git a/test_replays/3.0.0.38749/2.SC2Replay b/test_replays/3.0.0.38749/2.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..819a2a3b8cd2f1ef935b162c7f9459464242a46b GIT binary patch literal 145301 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 E7wL}<;Q#;t literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index fe07c982..7b62635c 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -453,6 +453,8 @@ def test_30_apms(self): def test_38749(self): replay = sc2reader.load_replay("test_replays/3.0.0.38749/1.SC2Replay") self.assertEqual(replay.expansion, 'HotS') + replay = sc2reader.load_replay("test_replays/3.0.0.38749/2.SC2Replay") + self.assertEqual(replay.expansion, 'HotS') class TestGameEngine(unittest.TestCase): From b6d63e57e4945a99c0c4c877aceb66040071be12 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Fri, 30 Oct 2015 10:14:47 -0400 Subject: [PATCH 198/238] make diagnostic script not die when players don't have names --- sc2reader/events/game.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index e21d81df..4f8aa643 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -36,7 +36,10 @@ def __init__(self, frame, pid): self.is_local = (pid != 16) def _str_prefix(self): - player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" + if self.player: + player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" + else: + player_name = "no name" return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): From 27948bf0c7ffa805795d7fc5e0d959b422ef1d31 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Fri, 30 Oct 2015 10:15:16 -0400 Subject: [PATCH 199/238] correctly handle 38749. test passes now --- sc2reader/readers.py | 28 ++++++++++++++++++++-------- sc2reader/resources.py | 5 +++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 43124e66..d76a0ab2 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1215,14 +1215,6 @@ def trigger_ping_event(self, data): y=data.read_uint32()-2147483648, ), unit_tag=data.read_uint32(), - unit_link=data.read_uint16() if replay.build >= 38749 else None, - unit_control_player_id=(data.read_bits(4) if data.read_bool() else None) if replay.build >= 38749 else None, - unit_upkeep_player_id=(data.read_bits(4) if data.read_bool() else None) if replay.build >= 38749 else None, - unit_position=dict( - x=data.read_bits(20), - y=data.read_bits(20), - z=data.read_bits(32) - 2147483648, - ) if replay.build >= 38749 else None, pinged_minimap=data.read_bool(), ) @@ -1820,6 +1812,26 @@ def user_options_event(self, data): use_ai_beacons=None, ) +class GameEventsReader_38749(GameEventsReader_38215): + + def trigger_ping_event(self, data): + return dict( + point=dict( + x=data.read_uint32() - 2147483648, + y=data.read_uint32() - 2147483648, + ), + unit_tag=data.read_uint32(), + unit_link=data.read_uint16(), + unit_control_player_id=(data.read_bits(4) if data.read_bool() else None), + unit_upkeep_player_id=(data.read_bits(4) if data.read_bool() else None), + unit_position=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_bits(32) - 2147483648, + ), + pinged_minimap=data.read_bool(), + option=data.read_uint32() - 2147483648, + ) class TrackerEventsReader(object): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 834a260e..3eaa1c84 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -1,4 +1,4 @@ - # -*- coding: utf-8 -*- + # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division from collections import defaultdict, namedtuple @@ -571,7 +571,8 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build < 34784) self.register_reader('replay.game.events', readers.GameEventsReader_34784(), lambda r: 34784 <= r.base_build < 36442) self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build < 38215) - self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build < 38749) + self.register_reader('replay.game.events', readers.GameEventsReader_38749(), lambda r: 38749 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) def register_default_datapacks(self): From ab8d826b52a6c300e230295e32951b7a9182c35b Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Fri, 30 Oct 2015 10:15:29 -0400 Subject: [PATCH 200/238] make diagnostic script work --- sc2reader/scripts/sc2parse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/scripts/sc2parse.py b/sc2reader/scripts/sc2parse.py index b39fd432..063f6410 100755 --- a/sc2reader/scripts/sc2parse.py +++ b/sc2reader/scripts/sc2parse.py @@ -68,7 +68,7 @@ def main(): print('{build} - {real_type} on {map_name} - Played {start_time}'.format(**e.replay.__dict__)) print('[ERROR]', e.message) for event in e.game_events[-5:]: - print('{0} - {1}'.format(hex(event.type), event.bytes.encode('hex'))) + print('{0}'.format(event)) print(e.buffer.read_range(e.location, e.location+50).encode('hex')) print except Exception as e: From 6a828a9c208dd9c700a656b57b39894e16d64d6c Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Fri, 13 Nov 2015 11:00:58 -0500 Subject: [PATCH 201/238] handle weird update_types in create_control_group_event. failing replays now parse. --- sc2reader/events/game.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 4f8aa643..a6ff2403 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -430,9 +430,10 @@ def create_control_group_event(frame, pid, data): elif update_type == 3: # TODO: What could this be?!? return HotkeyEvent(frame, pid, data) - elif update_type == 4: - # No idea what this is but we're seeing it now in 3.0 + else: + # No idea what this is but we're seeing update_types of 4 and 5 in 3.0 return HotkeyEvent(frame, pid, data) + @loggable From 77d405f84802f4f5d19d39780628edf086e0a043 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Fri, 13 Nov 2015 11:01:30 -0500 Subject: [PATCH 202/238] handle 38996 --- sc2reader/readers.py | 23 +++++++++++++++++++++++ sc2reader/resources.py | 3 ++- test_replays/3.0.0.38996/1.SC2Replay | Bin 0 -> 56122 bytes test_replays/3.0.0.38996/2.SC2Replay | Bin 0 -> 51732 bytes test_replays/test_all.py | 6 ++++++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test_replays/3.0.0.38996/1.SC2Replay create mode 100644 test_replays/3.0.0.38996/2.SC2Replay diff --git a/sc2reader/readers.py b/sc2reader/readers.py index d76a0ab2..10ef1c65 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1833,6 +1833,29 @@ def trigger_ping_event(self, data): option=data.read_uint32() - 2147483648, ) +class GameEventsReader_38996(GameEventsReader_38749): + + def trigger_ping_event(self, data): + print('yo') + return dict( + point=dict( + x=data.read_uint32() - 2147483648, + y=data.read_uint32() - 2147483648, + ), + unit_tag=data.read_uint32(), + unit_link=data.read_uint16(), + unit_control_player_id=(data.read_bits(4) if data.read_bool() else None), + unit_upkeep_player_id=(data.read_bits(4) if data.read_bool() else None), + unit_position=dict( + x=data.read_bits(20), + y=data.read_bits(20), + z=data.read_bits(32) - 2147483648, + ), + unit_is_under_construction=data.read_bool(), + pinged_minimap=data.read_bool(), + option=data.read_uint32() - 2147483648, + ) + class TrackerEventsReader(object): def __init__(self): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 3eaa1c84..3ba19af3 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -572,7 +572,8 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_34784(), lambda r: 34784 <= r.base_build < 36442) self.register_reader('replay.game.events', readers.GameEventsReader_36442(), lambda r: 36442 <= r.base_build < 38215) self.register_reader('replay.game.events', readers.GameEventsReader_38215(), lambda r: 38215 <= r.base_build < 38749) - self.register_reader('replay.game.events', readers.GameEventsReader_38749(), lambda r: 38749 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_38749(), lambda r: 38749 <= r.base_build < 38996) + self.register_reader('replay.game.events', readers.GameEventsReader_38996(), lambda r: 38996 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) def register_default_datapacks(self): diff --git a/test_replays/3.0.0.38996/1.SC2Replay b/test_replays/3.0.0.38996/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..8dd68049ea4d9b9c9cad97dedcd8692b522721f0 GIT binary patch literal 56122 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

lE7^fx5%w{h1lTzW*Z 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 7b62635c..0d3344ae 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -455,6 +455,12 @@ def test_38749(self): self.assertEqual(replay.expansion, 'HotS') replay = sc2reader.load_replay("test_replays/3.0.0.38749/2.SC2Replay") self.assertEqual(replay.expansion, 'HotS') + + def test_38996(self): + replay = sc2reader.load_replay("test_replays/3.0.0.38996/1.SC2Replay") + self.assertEqual(replay.expansion, 'LotV') + replay = sc2reader.load_replay("test_replays/3.0.0.38996/2.SC2Replay") + self.assertEqual(replay.expansion, 'LotV') class TestGameEngine(unittest.TestCase): From a421ca01c529359c247a1ca89c9bc413121e9faa Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Tue, 15 Dec 2015 20:55:43 -0500 Subject: [PATCH 203/238] handle 3.1.0. add test replays to prove it. --- sc2reader/readers.py | 1 + test_replays/3.1.0/1.SC2Replay | Bin 0 -> 37434 bytes test_replays/3.1.0/2.SC2Replay | Bin 0 -> 87289 bytes test_replays/3.1.0/3.SC2Replay | Bin 0 -> 55861 bytes test_replays/3.1.0/4.SC2Replay | Bin 0 -> 50177 bytes test_replays/test_all.py | 5 +++++ 6 files changed, 6 insertions(+) create mode 100644 test_replays/3.1.0/1.SC2Replay create mode 100644 test_replays/3.1.0/2.SC2Replay create mode 100644 test_replays/3.1.0/3.SC2Replay create mode 100644 test_replays/3.1.0/4.SC2Replay diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 10ef1c65..7a37050f 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -119,6 +119,7 @@ def __call__(self, data, replay): commander=data.read_aligned_bytes(data.read_bits(9)) if replay.base_build >= 34784 else None, commander_level=data.read_uint32() if replay.base_build >= 36442 else None, has_silence_penalty=data.read_bool() if replay.base_build >= 38215 else None, + tandem_id=data.read_bits(4) if replay.base_build >= 39576 and data.read_bool() else None, ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, diff --git a/test_replays/3.1.0/1.SC2Replay b/test_replays/3.1.0/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..6f7f6092b9370af26c883dcc5fdd4e19d3590385 GIT binary patch literal 37434 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 KnAbyQLH`ABt|gZM literal 0 HcmV?d00001 diff --git a/test_replays/3.1.0/2.SC2Replay b/test_replays/3.1.0/2.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..8b9bd07495a4046ab7589f2d2ed63c0b13ad0c22 GIT binary patch literal 87289 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 literal 0 HcmV?d00001 diff --git a/test_replays/3.1.0/4.SC2Replay b/test_replays/3.1.0/4.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..2c7c085399ec812853e1fab749efae56402bfc5d GIT binary patch literal 50177 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 0d3344ae..ff66e315 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -432,6 +432,11 @@ def test_30(self): replay = sc2reader.load_replay("test_replays/3.0.0.38215/second.SC2Replay") replay = sc2reader.load_replay("test_replays/3.0.0.38215/third.SC2Replay") + def test_31(self): + for i in range(1,5): + print "DOING {}".format(i) + replay = sc2reader.load_replay("test_replays/3.1.0/{}.SC2Replay".format(i)) + def test_30_map(self): for replayfilename in [ "test_replays/3.0.0.38215/third.SC2Replay", From f2787f603ddf6f83b2f57811b40d6963f386e74c Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Mon, 21 Dec 2015 17:14:12 -0500 Subject: [PATCH 204/238] add instructions on running just one test --- README.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.rst b/README.rst index b747bd96..790eead9 100644 --- a/README.rst +++ b/README.rst @@ -272,6 +272,11 @@ When repeatedly running tests it can be very helpful to make sure you've set a l # or SC2READER_CACHE_DIR=local_cache python test_replays/test_all.py +To run just one test: + + SC2READER_CACHE_DIR=local_cache PYTHONPATH=. python -m unittest test_replays.test_all.TestReplays.test_38749 + + Good luck, have fun! From 15c06f92106fab8587d413d3f78a19e69ec0a6cc Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Mon, 21 Dec 2015 17:14:32 -0500 Subject: [PATCH 205/238] add test for the Central Protocol map which had a new kind of mineral field object --- test_replays/3.1.0/centralprotocol.SC2Replay | Bin 0 -> 53375 bytes test_replays/test_all.py | 11 +++++++++++ 2 files changed, 11 insertions(+) create mode 100644 test_replays/3.1.0/centralprotocol.SC2Replay diff --git a/test_replays/3.1.0/centralprotocol.SC2Replay b/test_replays/3.1.0/centralprotocol.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..37a2bfdf71e9cdc8b22c25f69b755ba809f5c7af GIT binary patch literal 53375 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index ff66e315..9c3aa863 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -3,6 +3,7 @@ import datetime import json +from xml.dom import minidom # Newer unittest features aren't built in for python 2.6 import sys @@ -466,6 +467,16 @@ def test_38996(self): self.assertEqual(replay.expansion, 'LotV') replay = sc2reader.load_replay("test_replays/3.0.0.38996/2.SC2Replay") self.assertEqual(replay.expansion, 'LotV') + + def test_funny_minerals(self): + replay = sc2reader.load_replay("test_replays/3.1.0/centralprotocol.SC2Replay") + replay.load_map() + xmldoc = minidom.parseString(replay.map.archive.read_file('Objects')) + itemlist = xmldoc.getElementsByTagName('ObjectUnit') + mineralPosStrs = [ou.attributes['Position'].value for ou in itemlist if 'MineralField' in ou.attributes['UnitType'].value] + mineralFieldNames = list(set([ou.attributes['UnitType'].value for ou in itemlist if 'MineralField' in ou.attributes['UnitType'].value])) + #print mineralFieldNames + self.assertTrue(len(mineralPosStrs) > 0) class TestGameEngine(unittest.TestCase): From e4240d9b6d96adda004ebd736653a0164bf29a9e Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Sat, 9 Jan 2016 23:04:35 -0500 Subject: [PATCH 206/238] add failing replay. no idea whats wrong --- test_replays/3.1.0/dusktowers.SC2Replay | Bin 0 -> 48369 bytes test_replays/test_all.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 test_replays/3.1.0/dusktowers.SC2Replay diff --git a/test_replays/3.1.0/dusktowers.SC2Replay b/test_replays/3.1.0/dusktowers.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..123d32d8f367c819a856971e365c82d616152da3 GIT binary patch literal 48369 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 9c3aa863..a0a891cf 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -477,6 +477,10 @@ def test_funny_minerals(self): mineralFieldNames = list(set([ou.attributes['UnitType'].value for ou in itemlist if 'MineralField' in ou.attributes['UnitType'].value])) #print mineralFieldNames self.assertTrue(len(mineralPosStrs) > 0) + + def test_dusk(self): + replay = sc2reader.load_replay("test_replays/3.1.0/dusktowers.SC2Replay") + self.assertEqual(replay.expansion, 'LotV') class TestGameEngine(unittest.TestCase): From 20b4544aa7f67b6e6584175d3b50fcf3159eb86a Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Sat, 9 Jan 2016 23:45:36 -0500 Subject: [PATCH 207/238] new attributes. thx graylin for writing sc2attributes.py --- sc2reader/data/attributes.json | 2331 ++++++++++++++++++-------------- 1 file changed, 1306 insertions(+), 1025 deletions(-) diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index 38f64bb2..8265f61b 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -1,1281 +1,1562 @@ { "attributes": { "0500": [ - "Controller", + "Controller", { - "Clsd": "Closed", - "Comp": "Computer", - "Humn": "User", + "Clsd": "Closed", + "Comp": "Computer", + "Humn": "User", "Open": "Open" } - ], + ], "1000": [ - "Rules", + "Rules", { "Dflt": "Default" } - ], + ], "1001": [ - "Premade Game", + "Premade Game", { - "no": "No", + "no": "No", "yes": "Yes" } - ], + ], "2000": [ - "Teams", - { - "Cust": "Custom Teams", - "FFA": "Free For All", - "FFAT": "Free For All Teams", - "t1": "1 Team", - "t10": "10 Teams", - "t11": "11 Teams", - "t2": "2 Teams", - "t3": "3 Teams", - "t4": "4 Teams", - "t5": "5 Teams", - "t6": "6 Teams", - "t7": "7 Teams", - "t8": "8 Teams", + "Teams", + { + "CuTa": "Custom Teams Archon", + "Cust": "Custom Teams", + "FFA": "Free For All", + "FFAT": "Free For All Archon", + "t1": "1 Team", + "t10": "10 Teams", + "t11": "11 Teams", + "t2": "2 Teams", + "t3": "3 Teams", + "t4": "4 Teams", + "t5": "5 Teams", + "t6": "6 Teams", + "t7": "7 Teams", + "t8": "8 Teams", "t9": "9 Teams" } - ], + ], "2001": [ - "Teams", - { - "1v1": "1v1", - "2v2": "2v2", - "3v3": "3v3", - "4v4": "4v4", - "5v5": "5v5", - "6v6": "6v6", + "Teams", + { + "1v1": "1v1", + "2v2": "2v2", + "3v3": "3v3", + "4v4": "4v4", + "5v5": "5v5", + "6v6": "6v6", "FFA": "FFA" } - ], + ], "2002": [ - "Teams1v1", + "Teams1v1", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2003": [ - "Teams2v2", + "Teams2v2", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2004": [ - "Teams3v3", + "Teams3v3", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2005": [ - "Teams4v4", + "Teams4v4", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2006": [ - "TeamsFFA", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T12": "Team 12", - "T13": "Team 13", - "T14": "Team 14", - "T15": "Team 15", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", + "TeamsFFA", + { + "T1": "Team 1", + "T10": "Team 10", + "T11": "Team 11", + "T12": "Team 12", + "T13": "Team 13", + "T14": "Team 14", + "T15": "Team 15", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8", "T9": "Team 9" } - ], + ], "2007": [ - "Teams5v5", + "Teams5v5", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2008": [ - "Teams6v6", + "Teams6v6", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2010": [ - "Team", + "Team", { "T1": "Team 1" } - ], + ], "2011": [ - "Teams7v7", + "Teams7v7", { - "T1": "Team 1", + "T1": "Team 1", "T2": "Team 2" } - ], + ], "2012": [ - "Team", + "Team", { - "T1": "Team 1", - "T2": "Team 2", + "T1": "Team 1", + "T2": "Team 2", "T3": "Team 3" } - ], + ], "2013": [ - "Team", + "Team", { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", "T4": "Team 4" } - ], + ], "2014": [ - "Team", + "Team", { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", "T5": "Team 5" } - ], + ], "2015": [ - "Team", + "Team", { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", "T6": "Team 6" } - ], + ], "2016": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", + "Team", + { + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", "T7": "Team 7" } - ], + ], "2017": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T12": "Team 12", - "T13": "Team 13", - "T14": "Team 14", - "T15": "Team 15", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", + "Team", + { + "T1": "Team 1", + "T10": "Team 10", + "T11": "Team 11", + "T12": "Team 12", + "T13": "Team 13", + "T14": "Team 14", + "T15": "Team 15", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8", "T9": "Team 9" } - ], + ], "2018": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T12": "Team 12", - "T13": "Team 13", - "T14": "Team 14", - "T15": "Team 15", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", + "Team", + { + "T1": "Team 1", + "T10": "Team 10", + "T11": "Team 11", + "T12": "Team 12", + "T13": "Team 13", + "T14": "Team 14", + "T15": "Team 15", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8", "T9": "Team 9" } - ], + ], "2019": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", + "Team", + { + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", "T8": "Team 8" } - ], + ], "2020": [ - "Team", - { - "T1": "Team 1", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", + "Team", + { + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8", "T9": "Team 9" } - ], + ], "2021": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", + "Team", + { + "T1": "Team 1", + "T10": "Team 10", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8", "T9": "Team 9" } - ], + ], "2022": [ - "Team", - { - "T1": "Team 1", - "T10": "Team 10", - "T11": "Team 11", - "T2": "Team 2", - "T3": "Team 3", - "T4": "Team 4", - "T5": "Team 5", - "T6": "Team 6", - "T7": "Team 7", - "T8": "Team 8", + "Team", + { + "T1": "Team 1", + "T10": "Team 10", + "T11": "Team 11", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8", "T9": "Team 9" } - ], + ], + "2023": [ + "Team", + { + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6" + } + ], + "2024": [ + "Team", + { + "T1": "Team 1", + "T2": "Team 2", + "T3": "Team 3", + "T4": "Team 4", + "T5": "Team 5", + "T6": "Team 6", + "T7": "Team 7", + "T8": "Team 8" + } + ], "3000": [ - "Game Speed", + "Game Speed", { - "Fasr": "Faster", - "Fast": "Fast", - "Norm": "Normal", - "Slor": "Slower", + "Fasr": "Faster", + "Fast": "Fast", + "Norm": "Normal", + "Slor": "Slower", "Slow": "Slow" } - ], + ], "3001": [ - "Race", + "Race", { - "Prot": "Protoss", - "RAND": "Random", - "Terr": "Terran", + "Prot": "Protoss", + "RAND": "Random", + "Terr": "Terran", "Zerg": "Zerg" } - ], + ], "3002": [ - "Color", - { - "tc01": "Red", - "tc02": "Blue", - "tc03": "Teal", - "tc04": "Purple", - "tc05": "Yellow", - "tc06": "Orange", - "tc07": "Green", - "tc08": "Light Pink", - "tc09": "Violet", - "tc10": "Light Grey", - "tc11": "Dark Green", - "tc12": "Brown", - "tc13": "Light Green", - "tc14": "Dark Grey", - "tc15": "Pink", + "Color", + { + "tc01": "Red", + "tc02": "Blue", + "tc03": "Teal", + "tc04": "Purple", + "tc05": "Yellow", + "tc06": "Orange", + "tc07": "Green", + "tc08": "Light Pink", + "tc09": "Violet", + "tc10": "Light Grey", + "tc11": "Dark Green", + "tc12": "Brown", + "tc13": "Light Green", + "tc14": "Dark Grey", + "tc15": "Pink", "tc16": "??" } - ], + ], "3003": [ - "Handicap", + "Handicap", { - "100": "100%", - "50": "50%", - "60": "60%", - "70": "70%", - "80": "80%", + "100": "100%", + "50": "50%", + "60": "60%", + "70": "70%", + "80": "80%", "90": "90%" } - ], + ], "3004": [ - "Difficulty", - { - "ChRe": "Cheater 2 (Resources)", - "ChVi": "Cheater 1 (Vision)", - "Easy": "Easy", - "Hard": "Harder", - "HdVH": "Very Hard", - "Insa": "Insane", - "MdHd": "Hard", - "Medi": "Medium", - "VyEy": "Very Easy", + "Difficulty", + { + "ChRe": "Cheater 2 (Resources)", + "ChVi": "Cheater 1 (Vision)", + "Easy": "Easy", + "Hard": "Harder", + "HdVH": "Very Hard", + "Insa": "Insane", + "MdHd": "Hard", + "Medi": "Medium", + "VyEy": "Very Easy", "VyHd": "Elite" } - ], + ], "3006": [ - "Lobby Delay", - { - "10": "10", - "15": "15", - "20": "20", - "25": "25", - "3": "3", - "30": "30", - "5": "5", + "Lobby Delay", + { + "10": "10", + "15": "15", + "20": "20", + "25": "25", + "3": "3", + "30": "30", + "5": "5", "7": "7" } - ], + ], "3007": [ - "Participant Role", + "Participant Role", { - "Part": "Participant", + "Part": "Participant", "Watc": "Observer" } - ], + ], "3008": [ - "Observer Type", + "Observer Type", { - "Obs": "Spectator", + "Obs": "Spectator", "Ref": "Referee" } - ], + ], "3009": [ - "Game Mode", + "Game Mode", { - "": "Single Player", - "Amm": "Ladder", - "Priv": "Private", + "": "Single Player", + "Amm": "Ladder", + "Priv": "Private", "Pub": "Public" } - ], + ], "3010": [ - "Locked Alliances", + "Locked Alliances", { - "no": "No", + "no": "No", "yes": "Yes" } - ], + ], "3011": [ - "Player Logo Index", - { - "0": "0", - "1": "1", - "10": "10", - "100": "100", - "101": "101", - "102": "102", - "103": "103", - "104": "104", - "105": "105", - "106": "106", - "107": "107", - "108": "108", - "109": "109", - "11": "11", - "110": "110", - "111": "111", - "112": "112", - "113": "113", - "114": "114", - "115": "115", - "116": "116", - "117": "117", - "118": "118", - "119": "119", - "12": "12", - "120": "120", - "121": "121", - "122": "122", - "123": "123", - "124": "124", - "125": "125", - "126": "126", - "127": "127", - "128": "128", - "129": "129", - "13": "13", - "130": "130", - "131": "131", - "132": "132", - "133": "133", - "134": "134", - "135": "135", - "136": "136", - "137": "137", - "138": "138", - "139": "139", - "14": "14", - "140": "140", - "141": "141", - "142": "142", - "143": "143", - "144": "144", - "145": "145", - "146": "146", - "147": "147", - "148": "148", - "149": "149", - "15": "15", - "150": "150", - "151": "151", - "152": "152", - "153": "153", - "154": "154", - "155": "155", - "156": "156", - "157": "157", - "158": "158", - "159": "159", - "16": "16", - "160": "160", - "161": "161", - "162": "162", - "163": "163", - "164": "164", - "165": "165", - "166": "166", - "167": "167", - "168": "168", - "169": "169", - "17": "17", - "170": "170", - "171": "171", - "172": "172", - "173": "173", - "174": "174", - "175": "175", - "176": "176", - "177": "177", - "178": "178", - "179": "179", - "18": "18", - "180": "180", - "181": "181", - "182": "182", - "183": "183", - "184": "184", - "185": "185", - "186": "186", - "187": "187", - "188": "188", - "189": "189", - "19": "19", - "190": "190", - "191": "191", - "192": "192", - "193": "193", - "194": "194", - "195": "195", - "196": "196", - "197": "197", - "198": "198", - "199": "199", - "2": "2", - "20": "20", - "200": "200", - "201": "201", - "202": "202", - "203": "203", - "204": "204", - "205": "205", - "206": "206", - "207": "207", - "208": "208", - "209": "209", - "21": "21", - "210": "210", - "211": "211", - "212": "212", - "213": "213", - "214": "214", - "215": "215", - "216": "216", - "217": "217", - "218": "218", - "219": "219", - "22": "22", - "220": "220", - "221": "221", - "222": "222", - "223": "223", - "224": "224", - "225": "225", - "226": "226", - "227": "227", - "228": "228", - "229": "229", - "23": "23", - "230": "230", - "231": "231", - "232": "232", - "233": "233", - "234": "234", - "235": "235", - "236": "236", - "237": "237", - "238": "238", - "239": "239", - "24": "24", - "240": "240", - "241": "241", - "242": "242", - "243": "243", - "244": "244", - "245": "245", - "246": "246", - "247": "247", - "248": "248", - "249": "249", - "25": "25", - "250": "250", - "251": "251", - "252": "252", - "253": "253", - "254": "254", - "255": "255", - "26": "26", - "27": "27", - "28": "28", - "29": "29", - "3": "3", - "30": "30", - "31": "31", - "32": "32", - "33": "33", - "34": "34", - "35": "35", - "36": "36", - "37": "37", - "38": "38", - "39": "39", - "4": "4", - "40": "40", - "41": "41", - "42": "42", - "43": "43", - "44": "44", - "45": "45", - "46": "46", - "47": "47", - "48": "48", - "49": "49", - "5": "5", - "50": "50", - "51": "51", - "52": "52", - "53": "53", - "54": "54", - "55": "55", - "56": "56", - "57": "57", - "58": "58", - "59": "59", - "6": "6", - "60": "60", - "61": "61", - "62": "62", - "63": "63", - "64": "64", - "65": "65", - "66": "66", - "67": "67", - "68": "68", - "69": "69", - "7": "7", - "70": "70", - "71": "71", - "72": "72", - "73": "73", - "74": "74", - "75": "75", - "76": "76", - "77": "77", - "78": "78", - "79": "79", - "8": "8", - "80": "80", - "81": "81", - "82": "82", - "83": "83", - "84": "84", - "85": "85", - "86": "86", - "87": "87", - "88": "88", - "89": "89", - "9": "9", - "90": "90", - "91": "91", - "92": "92", - "93": "93", - "94": "94", - "95": "95", - "96": "96", - "97": "97", - "98": "98", + "Player Logo Index", + { + "0": "0", + "1": "1", + "10": "10", + "100": "100", + "101": "101", + "102": "102", + "103": "103", + "104": "104", + "105": "105", + "106": "106", + "107": "107", + "108": "108", + "109": "109", + "11": "11", + "110": "110", + "111": "111", + "112": "112", + "113": "113", + "114": "114", + "115": "115", + "116": "116", + "117": "117", + "118": "118", + "119": "119", + "12": "12", + "120": "120", + "121": "121", + "122": "122", + "123": "123", + "124": "124", + "125": "125", + "126": "126", + "127": "127", + "128": "128", + "129": "129", + "13": "13", + "130": "130", + "131": "131", + "132": "132", + "133": "133", + "134": "134", + "135": "135", + "136": "136", + "137": "137", + "138": "138", + "139": "139", + "14": "14", + "140": "140", + "141": "141", + "142": "142", + "143": "143", + "144": "144", + "145": "145", + "146": "146", + "147": "147", + "148": "148", + "149": "149", + "15": "15", + "150": "150", + "151": "151", + "152": "152", + "153": "153", + "154": "154", + "155": "155", + "156": "156", + "157": "157", + "158": "158", + "159": "159", + "16": "16", + "160": "160", + "161": "161", + "162": "162", + "163": "163", + "164": "164", + "165": "165", + "166": "166", + "167": "167", + "168": "168", + "169": "169", + "17": "17", + "170": "170", + "171": "171", + "172": "172", + "173": "173", + "174": "174", + "175": "175", + "176": "176", + "177": "177", + "178": "178", + "179": "179", + "18": "18", + "180": "180", + "181": "181", + "182": "182", + "183": "183", + "184": "184", + "185": "185", + "186": "186", + "187": "187", + "188": "188", + "189": "189", + "19": "19", + "190": "190", + "191": "191", + "192": "192", + "193": "193", + "194": "194", + "195": "195", + "196": "196", + "197": "197", + "198": "198", + "199": "199", + "2": "2", + "20": "20", + "200": "200", + "201": "201", + "202": "202", + "203": "203", + "204": "204", + "205": "205", + "206": "206", + "207": "207", + "208": "208", + "209": "209", + "21": "21", + "210": "210", + "211": "211", + "212": "212", + "213": "213", + "214": "214", + "215": "215", + "216": "216", + "217": "217", + "218": "218", + "219": "219", + "22": "22", + "220": "220", + "221": "221", + "222": "222", + "223": "223", + "224": "224", + "225": "225", + "226": "226", + "227": "227", + "228": "228", + "229": "229", + "23": "23", + "230": "230", + "231": "231", + "232": "232", + "233": "233", + "234": "234", + "235": "235", + "236": "236", + "237": "237", + "238": "238", + "239": "239", + "24": "24", + "240": "240", + "241": "241", + "242": "242", + "243": "243", + "244": "244", + "245": "245", + "246": "246", + "247": "247", + "248": "248", + "249": "249", + "25": "25", + "250": "250", + "251": "251", + "252": "252", + "253": "253", + "254": "254", + "255": "255", + "26": "26", + "27": "27", + "28": "28", + "29": "29", + "3": "3", + "30": "30", + "31": "31", + "32": "32", + "33": "33", + "34": "34", + "35": "35", + "36": "36", + "37": "37", + "38": "38", + "39": "39", + "4": "4", + "40": "40", + "41": "41", + "42": "42", + "43": "43", + "44": "44", + "45": "45", + "46": "46", + "47": "47", + "48": "48", + "49": "49", + "5": "5", + "50": "50", + "51": "51", + "52": "52", + "53": "53", + "54": "54", + "55": "55", + "56": "56", + "57": "57", + "58": "58", + "59": "59", + "6": "6", + "60": "60", + "61": "61", + "62": "62", + "63": "63", + "64": "64", + "65": "65", + "66": "66", + "67": "67", + "68": "68", + "69": "69", + "7": "7", + "70": "70", + "71": "71", + "72": "72", + "73": "73", + "74": "74", + "75": "75", + "76": "76", + "77": "77", + "78": "78", + "79": "79", + "8": "8", + "80": "80", + "81": "81", + "82": "82", + "83": "83", + "84": "84", + "85": "85", + "86": "86", + "87": "87", + "88": "88", + "89": "89", + "9": "9", + "90": "90", + "91": "91", + "92": "92", + "93": "93", + "94": "94", + "95": "95", + "96": "96", + "97": "97", + "98": "98", "99": "99" } - ], + ], + "3012": [ + "Tandem Leader Slot", + { + "0": "0", + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "2": "2", + "22": "None", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "3013": [ + "Commander", + { + "": "Pick Commander", + "Arta": "Artanis", + "Kara": "Karax", + "Kerr": "Kerrigan", + "Rayn": "Raynor", + "Swan": "Swann", + "Vora": "Vorazun", + "Zaga": "Zagara" + } + ], + "3014": [ + "Commander Level", + { + "1": "1", + "10": "10", + "11": "11", + "12": "12", + "13": "13", + "14": "14", + "15": "15", + "16": "16", + "17": "17", + "18": "18", + "19": "19", + "2": "2", + "20": "20", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + ], + "3015": [ + "Game Duration", + { + "0": "Infinite", + "120": "120 Minutes", + "15": "15 Minutes", + "25": "25 Minutes", + "30": "30 Minutes", + "45": "45 Minutes", + "5": "5 Minutes", + "60": "60 Minutes", + "90": "90 Minutes" + } + ], "3102": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3103": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3104": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3105": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3106": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3107": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3108": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3109": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3110": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3111": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3134": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3135": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3136": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3137": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3138": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3139": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)" - } - ], + "AI Build (Terran)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB43": "MarineStim (Timing)", + "AB44": "MarauderHellion (Timing)", + "AB45": "MarineSiege (Timing)", + "AB46": "CloakBanshee (Timing)", + "AB48": "MMM (Aggressive)", + "AB49": "MarineSiege (Aggressive)", + "AB50": "SiegeBanshee (Aggressive)", + "AB51": "HellionSiege (Aggressive)", + "AB52": "SiegeThor (Aggressive)", + "AB54": "BioMMM (Economic)", + "AB55": "Mech (Economic)", + "AB56": "ThorBC (Economic)", + "T070": "MarineStim (Timing)", + "T071": "MarauderHellion (Timing)", + "T072": "MarineSiege (Timing)", + "T073": "CloakBanshee (Timing)", + "T080": "MMM (Aggressive)", + "T081": "MarineSiege (Aggressive)", + "T082": "SiegeBanshee (Aggressive)", + "T083": "HellionSiege (Aggressive)", + "T084": "SiegeThor (Aggressive)", + "T090": "BioMMM (Economic)", + "T091": "Mech (Economic)", + "T092": "ThorBC (Economic)" + } + ], "3140": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)" - } - ], + "AI Build (Terran)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB43": "MarineStim (Timing)", + "AB44": "MarauderHellion (Timing)", + "AB45": "MarineSiege (Timing)", + "AB46": "CloakBanshee (Timing)", + "AB48": "MMM (Aggressive)", + "AB49": "MarineSiege (Aggressive)", + "AB50": "SiegeBanshee (Aggressive)", + "AB51": "HellionSiege (Aggressive)", + "AB52": "SiegeThor (Aggressive)", + "AB54": "BioMMM (Economic)", + "AB55": "Mech (Economic)", + "AB56": "ThorBC (Economic)", + "T070": "MarineStim (Timing)", + "T071": "MarauderHellion (Timing)", + "T072": "MarineSiege (Timing)", + "T073": "CloakBanshee (Timing)", + "T080": "MMM (Aggressive)", + "T081": "MarineSiege (Aggressive)", + "T082": "SiegeBanshee (Aggressive)", + "T083": "HellionSiege (Aggressive)", + "T084": "SiegeThor (Aggressive)", + "T090": "BioMMM (Economic)", + "T091": "Mech (Economic)", + "T092": "ThorBC (Economic)" + } + ], "3141": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)" - } - ], + "AI Build (Terran)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB43": "MarineStim (Timing)", + "AB44": "MarauderHellion (Timing)", + "AB45": "MarineSiege (Timing)", + "AB46": "CloakBanshee (Timing)", + "AB48": "MMM (Aggressive)", + "AB49": "MarineSiege (Aggressive)", + "AB50": "SiegeBanshee (Aggressive)", + "AB51": "HellionSiege (Aggressive)", + "AB52": "SiegeThor (Aggressive)", + "AB54": "BioMMM (Economic)", + "AB55": "Mech (Economic)", + "AB56": "ThorBC (Economic)", + "T070": "MarineStim (Timing)", + "T071": "MarauderHellion (Timing)", + "T072": "MarineSiege (Timing)", + "T073": "CloakBanshee (Timing)", + "T080": "MMM (Aggressive)", + "T081": "MarineSiege (Aggressive)", + "T082": "SiegeBanshee (Aggressive)", + "T083": "HellionSiege (Aggressive)", + "T084": "SiegeThor (Aggressive)", + "T090": "BioMMM (Economic)", + "T091": "Mech (Economic)", + "T092": "ThorBC (Economic)" + } + ], "3142": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)" - } - ], + "AI Build (Terran)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB43": "MarineStim (Timing)", + "AB44": "MarauderHellion (Timing)", + "AB45": "MarineSiege (Timing)", + "AB46": "CloakBanshee (Timing)", + "AB48": "MMM (Aggressive)", + "AB49": "MarineSiege (Aggressive)", + "AB50": "SiegeBanshee (Aggressive)", + "AB51": "HellionSiege (Aggressive)", + "AB52": "SiegeThor (Aggressive)", + "AB54": "BioMMM (Economic)", + "AB55": "Mech (Economic)", + "AB56": "ThorBC (Economic)", + "T070": "MarineStim (Timing)", + "T071": "MarauderHellion (Timing)", + "T072": "MarineSiege (Timing)", + "T073": "CloakBanshee (Timing)", + "T080": "MMM (Aggressive)", + "T081": "MarineSiege (Aggressive)", + "T082": "SiegeBanshee (Aggressive)", + "T083": "HellionSiege (Aggressive)", + "T084": "SiegeThor (Aggressive)", + "T090": "BioMMM (Economic)", + "T091": "Mech (Economic)", + "T092": "ThorBC (Economic)" + } + ], "3143": [ - "AI Build (Terran)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB43": "MarineStim (Timing)", - "AB44": "MarauderHellion (Timing)", - "AB45": "MarineSiege (Timing)", - "AB46": "CloakBanshee (Timing)", - "AB48": "MMM (Aggressive)", - "AB49": "MarineSiege (Aggressive)", - "AB50": "SiegeBanshee (Aggressive)", - "AB51": "HellionSiege (Aggressive)", - "AB52": "SiegeThor (Aggressive)", - "AB54": "BioMMM (Economic)", - "AB55": "Mech (Economic)", - "AB56": "ThorBC (Economic)" - } - ], + "AI Build (Terran)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB43": "MarineStim (Timing)", + "AB44": "MarauderHellion (Timing)", + "AB45": "MarineSiege (Timing)", + "AB46": "CloakBanshee (Timing)", + "AB48": "MMM (Aggressive)", + "AB49": "MarineSiege (Aggressive)", + "AB50": "SiegeBanshee (Aggressive)", + "AB51": "HellionSiege (Aggressive)", + "AB52": "SiegeThor (Aggressive)", + "AB54": "BioMMM (Economic)", + "AB55": "Mech (Economic)", + "AB56": "ThorBC (Economic)", + "T070": "MarineStim (Timing)", + "T071": "MarauderHellion (Timing)", + "T072": "MarineSiege (Timing)", + "T073": "CloakBanshee (Timing)", + "T080": "MMM (Aggressive)", + "T081": "MarineSiege (Aggressive)", + "T082": "SiegeBanshee (Aggressive)", + "T083": "HellionSiege (Aggressive)", + "T084": "SiegeThor (Aggressive)", + "T090": "BioMMM (Economic)", + "T091": "Mech (Economic)", + "T092": "ThorBC (Economic)" + } + ], "3166": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3167": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3168": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3169": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3170": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3171": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)" - } - ], + "AI Build (Protoss)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB64": "FourGate (Timing)", + "AB65": "StalkerRobo (Timing)", + "AB66": "Blink Stalker (Timing)", + "AB67": "Dark Templar Rush (Timing)", + "AB69": "SevenGate (Aggressive)", + "AB70": "ArchonImmortal (Aggressive)", + "AB71": "Colossi (Aggressive)", + "AB72": "GatewayAir (Aggressive)", + "AB73": "VoidPhoenix (Aggressive)", + "AB75": "GateImmortal (Economic)", + "AB76": "Colossi (Economic)", + "AB77": "GatewayAir (Economic)", + "P110": "WarpGate (Timing)", + "P112": "StalkerRobo (Timing)", + "P113": "Blink Stalker (Timing)", + "P114": "Dark Templar Rush (Timing)", + "P120": "SevenGate (Aggressive)", + "P121": "GateImmortal (Aggressive)", + "P122": "Colossi (Aggressive)", + "P123": "GatewayAir (Aggressive)", + "P124": "VoidPhoenix (Aggressive)", + "P130": "GateImmortal (Economic)", + "P131": "Colossi (Economic)", + "P132": "GatewayAir (Economic)" + } + ], "3172": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)" - } - ], + "AI Build (Protoss)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB64": "FourGate (Timing)", + "AB65": "StalkerRobo (Timing)", + "AB66": "Blink Stalker (Timing)", + "AB67": "Dark Templar Rush (Timing)", + "AB69": "SevenGate (Aggressive)", + "AB70": "ArchonImmortal (Aggressive)", + "AB71": "Colossi (Aggressive)", + "AB72": "GatewayAir (Aggressive)", + "AB73": "VoidPhoenix (Aggressive)", + "AB75": "GateImmortal (Economic)", + "AB76": "Colossi (Economic)", + "AB77": "GatewayAir (Economic)", + "P110": "WarpGate (Timing)", + "P112": "StalkerRobo (Timing)", + "P113": "Blink Stalker (Timing)", + "P114": "Dark Templar Rush (Timing)", + "P120": "SevenGate (Aggressive)", + "P121": "GateImmortal (Aggressive)", + "P122": "Colossi (Aggressive)", + "P123": "GatewayAir (Aggressive)", + "P124": "VoidPhoenix (Aggressive)", + "P130": "GateImmortal (Economic)", + "P131": "Colossi (Economic)", + "P132": "GatewayAir (Economic)" + } + ], "3173": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)" - } - ], + "AI Build (Protoss)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB64": "FourGate (Timing)", + "AB65": "StalkerRobo (Timing)", + "AB66": "Blink Stalker (Timing)", + "AB67": "Dark Templar Rush (Timing)", + "AB69": "SevenGate (Aggressive)", + "AB70": "ArchonImmortal (Aggressive)", + "AB71": "Colossi (Aggressive)", + "AB72": "GatewayAir (Aggressive)", + "AB73": "VoidPhoenix (Aggressive)", + "AB75": "GateImmortal (Economic)", + "AB76": "Colossi (Economic)", + "AB77": "GatewayAir (Economic)", + "P110": "WarpGate (Timing)", + "P112": "StalkerRobo (Timing)", + "P113": "Blink Stalker (Timing)", + "P114": "Dark Templar Rush (Timing)", + "P120": "SevenGate (Aggressive)", + "P121": "GateImmortal (Aggressive)", + "P122": "Colossi (Aggressive)", + "P123": "GatewayAir (Aggressive)", + "P124": "VoidPhoenix (Aggressive)", + "P130": "GateImmortal (Economic)", + "P131": "Colossi (Economic)", + "P132": "GatewayAir (Economic)" + } + ], "3174": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)" - } - ], + "AI Build (Protoss)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB64": "FourGate (Timing)", + "AB65": "StalkerRobo (Timing)", + "AB66": "Blink Stalker (Timing)", + "AB67": "Dark Templar Rush (Timing)", + "AB69": "SevenGate (Aggressive)", + "AB70": "ArchonImmortal (Aggressive)", + "AB71": "Colossi (Aggressive)", + "AB72": "GatewayAir (Aggressive)", + "AB73": "VoidPhoenix (Aggressive)", + "AB75": "GateImmortal (Economic)", + "AB76": "Colossi (Economic)", + "AB77": "GatewayAir (Economic)", + "P110": "WarpGate (Timing)", + "P112": "StalkerRobo (Timing)", + "P113": "Blink Stalker (Timing)", + "P114": "Dark Templar Rush (Timing)", + "P120": "SevenGate (Aggressive)", + "P121": "GateImmortal (Aggressive)", + "P122": "Colossi (Aggressive)", + "P123": "GatewayAir (Aggressive)", + "P124": "VoidPhoenix (Aggressive)", + "P130": "GateImmortal (Economic)", + "P131": "Colossi (Economic)", + "P132": "GatewayAir (Economic)" + } + ], "3175": [ - "AI Build (Protoss)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB64": "FourGate (Timing)", - "AB65": "StalkerRobo (Timing)", - "AB66": "Blink Stalker (Timing)", - "AB67": "Dark Templar Rush (Timing)", - "AB69": "SevenGate (Aggressive)", - "AB70": "ArchonImmortal (Aggressive)", - "AB71": "Colossi (Aggressive)", - "AB72": "GatewayAir (Aggressive)", - "AB73": "VoidPhoenix (Aggressive)", - "AB75": "GateImmortal (Economic)", - "AB76": "Colossi (Economic)", - "AB77": "GatewayAir (Economic)" - } - ], + "AI Build (Protoss)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB64": "FourGate (Timing)", + "AB65": "StalkerRobo (Timing)", + "AB66": "Blink Stalker (Timing)", + "AB67": "Dark Templar Rush (Timing)", + "AB69": "SevenGate (Aggressive)", + "AB70": "ArchonImmortal (Aggressive)", + "AB71": "Colossi (Aggressive)", + "AB72": "GatewayAir (Aggressive)", + "AB73": "VoidPhoenix (Aggressive)", + "AB75": "GateImmortal (Economic)", + "AB76": "Colossi (Economic)", + "AB77": "GatewayAir (Economic)", + "P110": "WarpGate (Timing)", + "P112": "StalkerRobo (Timing)", + "P113": "Blink Stalker (Timing)", + "P114": "Dark Templar Rush (Timing)", + "P120": "SevenGate (Aggressive)", + "P121": "GateImmortal (Aggressive)", + "P122": "Colossi (Aggressive)", + "P123": "GatewayAir (Aggressive)", + "P124": "VoidPhoenix (Aggressive)", + "P130": "GateImmortal (Economic)", + "P131": "Colossi (Economic)", + "P132": "GatewayAir (Economic)" + } + ], "3198": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3199": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3200": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3201": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3202": [ - "AI Build", + "AI Build", { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", "AB06": "Straight to Air" } - ], + ], "3203": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)" - } - ], + "AI Build (Zerg)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB23": "BaneLing Bust (Timing)", + "AB24": "Roach Rush (Timing)", + "AB25": "LingRoach (Timing)", + "AB27": "Pure Mutalisk (Aggressive)", + "AB28": "MutaLing (Aggressive)", + "AB29": "RoachAttack (Aggressive)", + "AB30": "RoachInfestor (Aggressive)", + "AB31": "RoachHydra (Aggressive)", + "AB34": "Infestor (Economic)", + "AB35": "Ultralisk (Economic)", + "AB36": "Brood Lord (Economic)", + "Z030": "BaneLing Bust (Timing)", + "Z031": "Roach Rush (Timing)", + "Z032": "LingRoach (Timing)", + "Z040": "Mutalisk (Aggressive)", + "Z041": "MutaLing (Aggressive)", + "Z042": "RoachAttack (Aggressive)", + "Z043": "RoachInfestor (Aggressive)", + "Z044": "RoachHydra (Aggressive)", + "Z050": "Infestor (Economic)", + "Z052": "Ultralisk (Economic)", + "Z053": "Brood Lord (Economic)" + } + ], "3204": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)" - } - ], + "AI Build (Zerg)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB23": "BaneLing Bust (Timing)", + "AB24": "Roach Rush (Timing)", + "AB25": "LingRoach (Timing)", + "AB27": "Pure Mutalisk (Aggressive)", + "AB28": "MutaLing (Aggressive)", + "AB29": "RoachAttack (Aggressive)", + "AB30": "RoachInfestor (Aggressive)", + "AB31": "RoachHydra (Aggressive)", + "AB34": "Infestor (Economic)", + "AB35": "Ultralisk (Economic)", + "AB36": "Brood Lord (Economic)", + "Z030": "BaneLing Bust (Timing)", + "Z031": "Roach Rush (Timing)", + "Z032": "LingRoach (Timing)", + "Z040": "Mutalisk (Aggressive)", + "Z041": "MutaLing (Aggressive)", + "Z042": "RoachAttack (Aggressive)", + "Z043": "RoachInfestor (Aggressive)", + "Z044": "RoachHydra (Aggressive)", + "Z050": "Infestor (Economic)", + "Z052": "Ultralisk (Economic)", + "Z053": "Brood Lord (Economic)" + } + ], "3205": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)" - } - ], + "AI Build (Zerg)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB23": "BaneLing Bust (Timing)", + "AB24": "Roach Rush (Timing)", + "AB25": "LingRoach (Timing)", + "AB27": "Pure Mutalisk (Aggressive)", + "AB28": "MutaLing (Aggressive)", + "AB29": "RoachAttack (Aggressive)", + "AB30": "RoachInfestor (Aggressive)", + "AB31": "RoachHydra (Aggressive)", + "AB34": "Infestor (Economic)", + "AB35": "Ultralisk (Economic)", + "AB36": "Brood Lord (Economic)", + "Z030": "BaneLing Bust (Timing)", + "Z031": "Roach Rush (Timing)", + "Z032": "LingRoach (Timing)", + "Z040": "Mutalisk (Aggressive)", + "Z041": "MutaLing (Aggressive)", + "Z042": "RoachAttack (Aggressive)", + "Z043": "RoachInfestor (Aggressive)", + "Z044": "RoachHydra (Aggressive)", + "Z050": "Infestor (Economic)", + "Z052": "Ultralisk (Economic)", + "Z053": "Brood Lord (Economic)" + } + ], "3206": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)" - } - ], + "AI Build (Zerg)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB23": "BaneLing Bust (Timing)", + "AB24": "Roach Rush (Timing)", + "AB25": "LingRoach (Timing)", + "AB27": "Pure Mutalisk (Aggressive)", + "AB28": "MutaLing (Aggressive)", + "AB29": "RoachAttack (Aggressive)", + "AB30": "RoachInfestor (Aggressive)", + "AB31": "RoachHydra (Aggressive)", + "AB34": "Infestor (Economic)", + "AB35": "Ultralisk (Economic)", + "AB36": "Brood Lord (Economic)", + "Z030": "BaneLing Bust (Timing)", + "Z031": "Roach Rush (Timing)", + "Z032": "LingRoach (Timing)", + "Z040": "Mutalisk (Aggressive)", + "Z041": "MutaLing (Aggressive)", + "Z042": "RoachAttack (Aggressive)", + "Z043": "RoachInfestor (Aggressive)", + "Z044": "RoachHydra (Aggressive)", + "Z050": "Infestor (Economic)", + "Z052": "Ultralisk (Economic)", + "Z053": "Brood Lord (Economic)" + } + ], "3207": [ - "AI Build (Zerg)", - { - "AB00": "Any Build", - "AB02": "Full Rush", - "AB03": "Timing Attack", - "AB04": "Aggressive Push", - "AB05": "Economic Focus", - "AB06": "Straight to Air", - "AB23": "BaneLing Bust (Timing)", - "AB24": "Roach Rush (Timing)", - "AB25": "LingRoach (Timing)", - "AB27": "Pure Mutalisk (Aggressive)", - "AB28": "MutaLing (Aggressive)", - "AB29": "RoachAttack (Aggressive)", - "AB30": "RoachInfestor (Aggressive)", - "AB31": "RoachHydra (Aggressive)", - "AB34": "Infestor (Economic)", - "AB35": "Ultralisk (Economic)", - "AB36": "Brood Lord (Economic)" - } - ], + "AI Build (Zerg)", + { + "AB00": "Any Build", + "AB02": "Full Rush", + "AB03": "Timing Attack", + "AB04": "Aggressive Push", + "AB05": "Economic Focus", + "AB06": "Straight to Air", + "AB23": "BaneLing Bust (Timing)", + "AB24": "Roach Rush (Timing)", + "AB25": "LingRoach (Timing)", + "AB27": "Pure Mutalisk (Aggressive)", + "AB28": "MutaLing (Aggressive)", + "AB29": "RoachAttack (Aggressive)", + "AB30": "RoachInfestor (Aggressive)", + "AB31": "RoachHydra (Aggressive)", + "AB34": "Infestor (Economic)", + "AB35": "Ultralisk (Economic)", + "AB36": "Brood Lord (Economic)", + "Z030": "BaneLing Bust (Timing)", + "Z031": "Roach Rush (Timing)", + "Z032": "LingRoach (Timing)", + "Z040": "Mutalisk (Aggressive)", + "Z041": "MutaLing (Aggressive)", + "Z042": "RoachAttack (Aggressive)", + "Z043": "RoachInfestor (Aggressive)", + "Z044": "RoachHydra (Aggressive)", + "Z050": "Infestor (Economic)", + "Z052": "Ultralisk (Economic)", + "Z053": "Brood Lord (Economic)" + } + ], "4000": [ - "Game Privacy", + "Game Privacy", { - "NoBO": "No Build Order", - "NoMH": "No Match History", + "NoBO": "No Build Order", + "NoMH": "No Match History", "Norm": "Normal" } - ], + ], "4001": [ - "Using Custom Observer UI", + "Using Custom Observer UI", { - "no": "Not Using Custom Observer UI", + "no": "Not Using Custom Observer UI", "yes": "Using Custom Observer UI" } + ], + "4005": [ + "Ready", + { + "no": "Not Ready", + "yes": "Ready" + } ] - }, - "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\na(I3009\nS'Amm'\np51\ntp52\naS'Automated Match Making'\np53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nI3141\naVAI Build (Terran)\np64\naS'AI Build'\np65\natp66\nRp67\ng64\nsg1\n((lp68\n(I2001\nS'3v3'\np69\ntp70\naS'3 v 3'\np71\naV3v3\np72\natp73\nRp74\ng72\nsg1\n((lp75\nI3142\naVAI Build (Terran)\np76\naS'AI Build'\np77\natp78\nRp79\ng76\nsg1\n((lp80\n(I3200\nS'AB04'\np81\ntp82\naS'Agressive Push'\np83\naVAggressive Push\np84\natp85\nRp86\ng84\nsg1\n((lp87\nVAI Build (Protoss)\np88\naI3174\naS'AI Build'\np89\natp90\nRp91\ng88\nsg1\n((lp92\nS'Very Hard'\np93\naVElite\np94\na(I3004\nS'VyHd'\np95\ntp96\natp97\nRp98\ng94\nsg1\n((lp99\nS'Agressive Push'\np100\naVAggressive Push\np101\na(I3167\nS'AB04'\np102\ntp103\natp104\nRp105\ng101\nsg1\n((lp106\nI3204\naVAI Build (Zerg)\np107\naS'AI Build'\np108\natp109\nRp110\ng107\nsg1\n((lp111\nVInsane\np112\naS'Cheater 3 (Insane)'\np113\na(I3004\nS'Insa'\np114\ntp115\natp116\nRp117\ng112\nsg1\n((lp118\n(I3007\nS'Watc'\np119\ntp120\naS'Observer'\np121\naS'Watcher'\np122\natp123\nRp124\ng121\nsg1\n((lp125\nI3205\naVAI Build (Zerg)\np126\naS'AI Build'\np127\natp128\nRp129\ng126\nsg1\n((lp130\nVTeams5v5\np131\naI2007\naS'Team'\np132\natp133\nRp134\ng131\nsg1\n((lp135\n(I2001\nS'FFA'\np136\ntp137\naVFFA\np138\naS'Free For All'\np139\natp140\nRp141\ng138\nsg1\n((lp142\nS'Unknown'\np143\naI2012\naS'Team'\np144\natp145\nRp146\ng144\nsg1\n((lp147\nI3206\naVAI Build (Zerg)\np148\naS'AI Build'\np149\natp150\nRp151\ng148\nsg1\n((lp152\n(I3168\nS'AB04'\np153\ntp154\naS'Agressive Push'\np155\naVAggressive Push\np156\natp157\nRp158\ng156\nsg1\n((lp159\nI3172\naVAI Build (Protoss)\np160\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nS'Level 1 (Very Easy)'\np165\na(I3004\nS'VyEy'\np166\ntp167\naVVery Easy\np168\natp169\nRp170\ng168\nsg1\n((lp171\nS'Agressive Push'\np172\naVAggressive Push\np173\na(I3135\nS'AB04'\np174\ntp175\natp176\nRp177\ng173\nsg1\n((lp178\nV2v2\np179\naS'2 v 2'\np180\na(I2001\nS'2v2'\np181\ntp182\natp183\nRp184\ng179\nsg1\n((lp185\nS'Agressive Push'\np186\na(I3166\nS'AB04'\np187\ntp188\naVAggressive Push\np189\natp190\nRp191\ng189\nsg1\n((lp192\nVTeamsFFA\np193\naI2006\naS'Team'\np194\natp195\nRp196\ng193\nsg1\n((lp197\nVAI Build (Terran)\np198\naS'AI Build'\np199\naI3143\natp200\nRp201\ng198\nsg1\n((lp202\nVTeams7v7\np203\naI2011\naS'Team'\np204\natp205\nRp206\ng203\nsg1\n((lp207\nVMedium\np208\naS'Level 3 (Medium)'\np209\na(I3004\nS'Medi'\np210\ntp211\natp212\nRp213\ng208\nsg1\n((lp214\nI3140\naVAI Build (Terran)\np215\naS'AI Build'\np216\natp217\nRp218\ng215\nsg1\n((lp219\nS'Level 2 (Easy)'\np220\na(I3004\nS'Easy'\np221\ntp222\naVEasy\np223\natp224\nRp225\ng223\nsg1\n((lp226\n(I3136\nS'AB04'\np227\ntp228\naS'Agressive Push'\np229\naVAggressive Push\np230\natp231\nRp232\ng230\nsg1\n((lp233\nI2008\naVTeams6v6\np234\naS'Team'\np235\natp236\nRp237\ng234\nsg1\n((lp238\nS'Agressive Push'\np239\naVAggressive Push\np240\na(I3103\nS'AB04'\np241\ntp242\natp243\nRp244\ng240\nsg1\n((lp245\nV4v4\np246\naS'4 v 4'\np247\na(I2001\nS'4v4'\np248\ntp249\natp250\nRp251\ng246\nsg1\n((lp252\nS'Agressive Push'\np253\na(I3134\nS'AB04'\np254\ntp255\naVAggressive Push\np256\natp257\nRp258\ng256\nsg1\n((lp259\nVTeams1v1\np260\naI2002\naS'Team'\np261\natp262\nRp263\ng260\nsg1\n((lp264\nI3139\naVAI Build (Terran)\np265\naS'AI Build'\np266\natp267\nRp268\ng265\nsg1\n((lp269\nVAI Build (Zerg)\np270\naS'AI Build'\np271\naI3207\natp272\nRp273\ng270\nsg1\n((lp274\nI3171\naVAI Build (Protoss)\np275\naS'AI Build'\np276\natp277\nRp278\ng275\nsg1\n((lp279\nI3173\naS'AI Build'\np280\naVAI Build (Protoss)\np281\natp282\nRp283\ng281\nsg1\n((lp284\nVTeams3v3\np285\naI2004\naS'Team'\np286\natp287\nRp288\ng285\nsg1\n((lp289\nVAI Build (Protoss)\np290\naS'AI Build'\np291\naI3175\natp292\nRp293\ng290\nsg1\n((lp294\nVTeams4v4\np295\naI2005\naS'Team'\np296\natp297\nRp298\ng295\nsg1\n((lp299\nI3203\naVAI Build (Zerg)\np300\naS'AI Build'\np301\natp302\nRp303\ng300\nsg1\n((lp304\nS'Agressive Push'\np305\na(I3198\nS'AB04'\np306\ntp307\naVAggressive Push\np308\natp309\nRp310\ng308\ns." -} + }, + "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\naS'Automated Match Making'\np51\na(I3009\nS'Amm'\np52\ntp53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nVFree For All Teams\np64\naS'Free For All Archon'\np65\na(I2000\nVFFAT\np66\ntp67\natp68\nRp69\ng65\nsg1\n((lp70\nI3141\naVAI Build (Terran)\np71\naS'AI Build'\np72\natp73\nRp74\ng71\nsg1\n((lp75\n(I2001\nS'3v3'\np76\ntp77\naS'3 v 3'\np78\naV3v3\np79\natp80\nRp81\ng79\nsg1\n((lp82\n(I3168\nS'AB04'\np83\ntp84\naS'Agressive Push'\np85\naVAggressive Push\np86\natp87\nRp88\ng86\nsg1\n((lp89\n(I3200\nS'AB04'\np90\ntp91\naS'Agressive Push'\np92\naVAggressive Push\np93\natp94\nRp95\ng93\nsg1\n((lp96\nVAI Build (Protoss)\np97\naI3174\naS'AI Build'\np98\natp99\nRp100\ng97\nsg1\n((lp101\nS'Very Hard'\np102\naVElite\np103\na(I3004\nS'VyHd'\np104\ntp105\natp106\nRp107\ng103\nsg1\n((lp108\nS'Agressive Push'\np109\naVAggressive Push\np110\na(I3167\nS'AB04'\np111\ntp112\natp113\nRp114\ng110\nsg1\n((lp115\nI3204\naS'AI Build'\np116\naVAI Build (Zerg)\np117\natp118\nRp119\ng117\nsg1\n((lp120\nVInsane\np121\naS'Cheater 3 (Insane)'\np122\na(I3004\nS'Insa'\np123\ntp124\natp125\nRp126\ng121\nsg1\n((lp127\n(I3007\nS'Watc'\np128\ntp129\naS'Observer'\np130\naS'Watcher'\np131\natp132\nRp133\ng130\nsg1\n((lp134\nI3205\naVAI Build (Zerg)\np135\naS'AI Build'\np136\natp137\nRp138\ng135\nsg1\n((lp139\nVTeams5v5\np140\naS'Team'\np141\naI2007\natp142\nRp143\ng140\nsg1\n((lp144\nI3171\naVAI Build (Protoss)\np145\naS'AI Build'\np146\natp147\nRp148\ng145\nsg1\n((lp149\nS'Unknown'\np150\naI2012\naS'Team'\np151\natp152\nRp153\ng151\nsg1\n((lp154\nI3173\naS'AI Build'\np155\naVAI Build (Protoss)\np156\natp157\nRp158\ng156\nsg1\n((lp159\nVAI Build (Terran)\np160\naI3142\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nI3172\naVAI Build (Protoss)\np165\naS'AI Build'\np166\natp167\nRp168\ng165\nsg1\n((lp169\nS'Level 1 (Very Easy)'\np170\na(I3004\nS'VyEy'\np171\ntp172\naVVery Easy\np173\natp174\nRp175\ng173\nsg1\n((lp176\nS'Agressive Push'\np177\naVAggressive Push\np178\na(I3135\nS'AB04'\np179\ntp180\natp181\nRp182\ng178\nsg1\n((lp183\nV2v2\np184\naS'2 v 2'\np185\na(I2001\nS'2v2'\np186\ntp187\natp188\nRp189\ng184\nsg1\n((lp190\nS'Agressive Push'\np191\na(I3166\nS'AB04'\np192\ntp193\naVAggressive Push\np194\natp195\nRp196\ng194\nsg1\n((lp197\nVTeamsFFA\np198\naI2006\naS'Team'\np199\natp200\nRp201\ng198\nsg1\n((lp202\nS'AI Build'\np203\naVAI Build (Terran)\np204\naI3143\natp205\nRp206\ng204\nsg1\n((lp207\nVTeams7v7\np208\naI2011\naS'Team'\np209\natp210\nRp211\ng208\nsg1\n((lp212\nVMedium\np213\naS'Level 3 (Medium)'\np214\na(I3004\nS'Medi'\np215\ntp216\natp217\nRp218\ng213\nsg1\n((lp219\nI3140\naS'AI Build'\np220\naVAI Build (Terran)\np221\natp222\nRp223\ng221\nsg1\n((lp224\nVTeams4v4\np225\naI2005\naS'Team'\np226\natp227\nRp228\ng225\nsg1\n((lp229\nS'Agressive Push'\np230\na(I3198\nS'AB04'\np231\ntp232\naVAggressive Push\np233\natp234\nRp235\ng233\nsg1\n((lp236\n(I3136\nS'AB04'\np237\ntp238\naS'Agressive Push'\np239\naVAggressive Push\np240\natp241\nRp242\ng240\nsg1\n((lp243\nI2008\naVTeams6v6\np244\naS'Team'\np245\natp246\nRp247\ng244\nsg1\n((lp248\nS'Agressive Push'\np249\naVAggressive Push\np250\na(I3103\nS'AB04'\np251\ntp252\natp253\nRp254\ng250\nsg1\n((lp255\nV4v4\np256\naS'4 v 4'\np257\na(I2001\nS'4v4'\np258\ntp259\natp260\nRp261\ng256\nsg1\n((lp262\nS'Agressive Push'\np263\na(I3134\nS'AB04'\np264\ntp265\naVAggressive Push\np266\natp267\nRp268\ng266\nsg1\n((lp269\nVTeams1v1\np270\naI2002\naS'Team'\np271\natp272\nRp273\ng270\nsg1\n((lp274\nI3139\naS'AI Build'\np275\naVAI Build (Terran)\np276\natp277\nRp278\ng276\nsg1\n((lp279\nS'AI Build'\np280\naVAI Build (Zerg)\np281\naI3207\natp282\nRp283\ng281\nsg1\n((lp284\n(I2001\nS'FFA'\np285\ntp286\naS'Free For All'\np287\naVFFA\np288\natp289\nRp290\ng288\nsg1\n((lp291\nVAI Build (Zerg)\np292\naI3206\naS'AI Build'\np293\natp294\nRp295\ng292\nsg1\n((lp296\nVTeams3v3\np297\naI2004\naS'Team'\np298\natp299\nRp300\ng297\nsg1\n((lp301\nVAI Build (Protoss)\np302\naS'AI Build'\np303\naI3175\natp304\nRp305\ng302\nsg1\n((lp306\nS'Level 2 (Easy)'\np307\na(I3004\nS'Easy'\np308\ntp309\naVEasy\np310\natp311\nRp312\ng310\nsg1\n((lp313\nI3203\naS'AI Build'\np314\naVAI Build (Zerg)\np315\natp316\nRp317\ng315\ns." +} \ No newline at end of file From 333d02740ec755c180d7194e67628f821fc7ef3a Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Tue, 23 Feb 2016 17:12:33 -0500 Subject: [PATCH 208/238] add failing creepspread test --- test_replays/3.1.2/6494799.SC2Replay | Bin 0 -> 73930 bytes test_replays/test_all.py | 7 +++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 test_replays/3.1.2/6494799.SC2Replay diff --git a/test_replays/3.1.2/6494799.SC2Replay b/test_replays/3.1.2/6494799.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..e3984b826c8d9d1e25a05c4680c994cb6d0b2f01 GIT binary patch literal 73930 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 - assert replay.player[player_id].creep_spread_by_minute + assert replay.player[player_id].max_creep_spread[1] >0 + assert replay.player[player_id].creep_spread_by_minute[0] >0 +# print "MCS", replay.player[player_id].max_creep_spread +# print "CSBM", replay.player[player_id].creep_spread_by_minute replay =factory.load_replay("test_replays/2.0.8.25605/ggtracker_3621402.SC2Replay",load_map= True,engine=pluginEngine,load_level=4) From 4eb45933fcfd7367c5c223a1973313e3f82af1ad Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 6 Apr 2016 13:07:12 -0400 Subject: [PATCH 209/238] new failing test for 3.2 --- test_replays/3.2.0/1.SC2Replay | Bin 0 -> 157292 bytes test_replays/test_all.py | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 test_replays/3.2.0/1.SC2Replay diff --git a/test_replays/3.2.0/1.SC2Replay b/test_replays/3.2.0/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..e575832664240ef54919733587aea2445b72410d GIT binary patch literal 157292 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%0Ai4!RCy@{oQV6j7(cS&0^Fv(pIRt` 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 Date: Wed, 6 Apr 2016 13:18:37 -0400 Subject: [PATCH 210/238] fix for 3.2 (while breaking for older versions) --- sc2reader/readers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 7a37050f..fb603559 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -920,8 +920,10 @@ def control_group_update_event(self, data): ) def decrement_game_time_remaining_event(self, data): + # really this should be set to 19, and a new GameEventsReader_41743 should be introduced that specifies 32 bits. + # but I dont care about ability to read old replays. return dict( - decrement_ms=data.read_bits(19) + decrement_ms=data.read_bits(32) ) From 5e6e235fa399dc691519d38faa11d71667b69002 Mon Sep 17 00:00:00 2001 From: Anders Nickelsen Date: Wed, 13 Apr 2016 13:12:32 +0200 Subject: [PATCH 211/238] Use Pillow since pil is not available on Ubuntu 14.04. --- sc2reader/engine/plugins/creeptracker.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index 8e2d9e50..20b82f8f 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -2,8 +2,8 @@ from __future__ import absolute_import, print_function, unicode_literals, division from sets import Set -from Image import open as PIL_open -from Image import ANTIALIAS +from PIL.Image import open as PIL_open +from PIL.Image import ANTIALIAS from StringIO import StringIO from collections import defaultdict from itertools import tee From 4be87ef6b119158ad611edabe24edbb858acab20 Mon Sep 17 00:00:00 2001 From: Anders Nickelsen Date: Thu, 14 Apr 2016 20:38:50 +0200 Subject: [PATCH 212/238] Fix LotV time by fps modifier (for length) and new game_speed_factors (for real_length). --- sc2reader/constants.py | 26 +++++++++++++++++++++----- sc2reader/resources.py | 29 ++++++++++++++++------------- test_replays/test_all.py | 5 +++++ 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/sc2reader/constants.py b/sc2reader/constants.py index fa65d1c0..f06fccf6 100644 --- a/sc2reader/constants.py +++ b/sc2reader/constants.py @@ -60,11 +60,27 @@ GAME_SPEED_FACTOR = { - 'Slower': 0.6, - 'Slow': 0.8, - 'Normal': 1.0, - 'Fast': 1.2, - 'Faster': 1.4 + 'WoL': { + 'Slower': 0.6, + 'Slow': 0.8, + 'Normal': 1.0, + 'Fast': 1.2, + 'Faster': 1.4 + }, + 'HotS': { + 'Slower': 0.6, + 'Slow': 0.8, + 'Normal': 1.0, + 'Fast': 1.2, + 'Faster': 1.4 + }, + 'LotV': { + 'Slower': 0.2, + 'Slow': 0.4, + 'Normal': 0.6, + 'Fast': 0.8, + 'Faster': 1.0 + }, } GATEWAY_CODES = { diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 3ba19af3..aa00a880 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -252,8 +252,11 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.build = self.versions[4] self.base_build = self.versions[5] self.release_string = "{0}.{1}.{2}.{3}".format(*self.versions[1:5]) - self.game_length = utils.Length(seconds=self.frames/16) - self.length = self.real_length = utils.Length(seconds=int(self.frames/self.game_fps)) + fps = self.game_fps + if (34784 <= self.build): # lotv replay, adjust time + fps = self.game_fps * 1.4 + + self.length = self.game_length = self.real_length = utils.Length(seconds=int(self.frames/fps)) # Load basic details if requested if load_level >= 1: @@ -362,7 +365,7 @@ def load_details(self): self.time_zone = (details['utc_adjustment']-details['file_time'])/(10**7*60*60) self.game_length = self.length - self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.speed])) + self.real_length = utils.Length(seconds=int(self.length.seconds/GAME_SPEED_FACTOR[self.expansion][self.speed])) self.start_time = datetime.utcfromtimestamp(self.unix_timestamp-self.real_length.seconds) self.date = self.end_time # backwards compatibility @@ -772,26 +775,26 @@ def __init__(self, summary_file, filename=None, lang='enUS', **options): while not buffer.done(): self.parts.append(buffer.read_struct()) + self.load_translations() + dependencies = [sheet[1] for sheet in self.lang_sheets['enUS']] + if 'Swarm (Mod)' in dependencies: + self.expansion = 'HotS' + elif 'Liberty (Mod)' in dependencies: + self.expansion = 'WoL' + else: + self.expansion = '' + self.end_time = datetime.utcfromtimestamp(self.parts[0][8]) self.game_speed = LOBBY_PROPERTIES[0xBB8][1][self.parts[0][0][1].decode('utf8')] self.game_length = utils.Length(seconds=self.parts[0][7]) - self.real_length = utils.Length(seconds=int(self.parts[0][7]/GAME_SPEED_FACTOR[self.game_speed])) + self.real_length = utils.Length(seconds=int(self.parts[0][7]/GAME_SPEED_FACTOR[self.expansion][self.game_speed])) self.start_time = datetime.utcfromtimestamp(self.parts[0][8] - self.real_length.seconds) - self.load_translations() self.load_map_info() self.load_settings() self.load_player_stats() self.load_players() - dependencies = [sheet[1] for sheet in self.lang_sheets['enUS']] - if 'Swarm (Mod)' in dependencies: - self.expansion = 'HotS' - elif 'Liberty (Mod)' in dependencies: - self.expansion = 'WoL' - else: - self.expansion = '' - self.game_type = self.settings['Teams'].replace(" ", "") self.real_type = utils.get_real_type(self.teams) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 3ea7e248..d68b44e0 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -489,6 +489,11 @@ def test_32(self): replay = sc2reader.load_replay("test_replays/3.2.0/1.SC2Replay") self.assertTrue(replay is not None) + def test_lotv_time(self): + replay = sc2reader.load_replay("test_replays/lotv/lotv1.SC2Replay") + self.assertEqual(replay.length.seconds, 1002) + self.assertEqual(replay.real_length.seconds, 1002) + class TestGameEngine(unittest.TestCase): class TestEvent(object): From 73d11a9a1cd7bd2a2991014bc9f7352c394d83d0 Mon Sep 17 00:00:00 2001 From: Jonathan Gravel Date: Sun, 17 Apr 2016 22:05:05 -0400 Subject: [PATCH 213/238] Fix MapInfo parsing for version 0x26 --- sc2reader/objects.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index eeedfe53..3dd22651 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -539,9 +539,14 @@ def __init__(self, contents): if self.version >= 0x1f: self.unknown3 = data.read_cstring() - self.unknown4 = data.read_uint32() - self.unknown5 = data.read_uint32() + if self.version >= 0x26: + self.unknown4 = data.read_cstring() + + if self.version >= 0x1f: + self.unknown5 = data.read_uint32() + + self.unknown6 = data.read_uint32() #: The type of fog of war used on the map self.fog_type = data.read_cstring() @@ -575,7 +580,7 @@ def __init__(self, contents): self.load_screen_path = data.read_cstring() #: Unknown string, usually empty - self.unknown6 = data.read_bytes(data.read_uint16()).decode('utf8') + self.unknown7 = data.read_bytes(data.read_uint16()).decode('utf8') #: Load screen image scaling strategy: 0 = normal, 1 = aspect scaling, 2 = stretch the image. self.load_screen_scaling = data.read_uint32() @@ -617,16 +622,16 @@ def __init__(self, contents): #: self.data_flags = data.read_uint32() - self.unknown7 = data.read_uint32() + self.unknown8 = data.read_uint32() if self.version >= 0x19: - self.unknown8 = data.read_bytes(8) + self.unknown9 = data.read_bytes(8) if self.version >= 0x1f: - self.unknown9 = data.read_bytes(9) + self.unknown10 = data.read_bytes(9) if self.version >= 0x20: - self.unknown10 = data.read_bytes(4) + self.unknown11 = data.read_bytes(4) #: The number of players enabled via the data editor self.player_count = data.read_uint32() From 3bc825ce73eb6d9b0f8bfe0b38976cea1dd39062 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 18 May 2016 15:46:32 -0700 Subject: [PATCH 214/238] handle 3.3.0 --- sc2reader/readers.py | 3 +++ test_replays/3.3.0/1.SC2Replay | Bin 0 -> 127863 bytes test_replays/3.3.0/2.SC2Replay | Bin 0 -> 38371 bytes test_replays/3.3.0/3.SC2Replay | Bin 0 -> 72002 bytes test_replays/3.3.0/4.SC2Replay | Bin 0 -> 76250 bytes test_replays/test_all.py | 5 +++++ 6 files changed, 8 insertions(+) create mode 100644 test_replays/3.3.0/1.SC2Replay create mode 100644 test_replays/3.3.0/2.SC2Replay create mode 100644 test_replays/3.3.0/3.SC2Replay create mode 100644 test_replays/3.3.0/4.SC2Replay diff --git a/sc2reader/readers.py b/sc2reader/readers.py index fb603559..d8286c4a 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -85,6 +85,7 @@ def __call__(self, data, replay): default_ai_build=data.read_bits(8 if replay.base_build >= 38749 else 7) if replay.base_build >= 23925 else None, cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], has_extension_mod=data.read_bool() if replay.base_build >= 27950 else None, + has_nonBlizzardExtensionMod=data.read_bool() if replay.base_build >= 42932 else None, is_blizzardMap=data.read_bool(), is_premade_ffa=data.read_bool(), is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, @@ -120,6 +121,8 @@ def __call__(self, data, replay): commander_level=data.read_uint32() if replay.base_build >= 36442 else None, has_silence_penalty=data.read_bool() if replay.base_build >= 38215 else None, tandem_id=data.read_bits(4) if replay.base_build >= 39576 and data.read_bool() else None, + commander_mastery_level=data.read_uint32() if replay.base_build >= 42932 else None, + commander_mastery_talents=[data.read_uint32() for i in range(data.read_bits(3))] if replay.base_build >= 42932 else None, ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, diff --git a/test_replays/3.3.0/1.SC2Replay b/test_replays/3.3.0/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..30ebb8c12c9fa046b7877bf19adee36247cfaf2c GIT binary patch literal 127863 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 H1nU0<73l8P literal 0 HcmV?d00001 diff --git a/test_replays/3.3.0/2.SC2Replay b/test_replays/3.3.0/2.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..05dea99819d91e24ad3eff9fb20b19aac3b83dc2 GIT binary patch literal 38371 zcmeFYRd5{5vNbvyF|#aYW*DKx%*?W6F*CEp%w#b$Gn2*4%uE(pXz|sz&xx~7{P*F1 zybpJ0OmtRfWv}YaiO$NYsU@eVga-fu000O8!0uB)q5y#OD$WLuB8~>8&csqu#EvHR z)&?GUEG$4s1OO}$2nz)P3k3xWfPp>9hJ^d)009dD1v}&f0|f>L2?PR(fnxcr@9eM4 z^>8g(GT61e2>&=C{i|yc0X0J0D`R1e4PUii2weDc#Q(^DBJiIG{C^bzIYlMhna{!Z z;{gD003-lB_EUehi9c;f|Hn=J!ww}LYc^0fieY2=$=oB#9r|D69P0{@A?|9>I?NeX}f z13*Ax0f0zCE{+y|B7yv8;5E=kbVTFJN!oa2;$ALirkrW;6ob8;Pp#JH82M5BQ z03l$hpt5`zIs> z5JA<%(b2&6e^3Dsut8u@p9B007WhA~5dXjeKVgAD3@KYz17j0MVp%Z=AOH&T(}pEy zVQXPyV9)4mX7Ep41zUa(@KfnhJpg1fT!`Xg~nQ=kp=~6`fdZ3;+Nz zHJbxW@b-xrb#)GSJD^Xizr{07c!!ZjT|H*Lst5P|%fCH^@gs6?4Khp^$nu?Z-%rpg zjD@Mm^gKO$x28{;eG2{;rYS5JD_W4s)klZBw_nTr<*zFLuETGEqs&_+nevL-5dX$p zWq6ew2pWu6rGih8US4z#x~WK)FvRz)GiK>A9sDZzZ%0J8--fBomhcBE zwJ(%m`6TU+dw@XV<>9|QO=6VcinbcVOgHFAYRT5h^5eT@ZgU8JNxTDjC{@c@a z^Qc_az~)4GSiqB{bfGARnO-1BTS`jH1)tih)H@Ih3V;m@g9{6V4*?*A1rS4kK>>2~ zi(L42H|o}QT%kkohdxk*wavL%gtRDCw8}eJ!2m#rA0Hnd?;ls6pO3d6A3cwsr;n|K z>mT>q506uiS8^ZQGvNFH%79g4=RSE>x@{ zuK5UIadv?m$U_d-v;f9NR<00-P|-B+4BUdSc=ofaq|`IJI96rhIxd15EbjBI{byeQ8u`}WAZR-y=)w~1!f69!Z74y?ZQ z^+RlViqK*?+}$s8JU>5<^pkf1t|Ux@!yvy>1Q>1kih#crMK4;}@?YX~y&;nkOkcv? zkJ66Dmh_Y3^P7@cAq#2O*&F9l}b z`$HoUad?y=mCI4B^|#Pfmst6L5rA2(Qf&$xY0lR|+!ta*H;h&|;=~N_DI-8QU28ss zNXeB&aPc)$fH8awEEEgFnLS=}2J}c{ZW1HZF_$G1CXO3^eK?C8i|~BYntKX0VCE5!5z0hz`s$ zJB?P!Y}&7Ie*AyrNm}E^WhxWXuoWbGR=kC9*i8kRMv5_i*4|rkYk=Y<6 zY6av&=ytc~KO_#j5R)=s%)|?MTA?dnReA)egt} zXLWIrsPfC*$-%N-Cens2=etT7FLvNdX{9Z;?2qqdY|o}6aj6m-N-0jwhhQ_TCRx1W ze7k4>Rj_<>01AKwfDNEV!(n=VMH)A9W#{LFH$oM=FL|P3Q8N1M@+45ui`3gz2Dib1u>xSNipib|h!p)N$t7 zT@%`7{tLS~deP#3|GwX0Z$eHm?S(UM^KW(W zT{(Dk$~V+4`m{SJ=ruG`EpIN<7M(_T9y)YwPSU}ZTA+j@NcZhV)WJHxAD34Tu|_?c+I

MJ1p)IS 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

0Fxd^Tn0BlX{k<Le eS_u#JIqT`UG|0HtH`VhypK~O#gI`xuYyJnli~oB7 literal 0 HcmV?d00001 diff --git a/test_replays/3.3.0/3.SC2Replay b/test_replays/3.3.0/3.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..a88a4dcf75357a33048020755335116f29f439ca GIT binary patch literal 72002 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

42^ymRK9Dt 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 K^R!Um)Bgbo*l(Kv literal 0 HcmV?d00001 diff --git a/test_replays/3.3.0/4.SC2Replay b/test_replays/3.3.0/4.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..65b4fe506881eb9865ce992a4b4cd902c093027a GIT binary patch literal 76250 zcmeFYWl$x}wk^7Vg)iLQwQ={x-Jx-JcXzkO-Jx-4+}&y1-Jx-(ap(4T&W^Xwy)WYa zeLvnF6;WB0bJobJ8IiNHD&~+=RKf#*0{{RZ0O0VqfkXy?)2X-^I*B+Lnz;~5NfA4l zI@lO`;xRLWLxKRX;NY-OKv*a!SO5&{aV{j>KRX~S5DIqZ0t^NU3=R?;9GnM@yOt01j~C*9nHE7PQR3cN3u~-Mkqzw*c5{+)k}{{s^LIwtsU zcK|>T03a?;SxOrF9p^Eqq}+Iph=`V!5uxRAFs>60O-zpE`%en`-|$B-A-q{?Gu2(r zq1Z?=lzkKoTlP0pV#4n#;E7c++h=~_L-Uc;x8aHW&1hIN4441y;{TldCj$S8!2hoz z07(h}f&qY#m;i7XHA71qa7Y*cED#(T08n88!h*xVP9-0M1HoamOr6Z3{;_>PfW!Xn zfu)9m<%59*!odPSup?lIumEIOa8w`|EC3xG@DCd`pPG=posa;Zvjd}mu%)S!k(0g4 z|BJnIIv?!+WCs9YL%^W^4)kC2;QtRj@E>~czx3eX=u&oWh9;&?#Ij;QZ~zqK-#$z^ zOFK(jLk9*IbHjfYRUH%P1*)Fh_pkr<6vmIrzctJ9;j~-0WNUKRC@`xmZv`RIWZdJbVIL<}drI0=o`$f=8LQO0(q^wSfQT zT%~`L91IysP^E%TlwMwR3Ay>1DPe@~RcFH7V>ZMq_-{{6K&b=Y!N$XVRsV*W%$D#c z3bh}UQN<*!|2^Pq(&fRwJxybk;fl8!Bg{6wkkpc`l@}y*%ib`qE{Bep|M5Vh4ga^N z+vZ_~s-f+%^6*zLlCp*3JSMuYAzD&Wny&cN-eo?)m{0(0SQuPbD10D*5EeiT1cL(5 zO6i`UF+c3IesgmA_V9d#EUab0%`BuzsiK)FKv)6*hy47DkI$=r_V50mJuQC^o;&^4 zKkm0bA1)uKB-4$eF}* z^Z6;QaJ@2F5Q?Bo&o{-!p`NO=bpoj8U}O8o!iE49Ci0KN3=UKPE(?GK7c8F*01Ei)GXp?? zki!KeMo{px!Jc|iiW5T!;vzr={6hm3@Xz+&l>aON01(8B{NJ$C0kY|AXmj?;OtJvj z5}?UEaxc&T#xme;-@`gHRnsjL;{&AV!(oXc;&J@J+wMg>tm@ zj;IbPDA`ymmM#3C1`1KBj78+g2T6S;o`n_YMPCP!67nJ@h1n266`|5F)@tukSvr+J zA`3$SVt1INxv=*DGzNnqGcDBv5Y&17<`NLn(z3OWf~F(OldgC=mq(8a|$M8~H}frTc6 z8Bjtqw&d8WT-O%zBYZpZ{A&R>A`?t0x&mK+-=44v%(6#_=H_a+V8DT`Av@s^B0MNk z4m0p^SCjn;*7pxfEh$G1;33#r7!C^kn#fMUFWFzvEP z(=v)ZMD+9RgLFGq^3xJKY87P}ol+NmC{y|+U=n-M3N)u{CLb@@!3$r4} zUWc@8kLEh>y;fGia7_AXa0SgXwjv(j5Nq6v4qUD8oX2n~08aF`GhEIE5QK!o=oo{! z;ERZwXD1Nt+g^t3K;%I5$w@Yt&a5p7Pn8A;=Mp6%M^b3_v4_98xl;}G&TjWhcICSu zpYxoaO@{lGE@i{KVhJ5ClHR5m+MV4>AdkkSa+qo+`BLm@IGM^U_zuFfodGOFSnq&b z1jxt%#Na~M<~IR|L8~KbN-2IL-o%)IIb?|1dDmupESRI}=yYsB(w)FL)Eb`db`E%q zT`?8%SDB+f=&D^U=NnUP&&6OosQ%KD35^*`jq!cy{_{Zt3N9awMzW!(+s%ohy}$#_ zUn4?b-;Yu%y1|&C_6VOVkYEsw;xXi-zT;R09~juwHuF533ybwFQlsylzthIgC3ro(rO=W)8Dn7iKl z@b!1>JHcElL=9Xofy7NSGOi zzLv?6aOxGOvcOMOG{3+G6=33J39$eowz8lU&jdHZVIz~AjUSoGpp4GVjFUQ!BW3f7 zQz|X9WeKy8D?c^y%J{16DMBU(76AbKP0%w4|73QHzbPCrf*^}blMfulmZOZGr{K&d zf2X-nS$L-^Fu9jYekk*lU6`Nchq-5F^AgWwF_tPV8@yvjz-572xC>SgHnBX#VZ+51 z%EtlV0xV3}jKE5Z64(NN@XJ9Z-~9c@k}hr%M#5LPU|U{NnrxFadP-)=L_8@%hPHr< zP+k%+!(3h>9;Y&9!Nz6*fFcvL7_s>K;@}q%DiH*ijGzp}1)yJ31`8?(vr!$(Mu!E< zvCYhkCJEalu^>>+vh}mg&*i2Yq0!VaOJoA)ReDvYNsX1tPfm*NImkluesKlU$Do~P`$a#l0UBWURqZN|iukAaa5FrR|ebDV$h!nvh?H*Hm@(jkOfFVrEE*5cFFKC+LP~Z-g>40^{KVh*T)5#ICshz{w-b>8<|4h=Ii?qlc!EgX+le8_N&Ca!|^6xqYuL`A(74Ps1OLy z!JCrF9h{PBn$-E#*)WiLfR3LlD*HnH%nSl!}Zfd*%Ji|Yvf=J5iD|wpl^73v-dS7 zr?*vl7BYIJa-1uI_`3G;ZWju>FFWejkdG{J8Klpw301z{7s=;!X&G{z; z^Y(4yF9Er)a%|!I>83T!rxIVf* z;0z1BKoKXH2?%bwRUDA?i`K~^W^JB0$koV3|1S5g*w!aZXLCF)L@I{QbLtBIU_U(d zGM*L2KF+^t+bE!zqACq1jM^H5*8Pq3>%bK*3G_jSVqfm1$wHA{`atVcZqxb>_#><$ z5n)ilNnQH5nM<>)dBL3lqb7M0t!y@8FBIsaTML%g)a=Uu#P^1s8oEp8rHnJSkXRfD z5R|ipjwXSdRzEM4^a74>nD=2v=lVe4jw73$7n{L!O3$6;w&s__)qV*L(ef`u>+^OU z*hR3X>u9M)VBf83Hxz7j<)qQFqm3wFmmDkm0_tGH$CAO;Oj86^`9{LMv5oDiaj(0DOE9(!+@VI~rq%ddG;#@`V3Hh-uaasebR;)Z5K zYiL{UF@&tg94ANIINt=Nq7D9luJ=|UEhdQ#HQ|T(6;=YB8PZV)aa@?E1+OFD5IuSU zT!RLLxJelavC?up?-nW9_l&hMWhlf|`G2{cvjX;xU}`>Eyk;$@sZ{~*I|X8OfeL=}IF{0hp1*~tyVk9VtM zB)$l#5@d1&fTgPeV16Kx3!J?Hgrz&Y!}ZVhq-+ zC*{O1mpqC~QGB5UlqqB{*&G2@Z!6-sikG5ILM6)*+j26De3(tnGG^Rpe9!px$cI=~3fjjsRp5z_?$Ul#rEi!K(j6V*1@`Q_XWORQ0o>SFG zdQyK;cA~*_9o&W})=qy)j+FdZ3*uWSM2XcUFwMDm)~YxA9LA2&Y1F1zi<*EThqK`< z70*-ndC`3t`&OT?elKJ8lVTRfPCG1}GIuG~vulRqAb{N%AkphXR%v&`y~PE^e!~P# z4$En?CTB7SQOggWFQc3m3&Q5Z{?4^33kbOcfw&`cZ$*qmRh@_h1Xog$CFg{|0ZhWE z%_!v*uabZE>loJLJD}h-m+2@|G9pF1Q3fLi4K_=4~oFa@M`%`ipSNJ^XP{ zAj^rl zjDbpRwv`y&DSszFZmt&}zI$ID>l%xXnxcjn%teJ(mJ3Vj}~O29ig)|j)WX1__pvYqvhGmh~4?7lg-nX z*WBc+9-80Qy0Yb7+vZ1!Vzg5Dh-9Yo+km0m&M1Mdp2QTg5{e@HT@#qKi zD7i6HP5Lh?=#zAg9GS2jQISvCt3|q1{h2q`N|$wO1({!g)-y9XsB3eatlLjDdnti2 z5)J`S-?k%l8v?qg3RI&~k7MaUmQS8?$CM>+O4MbF})9@!w$sI7E>ynGVYVGjA}9cYKVt~gv3aHF7{hg+2uH@ zXtt(O2rKY}Lpy32eDz%dFy?;67H3R}YQ3vyPPu=zEBkU2Cj zJF$MtVQYuYxSFvh`4iGdWw0xY9ha7f`uqu~-}r4)r(pJGtfQ z4eBe81vZp3N&8|jfcw2alUrkzgg-i%HX*1;bLq^>G__StV%W&XJauhX3;Ya zCX4HRgN_tGo+f#Nkh@v=R%AViwbp1o^K=i*T1rA3We570BEw*=_^$(rMheI*xl*im zLVhd@`J5OipNraZD-SgO6K0U-QEC&vQ|MX2?y_k*+3I}PKpK6s z%Y%yBUhaO?n(afDZ_SsH>x;{3I|c`jF4u<^{lOJ``XTIL_o`u%UGT0SQio#RQkESk z0+SU148g`%bV(v{u~i!7iPJ=Ke8g;#T%9RaikO~|!h}EcIHLQ-owT$$Z}k3RJER->59y|mjQ{+v)b7TqMV2cL>{Z*GD}zI82bx@%1Tvi7wG&=yPnb@;CKipd>U3^b>q4 zp=bBzKMPuu<2s8WU9w$n@=HTC&DFi3Oj;DAH_l&}Q&l4gXex@ugx!)de^E*kpjC#l zb4rjC%aI#MULlK_NujYwiz7=)o=*uQer?baTEsC4M&fZq+@++&;kYA@9F>}G3TNyg zxiHT8=`<)W1;R-xTR2YAMSw^;qH7icL`#@)4*bRhSF7`wWlW~?UDTYLurKCh(@>91 zc=w)iHVt`R^CaY%wTHU@bN1qXtzcN&Zi*kd%rw3o^8=nwLOOa1el%6P!Yb&lvLt~i$mYIf%wtVle?%8wN9_OBW*?mOPbn+tb+Wy*N zcjL?=NQR1M89-_GVdq|X&dx zFt0}>zxwoZ3xgKCj{=T^y9%1Uxq?KC7{uw@@3^6LVu(!d?rgVNEB9d5LYp+2nXDxS zIW2FNEa+avBWnEYrSBY({JyF8y{eB&w^M@O_mf{-X57fs!Vz_O@;&fh zf;S_$73?DsijEh{p_UG4ft{SyZ?*%!*Vk|7d}->fIe2gxPVXO$l(FzR4sQ*f<2M7_ zvV&ibJ<6&+f>Wtp$65&~+bEaoYK&FoT-ET1XC=hWQ@p0SX>5k;8!8uXMqVx(=&9O| zUe0i}*urm0gMZZ~*#~>3s5rIVl>aVX4dZrG&-tZS(f9kv;)q;Jj_=W+v#J&;@CqU= z&iz|`tOhKmd*i+`2)Ae^W3z6~I13`ZW>Q@n{)qEo%Nb{r&{#$1_fLbGl0)N+SToiP zY8zK&O75S;j?0woOD#{f&P!UTIdNkXV|9MvsEx5Yljs&m>@UbV3)%7# zjJbCzY<3;=uI?7i={d5eNll&lw)ha8CkfC)_%MO7Ky}mg2f3l_OjMm>srl)tftvbR zjj<{z2BX+*__VZ9(}RP9v-i)m0}gELFR-n0ySt_6#3bHfeG06*IwgV-tU}pv$i})@ zTa_gZ^}gB&@Sp_KGHO&Tz#0w@3X1*ZG%9eCU!Vr$svq_>=<9S6uO3q2v2_Kz6Rdj+ zDOvN|F@c*{=HZParcXYP+p*^GVQtf_0mMLneZFR|MZtO{k-; z%$tKoy~EDrNT0!=U%PBkCeqZc$uqG9eyMSBNRS(J(eGr^V|Pd5M7cbTn}Bg9NdjZc z1>~Xb;GWm)8-Y<@zYjj2P0Gi$Bde>ctHWqMpyEOtd$ArtxokAMy4p2b%!JZe}IS0&W#`3uUG%BmdJSajy-B? zQ&Ay4+b$6mObe&S)04om)dJg)x}nKV3kw)4-x_1x;oMkd^?G>JtuC7UKFGJev(^hv z+QMm((K@HPA^B(02RgG$suUl+n0Po=82OZ`K=+KT{^-6kg`AK?2MMX zzJmjr1ZMa>dt;NYhnm*kck1-R3`n35d9iitR~ncza56GNu1YX`)9UN{|SlZ9NDir(Lbmq2~_Kx%)30qgU_HCyaRA&dHGU4-#L5Wl7@|E zY}lF0wpPr6XC0++qqw`R>X=B7)D!|(&jvCSuhKU+A<6!M=#+R#Sk47X*%j_#*rzz5 zl*dM8T4kxtp`^L8lQ2Rl@a9$xShBja#xC#WK;qKz=F48@phwa`z%hFIAQ*%n3Wwaw zr4G6Ugw;U04o3C5{g`z5CBUE#w7{FH270_>Wu-K8zyS?Qxz4?q0#B05(v1nR9LZ<5 z_Ztw3pY36d!<5WLtV4KE=`(rNQ<_TWPaKksPB+~kv>m08ztk#LSfJy&49hvJWPh8! z9jh?($YPRr(cYBlWiW``P_=H=L{lzJ6q~>c(gwoFvOfKGJg>7glGO z&aKKGY0Lkn<3Uq)lJ0@IGe|trzsU8iU=O-_VOAD<2LB-Kd71XOJqY=$o9Cg;Tvl#w zu8)!(I=ZY1rTBG-RwgJKMyS}L$;B!^O;e&UR4+|sr! zdYZX)QmrkfpxRCpK>q;wn%z}0;NCTJAN44k=brQC*{SCoSHk%RgKGJD?B{N=RW1vu zt7KfUzWMf_o^67Y4(g`tye}dI=sMKJX!KAl&k^!g&g%+%AI6@B0)*+9BBBapuYfW!{T>x^TEk@EB=8k31%vtZIU{nNNewj`lck31YkZA2EiMKa*ZL|C zZefKo{)aE{B)I~Td0njeZd4LddrJvF7h>B=u_|Rki}v8nN85IpxhWM<9J-8@q?>_) z;L@JEvf@FA8WK`*i&t?Z0tf>J6*{ywlBVS)2E`}J*^%4p1~C*4nu9=xo{io75~8t( zuI2m#7)$mRU4J~}8yOcYUG9ynR&OU;R8wa*@!q%#QyFr+^SzZ7tZ=ba25YMk)${`k zc87gVE59zSg->ZWa?gq9r=7v71+9$RJLr{#8j%?z@KIcln+` z6wf9&i>O9Y^UYf7Co3%k`JwLqfcW@V?G&C3S}qXYi@Tj73zJjoI95b`1S;#WfX#!w zxY1Tdw@h<;1!{=MRjM%SO09Y;JWpJ{&bQ!xx}6`BYobU}yC z%newqD(T7Jy6Ybr!wg0w5|fuJO7x?D4`AaTd{V&}S=o&$u5gx&uri4-+GPhx_|C{C zvP3h4-=pvD&-EXl{dtMSi;0B>M1${a*&I-3cJUUX5)5@Knj)c~hE@_7)kovM?=ck{ zz&N2aw$G^d>@v`xm5|Tw@5VXnLUJsQ63Xx36=ErnlYP&_+!MlQ!%t@*F*B`h`Z1x+0#iy06QgeqX)h>!n}Ey z7Ht)_xaIUyq63wchNd+#YA=(L5{IMi`SO~WTGsjc)Qv(XEc2CDpUY%Rloc+2(=mH+ z=LM&jNBl;5LGX9eR&1h3@9z*8xyMrSzmv>S%v)|!!_{grah?)1mCgpmICFC_)!!MZ zTuD+k)BpSBE7CI}r&?ofXLNr2D?GfCxf+6++Xg&LId2l(KvjHM;gxg$T=z1)*p2%W zpFdG?zw|*GI`KlJxL^U(Ue zc)3%_tjY5+<}CNXz58xE%lFCy@8c_c>FyC1b~q9%l$$Kpm2O3aMH}DjFu|zl(eu0c z=1vZ01w%_*&iZYsT%kf$THwr|c7gdFnc?ud@QFp$+hKgild&(Enq-kPP1agVP5sCr z0%#or`!2jf^T@fhSGeQ(R>6U|Awk#!b#b7T3^#7I-Ofg%WNK* zeDD!Xk(rERbt@C1=DQkuqlQC{K&!??sypaNIX3u63tzvk^RmViQo!TByC8F+jgHUl zVEDsI9nJL~?3a$slzMZ(h*h8XgepA4!>Hues&cBbC^zaVRss>x7fOnkqkTzo3oP`Y zC)ngP7I5x|D8tbq&O!clL$MZpXdrY_=;_o4rEAYVMD}D0C+?mUiMZ0EJCc$x2@QRs zyTio^-MTP@rtG4*Itg?NRi}B}yUe_;|AdiI0i#y>UO8+1HK-<8`eKJnRHu}eS=XM~ z^=45^X~(|#f@9tGct5=n0%bSLaMt=GwwvT!&3S^xTGyV3#R2k5I3$ywLV}-sae( zn`7`9cD6RhUDGU~+!jI89I6WE9=hmk=GD z+_Pz`le8u>qGUgL?-bEcIiT4u`w*Img!!$N2Qx7>DxFBm{e!TsWCgT3i=*VqkRIYcZq9$Ex?J~cN{$k0YeM^k_O_Y#ear>Q~1ajy+`b@#cao>BR6 zzyb7$v61Lf>$xc#V!dWFo+k8GN9@8z=Fe+P%POTuV?n_cY^YJcSVd5O8Pn$LF%9O>`U*d^v$v$al{T(T-39S--p|Z4eu11|4wn!*b>h)F|9bk#p4B{L&Ggu@Gl{Jq_hF`_F`V-~^bysO^XQ|R z8zi6?CM$eNpn%B*QEL1&p`}aJnNJpv#HvZ%o&Xr5Ate#=Sgd>B3Pv`G&=DIhUVvq~ zG-B)yB?jkPqbslMWMO2otK!m8I;Oqc!(3;nvs~qk{Ka5elFs44x`8R&B!p1}cYy*o zTlv5wQ6|iWn@aXL%KnWjkLE)4W~)RZvC0u@M+VilDk$n3KMEgba$QmU_olGsJ`np{ zh?wqM*qZdUi67$aaHOX4O?$EE2!0X^lMMo$n5LM|BzxywCB?-7jIzm!q?#&cL3$#t zI{Qknd9c=Ao4rQ8OM|mTi|*afeG4IzZ;*#uF#^} zC!V0Ddf?O7yu%w56Vh~)jD!wm9e(4oNH@D(iYf_X>As-+DQUG3!E&{F5_|gCcSA1r zzcqI_@u|$dV}tuy0K5REcs?qS22KZ;jQ@8-$%ZFri)AmDFyTN^0Dz3x?9fc~CL}l0 zoF&mQ4!ghQ>-uhOQucnEEgp|Qtth9I}kV6 z{R-?*jUtQmZtW8$osGKX_PDJgI@zbNsyCi_KbAWl2;5^XI0%0@^4ySzjF?ag|C7x@ zuf$?skubIp#pHOcnG1GIx;Ab#7Y^x$_z0KqCRM&-SY15q-r?@RF@u|An0C|+BB_)d zfuQozlBDPKFBx4oA0mr-4lK=&hc0cAWk;sqwHYKLxT?b@I^rB9NzA6AabL^tvh1aC zCTmVQADSN{<#aKP=cqDs#5u?VoUvC;0?cqp7!rWZAx7&|RN*xc(`|6dCMM`I(qpKK zDhA{=qdSZ)ueXwN+SAMNCF3?M0ugwlCJ>S6k;+z=h)NhRV7napq3xj~_Ii)M%2Thp zACNji2i>-1idNK`S(xbj^I@?% ztDyy8EkgUxvu?_IFym!(gwFybeBzl5)`{c)eh;8zlZEQsIs_=CKVrqac;5j6icn=$#_? z#k*a)h;JZgK88!E60MVDurd<(U0lDp#xvAf1RFVnXqas7tg;AX14<=m$qHRxD)wOF zSrrJ|*_LU@GI9;xZcxUD;5UeUVL(^hjQ-hI#rJD}bG*POuv2iix7DF5IpbR?j}?V| zkgAY&Eww&&PKx^ix;ZPxKskQ?y+4AuTa-_DCtKfQ--ue(Q$&QFqR zuR;v(QC2j8{2-`e&r7Z|zBegM4yVG=k_;6&CSk8-29_bO0L=(#WNvGy^4qPWZA-7M zVa}U24BWbIWynVu>^C%TkHEm-2jcCWLgOE)bQ*Os79F7JQna=C^*Ncz(}4Cdk~Uggx%KI*2+h0t6rB7+R#x9yod2Yz*?cjh zFA-Kw{qouN$Xz)7S$>1kEpqh&sTkamr5NPp@d=@Hfp&@gqT1ZpIR2?MuJ2q~SefE# z(tcK>BM2=Q?CX5?M5U=!`Q%q)sXQgP%^^3rGbR*jHD`*?Ln%FVdmJyB(@H71hX$l= z0-M-(OIt(poYg2+=TD-=1U+zQ`2=VBJ%T4ZPM@*!`l(6HAKElWcICJuvNzqo>uTGG znc5TTEAsEmUcOP@BW3N5b##XtdWv*EZH5zWU8W$WN?;X>{ui#@2ei}W=Vqgs#qOm| zSDkZ61yI16N^hir^o_P9m0A(2AYI{}` zn|FqS`t`oRY`&BqdCk#AZ;rsJ7{D zJ~%6!F$KS+RW>pxIIERS&x0klIJ0KCVVlyr8{mjx3MKp0j*Xw{N{^YAAV8+rmgMhZrlK8j ziA=)Wl0Ef65R8w>Pk4A+l`eJi+g{OVU4SNGyVFysd_QuEvNZlMIezl!7y&9N#FJ9na5( ziQRH)>V*-5D+Q4v$6h^bRk+aX-bm)VdcJ$*ip`=0N#hy)7sf^XSTd#U+@#0LmGk7oP${|HV`fG zoGIXHcwb2s<1s|Lp<6aEyr@fwLMnTGyt=U2!)%zO)T9h7!zpIV|I*yQ_l&8WnQH*!$GNDi2%>Y{gQ=yxHhnwb ztEMGFyX+tN6k0%+5-BK^ZR;rI?Dku2*#x$EwrlvXW<-9a(UyAY94c5g_0~2Rnh=eg zj52xnmb?D$nrHMjiW^_1zIKep^k_^^=Frl@YhjE+FU%{ENWOIJ88sv#N5GdE=5L&0 zF2gmz*Cywo*DtS*reH}v`3tN;sk)hxNFapX6jr|kKpb&gwTntxAt(Ko=5u!RQ z`mEoj1NcW#L&0XqPkdY(zk0mYcD8dTUVLd~wy4JDye-?u&*Fir@$>lJWue!HIinCy znw?_}&y%yd0;E0WLuX!uT|^o%B(N(!7=0oK11g}9ijd94UTF49@(vG|^h%Pb2JMkx zIOiM!AL{4Y){9qCQ0mzPA~P4AdY7en#MOA_D{9T-;|N^xr5s50D;|ZgtZl}&KFHo& zCbyg~a9W=VxVF`sXGb%Pj*(euv9AqIc!|;y-@8Lm0bc0kf>s_O85tf#iLU%w>bpWxX(5$-g!$ECL9J37H}-A!3m^)!q#V>Z&p(5h^(pE z(RiwPmOVy$MOB}#9M3v>xvgl^h{vwp<9lUG#GWHs099C$E}wK85VWT+OzK^3On{hn z7$8#i+6;AfbTpRWMPI5?Xhd(w#%|j)j272o5Lf^FX_Fw$!h#el>LIW#Uf6dcUl!S) zMc=%N61HAvjKex_x)?DJhz6h3+Bwdxa9*lq`cRr8?~7&LJ`8`=mzilrh{$xRc7Q1+mTH9!K7H;!qKU2JHP>DI>+9w-x&eLr=Y(AAEG z0XB*El8C)e)P;?&%_s69SF`l=mhE?TL@42)S$O%fuB&W;V+S1|8jBZkFvTJ@YYnK& zJaj{oon)U%1e3^-Onm{PdigT&VJzwqdL%Uowt{i;lYHexZLXnFRNA*{we9^#N$93U zaxZS9&~@p+-U||L^ZvMQC0eGY^J>a)b7sxi*l%EX&}~>k1neLS4@Y?Dxy`Fez({_X z>I;@Y!0{w58W{#n)9o!&+^fb*?hnck>%8&@w_h<7_P&Ee4qOXjPcVO#A=yY-sYFwb zMvnnMHd(O$SRGY3_){K9ta4lf6n5asMFBXlBG_X}1Rdzc1JQ6AdbJAn_KQd)Eou~V zKAi)H;+EP=GHAz@ab^lLm##p-DfO3;?wl=hX#HQOEIz6`8R|xoKLgFZOXSpU)y7hK zqwz*6(l7EbGh(bSwx!$FVcT^QhqeTuB|>xcgTB+BY&YT}TCBcqg{9P7(w(R=JN+cS$f8* zWk^|9EJHf9qtzIjgRG~JL4=bZ#QWvP`UOih&*tf|ST?hDQ9npEV5ZZlmO6Jku2@lJ zH`AyKo|cb*xTiSj0pB^0F?|dnjDo-)4$Fc#QHtCgRdU8UvxWE_C`QHHyT|yZv+4($ z?@bLlrAEqmjLx-gOLlDYLRovA8bA8zk_y+f@!DZ2sc^yyRPIN;mYBBye@+O0h8liY zw#PvEEz9F$R~>(eKC}sUUVy>Mj;Yy<9$46cQZoAztq1e!pd4sNGf_nojf3EJ zSowz%v2Qgax3F(eDaa{n)U_@kldrNl8*4Wv#IOEy^lz1UO--mL5!%k79J1|<@`NcX zPQ;rWdB$%(hMJt85CibBt{L*g{wZep*=2^utTE#^D*y*yMLn03`E2=n)Xui{(zIVE z#Ded=X1nLs9#6{ed31SLEe$tEJk2%qZAftMjy=cbo}fCm0;smv4zf!RH58UHE!F(* zcCMc`;oM(d2fY10yG;lLP~4&zzRZ?YyoR4f_-xU94zJWImxwoAb_ZoZ&BM~18Gfu zV4#)YN6S9QsEt{Q)Ag#~fa1ZaA(OF+f~1>vRQg&!yfl4u0c{(nO+(7#=SS6VM@11g z2I^ln_}2GYjIX-KK#JAlfTDV(M)aJp$;_scop>EmI1_Z>ExY*sLnvo+2=qfjFt-IRxZLR2eGvTM` zQ_s$jrj@jo?-;3wOO9i_ zMJK*Z$K4Erf7YYd4Wx7Eey{q}y($T=+wBqPgEl6xH#JEJ ztm=3BGgn-6RYvvTW#pwvCmYWS`b41|yDc6-T%Y=Cq+&2N{JoMJDJ1T^*(arv+Wo$# zagl;C+LuV?%PX zSzZP?T^>{|6W;zqr*%QX1v+?3ab_WO65m<*dxNR_>0mj%sCOPtF(N_kpeJ(zxTZL} zW5-TjR73WHjD&=dnhq_#et8NKi-?fD+pO|1MklYu$+UG#Ynoe}xFu6LXI zvL5MpbzS*hHP3s-N_&~}1|Rz#Y;K!*!(IiR+$U$T1E2!S0O*o# zl{#p?^<_H%gmyM%>m2~%`l7PXl&~O%Dz&Qb?S*$fm~@3AHQ3|U>k6^J5k9n2uQ^yw z02phF1=w))?j@q`F;WWc0|;WED}1(8$OacNILU$?1{sXavXC+ZBnUtW!lpzM%AbJ} zWJ?FjpN(e&umLFlOMeO*WXP2MR{)9zC@oR65CVX+0c3@ZO#a%)#08BkOOggn=5om& zl9UekC}krvv*h?uy(}Z6?3D_o{R?1|V1p@>{mP$VGjPe|_^ArmMi1ET;uJ^!O0EzT zkb_W=OK=fT3axTg-x5yqDmY5+6_|0QUP@0C*a{U?6r^5gl4eBa6=!Z_?pamLChwTVxvX;}9dTFfGi?%R$9amdwO3mq!+o zlmq}q)&d42g4k3BM@#cX?}j)k{7g(F@^ed*r1OHjER%Z|CSph`{3uoCLFHXa7qI-e zrAb~Yi+mP~{EZ^g{Kt{|acHV*S?KTLC8H+_ET#Jya)l~3nYl@8<bMn0-VCEf&v=(q%8SXC{Zy#ztX8! zmV%sA4%yN&T()_6l2`6t1@2mxmfA$knYf zd{ftYtY|M?&fz`hA$f0{Y1LGc{ln%}2UroYKc;&stTn#{12Pc+t4x?8;)1^ElJdB9Vt}UdKfY*ank13&h@{EKRg!5%oV47LmoGU z2@Tx8$oA9vc3yY5_~+~=d18LX%DjJ=Igwevc^sc)nFFNykJ?e)4pFO|QJfSr<*A{flu z{iTK(=#%eQy)V+}1F+yhXvY?wSwLbjX%2#XX#Z<06kfv(mndG}udPUVRuZZTeVCMV z!2K7!6Xn^n00k$)5^m>7^{4F$t*~l{q%p*GJ`Io0{e9Cui+Er6ODmp7%W+|G5udVD zVQV0!#*5PTZv49LbbV3ddHrjs?wlH*w_)~=H&^uBahuvAc9i$I_Ke?D?hvU3BEd*0 zB85Qv<6sxMI_~KHfFrly7X(p$sD03z&WYvKL6PAek|FX}Je!s)y#&(TPt?|7q_h|5HsKzA_Pzm2dBz&?=kHs zwpSJZ?RY|Z)sYbd4T;K;Vxw5#o$-IIK(j3Pl@>q=1uuZqckoy0Rjd%Wj~;w4Icr)Q zP1PVlu)w>QstyyP-nlDIoq53RaU;?++M5__aEx=XM^aF5I~?8(hkf6 z9m6B4(SO8Sd^9>GTC|!e9=>R~AzQAynC`zR%WC7JwGQ3!+?{sAzJU5f<}`c%=UukE z>Qi>J!S1PFQNo9i>fV5?PD|xa=hoXgHSik3Vzzad?<+Rdv3gWULTE?J>iYc~vT!u= zdu{@%==2DJtKn0CEm_MP|ln*t>*2?dtP2y1Q}z2hsYt!M5!{!0}F z8@jX0ZZ}?58uy!cL*Yr9^Jp>KLHak*mKtf9%0oGNU0Vuni3UAFZQT3#DAp?Yi8 z>9HB!mCH_5u#sA(N|%EFkx$ZvW2?IpBTzRhLvF-tdT+=0;k913%EHB2#=901az)>7 zuG|kX#@yy>UOB8mHY*oY`P8>1!)<%lD1_vQ@Iy=tGJzmtxa*;J%sVXBXi2c-3SW(} zRy!$MIz8VE7#!gt(FRd4V2milOc_ise9z27@#2U7X$!TGEI?QSfTWV7s2j3Wgap!3 zFQi~pA~G1x$%kt2PPc8hUw(H_x7QwGh=?pk2qfWZf*o-Nh9YJ}4ZhBW%88*ept+E7 zMX8$Nr5qxjFUrhpjwk{2BCjYzm&aOB$qoMYw{sx5ernIMNHD0}!vt?Rq?bT2<r!si4WkOC#?SVMSkDxt~Hc&!kTO=QRBd-8{NHEwr`GZA+)@W`h14D3=Z=@0sy~& z>;@fY^f$TgI?vnYR+5U|&d0lyNKKV3_x9Xhzx5SORX$_(SVZ$`sAz=}5Mc=x4RxvB zBFFyx7AGK3Bb~LMyi_%Ch!TsKJ(ex4i60z@g^3T~1OW^QPTR9R<$3FHDF~#V<>@Fu zNlS1Rg!*l{s%t$61OsLTfnosw5(-)L(R)1B>h{)l`nb;WtZR0dIMbIbLM5OyBzmHU z{K~=kvN3rvXPhIgq+Eh`ss?W($l|hm7Ab{vZp|^#;%hQy^j69qT6%=A3DvBtG!4N@36^|$d5(1D>7)6RGr`2YYN`CQ=dLFpW1mj4pu41(FWByP~}WPVvIo<3~Qt) z#gV0HnQn_Ig=QgxF(Nt?MHW?KmT4*q32u{0l}2W1I{IM^t%?gGz%hXy?n|Ivg?q3jjdI7;X zT7~4HIS@IF3A?fe-3?(hkT^0$ce7j5WR2f3d7U1|bZsCUiN}H_I6}26Bt@xZICYM} z<836IA#&=djYM)lLnKUw)3!4VQsX}%i;c4jK}iwO(I_!Q(ayzfzMkz2$U8jqnJftK zxY`1@MRX?;ag5r`#(pEJx)fFv!3_(fE=7}pYiiFP)mFKTxGY4s`Db5HqKCt=9vjqC zQnFv1S5h(by--OgSrH{z?bd;*X|=@cCQ6XgLWPlBD4|%AQ03CkC`#OiELGqYN*VPQ zz^eG-3_;;g9h^4@)C4?04kE`Y0HmfCU#)Jl&c@pAEU3X0STSF891{YY*1C?2Co7l3 zL`M*Woe~Iv;wOp#c7fKK*mA8>#T_IrN|DNSBM8J548SlD1W;neEPz*>rTPutZt$7f z``kHGIM;=>HE1Q1NRF8Tn~xX+>;d`=d>CcpikAUrG)qNCMpFvWsL<##(iqAycxc9X zgBnJi>$#a*yxo<H)42pm0nT>@etJP?qY(Zoy0F03~eDKQjX zhXzU^g*w=F@c)l-VQ}0MZY3CX0aoAH#(Va8m0oxLe0`BZrA}5j}IZY^yuK?`ZTLAlxLYVK zA6FB&3mh1Rwbsd$de~@(uhnXxex!jM82WGs0w!^~Rt{?0bMvR15eh&c6`p_=G4qy$ zio;_wam^hb%+-5c{*qr*nNE())}rD`AR>kwlt^Y3B~u1euwjKz#`S7eK(Vo0Q)N@p z#G3_bohNTy8nIT!9A?lL0JCM=IABL)nsILVU%f=mN|GgkXeF>rp6Hgj0d64TN>5`0 zI|9IARje9Ol2ReH1b6PeMlsfXXG)TDZ2|QJK~2nr2+0{7Nx2|lyWVAJ?XX@c9fMP8 zVKR4=e!NW583h>;13-{~QtqIaMCzuz4b$9FxP~?zu?G1>3qagN;S$@H@jWVEv?|~ zRAHD>8&MD~3PL-K)J4$+1VI%f1td~MfJNS(QWeC4fbD3&(*m`u7EVxwplK^0utq@; ziz3BXDuA=92Ngk0n2IRZq)1z2j0e%s?+GUYPF<)OCe{a9$5oNF#>92Al59@N0z1BM zgSIq#*V=Spm=Ws+GNf6?wq|h$pQz;T=>y{|!~4tmR_c|A-K=JDFp6Ql3(JiI z>=(rlmPA6uHs1pY-(k}e_i%`B*AwLtkc3iTUoe&AIwN6mO}tdFVuriASS%jp28(?# zn3e{(9gP*sI=b5X7Y@p57<-EdZ(!y@-xBzVpXrJOJ3)*|(bVXcgz4y^pyp#2fplo7 z$>Am-77W3X{@M(D-Ijpzvn*b7LRkYb9(yk?+ejmRsjmeW~3;HD2pPZ2%{BI zB9UOSEQo@rqQ)^+D#_#TtTcj_LW+~7U@pU1eHrFg(EV5S?MMyH8m%$tbh;np9K*B214DV2m&WHg zvuV26%c>xi5=I@C$ut-!3(FRHh((18N+z^M#^|oYOn8+;TEC$29V08FQ7NxA-d0mc znGKxOOOeUtQ}FMDwffflI!z);E6RN*tKJ=a=%S;ofmW-?_jTR4UCg#@J5gHK3HWO7 zee(p_Jf{{%QiUlzZeJqKC*8nv7~MfinXX=H%XnaeSc3?Vfe1GcghOA;&GuVs`JD~F zF}TT#UkP?yQSoF=C7Q27+X;#2sGiugiLR|sxn=x zTf2U=%%#^=pNhL=Sa#w#h=L1M&ipT1c86Z^c5ZRDxSoAQwT*F2hUdBXjN2l)u^e8>@{rEr|;ag73eBL zbHOZ*vZP`=>$hM55HLhFhC$I(Ahkm8oi}ssK=g-0gSWVfs>NJ|>FVLa$32ZmR}ILa zs&yZO+8#TCx?|&2=$nuKSYO8EeXhc@abNQ6hGa}JmtYCIU}FXwO60s8&i2N#;b|gc zvU+FdbZax5?G2{gfdEPbKvDD*(7eX6>1)?^3Tg6-K@f=vB!JAkZ?wg$n{~8(cVCRZ zq;d6qjoI7%LeL;#6gOlP>*6~Q(}@Nju3wC>U9gU8*sP+$J4vPJ&mhQuUjDQO3Qh-^JbS4R=MLB{O z%m)rrIT&dJx)?8ZS`rKwYwGpR`LE{ooc!yV^jwM#n=Bx#ywwy>E*KXBN;40GAy(@Z zA(Zt33+7f#Pa+O#LUXA}77C!Vy=4#)izHYABFLnQDWsxBhiJ-@q$?OgKp#=;{O@~q zJ^=k#OV@jHKMtuGd1vRK)($J{T#E61_{ctnM=Y8pF=p<80!y znc`je8Z(K`+-il`&N0uPw&#Ga&wchhZ6j;*Iyc)l#n$|`9LDQMo$oVQmCrNJdRu3f zh57By`sa>Zx$rr0jknJ_%Evuo`O%8MDjcr)t*b7SzI$9LGg;Jftef!nzWQ9PcMpq& zyV`cv*W+G?4 zbHq5~pF8b@vJMm#t)3&E`_^*~R@mpZINax4xkXK}g(6GpVV*mM)HTiiiv_Kz)XW&F9v8hi;KQ2%aw@hEhsy@P8+Z0IN9 zRi39wW1(CPTl7-$pD|$iF3U=`_V?&w)9i4zwvMLXZLN2+-Y8=Z3_$ImhLjF0LxB)! z5fA{tGa;%nA}6CUI;_}&C`2 zl}parI?gO;a%HJ!6?}}#@CO}=%+kFyHQPImiR+p`@~5Wjv|nWOK;@;^7b{w+6+j<*GV&!JR8zgcVQl&6iyu~iXnk-7&794_D zZpV7n$<+9snk-y$Xf6n?RJ&2NVX_DfX^T@zL19(j-V7Z0czsR%O~J_0r8>9?d|e0?g(IyljnR29c@;*4TqYZATXP-RHrY=L8?9q~X>>}RNteG9#YW>9 zz?^MUeP=GY#bxbro9=VTR|}Nf5)M>us+F4LI`e_Zrk9WFIJ4zz4n-rfFdyS`(SUni^RvHnj-9X2{E zT@7aV+N2fC>|wV@M%$a~B&OMMUu5WaK@#v~M6O&I87IE6a7T?3&9_3N3#jz9DtmU? z4rRLH>$?t2??Sg}vnt+$h`QCddR&FR{dua-ap~NDF47hiweNMw_9Zl>l`>y?b5zz(7bx_+@FAou1d1Xgk2U#r^ zp&>|K_FelSAsftDsSw;*y;f-WD7M}!9eedg#-aq*^5!Dk(%QcN=O65dcu5pwduI%}D)3idSdE|o+>HUW#DIZuz> z6D!Bf#_i#??`ccCkC~`lJJ4+6F(GYiR+Bu$4=oKHjg7Rfav9kuq=bnTkBw#Mgb zwifd~JR$f7oa3HF4r`$kssnzL+^C27we@YdmECGLQ|0q{f~C$JwO0K<)xw%)ZR=Fq zdb0R`*WWiP%v^{!zREV_@<+uWTLJ=Iykv=~+HAuJ4QTCb-8@Hvdu~uH7$@z4`9V1E zo`a6U&hv;D5wYzOFF~IC#K)+Gzk$VWU$SDwxRU_r`q^ecwC0U-P~(o z<(?zwG2p~&@FmMoEe>l`Ih~?BB21k3HydplwxT^tjy^N$NUhe2Ns;e3hzBE-R@b~S z&tPY<3*Id6Wtxb5P5wXoF6qS`eG2nB1f$S^qk^ndf|%xN81Rb_=U- zP3*zbj4(fMZ_5;e%q73(ueX7`Y`&@{9w4ggZMzUrJgm~2X6MNAkG9^5S}%dF8nakD zrV)52t!{@FPw=`c7}^`SwW=Xm8?n!3#K(87LVeUTBL)HAKG4Qj{6wbz!J~=t3~ckz zveu0~q8pmUD_(Xr&0uiLZlSi|Slu{FJ_~YOC0Xvxs;avReBW%GjGlgJ2$4ptK=x%A z_TJ;|{N0U}fA6+ndM+k8_D#kyR8z5iPv7{xE}tKO@-DuCImiEvSWj|s7{AhNXVBh~ z9i;F6sCAxd+}rQ*mc2|h*UR(!We#1f)vlj=oBuIb(dxWa(F%H3q8{f}Ht(SL_8bf` zvNG20do`?k1I^Dt&CV!P5H5Lc>u;^$O_2^3;L{oQIpwhLyX&K!!e$D~5J{6tYQSmJ zUA63o91Vzp!WD9#*&@QLwxaqtF!PDV;puZ-+Cr1|s56gdI+6puGM}&#Rk2Nd*E0_5 zJ9|@~d;9X>#(ZN%w%n}x9G76mY2ZmFOe5JOgaHwhNAONtUqw;=led0$0DuD^W+3uc)Ghoes>gy<&UDPg-Ne8*b=G|yJnL1LK5Rvur* z&oQVI<`7!Np%IuVj6tPd)nn_cS=FqSN^eYXOfOXek4?*|hQ1nT`Gg%|mblz;3y5Rd zpSC}rrN?#9Y%#cO8XmSbmA579xq4X*|Kczz{dF0 zJY4Rx*84x&b~VZR?l^61@YAH5p{6R7efEFr&{?PLlN0ezxzW+<$6)NH(pR9aYvF=ruf$vM^^~z07=8jO6Dt51Ju0>Ic!f5+V>F!>$@|P+1E! zZESUj3(oK-+`04)f_RLy<``p&Q*wOsGIw)rlG?;YoCP!EFXkU0Ue4Q6)$sO=tm?rY&5)(bpq#<`*trsIsG^L zsq%w?(&eCsmK;zw{TF?sv)xr3uaG?{&Xn9@E_qGgAUfe1q9@A>aIZ-tn&_o7J=JuYjj#|X$kTP;sUUcN67ac zgmmhyaBybU>tCklQ)T*}W4~Kl6W8h*I0><|(q6q73ISqlG_o|=Ad*9z?HJ}LVFfe^JblhB@2}AyGzTdvjd)w=qu0eu|C@g}# zwe@`di~L?2a6w|u*KSPe>D;-8OAL(Z@Z+ICQGX}bUen)mH`ECL5=g^)MQgb>Vo0w1 zcrMTlfgTUlV_p>R)bst9={#y!k`hQHb+q$4N09;{BacOq`q!K1V`7FLi!iD29diBJ zomt$QRH^hld>a~S)-tH;(2|E{`X@}JqTR54s{xEdx{G}0HY=sp#c987}9R5@GG(r|<0B__OM4^lY6EL_GgQQUQ!c z2!Rw>2+U~Np^{Ny+K799WqN0}ur_~ZX^e$Li3TW(6ct4kj$0dTZGL$xmXuhC%GE?t z+9<18Yh|>yQX(QKD#(c3E69x{w}H4^)&>Ef!%Nh#4Q09% zZZvJ$7e0V$>jas&Pn#)1aniJtH`WqnD6BGZxRBmkzQ&^sYg3GLJTqAh4+duRYx6S$ za7nKWZO{!N}O6UYiuHb^{_)fv3Pjos~p^1~7mijrHWkg;mCYL|C7k zLULaZL0m8fi=`L}u;|5VF))t9rBzUa4H63V0>vvqG25*5Q3aYsgp^MBlU3U$e=@z? zKSJCHWN;*sNC8gv0IJzr5MiwZwUL0CQ3q)N8q%e-6K?|TifRKOi4h1A5@*EbqP8H5 z5s4it!u{-@x;9F%gO)K}C#Ff<=ge z?>InUS&Imq(IPa2TG}?y5fnxd5+X>6D6EBH($>Hx6JkamPS`;RqLL^ILUe$$dL596 z=I03khjE7v9EJj8Vbn}QL(Zh?IP)wG@{9yKn^+tu0Z>LH2ti2*p#YC!%lcQI&bkB% zq#ytwk`P!)2$&_j5acengP*Hy1Zvk^s}vBa2tkS|5=DX$RD!S|i6kOMEQ~@yf+UX) z2v}{xNC{@bu}KJ|WCe&37$F!;SGX4q*a#S5EZpsrbDyVcK;plL4EW8-fB+!?ff*a? zh7f^JK?D#y2nWo8dd3hWj*&EqO16Qdi09ij@YjeWmaWx|lv|)kphQ^_^fpW6>Ekn~ zYJwp1fpH8uu!QF97{L`tj70hLDYU0Tku2N@Xt6O08MSGwJ8a)$Qzs)QyGdgV zH4xy17+?|STO+8+WYkG^Q2}804K$l=J+56QlP$v!CA|SnohHy?;y@V4a@qoWk0@)M zw3~6(8%f@%3`n6#{Y2zv2*ggSHi5VSqa+kWKLtB9FjUZo`?CE@L0G6s21yy%rDr9f z_)G%C1|;}wv7Tj+D1d?sBN&R!?D8;ROo)Q49=MfIi^kr~1NAHw7kCM0*l4c*r8brzzDp@uxF z6rNhz+LNP;YIs5N-H%a>OhsHH2%?>rpHuBzby3dnD8n+2#vFKTy^VF7+(K;bp>D3d zJ1e}41v?;B6pH@x?Uui`OiW8@L_d_?A<$>ELt5USGfc|-nq!{Qne=p;Nc<~xR1oy6 zp8MRw=@ef#`Wx(M`rp3c%;yv~<~G^%jz_9JuJfvQ^Wmc;_7;j$TcjtlXdtj8QbUV4 z^}UAN#1<(86Pz`QB&;e_w#rTnFif^uluKkYY|eGq$XXZhGcp_UHgY`10g2atdE}|5 zkFUJB?iqv>NUH=!CNQAECd*2uEvkt}6-k8@&Yi;=C!9j|Np~pBO2{yQBhRoXsUQe} z5g@RT!92$R-x8h!a79q|?2^QYJY6G{{I&&W!hY#7A+kgKcvzqe1BSE7^eo3_6^OPT z-7&>o+)R_8fzXL6uvkG5fq2G&iROAYro(`v7mOe*f{G_|YC+((T_b8+JLi^DQe=qW@$$|rmu%S@L0!0!; z9c#2_<1M|h!5tJdfWkCg2J?Kk(G%JiL3NoJ=e2YV}tg;K&52D`tTb@LExwh^<&t;I42!?0p zsdm-~=n@3dCTZ~>UGpBh^0aWttCIy-Gt;E=>FIkYAL{=(Z=d?y zs-+GAw+Sg5e#ABplWI=)&t9PWm#+MPSksk3X_rv+nHbMH0E4(tA&Nw9^eh*8j(XHc z6;;ey>zv{rxAVatX%C&_6}Uq1^Z8?pla&Z6z=ALYVG$xAERjhG-md9^zjW3spSy%$ z?${5p&S?1d?+_VJ%`WYF1ZEt>92C;(Kstg@vMdD4f#b$S>Oy+XZn)PU0^J3gkbuTT z(ti(@nh-d?7bS+2L`c4+D*!o&c<6a#D; zqzrzQ4L$8--C!!rO>Av}$>MYK24mM$F%8teUtxkIU6AS2umPxV;$p ztxo!)y2E}1LtA(%?Dbxw)_!%-z)CD*=d=Kr;rW&yF zpcvri#JVAl92x82UPq;aU0njO_{1k40)gKkc3at42l>()v0>V!V4>?73hsyFy_T%e zY=?x%Vy9@y=u?=R#1VoZjQVDQCil&xJ_Di)_CJyFe=BXbznUGrY{U5E1Vi_R!FpZL zQ_4qB-()EIf6)7HFW6{yf;l%u)cx2HZ&B8vr=ix}=or%{VNAs$%y1r7wQQFu6|&?Z zbUv2v^7V}B>!2Sy5^G{lhdLKdVb&x*Ca&V{n9M%pzTp z1S~KP1!M{j2LOF&$Bzw%EA#4i&NXAMaGxljf>aLpT<*>C)#bgudUx+YkHF{5Z-0x! zhhuZtjQ;s?q*N&igHLMt5n)O=LGo%H6-hY>C&y)lLNe6#a*{f$P&ywL|cq2rgF|H$BH@?n8m6jM~*}nRq zJV$)*7{>waPvAj4nlKtr@OBQcuax3g9|-Tc*m+O4Ne?rVl0-yenQtER3i-WQags?I zg3ZJ@`-=R24{7^XIg!T`{WkS>3QM+XSShgrfH~p?htQO;L+&gnFS+~t!A5b0ia^1F zA{=dq#AFrTW!@;?*EZMSNla?V%pd%L*z*2_ze zlJ0w+UrDeWQgA|dNO53u6QIw&XEmINg#CS4$H7Yp-xMF?U*B2!3bg%kN&HHK{F)&Qc(#|yo!;=^4^pIx9_Z3WXg4`Klm-F$$#~2t8_+8qwfsivT zX~v=;f(+*Tm!`nvBNO@dUMf>$m4~E#QbXRM%7(v%U~?F0^N3hS>;EqOAFlB5H)j@0 z7_xJzL4UOYP!NM5NGIYpPtijE;hi*-6=Fa=Ob&dA79xaW^5?*TtrWT`A8%n<*Q2+( z{11`ef3UPa>w0{(bPvsP_ZreMHm}9N{!1~M=-0lpr>hTYY-eY~XmL$Ll%YpI zQ~(j4NfTmohtvJO`r4loxPLbO!?iNmldWeWe3kTLgx0o&1vECf*hLNTZ&>X9l9SK! zH5)EJuJ7(<`h((3F@zil#G}db+mTHV*~b1kq5n`ofMk8DL(_1;;-m%%9HiP-uQY8U zJPXWr6a#|=LO_ray_iCIl}1T*xP0oh+eT0Cp6wqeTAjR#cg$!|J>IERp3Lv!_RS}r zLa=WAoXK+qZ`^Ug+Hk;jwznqDkBEN9_MI$Gv|i)SLqkihf2df1fk-4UXl6dLDL}9q z8GQ&41}~OaFnRpc)e^1@_%$HqhH{-IUZujoy6 zSJ}mc0o;AJmc@I!E(MRIcowmjrPHW~Qe`2Hr(CDv#nw2!N-?O07CXf%1(Gr3s2nln zhvOI}t}^49Ci7ZnQecqZ$+tm`&h~Zz`ZtiIp4itvx^`vGzC4|nj%cL6+~j^tZ;f#X zj8H*x@r(d60zLXUu%QS%pin?jK3GpopT}X0HW^q{6cL8c%Lv6J1sM?}k#!;-z76PK zNYFv)tzqgNCVY+I`#Z85BBUg) z*|RY^iQByd@fd8K@_$*xGa;QjDB1?rH^oYUd^Z1HklV#EUrKtcbd#vUpt2|m0+C>B zBw;6?``_00oh{GkY_am(?tTJ4Jf0`8tXIIFVa~RMc=r|IrvwfC9XTyzo~p#MY5k!CJ^Vccy(l7H>qEP3B`2UUXthTPP1zY6E6!*eY2XQ{hb99UAx z?@vT_c**VIZ|#j9v!w7p3CcTIv}8>u1@HdAIVc#MTM(PE;j6hM(hBM2hGB1pmvfUH!CATls_p;aR2HZu+M zLhz@zLxMx|(L9OYnVE)GRrZT$NComh`qq66+mDCeciBWce6TRe)Q@k&{>A$JKNG+D z;a^W%Fp(sNp3Y><(!g+7uGeIdi|Np)N7Er<@@+SC$_j)=Ac(3cq>zgt1W2n71o|&7 zb7sUgNI^kV1%jxEsG<>66j2co-E9Pd#SU*kY7&JJ)~D2S3ME*r}x7-POy6#2HmE*c^rIa@C|pcalonbOcR z$_fNo38X;WVtU`Q|7mB`-%rtstxi87bL;FR`??2tyOX4Us}6=cKkALxs!wnHxx-LR z&9dRIP!p#x5Uz7xC;RtYf-Ix}5ivmQp?pKr{9DdHHK<0+?f3n6NqKpvRp(J&kgZ#K zo__p_2K^cvkcWqLF+A2?GmsOG=^9_8yYIU>ybY#SUJ%ACG?EnwA3@Cn&#D5+zu3EP zsWt+Vpea7zZHxvgqM)P{iYkK@f+$F^0b-(xilaF>Cc65EyVnzhizgx|N{G|(e&;v{ z5%7IgVR57Ee_H&^`9gP))%sqw=5;A1Kgz^sWvLK!=_(AJzoWr$h@Wx52#m}+h+w)) zFZT{#9RuZ?-dF1@RBQ)^X38ds0c7rR|28pj^GYzqBLS`SM%U7%PKWMkvUtsH+u`RZ(K2 z>-s0xeJ}j|-vJP!Pyr+n(DfyL8_txhyR^+y*rgeGmoLIWM_>rke+SRNLuT}Jak>iN z;5#+L(kS$2#@!Q*D&W59ECppayN6p|&>XKrQYXBxcRZ64dY=02y| zyu*)L*$jtUwRFt^lA0Fj#YY%@~SlVL(QltgTo|lOho|I_-N(0Yz1u0StLwSEJsX4~M@4r{8OE zO@THRxk96cS?lG{H$(HreirCq4A4CkgpTJ~JJyR)hxFmv%fMkomU-aKN}F=5>h>FG z-16md#tn%Oh|kpOl)tU!fd~j>W2P8clisI@w+1ZLG13GG*Z?BXF<6bcMw)@^PSSE!Q}mS1zdy-GcYUh&EVDi?tTWHENev?-j_SN z?)KQ+wMUZqKeCCB$#;$0(JPAX0${)Go6yl@8UT)`Z@h>ETkkZK1nWRX@*p$rjFiEZ zdrd9EqGt$c50xn)|`phn0O z=18AzqUhj0uFDi+qO4U{j@RtzezVWs%laFA$DQZlx}`07Zx}Q^)L>X@rWv$Fay`n4 zDSKq{EK%@#h7h6xL)Jj}_q=AlVvzH_j-E|*tmJ1GXN%!K0na^Qvx+B&;oNks=FqM% zZHT9XLZRR#N6=V#Z#fgsbNXMQ^gf7THmpWxszsCEi3_ml9SvA?EAQynmcEa!^LLav z1HLDT|DNM$r&9=6BwtF9u9%iNtS>KygC$eOqp!we8B5YMXsYSX<}r#uC|?~mk>qSu zbruBVJabH-wy9Y)r-!1bEo`-Y<3(964dHECi?yx9DY<&Be5$9F!n}Vy+QDJlZmSjx z0o1nJ^VOEQW;xnI`OxX}&==s=c5?958Ipzt(AkVZ8eV<<=b+YQHrEG$9Ja~2q#C*^ z1#%tIRIJV&owBvECUY?Jo4wY{UhUz|X{#)A(^hIL+7<-{onb9MXPC*^Ff<9&P@HRt zUD)(a(%Io4kG9{WPMErxs`pR^r9y?MNpV7}{U?ddt*6g(Ty;~R%LHI*Nh$?E75vBdD&EkZ}`3rE93SqM(;- zMXf@cGTDk-%a(LfcKdbVejW9R!s&~4RDKnSuD3+T1;4ebYP&4>;x^qBq?1hVQrI@g z-fI|x9dN5*pTf?H+(CGAgBnE&farAXWX1QBFFMs z$2Au^4Oc;d+~pJ79L{<6b$}2p8E$+X;QcJC3kx!Oiv(Qb$~9jP=H2fkWslAD)2Zm; zgsL{?- zi^1^NRwjzT>}ZapuLqrJj^s7=A9al9Zws>ex>`C3Zi`H=K9*b{yGv8*erW;wZs<$x zc4jE9)o6Pk3YE!h(a|Txj@>;m-hRgW1d!D##6kbZb<qo`6u>Kqz&bqJ4%It18htlS1#~J~I1q%>Ymk|HQMM6I2 zC+fsA;n2kk;tYaxkpn6{ghzyfm<9r~|5i%;lhwVcJ~{0eHecyXBVOqMPs6j~#NP4-80lU^ z5M8pT1@`>sRH4^?AM#uIzn}Pfe}9+bfKMGLbPI#oP^1BLX%RLC7ei(2i{bpz~c^pE%Ue9c}u)!~_1eVd;CmyJG4;c(*q6?j*R6KoGN!+{oqG6UoVVb^k*!<3pne@W*ow0`lb`^PDbsjupwLpW-v zlxIPXH(s&CHMoCI@=nQ5aGs8zYV`9%v0gR|zs%^v?y_^~=R$|jk2~T`gVz3x%R@~t zssLE>q|xcQyn3(&PPFSAoSFu59e2`CV+^&vxA&B25?K(ItW%_PY?o` zu|PB^F$p=yJnux`!$EnYJ5QoQ;X$m?JQ90IGFT+=$-d!L;Hi{!o7_JJ9(?cb*=20L zb`DY4&Q9&(Uy$jI$SQBb8xe(3QmvuiiI`a$_(#l~Dn|Wrw;VPXnDO~soUk6##P%1r z#36$DW}sk;9mqm#1GD_%$BT*ils<<6Mp4|M&R3B&78DW0k9>6;0$q~RO$&cJ#@1PB z;)BVvm2nnWVA-Ss@K&~+b+$UTiR`@NA!z8Ux_p${ z=97p=JRkAXYIBnw3Xk#hZI4`9afr4+YYdPWX|WazLV_=CflLnJVD#yUw_6}X$Qi{0 zhazFDLM4!ZaiDgHO>gPa+jXo}Dqa-=pLa8{0`l{VtChs2=;r8rJXjph z`6if&-zjf-DkqbYLt43S3$oU{?Uy?K?dvoB#~srEYCx60`KoCH8l6H}&(mrG_&qZ& zFVi?6NRQ}fH}NlF(+Q)pOI(Bq0pwPg+jHnX42N+3LSspG_xTU!g{f)kYU}`EXb5pm zYPcIi1!wjVOI+e=!e$-7dB0N2)q<7nuU3``&+1>S(RYJJ*i@`v zwP8fZR}7;BVvS;y>Q#StbM_7N$-HBi)7y;(Jnh|jxUol?AVDZnPR6Lt^BuHLmeZVq z)G^1VIiYirFlwhbh$+N5FdRGcvCK>jQpU?U zxOw6xcM08#f{`{^8<(zhT+eZC}cr4dSjb# zjUog647jgCHlws&0Mu1Q?n`aRpoaZ0)qYcJ&4fjI8=h#WJdb5_vR~o5SV6j?>@&wV$S@5DRz9jL8{EO3Lp=ofF?KBi`r|xHk9{#ZTmT z><(QJ>-QT+g~`s=trV?G5v%7e~MxyvE2Prg*yX#Qy=Bs)HL?q(&)RXIEfUVPRgfiq8yuD zZ|lk+!N{aS0EfHDNWW}|F-w(+JLOU7NOgA?9Co3Ur`w`&?|ZJx=s$g*(HyDUuiQAc zFFz7uy#AJR=x^q{Qv)f{dJOM3VU1NhpgUPlgVTGX+gXei!i1H3FYXWsS{843ry=oA zl#fnceWG^BoMG9`cCnS9U?>4GRdQ8}e3C>M_6hekDCOk-7DC}O7!5`Ghh=b^;U0-T zifA*2Y2s6Fx*prgh)y%O^D=Gv==Q1;kL&4~Em%bs2%{pS6=M}h3pw4~zpwZ{)BjxlU*-O;e4c&Zi_hk< zMj|5>Rssr1myzq^Ny10eOu_WeNo)Z_sFVFr&R5KFCEFpu`RDhaaD&z)588nH&fQ+qoaehQ)%rYF zES_PFA>rqGThh+kl`_=p15_35OaZNvcl@IA5C)_Gd@f&?^~$ey!w{B_xrV#BtpASj zQ1dNyzl{BJr~N2sTz!qAqspT~_NtY~g>%0)*O26^aHdo8Xp|nxsZ;~He>q~{{>e|+ ztYnu{av{kWD6$I`V-bvvMT|3xiShldaHyTjV-L}0hv0>(-Dx5fhtx9}3`ZAJR~PxHo z%76UpXtonO44sV#Cs}xhPL#-hpdQcu^g#fZ`az$Vx82LHbbjyTcsKC4M=uax^J{5f zco&P-iuqE75WIn4Jy*W{`+orS`)U4MbsUPRA%abi;Ue&ZB?Wi*o`mL-of~UXOQwat zfI=ad+5-r?FoPkINW?NhHUz<)u!NZxiV((C^DfdQC@IFALW19aT66vrbea< z9frnlv|?f+?_?I&J7JMESB7!tp*llY$LXVhE=>5*+Plbrv4A7AxKe}sK z$&Q%0AD;GXAGcmRLiG=U)HcEW>m0%9k_(m@WJ7&&Uwb0m<=xM9E|OR!$!-idY8rHJ zwv@+6(=G*79a8C7YZWNDDs8VI>yqu6xp_9KxZ6sitfi!c3B^HVVq8Q;7z9B?fMlyn zP-Cz{z29pMZelBGZL3VCDrMlemn!XMw#C(HqLmEGTE|&Ia*25GyXbao2?+&efwE#y zM70LOO|6N)kKW%Hz%;KWR4WrKNGz{J*e`B}!S5DH=dO%SqsRO@zpwkxSMytZw*2LK z5@&XQoKg&jW(j;J|6)2dTip{DB` z2Rjb4Q;xTFtz0^$jgt}4%Wioz+bO4dV~-OIu|=>gvd{)lW+4WUV*f1JsYa=iiy+x3 zuuZ5_ZE!7}yEN~sQyt|PwZ@k*F%@0??Q%rWR%sV^4W}LPZ5551;_On4Cjgy{!k*_4 zFCvL{h=@@LX5iD38m0&;$dbOvgyc+RM8(=Pl4`|3aCLN=j#X$xM$D+>^*PFek0tSlv#QB^dme{#d>e%siEU@7lOj=4A*->Y6cK{xl#EO(Bppj} z)`t=vFEUh2%)Bj#fNzt7X4}>nW)c~?Hwc(=w&k?Mo1NzsXevcSL~BvgG93aPsEidj z+8GY%jn*xQwv67@L`=cG+NRK&Y(u1Xb5!Q!UK;!edDvp&K*~uWSv1ip3(%^7RpDQ0 za7~sH!PaV~rWR^?sv`{{T2UrUPEK9pEKI0EYN^qk`D$Y7VrXV=XGih6K1SU)>u;`b zHz~D?{7&I{;v%-0tl_no|W)WuE7;4+eO@etR)D*x3?@b|AYX zhDv}=X4%HO7_q%F5!|C$OcQrni<+5Byp4#7s9_&dd(<7&VlHrAYWJCqGl_}2TVE;0 z_>ER#_3Eldv#`+9Cp3%M3`c!?yNSKWjCwm?EAhJ>)^Cz52E+nUu_LN&yH?nNBrrz= z1W~f+RuKqVrMnYrrHDeW){H40n8~Yj+WI|StJTK$z{QPB1HOWgK&#P)Po?zTUphRF z?sPgi>EC_a5Ma>~*HI%P4VmaSV$h2aWb-P@qcZv^CJ`1U8o(ke4Uj!;{F~F0m2C30 zy+`rgYO68e)BYN~9rxoE^TsdeA5eB(5BFbYc5DQapi~p3CRmy2_vtIMhEnCW%Z-U? zWlF8MT<&uW_stVwqO}VhWy?$uxlC&-k9n3Pc?1arNYut=+c;pFm}5Y}BuPY+lp8KV zmwSfxaKmlgRm%!4_q)+i({-}gfWt^1R-8Z^dV8{cVbR2R4Ih-@wV^|^yO0sG89~$o z(41*24uh-dk|n4p^66HZNNuDsHY!7euvYOcNJBjsWY#fR%=FzI8%9+!ow5}Mj7&g= ztZ36#G>{V%VkyK#mJ@Kg%%-kuG09cV%Z9mlbByX8Sj0Q+pDIXCFn6Z{)#%cIa{&@b zBts&HY=_48N504Aax?MN%{8Cyihc_qKoK#pbtpt4Mo4AW8u4FnJy;WPuyyZVp78@s zsQB4*SawiFeqs#a%sK@}1e2njH2QRSw~NwuGMA$!KH^~CQTP~C+ZJimKRN25=vL-Z zlt(pHMalT?GfrtuVrgZC2i~lDEw!V}yl5fkfQdY!yB2x^C!qQa8K8PmXcgX__na?{ z1AEQyI?*Qox6`OOszJ3esDS~1ux5Z(KUs3sTUKa@v{yc~jC;J?rCdC*{fJ!yo%fG= zF$Y}`B`o@t4yTa)1YO7QX%9sPU32jEgdmkID7biyoyMo~jOMy;iXX$$$hLMX0l^E* ze0+umK@~4T?U+}fs(0wq$f{d-&e^qpRN-&{CRMl2o`)aXKI-;}5XB%pCrJa!aYUI- zuT4vYQ^<;dem)8x88Zxuho!tn-=32)9$H9#)31hyG1i$)C&W*_Vrf%1Rb!M->PH~^ zbMvRKJncEbIv?_Km@Pc>r~(E*hXzM29eg#A@bG<}9M-3GPO2?rSoU+sh_LCO-@E0j z{*UcV_yhrb=WA$sUKm0I_gA{!he-F!oz0^ws?BR7K6}x={< z{@YJ+SDvSiBC=LIRFG7@z`ye{Fu9lm7L22CtL%Y@Ap4u?8Bl^L)-p2aXZw;#B2v63 zyVxq~7Yoiut=WMCKLca_^{bps@1=Z>>Eq*!wnb0C#nUQF>=*0r?z09o8Ye zTcs)Bm9Cb3=Aoe+WRfH3g`7SvF@7q1HN&m`Si z#%E!V4PRg1oG1#B&!pFJ7kUQ_pQi<485eiXA=c#Yf=`@vU*Be@P&NA05PuP zZf+K;<@V-i@F<@ipX7)vfa!8Pf>}9bML~vxV0@k~9?J0aokerKr;}vL$iIsYJPDcn zxCOYq2khHK+K#RCoH$~Nre+ierajrpW7-AwwcMe9$W6{A95LbO9@HjAILKh1fi#uo z>^Yj#xmzx@t?g^3jlcmA8mgbT^W_JX>ZwLglr-iL#RNP<7L7&j-g{K5MH?&Ks zmXAlzl&T*J^(yqlWHn-@3jbUZnuNsdwfnjH@Zfm4?ick4Ae}+OGC+)->&I9qaZ~3h zzE&TZno8vjPOs3P`%W)iK9lvl?3LtO&S(W*BMY&XNAcVZ@3hD$=9=bmupWd|amPVF zjs!uwxKlNTuLw0U8u)z0blU)+Tw|Ji@tE~9EUWAK)H^kT(5Aq2?3d9?IVm^408(LO zF=Nza;JfQeRl{Zs8~E!Msqp5U(8LB1{><;FQeHiwReuNFgUu!c3`(%1F@r0U#^0&N zW+UmXKl7_k^M&)aVf_}LrRS@xZ=PG;b#M1ZqJ{1&RsjR_b;=etq!5_1K%^B^y`Zko zmUg~cm^|?ig{QV;-Z$6B=r!zh391jzosagi0E0`PLC~~|i!{i4P!eT+a*52#^Hm-Cp$n7ejZpK3w|6Afk~}f$x|q!DJQ+RuZrkNe_|_V39yZ5Ed*&Rzy`1 z6hRP~lKo$l?Z08k&-4G`^qamHlk*0gL?cpDMj7WtAf)pnqZTE|+%6u*4=3VLiNBjL zD}7Ggo4<3d3iJr;l4Ju02+W8JbT2lyec2H&jxd0F4HjPmtIvx*D?SsRMyl(}PlWz& zF>@dw^#ty^o1PxTX_eS_8|<$~B#ha27WC{QQIRpWmw3h}=OnYKxK=Ob#Bu5LUAA_9 zZ-LzQeMx9DSMHb;*H}P+&scX@tmt)0co5T#NaYWmt6Xm=c5o3NT{7&ztO^3X zqU-XxE}Tx0I57#D`6XSji`@3DH0X-ENOc&%4Mzy=wFXj#y#xpdE$*UXlrTgR4jUbS z&S=pg2qK;)qN30<{8P7e2pJ*7iZ}<0mBL9Z7qowghU$x?v4cEthL|ql;VWtr_3t8 z;QSCU?bSr`=lQ=6o?6y2ZR>7dAP-~=^s8hsQnnP>7mExVa27wDbwF5vApiiJX|#pT zGUD(+06gfM_hfWepoAvwE%1nxBbmw7Z&npaPdAUo^%6o21Mh{=g6EgKV+&%IG?5idjS}+lZfM$H4ts4hma~@Z(`b^4pj;Hxd|N_58_JB zENS!P(1;wj8tZ?4RW#NBh>Yu6vbQhoN}Cf1rP=)&91B4qA8IH}fQ5`*sF{ z%!;V;!S}ywq3x9wsU(?yzfZFF$lP1Vd55#TgW#YO^B_WdPyKhMJ>GDx!bcaE?Fjj% zgcCY5C@7b%V0M?^wfu5ZVfCZ!veZ98b>JTyKbB`<=OhS3s7xfiKLFUH_PiAqyXANO zP2*4&fI`YFy6#U0{^GYHNVm3VE|3?m3&(U_d5Y|I<FfB@dxf~s5+BQVXupC`U0mZ4WYO@E*|q^bCyj0uL*fBN&O-QDg2+oi*tr!%h=?GaV&1&>xA!t z^dulkRuKY*vzE;Ce9QOyTe=M&nTMan{VO^VGC-&qQG1vUltCW)>MQ{m@O^dtVE4`T zwM>fB*G3!ovO~>ry41;;-?7l{rI)Qb7dS|L$Md*Q@}qzpqgdN5o-W zbSx9zGd*QI>o_25?CIF-cOAELp%wy?MUh343XD(z7^Frjz)@g=K|}RoUREt*Rkd zRLcmr`^=!*^kVtG)4u%J@qGUN%InUw|6LycSs--K&aPshUyh4B4R8fhV9Tj z;^w-%A$-97^Rj%~)ELLb;EA*Cn&#sHA#8sRgbR1WCh@r$rkRU-Chen!CTh!55 z0S3h|BMFM`ZvTo&FoQRKuT=tZkJq;lj_=1^t)GO;{k|K23Kj1n$5T(yt!H(8zW2wE zw5jXIb83#q-Sn`q3NU+RfKRq&)cNXTT+wdHQ|rArIULmu37ZbD_OM$Izo?v7w+uww z@6ORxAuuB&7A%0Er2$w>8v9nUVlQ&V^3ibie?Pr=b_47gI>$!`=Nq)Ylsa;v6i5xF zry=ajv<-t(JF_|T@#u#{r@p;GH}^Z?jNozVaC7`8HiXi}Vc=pIY`O2@D;cw=Kk=jv z6)IG|0+_>G`rI~f-mK#%Mb@(gxm0~qkZMw>Df^=UYw3k)4EV@3Lk-ym4E0IQ#}|4& z#V9BO2&$tL2%;#8qJpZ5D615TEEOUt6;Wa$s>M|m6^N*?RaHbH#6?j=MO9H%RaHe4 zQDCB^RS^g*P>@kjRbnEjsEVqps|K5(q^^io{X`VyLPjs;VNYq9UpyqY+hA5maJ`h{h@-6$Kcg3aY58s;a6g zh$^Zgs;pIF$cn0~5fnvHR7F-QqKc}qQALWXs-h~Ys;VfX7AUGJDypigs>Kx|sw#>i zs;Z*JRamN`D#1}zRaI3`W?;;W$jrfzAXM6nP^|kKJbgzm**6XQjd~UNRexURQP2;P zhfcv}$omCiTRVw*8k^lxwji~D=NUZGl7zftU5k}&as~%mzz^jh21JE+g_RoU}j&lhQ1d(9jZ_Il;%v?GD@+JYVr&4+1Eu+RbO7_tpsRg>pxtZ>(-lRhhGClu8 zbS>qA4V&PM-HugYK|~9eDV#Y$QWxU-l&Q|Fb2mD<9V(PdkWt<*a)}H4X_IAX6kBh( zbh}Gy%Sf33p5;^;{O=`Svi=NJGhw(mINhP+?wUj&$6uey>Sl5rrbe>;CMNwKEC1M# zfP;qIVcuidW#$G$65_vD@4+>`5KWM;PJ{RqfWf(h28?A;M{TnVl2@xmQwLiCVWqu9 zup5Uy`y0J%pEbYxEVIpk_oMD@xX#kS5gpG zb%d=1SAT*}(&A$>pIMo!MhgXINJG9>kzgm%=MW_s7RaC=W&o_wXV2VU(m>ZR-_|FO z)gJG})nd=*f9kLr8=vwy@uofbvKe}gA~qDf8dTp+d`4*aD7LY!%s}$|Wybf2Cx`eA zh8<3AKzZDl6I=KZI%r117(oc4rpmGkm8;esoTS&LuF)E!{{?A*^TijgzLSjkPv2}l zH$(1IlEr)%?iz+bKZT^%yjha=@(G%by#lhJ0D+jC$cQ*ZKp7DmA5ilkdfAOH>eFeW z(H%>9g7sYe0H;4d^eh~1qE7w41HjDTG7-mb5H^Fe&hYZHnQGp(R^D41_;nfH-Y2|) z_yQ;+-4e%y$BI3}+D`x94%5dL#jEu$gFOze*lH@;*&@^wW`T_h?R$1k)wB z*o5N{A&^NxqDsWTg#i;_2}!ca7gpM0NN7x28A%XLk;`^*K(^qxaZxaEWx<5wWS(6V z!-Wj8QZ3Rd*ihspB_iFgikU=Rj)Rb)M-O9h@m$u~2KrmNQsBE3RnW}ExtJ#LeC2Ly zAdFd>YUxC$4M0u8fYS;e^Sn>Rgq9`;B!Bo?OU`?Ot~nV}mX1i{(0X3BOX*@|IX z^hSMxooo#w18g-8PgE+F9j4FT{*IH$)Ad^~>HR&HhVFjGiVr%ba9T9kg=|_a5fIGu zh^I5$!b(b-QXwlKnPlD}ug9C!pfs*fXd0$dE)7+*$2eN*rByWJ!&Fy}so;33Od^5= zcLX*~i8yNznkLb81PIY#jhwlP;b^HJ;eKaGcV&K){}MP2EyL6i)W9 zWWThoLw^Ghe}zG<6 zyvAIF7LqUMkMU=9*LfEFzj+9|?RthPt-6H_UQTaYc<~Pf&F5a&TfDy&h9aOQ`VNb^D;FK9YB=HWyBroO*|{B z3`fq#LD$mGZVP|9m&mUseihSXXd}tXhTk+zQk}luWb}9a5Rg25ZAuRI0*^4G^mqAg zb3x;bzl+%aFhIp)7yy)eW)Fl$6OiCb#){KubD0*3INpD+{35{Xo8wf*@tRlF^H{x- z|J6hYm-G6idfWUz^WA&4mx(8lAiZME!`R#xEw2+diH+aymT#;YhZr_Q3&YJGv5W!e z?YZnm)lHU7++`D}L!S2g%-NgKDAHvJemHw%o#L@r&^tFvyLn=Io~g@)@v-PnXKqPVx&cQkoY653J8@ldKc)AT+escjVtQy$;mypfJxM{rcOu`z`))6 z%9Q9l3UC-F&xF~}Ez<8q;$4086%$!cbi@@>%v>gKv}k+h?R@HO-S`z;7?7fuBYMe% zQ4u005+W5;gO~3G*vWG3)`{zF>~qY zSd6~Xr*Qh&WAKY5SsM2RA+4k(nG6tw>s=g@$M|8c%$oZZw!zXF<@9#90tlP4N zG>e&JL<;iSrueGxC%^rp*r>#?0M|HR+syr1^%2jZvgzE z`vuC)CvxX*pFZ_chW6K``o~k(W~dwHK3UE*eN-~_6Uaf*`3^{=a{hIt!-o%{`d4pk z?8wgT>sX~Ag8F7fU(6X3cl^kr(S7z^17e#bp>&=6WOrcJr6@c+4(k9`T$yo8kUzLf)|mqGtwp`<)2WXc!7fN(;|%s4YpD}N zX#V;v-!;$>Pplgd5C`|~g>rY1sCQ6Ti!zliUXglUW%rDuvkrPBXZU_O`@CTt@itL) z53;YOk3_oRat3ZVhJ9$nT=v6E)c5CX(@c^u53cX46M`8rfhM?IKzOm_Z1t?d9WusK zQJoyN+;RZ!X2*@#5wZyz$J`gA%H^y3V4O7#qxrw|}85IA1 zNs~|?Cx;ky;$ihI&&7; z=!qP#+;8BnleV_*8(RKdmR2HHZ&5!cU{_2f`JeoJy1zGWDi%}Y?CEIqOnZ8SL_>0S zBhEC(Lveo#=Fo2-rp7A#+4=mQU%$CEXJNjeG!BZ61e{pK0I3;-& zKub7`QV$eioo?s-9{2KaJ}Ieeh=cA1On^}JC7K_3+34zXu-QXA-S<9s@1^I-`b8Tz zS31Vj%%kq;>Ow*?2WJM;sR?r?N*Jyfu3=35-?;p5ck({7$KTw${kN?jr>^fhFb$E$ z%81dEDm40g?k6K`h}>py+5PTwH{rd-OYEqxmhWa)O&Mb5TI*-pr*VE3%dyPrPT+bu zzcXZiMV{)SuEXv0@2qrMN{*K=13z&ikzvqN9^|tJu^{*uorCw5QdZk?M;Hu zS+Mw`@pUV!%e&X@Hp_>y!Oy*IGY~GbJbqV+h7Zf2u|Qrr(%3v~SIre$GV?4pTfKfS zp?FL|R8T-8x#&U9@T)!k29CpzzS}JouXa}L$fodbBYk>2mv3{t?QlNVAFn5I+h11- z-p^&H)!Q)Fea+du78Caopr`0&RSkwymR&V9==&s^&R~ZCS$zNpV=_fHL&ma_KUTE+ zj%L$k#rr;30C#VV)ONtVRT7hG8IfRkq#>1+9zODnp|J%+d0Wbrq+0;IfJOdM_zfwH zJHVv*78d8~iqZc5Ji2N+E`GB;OYcu<$Nr!a^Z%Pwul|S};(sLu!>`nz>}<4Nu8NmF zKh75+fZED%c3L;grqY&WORglKf~Txi*(dKHNF%c*S168B7&smLme~d3pC<>=-29wbQUVJ^SYn zw)lyjMi-DLxpl}BZ^0@|G;hwaBDP&0x}kBpxl%cN^9{+nt_4Ku^#*Xz(kA z5@%2pSJAKL2R5yUB7^`FX(EzDBt2j4=yv|k6GyM{d~Bvx9i(pe&H4I$zkj3R@i^U< z+AFtn54-vdnxE%$Sh2qD#+=l-t`YtZy@c>RC5ys5Iv{hfBl<=Nap#Es#2qb9dJ z-A~u9E>O=}yq6XtD+zP+T;Y0q?6uqJCe5{Ncm9+C?WEF^rBF2%{B7RVZ&?Wn>iA~LSX_O239ivyGb)p)STpa29@ z%`zyE1B)J-_+;e;Ips-?I{&Tl>_2v$y#3Tpa;9$>jz-4im!#@n{99Hi!r|LB{Mqwx zFW8=fP%08p1@64X^(640NuJyGfBlTh$n&w1pL)j~@=P)fD`zO2K)!Z&yjjnI?_tz#n zI?H5`=|9PnTMasX>SEQ@G2x zj_bSs+B(a|7E9&e=l7KzZ!g;~)4Tj@#ps`%Yo+=tVvsY@Y}r0z^@Fgi=M?~99e zdE9SJxvJg-N8nxV>#7U74%_^$CM<@onnyw5OsXoQLYX8)p#@2q#F zAmL;kvJt@p+J8$mU$zC}ffH*t)$bb`&BIl&Y~zPV=XRCS+F&whLGy97f4?pwQ<>yr zywj)3|L2UZ@86Ax!bK<&^CK$`zl$}uB5_~RPhxz!sPv0NSkz3&^XRa$JHABBSWvJg zM+clYT%l{SCmd&5QP)~_e>}}R24@}i=XUbi&t*Of2Zu(>``%|I9jJKE+~IKTW_5VU z8#EW|3fNt^{r{Ty_BwhrWqX;dx4&^*sh^q}O}8e*Q~}WEl?l5SDt^8^QWoqB;j@K> z%p05V-P+OqL2kBlV?)WhkqAhK!uBwls}7HmoXGneSf}E7oG-=h4X%D4iIdpUPxo`U z8B3FD4h^CYxT)-^o;7K(@qhezU>nUQL4HS@`$*A;kLe?nkR}@dEw5 ze`mAzqtZIPwPHVywK0%FHl+*a()%!iA*NhpLqGNI^L4m8ngp3|^%PzN_;mauQPtg{ zC=V~Z{2QK_36PZGf7g^nIK=uc)3E!!P2V+swLOsPC$MkVkN!~1+L3FRO3|H>AEggI zs|Y`SYL+V*H0STe>3{P7AJ#p{pb{KM>UjYPvedoj1HRW-Vw6 z-DvmvSLTydP%Q>vR%S%dn)@@@0nVLO$ znXw?mdiPA_5)tI{?Ejhv7x8QR-ln-Y=9bj@u77sz`F-YTIerCbN@u#B91|dTMgW|S zkDCeb3R~#6W4`;${)X&h=j-tediSC#(w}59eo%b z_``nxA$ErQi+ml_J_r|sHPX4u!C$Kve#l@+XU z>oXtZm^y0DK6dP)aeLo$RlUMTP}*+p2N?M~mU>`btJs`kG-cGub%ZZiIRo_yYNE8@ z%J)aj)Bt4x9t2;_!L3_6R>u0RD(YC47**ymj0XAtIjfVJMX>VY5Y7q9^-|JZ@u^yJW_O!(1u9!{`yg&JE(dvE$e}e$wB>HiJIKf?JII(DE+eJss}z4dqX4- z_)y2w_WwHVT{ulDT>|bAVlY}vJnDpdO-W(EUnn-i=ckaxLA5)*((9;i>bw#}PlLmO z(;G%fcpqO6^iP=gIIk!;gf6!&EH$)=^L_8Dt#p#IF4FChDeeiePL@VXnn9RrM)&>B@ovU2N9zdZ@JbF1QO9mlI!^RB`~ zH|gE)<0C~Kk%b`su7CNy6AtSgs7?q%tph>sIl|V@2jyCdt{dgpsU_Z9<+_hnx^bFo zPoT=fcDc$fZv*np^JZ?XC=XP4e7)Vb-M{u~IQ|YF$&v6a>Lifi z$+7!gq`0IQ(m?sLqDUlz%pFei`X{7_AH4v6G#d&4L;)lpb1X}l*86{Z^g29v&F5=+ z34Q;d;b0oKmH0AyFQvYXFJ9`e^W&i)`X~~2z=fmS4l`X-jTQDB14uOAVi0NMKso7Y zhl-emAOf;N(bs^&6!VOpr%5yIxk?P8-wJ;B)MXJg?<#h|shF9lRV83%oqj60S+kiw zcU2D$#k=__ow%wXEYR>e+fe4k^W;{AH8(pvkbL~KomI2J=D!%{<~9{phZ}h@R13?1 zWwhGc9*@xY9R-hw4`FDn75FCCu^?CL0YwLm+4H3QtC1PE^ZA{|0Sx@V?UJmG9r<0j zW3{pC1}%l?9iS+r{Qq}34N9c8kol!=&oJtOk~;+hE;~Npa6A@yF}zC9DL}}e6l_-W z2l3LLL|jA6%TMZO;W3@O#7e&Q1KTeZH?krZj@JI2l`I8}LWR?*2!|dyuA@)pyDH!* ze1>l?Vwy!>J17{APhRG8&Hxr*zo73I&d=q%J^wZ%!&!@08dn9*x4|nug2w?(eo@`n zRv*82@uQcvHh&+9{_O8V9d`L4@i<(%f}8jxJ2UZUH9SArwlIL8Ye&AENBc83o5KJ; ziEXu0_-LbdRLGwH$3Css5*}2Mo}-qAfl;4Oe;@d`X?%P7;W3DagB6^TMWt9MsIWu! zrK&vi3iWRX1Vuku{$4_g3W&u`cr?XTPnonu6@Y?_RCJW?{x2?#D2#t`Z1wc22%;SE zNR?ur%BJ{L5&64O7@{$JTVg6BB8noYD1VxjBB;hFDyWLGC@B9&+5NYk^(T4gPsjRS zUisu)Y9V(y>b2BmIbG=5blr;5&cIej__v--g1K2O;yDpSoX26S`n(q2*MAWs7Q@v! z=Q`T}z=?=2S+{uWih2-K!p}U`ssftOTsKpj0!RmP>Sv@zBiF(mXeBH$4xx}S8>`^! zfj_;7{{QuS@9nuGi!um6A*RdD)(QV^7>J;f3M>{PfU!gr5;0MU6@ntD#Zh7)BB;P( zh_M*}P*|v=6%mSzRw$y1q9TB(s)`FBil~Arf{_&zh`sw%|< z5rYMc6GQ| zLEMCrnt{hcK37s8cYrR}njemor!$W~6Df<$@3#rM{AmiqvdUQVodyaa5C+f;#ij35 zI#!II0?B)S8He7=iuasFH`RB_f;9|z##I)Bl|!>lO}U;otE1UmuCr+{n4#2BeklbL765F!hK*e&kG*Ncr0f5JD=5 zJif+|F_DB-f7BEB^=m=8AF#YOQ0wMy6s}@BSV+2V#El&c#sGyO5IVFSme|dq{(eVtB zq)<>9(J2CvgCKwLmH`kI2*?K!vNMv{0|qM~q*4PU6%qsbq8FaDX;Ke_cK>@j-mZsm z+!a=B`WcJQ!&k(!T1uf8fp1m-wF991=%7GC4el%=pB=Z7iyz_*aIS8xme=mBMgqZ9 zE%G5kpcsIW7`tK8p)&mn7Y^^zAH#q1@*0j^z9JM)53NW?Z;w zdio)^s5aNzVZHR&y%loE*v_MDkNY*e4FV9ZjwT8!t1+TdGwjI$`2u7$NPCMBBGgZNduls>>8bd%l$2g4^^Dfq zxJ=;+%}L_P){*6*gnZ9D>!}tsEaxKPBL_ACpEhldvI0Z}QGKp`jG-6r7^(UPsQ- z_Z_+4Iy?B89iFrhR68NqdtHyJioI7d*KfbV!Y@z5xzo{Qv!m-Eg}^2uD~5L+$@~w8 zQ?S#dD*w$4R5WaF9>y3gz(XAyfUeUsi-9+y5P(D|1hmy3gJD%~X>LB?4v`CF=no+< zG=?O;3EAUYYqs$Jy|#MI$yE;5FJatxBw6fE_(y5thva<#B?dF7J-VtEHrRQtE4crt ze=)&&^P2p8M*r1bUw7ja8T`w7=X>soW?_cHpKtyl$j$*n1p@&ROq%-9_Cu6n&h{H=%8aRG%R6= zIbj=_ZH;J8e&efdtjl2LWH1x9O=^y_2(vIO!60T*=41g>meNYd??sbLbQ;JJa^Pk- z*0TYSE>hbrHX7B`qhO&Cfvb)Xv|A)v<0koW0M;3hm2$u`;N&K<>8YfI%(aUHGbpA& zSqW}2!UpYFRwP;no$Y>i_I{Vz`~PKF*sa1GwaTZJQfQ#hDIXBUpdf^qP9oG>OonWa zq(TuTKMoMp)S4{|7dY#E6){>SCEo7l_xkP0tcx<-N^c4O`2=QVMUljg{J|R~BpOWc zqAxaJfZEDeE@>TCPMif@YYVEnt#pOgGX*uOG25$6x2A(?TT5)MLCnbV@@tHUp3UR* z@SV^=q}jVH_7=|@a?Ha-ctpPz~ zG|IvSYfy$D7=$v_tXXZUl69O#0LHODxE^=W&ttUry85oZ+j7kYh%m`an=;uvmpJCd zR3qIOFq9&aSZSL>UBf|}Mt-C^Gd88M65?4-AUSq{Ax2veK?(_BGF41{WmFtZu=e5- z2#Y%bvS@JEym;8f-CY-Vx8N>|y9Rf6cM0wm+$Cs`kdJ%spRfCzsp*;OK4V>HX6mVW zqN_2(NUI2&`p zMw*R?S9R2(P$$-kJb#VyjW>3(+K@;FI0;J5*>5sESB>Yas!ovO;1YOO1IOP~p`+*n zJTCX5)#Awq=M_=MA6*!PK>BsvP-cTg10Df(_=DMoa99MgCvz+-IoxhH+Z_`gHi=L!LHN0 z4l>rc47y$9Ol0WG3!NQ&G;SM)22V8u?`m>L4HJ=4lT?9aSQ3ABY%Zt&(Z8>&(`7~d zC?&g4P^)gW2B8hmR_kCu<=fsiUp#mJd~{QQI`d5wZk^k744g<2J=Irs8E5NrtlXwl zcmL?~lg)7U@m(X2Z!CtNaZSuP_)W(8H;$%&*Qa`9nHzHs){& z)lfMo62m8Am46DkLC%3kN`)NmWMLt1d1J1nrKwAfnqixia@y4~WWfsdWA*Fu^z|>6 zfN5-c*L81tX_&=1iHg0M7^^(Ba=bOL1eQ6C?}}0`vkb}UVdGM zB}+~&qIRNUxZl?%mB2%MwQ}(Qp|n4IY$OO*f>B6EngJ`2aBt1-vfB69i;Q%M6pMY( z+J3X3_NjjghL73yqh-D7u`v2jL#}d)cx**UHv^g>t`2@BXPsq9tLn|dHyk(xUeaqpEbyqgG<15T z_q#4??cH`T$;Y)63=f4N+MgvDnvV1NU6B66zC5VDJnrw!)Bb0rH&6ECA;ojA`^58) z8_1hfW_NA7hCUv%kSUw)o$_s6V|n`%$xVPP=}!^|wKe`oPGAan6je7^YJPMNngbeo z&lBoTDIw{c^IRjEtDN!yNpEnkRdY(EQAO@5kl+jj?B@Hh-b1Do6-{ihveYCfkecJD zzEjiwEz?8eXSeN@pXf^$>rR13Qj8Zyum@5snu&PREoI(c!L23))!AE>Z^Fk)gDy<` z(W(@~*gMkc%!i4Ogec)vlZO_A(;_MI7TjiJqY=*wlHN#$YT%OZ(Y`*>QL+N91TRX; zVfIeFy9}Q$^0vqs?{Oo#9@IEk(Oq9a>#$d!XASFzPP>NYe-Am#!U&^>hqs=asf<)t zERVK$7d|$|6r61O-*bkpn{VJ}B0|v?8D@WYH)z21wTBf1w>ltPCRZbv)NQ$3X;1$$ z!WUL6^a!Q|QnFB?DcND@{1*IjX%9bnU<-(``t2928BhFoH!H6JFSuY^)uMvaDag4@ zcdZsrXs)gKM~Sgt;)6n1OJCWr>r6D7KVfIcM`3x9wfbtk$92tpJV6dbr& zK9M?#Es~s_)}b2nKAi`b@dJv~l@Ik>;l{G75frqsl^aV98L+X@KB*)iJ3ZXjyup8K z=egbhU@p#5s)zH*4y~oYuJx0VXVt^r`HT;tNIUvix()-o!xZNb{*q^u`=|`_sftAq z;?<6fBgfm#&Cbd~7X;U|YFOby2L3EV`s^xOY!)bFBuN@y5bl1$LxxZ@nw7w&l3qmiL?daeA)Qe2L3j6s?>VpkI;V7bVc2ZEVfx zU?}h;uYE?C^2C5yJ!*p=+HLs8m>LoYkG zE`iVUfut^wG=~PAB<2SO)oIP}v<-{Z;1i|AQArS*-ot|A$S!Skm4fS3OUR!LZ4kVl zYOtcSNw{L&!>rAt$?721({M*KlhoU8GkESlO-$vvuC$=|N^HrCE zG@i+GCnXK;WceCZR)20eO^SMShkf)ZVjlpAOb7o2tZxwbo-zK#D29iBw_P2fEkyXr zraU?>!Nc6@O7*Mu`#$MAxU_|YgkhY*%N+hU^jsBw#Nw9XM62l2pBEd&e$*@9HP6F< zb1R3r5#ROTQ-A*eeIKh&^*>=PANTvYh(-bm9)UR+fch=R#PNY+P0FHFVA>9k8Q-~B zbnywfUG~;cxYf_Q^6$Zz3VcUVAuT4~h4j>-y73(ToQ)Uu#iL>;0HSEzm}ybAB<6S3 z@%W@Z?VOuz=1m;6CdfD}Pd;%10Z1;ELRdAminDg~2R6cBIBc=c3a*)R7X%w{tV< z$NDHs)yjAxoQD4M=WdufN8b6}U-OC(@^AN2x&$2ukRP9D$iG6g9u$DZ7j_As*QpNl zs3E#WA{66!ZU02?UvQC5^R0bUgg(YTYo+Z~K|Y1zKLBL_0Du7aUxEC80u}CmTUh_s z!u>x%_V%UlX6e7Sn7cdY>fGsUZHo%eu zIh}-5X+JtTSg9z(5`Z8AK#oBv<;lY&LH=GSTKvut2$u&ye!pA*00{u@6#Jc~Hvkhb z^Io~$H(6o=09?ocGXTK5)_Xw?4dMnXVqyX;Io^k|G&MpHc~^Zu1OUhTPN@toE-p(F zOUrqnB}!RAeIDHx{ExK?3$&f<@K<|4Y&>DdS(>^Whh0S4|Mc?N=*(zw~uhkLH0Dc*wIeSeo++$RCOL3;|+@?BPT+0n$W$sE7d~sEDC#vH%e_ z5=2^5F@Q)Yst5*LG!Y0M8GwpIf&+|4H4J4BSOIyPSNb{9khG-Z7O(VAsN?poCXflp z>;!x>CTG>!DWDGt<|>Ox;+OgYNt8t3k-)(Fd5i(@XLfM?N3V|(Jpt6X84uIKTi!yy zqdAQmbn{qpZ>kBloY8#9lr<eP?4gDRrdma9Q-HhH1~h}5%5bhK&-b0GW~;0O=+Zw^2+Eh2); z`s~QiK#4p^@1gW*gFz`WzjrUZrFt-yO$0Ajj2L?r2KcA)Me#@OGcjGQBAYoO@SYO z+zZE*XEYTPHK2V59=ngkNFf%961Z3rjKGd_scdGRKP)JtBx^`uC4nIO5wU(uTCsze zWxxKvp^XH2JP@F!S4kv|=arBd)d)BoH@y^Dj<5RvO)w@_avJ~#%>Up2S04ZU+rIyw zFo*vwi~lDK)jL1E$8Mv%KluQ6k7u~}8#~_v{YMs|A2vwy|1%S=L>WE3H=7TO*E_Dd z|J3Aa%|OrqjK96Fy0LuBXL{-Jy#YdD+X!S1@4BrYnFqFAYKoU0p^tg&0#nnb7WsF7 z0MEisdXB4dO@oY!t9pjIQ*jKgP z%d4|@6f5L*z57pGL-UKq1)v0R(F!Uc5RMHX8$<~{o~PnTL>>2}D;-NT%~ZXoD85@5 zi)aiHP8NpQO5f$A%N5NpV1b*sFe&m#tujG3ULX=nN=iyu5!ygw1QpqgOi5t{#rKom zD!r#r8Mm>_;Ibm2D4bVW5Jm-9{?B_drYaYcH|&P$3)8pKRgxK!@sRPN@*RYXIWL#%rK)zfD3L0njT!ukza@wmkOBZZ67eq_xx2n4!LUfh8)U?=P zuDu#CFaxEK9r?1(+=>2|VlZfo_F#^W%BAQ#C{cI5I+33g_*)Od1Ll#XvjgEEJ;bpG?Qmdn=YB4q!c-qYM8yic@oTak6|8M1m*zK$|UdC z(8|K>JcW|y+VzFD^xhkqkhAJeml|@W42gQ(INnrcFb(ZHPBldaqc)hmZi0{lrfJL; z%wa)AC!5Y;k3YAu$s-#9NG;Nc8Y}vrT9gO|x9g|EAQIm}MHLehH43a6Q0CF!`*Yxm z;S(BA#(5Y2e$nQ#vN99|xHtRfj<@T#-PBTYgV3tcV576QS6 z#0i{AZz%}vcL_j2MKHN80Wi3WB^?nq;<}LOaYA!4Cks>7txi6xuEx?^PE}U6j@|$> za1XXazqFr%dD`_^DCEdpmmpVyo(!NGYLCv;AE!5``(3VE9SdW$H^wKOE-;8Rm-WvM z8c;g(R&{4m#_x78C@Gy%;H->!T+fw;wkFa@DU>X=K z@m&>Wb)UYh41K?%5)d;XL|Vx2PL>W6Po@koZ>k;)vVXsoQv}m`ADscTRpikLvpv!S(;l99+~~_D zw{^O^!ypi8nB3`N^G#7gl_?b@5LAv@9*nI94?l{YCrwQ~=wI{r3G2^0^jzWK@}=kH zHTCt==AVBW6K}aC|9o=)OFV!1I^yrY{?fC2`0VG|T~l)ZHobiJ^q>9tzqp)#i4*%b zPeMIXtaORTH-G&MHt&7?EmAN3K5yHwEx}=kQ--sL(_LdFgak#Z#1VjV&+C8LxOxibOZ1UW!z1VtGeZ^A4 z-KGzk6T?apW4HmLXaRgsrmyI?L{RKt*F(C-#ZQ=lP@+PNR(35L7prpUvcs)lq53z= zACb!<8)N*cRNA{(5Mj68espGLIy$KwrQ7?+VRD*Y5dcFxa1nL;ZbGAf9fVMegZ2y(L$XgDI=uEm_eTT%t z+6wC{D9yLUh=EYaB`S7-CKnqfUdrriIJ7e!DyaK<4f~F8$vQPE{&42>2ULM$fUvI9 z>ONSlA$dsSyCJZW$W{;SCjjsOg4OSqrU(2$P(D$J=-0R6>fa1!T23E@$^u+EaoPjn z!|`W|K{Gh*<+5!jQ(6lj;q}HKMv*k9fu|P*3>VmLc9LS4KRgBTM^R(n@gYYs-xi@j z4^kIi2gSv}O~5%+!f}ZA`XiG{0+OR>5uTvFv?13qOq#@jt(W(jUvX*6Ah6>C)7pat zKZTlElITeWeos&(PbupJQ8oTTRf(gkppZnKP|dqSvw5wY`cNVdiULplB@pTRuAshJ zQknKRybS}72kkc_B{m;Z-J0R=Yet>wGeu`0DRi~bB{BUv9n4g&P~waQt0PwRVWF10 z?I{Ll_M{eSdj-sOjw~fD0xUZ-)0>p2#&SY#?fHd&t=-ebo$H~|)vbZ&=Jfnv<>12R?A)0@ zYpQFS)7jp@@r(pv+|A`Qk=fHX`!E$tTqbC=fzI<5022d)s6eQ4!iiB89lz#W4^Bvf zkEkx=;)RE|OVwLDy=qoJeXX5QlwuS%n{_(z=c$l+W!4(#>I6*+Ye~o>biYnxfVlO* z6N@#(qgKutb=h&Mx8G06JEy}eM)(V(c~%S^Zj%-fFlf%&uuYK8TH~>ETwRRuPV|H` zx;x(U6}l><+C}Azo+^SUZ*bqOV6)b zH_#tp$tCps(MZjBz10tXH#MO6z{z=FF##Uek#aNvCIvyo07?W# z3jP)M9@)D*%Vo=XG+)N=9W?$(g?60=+bhcFh-V}9`+5H-_fz2$)oXs*z=`9tK)=sb zF-UXZ(+5M-JmUsW%?mKEvR@IxX?pXBS8HD7F)`+i2Yp#usKVdvK$1&inWtBAjzTL<U+Np*_V@pG8`s`1A*`RXwuaPeXb+h%P31Uc+(}xo+kcw8 zNFA8nUK0!~WmLo|FU<>pBvT^d4{ULM@|{yQ2>=Bou1%{fZqq4D#$WBsPaixPWZ&F6 zY|h;Ju6y21CD-?j=p}mMQ`#d%G9Z1H&cfa0A6dCu_0STHRKe*Q$Lt?DVmIClTlVNI#T{dIS!nHBNi=ZARn&uhByUpIy z0|1(N0E(|-X3>DjH>^jk(|^{b&;Pj(J+dEr<{FHg_z-u-32xWyKORHDRH&nVf4x36 z=N`S#YuZ96t~poHgE}iZ5j47Ab2Z-lAD8Q%HVv-+wXFKj|L}+S_UwoVekFwdtGPIR z)|1cOe)W4_J={2Vd4s&dRy$&5z{p}KkE>$9R~LUS;WRDK>)WDu_N%|^60$roons3` zIXSCq1D<>3JF47|+9al=sumUja3hh#k_tvs1S(k%7PRL}&C?^!PTgAg+pFF#2Cef_2={E@!o{a%f@BFsK>;%QEDMeLK zdzf!?sj9gGaj99kub;8MvVggDrbu#0+(XZE(PmDUNs6#aeq(0Ys4vAfCB9OeKnfQE zRvH5b;oux5qPeU_bdUxTeM8GzlL(*4EUWr5m30KH9|(k23rE|yx9D#E_{lfHM#&Uz zxPzd7W3I5&<;uS~j|P^X>xYUdvkEby@P@c?#}|X>hlvNWU2X}0*^WGzn{b(8!II`l zn^41SQUR?wvVd&TRN7llO);gS1HRctbVKJv)5Q_uHqV2`pKY_tXj4=gTm^l^jo!BV z3p=cmnQd!(F2ERv&Ushc z&FQ80S~@Z;Nas-QXmL}@sf_*2i~7yZRQVS(k8ngfUx&-vVcE1}-0r4SLH5lLIt+~3 z>gYHhD9+GrY$Ky6Fun+6944w(?MdUx@zgGc+M4K*(FCMSHP}#n=Q&|Y_58pcIFND> zEP)d;;b}&bY}8=FN}Ume7(H82rh=PO>WDCzR^eC&l?GY&-Ocl| zMOEiN?Uu9WZM7b1e{1Fhmk6PocP1~NuGS%jpuZhPn|IC=LNs9*T@exE9{vcy8P`=U zR$(zINmj0#pLbt*Q`VsJFWz^8>JRuzO<`SE_6^tN8xa}(PktkfO`U_Czkjp`zP4#Z zyYIXn93}r2etX!QNWPdYUq|kaVosNDjX0B08@yZ@GY$R{ zWnz?Kt1f`FJK(z1pwoAUQ|{V>=F&b;Syywhjgb0LOw8eu{|?UJnaIS<@znX)@9z3Y zXXAZ|)3ND`8Dq^!%ad33HC+Wu5w+_`kC+vv ze>M@cPufv!2}>}jO0`rnjkvMe>0(t#_7V{R<$e--$Z1ur!(#$NfJG#+$q>R1kI+_X z`V;uT79k(E?HIMpiy2om6&DL-AVMoJ1VuDy7DOBjGpF0-8Xk%c ziD)qSDkGyv0=igOzVEUu{?<|7x`@YYbJkC8|6;>x`4Z@`^Q!hc7CiW!1zQvqh!JsU z7F-rZjFoGrkG;&{oh#(oMt|(AtAtldk7@G6`1WDFhkbtJqqc**B;tSG3=*HRAK%XY zUbQ!O82NYQIKFlPmapk|`5c78jf>#R%kl9_)zC%hap?E4`>|SVVDZ$YkpUv~BFe#m zitr*J*f+LcIdW6bRAy?hu)?ZoC$Q8uJ-M6K*$bukP>YBpm4HV2zXkvMuj zp&9>*`QcDb`{v8ftyI{cHyw6Q$8ZkqI%~8FS7G^m=ia0uux%k~6azJ+)lhm)ItG22Idf}i=rYd%V2FVSQ5Hi#(}*JAS(h5F zA}FydpD2USNEG-Oi-l_z;;!eVy_BE{T~cFp{JQ>o%?EH1r3NLSyd!D?RJ_BehAG+y z?}tY=EsMnJd`w1eRI_5~&fYqiADVQT{X+@H&!_4tXO`@Xm#jwxvG!TLC;y%_`wpxy zzmRsE-wS0O@eY`6#)O#*^aE#u+2VtPh3nZGT30?}Ip%trU@i@yen$8G>su%2kYZq) z!(FlWvvcFd*``INLta~*nt+g&Y+Q1|m8f6{KUU^JRvO^;6@@?UB4v))O>p>ok9u_`n}y8WNefC>F^Aoz~5G$^u7rcqr&3 zj!&eWcP@mX_nZdKpg_lmL$+gB$T8b%hjgj6t5rgN{g?f}qQU?-1oh;qQ@QZ z;es-r4-f+=3(y(!5c5RF3m|!h5@vNp)8sk!w2yId=+jgy(dCtHD-2#6*0>XkDR!=6 zD^idy5@cMx02UD@t;i`cSU<6$bR(M8+^o|VW%G_>a)1*KKR#mKG&g#Av?$Sh5W1Er zUITU60G-HT7^WG6yg?>S=6O>OFFgTuWSP%S+j-7_I8klpuUpIUbfNsr`HEG$k?KT{ za|Bnj!2X|MJ$YI>N%KSpmyi8>f&+HnHP(w6t9PS_Thpq4jnVf1m~fjW)YNI)sr#KV zxlo879tJEeiYEE47ikR<8bsqt7sY%eAaU`k^#ap7Q5B!ppc4&Poo?;2a{IIHI=Nvd$figQE&@p{8eKO>un)f2%c@yL8;*SNA+xR3cZy2VtTLePsq+Bq5Z5`h8b|OD` zdB0MmqNr@Y_Qc(|J?rI$l{^V-m7t*5cg$b7y&d_-^v9& zG{%|qxz&D0OsqD(LT*h%l>(jUcvt{WL*rU2-xF04+p~KvSzn8IuzC8G{3s_7BaKM9 zRQ_b+OWk7qg;h%NA~R$z3HyErq)m0M5`fF&D>dxW=UD{WRdtQwIjDXc01A`A7~_xwaB-P z4DnnC(8EE?NSVog24s9ir-N-h`(wM}PCqeRe(QRahOP{pST|pBNbgEg;|;(hosCby zEXdrtuN2dK&$3;qOMKfDuR9BLY!TZ!%N$6_@Ngf{WC134CiKGza>V0`{8H=zb*86( zrv+&)Yd*$lqz^0%#09Yyw!MSQZM?{~y5FvHe=hC3Y}(5NW%n(ecy>|LAe9|ASRG6> z>9)f{L?x2sKnrc|D7o{yFMXMr^IIp+zJ9rcDnU`KC>mi=RfC72*{>crSHX1(w>( zax!dJi>ES7$hha)4vKjP_~%-Tr+kJ5&MHpU2L?tKPFu1Lj`*7I1gmUog9C89jM(}D z;$3@Dt?5e4R1Ii-C(Y;f$BC>C!gX{6Mc6OWg4n~A;(yS0udI$(9+9FNCF}M^YqG~9 zugbnSbg}}HIuT@ursw?pGaURSWEk7-KRlva!VeuJVYTbsMC>*GRSd1kyeGJ_SGn|; z>ynTA#L1O<#`9RVfce~1aw_G!_2g?`@o1ot-5GVPoZ2Zwz^1V~M-o4vrtC*uq-7Kt z!Fu(_1Sb$QqY0DWf=rf6(-Ml?F~a7I-HL*fB~U!I5mNr%Wxq!^cCz&yFZ4g%jhj6V z%!p=G5Hb$O|D@{|`x+cvRKb_HLo66SZnhZJJgOzALFnw7{1)m&K<%v|i$B`*ji9qp z3ng8t!}^Qm>LUK7R?1<6;-ePF8kZ%Ts+w5ZqBAG^XV+m&>34+CgWy@GbG3%`(cx*`a-T_+D|QIY#o<5v8@;fEiTMmLyf)V z%SvIAgfhIq7_Ep>`bPz}+liA~_n3zcJJ03T5>Fi=aePGOJmCafUfK-%VJ~|wcCPcC zbmh=@fdA$DkMggXX>xx!84OX4i^Q207^qhCvd8yaoqHpX%#qxNb~{w{Bb!edi6Lc- zXo~0cm+uZjhn22_yV|DCxfaL|8qT1CHnsM3)R;G^?l0M5?KMfU%asDR>YzZd7$0+0 zKN5Yt%2@U$B#}0iC?!M`Rz1~dy86K|Zz@e9KfOPGyj+}pZ8L)j7tyJT@@qLB`JIuU zK+{&W{^n-vL6U4DN1&&+ClR?d14Oi8j*-Nh-PL{2fZ5WQq)) zCr4=`Q`I+NPIq)No0yno`eMP?E)qdfP3I|S>teR=J}A9O7V zj#g;i?ORybRGjrw7Rw^hzb{KA%nK=1l@TOE0Z9a?GsvfQMLkk=yw62RA5qaXFa`dJ zCb~+5^Y)KoXT>jJ{Wow9F}FxW0+VE5h4;ohjU%IVB^*3QDzk0U_C38mOMdlz>{$NN zgt$TPzgYRFTbsGTenw5l;A1yk@3XaisK_j-s^#Ku|J2hol%1We?Ng|?Zf-|i#pMG( z1;s15Kf$z}Jil;{PTlF_(^il5O5N7g<16_;l)9etXEg=c1aa~TRT;H*Ce0SLb}Q;{ zt}c4ENlRwUdXCMTt{Y#!V%e`fI=}jnr9TO2lMvQTkU35;XR4pH$iF9Wwbd!kDDQA5 zkGz|gqaP_6A_2Fz`w6@Wkb3pRUCZpX(QrMd93Jb|SyiMaRS!%L?|+m8DNKN1GWuE- zjo*}@%gMH3?K-^Ql4K1ELbtk5T8w$y@`|YT zzss4ie58)WnT{=hVD{KZwjQzsj3FlX9|AZju3f*UnJ#oJLOqX&d(>)2E{|}M7Sqde z3-uz^qBzwXs-XN02h^2n=9NF6+ld0f#*N^wHdA8J!6(#OAtAkKa7v1aXw))5xA&;hj^ZKObVx>K-^@Kjr_$q)QQHPJubv1XU!0fCK2!A%y9tLF?2g1VA_f6y!J- z&}p#_v~SzXEz*w>DQE6Zn1RGKT)Sg$y?K{+n>QQRVM2FbZQc`#SHc0T;VdfwL;wT{ zM4$}-u2#bOSssWK>o6k{aALjx5+4WRsh2momCNoWQ{0T3Lrg|C1f-{!BSW`Snym=+a>*`6JTESL@J6x9IaF*}Uw(rrp?T7*N67u&9EH$dpMR0Wx^FThtV{~6XhC@$pXkGrB=u2BF}!v4tbIi}p48f(j= z!XP-Vsfz^`a+O=D_Fo>6sGh4fw5*mKa^;Lq`$p##LBm5pn8%O_nDDo4VW!+MA2tFo>1YpA-njVj3KP?LYsAw3#T2}Qh4Fz2~tE+Z4|Kp5IQB-TcCxsIl$5r6Ri(f@TPG zq={6Ewm>-qQ&q|Yd#TAaHB~hO(P&4@gW;u-`F>#!^BM1}4YQb>HxJ+qi{+IAMG@iY z1c^I=9cDbJ*v-}z!2pM4nJ^I`{fM$_E((bSRV}+r`#GyaMCg!6i0Fq7d;?LqJP8V| zqzViIqu`02Luj08(4DNf>(kJtxEfBNKo?FiRp3|m1i@2}t_vn1gX~YZJa9GN4&}bo zY4ja;` z?Z==kKdbIwUb1bVUmGhPw{Gl^;n=jA;$`_~-LM#+o)W2!HqdyZxDR^Ejlt?c{Nm3#~2{BbqEk&QW)^S2DityrSt+?zc#d1Hz zvM_@mlwz^vhiaYyH80=B`J0udJ+@Z;#;VaAc_ea1Ul3K(fZQJvzU9ZYC1-57CsEUJpcX`gic?3THt(h8-8cGL z?k(ha8kjd+b-r9RY5mA_P0jV`v^?Vxi!Y`^y=q{3@qWChy7FFfX{y=vZzw*qyZf6y zAaNwAB~-?6blbSRD9aj3*afw|4FF#qk0c+^d3si&g8sbbB`(stTlhOtp`C*5lskv< zK=_Oui9oQcT63riTuH`~a+twCyj=i@~NxXl#n0P5VeGf=tvKfCw1D!x(+f(3u8-!|KWvUwOpW zSpO^7(Y>Ab{G_C4LKW?tb;SO_@1@~*Bv~~+!KB2uC)d1}oM9xnq8FM4ZQ(UYdb8^h zoWa%4y5)ku5M`L%C#YKn*2qdI0I7B5%NFs{nz(Kx_CM z531U7;v~2gY|LL3?QjPDrQNOJB;|n1G~5v|T^cCI<-3q{P#2{FUcmjY5=>PdHHn8L zxQArIRW;mzJS=@iAG?UyhCkWrGeW1 zZcmT}JW;*cOBC&=672Sh&qyfEQ>Wy@8&q+Or`gY> z`@eTXh&)Ei3_mPuNV?x|4(K_YTcyKIHn2R4_`4>T0AXlnf3hYzv^>+}YNYLjwKA zo3g+HVjcuiJfqVCWH~Xf1|=;j`hf~gSJO{9^S{hdVtlkD;0&xw1U%zfwcoi4h1|^a z`tl?Ixk8xu5(6Q8hj^lD-!@Ec*BY#5KC5CR@kbg3_fH}R*g`=`Xs%c znmvGSl#L(~}8%(b`)(A0bK2=rdkwT3! z(wMfwG4PbS;2_R^1{V5f=k`xasLm_}Inxg_yS+D!l6cOP)$gDtV^lF}K*Ytf!MGn7 zd+eK}#xGZC7Tt%Q>Wy#(Dm*TRL;4?pbcmV~ZfQxwVIsBruX=_}Ga@;~`d~eLJtb+; zGkj)A3^5|bwI?kO{%je~1=%={lB@+-D!=y=n{g33UJx};R- z4lGIbnjXhR$6h-|j+-n8}=U*yw< z>PL}ZQghLgddIt_S*SPE5=V$p5}$&0@45w7_Uy(kk10-bE9Czmv2UmW1JUtBQL+ab zD)?3CaKf{~W6?sT5d(pe^5jmkiB@Eoi`+*%%BQaL&1v~f4+=d-py$6uAlUicXv zQi33!|6OvjF8@i&49$6mkqkGVC_fkN=t)m&AGhvSA=<+zU-(-=F4s+NIM>sNQ#f27 z=T88gQ~D9tt9F%;g)*ho5{v=@;L7$7o_5mHiaOX6rj@4oZ(-N}BP znz1~R?d)BfYl-@S=fM)l%W+}@ScY@uc|JXN;^G(7*^**N87hQI6iD1cXO08JIzF16 zx~$OF|CKLxrIDoeV*}N+Znow~OY8Kfx-xcu48mL*s1({ zNx(6*T)2qk?*JKE>9*A?%K{qnFB_aXIusnQhJ;cQit#uirpS^GY11l>l(ls5eODq{%@JO5qze8KaKEz!~=m^dN)ipaB zkc~E`t4B-1Z5*}lPK0B+2+GLPv>@ZrbLP*0;vUC~KhMS6F9!u{girV`9h(@JS;~{43{H+R zsdQh7dJjU0VC95_PD#xCL_?57WL%>1gzT{f^WN|8Ce*Y7-lECLW^0aYa$|{OGCJLY zX`;ORdwJOBl&7BMuSUWWk?YLnDk|CxW_4hk;&~F7uN` zVj?2^aWmEiYB3vAhE(KK!gQxr*1&Wz8kYI_@M^N>CeeNaCl_)4DfJumXK|j|V$v|t z#pSvEgV^Sa<6kZ828F`N7h!|UQv18HeO^5GsJHG_f<2alM56Hds+6d+iAKhk3! z2R=C6j;%gWcIGcv@eN@ZUAq3`ttW?t5_mW@dQ7O89>8y}Uu`SI^Sb9wG|@vuAJK*m z7r)E7R2#U1tLpAm02hcvKg}46d#LXuyfocHPU-df~kC$RI4GbtOi3LB}Uz zkG!z&SNP?iC&EB8*~+peTh@n7BImx0D;J}U3&oe*s0k%YDqKS(03aMd%T2iBKAsE+ zVk^dTT4srrF*`{9;+iy;)@Q25DPpznoFOqRA6cMEq{t&;jLj2!WNr4sX*c?KiP^y% z0faZ^N#(Dms-`N{kE+0nb+&edR{!d&HX60!k6a|RqV%#nI<(kc6|nA!u*<=cee*V6 z1p+{bg8&hU)+s@iT6*6ASwMLJ{V2fs^W+wDgU)!Hsr)kcuj3v3Xh6J;JMx56DEaVi zCheXj9=kxX;Y>j$BedX%i_neIHBR$@vsxTzx=dchESH6cBVG`a)7;)CC5Z$eM^WTX z&UDw8PMpy~0ge(GBVRiw7ySGb+P%iM;wF;>xo}2 zxYpv96cHJM#~jr0n{DJP`L#YV+0+fep9v_Lkp;97=;^|nX>uQQYV6=QzbD&ISYV& zHi0$4$xs$Fud{H6QsRUMpK_Dk{X8u5-m|Wln*5-w(zJOITUa_7rtnR8Tm5|4&=#Xm zBr#T9?{0NuvR8kfky;k6{x~Cc0aXB3k1JJi5UsLr9^>P1)7mhTDw}0>x;SuZsRT!- z#;)7yLw*d0>LN!dcJ;8pRA)-wNjwpdi13_GH@3R48V`dY^;BYf#bTmkDyZ`RwRM(J zQAOY1pMfEU?v@-HaezUjhoMs%DW#+vlH{JS%MPm4)x-%PaGo+9fhO zV3m;LyUqa&%j|6D3nRD-3&Z;vepL@x^cgT0tuB1+&1xrY1$F~Gpq9A~&)tpIh1Ph} zNqJ4xJarM%Zv7BYG<~YIJOS^=mM|dv6YJh;4JL;G)eUQ0ol+WP1<(GR%QH0I)%k3XF-B0hFdi~70KS%Okb z)#BBeC-K4yvoadrdm2tCxg;l5J1u=F{O~a!{rG*SVS_c2B;Bc)u zV&4ri2=8 ziOq=YS@RF>jraF&{GOJ5DfjLS=MBFQ0~qTE99*eYoh5>e3WrC-SRyh*t@xkDca^7h z>3Of_(?os4S6X(-G&bJ0b@P0J zh!`#yA(x#;myJc9nB;*tYfHRveCh`Q#3QXGF<(4dqccl1S@Du9KQ@4d6lNSl^*4DP zyR{+F$`bdVQ7*LH(R{ZK8-f8CE}iq|3(9ux6}SxETpDw_lK5%G251&XL?Ky&xqGEb zh7cl^kA>|+*yAD6)3l6y<##(Lc_=sDky4kTVw>+-uZ09q( zYkp{yA)bbbl!+o&^x`}2{lpOavWC2QPm&8V1zzcq`zW zW67vFeW20b+|*Q`$LnD^=E#U}8Zg?C72bNivtc$r@vTM6r<{YPB8k5WQ3OPiAzJ?g zH02M*#o6LKf3Efyk!*}?a7^wl=&KcWtTk{Rjh=nmg=j0pI)(DDsPQu?V;$$AW-ocG>1p#YY!Is;nj_*Lb8Z+V zZ^RKX7?xkir9gmHMYf^pWX{~B@D!`)4dF%Bh^n16{swnq3q*C@9E_2Zs~kC>Ou;Sl z5`dRh#lfs;5WRMIpPRXf6|%`BVUZLsL#G*^BmG6*6HY1BJR2E=up3A%RDvZ_Bm}D^ zQCjEoQV9gZ<&s$F-C53uty2tmoeG8qOfU*+r`cQL@ktpn+pJnFY3lYfIBfpjchSbb z1b-wE_E*8;!{}gdVZs|`eDdb%twy}fFFQhtQ50>+k{`R&r^-sAD-tuAuX+x!Aw%$g!+&N)L(Al6~*^$w#y)QR8C}tFW7`<{XClI@w>35i>pzd}B~S{( z_U{a{4p;v&6g-pbTJHZzx~RyNX^*%_^X6MpE71AW{wLeRhU3@TEDB<DtSSUxybm1}~e0h#qYu-*w>kiNxplW`wFozFCDDAspSi6CAXOX$ zRa|;U7LJv>t+ES~f#gX0^_HDq)TKbv%~ZMUH0T#>yfPraP=Qm$CWE>f&T;@Mj3#nc zY>yI88&e^GU^M4Pwb7p!n+J@BvSKD{^4i!Ws?il%VMy}q;6g0cl%NIRVVGFkw28SQ zP?G8WEtaI;61nvvbUU&UopguydVQH*X|%}7QMt~=amFtt!DMM_aU?7Kc;Nm?5> z|39j>3YDUd7s-BY)%>vHX9Pux#OU(}bANe%`^6M}RXUBl_F_Nz3Eg^Swa`*g=C^Q9 z>)%d)KQcvxv&X?448dm{pG78y8W#9;((N+K%)Lh^6*~)io4+j7{ab7Dc=BBR(4U`$ za*yB$mXo*U@IxEsK-&edGRYF;hU8rKX2?q8$^9xFKaI=6j1Q)3wzn6J58QJxn;A8@CJx zywUmN|5~Tc6-m{JskOYXvkldJ#-!FZ-8&eTjw&tMJMQ`u@7}EE|CTaDLiZmm8yN^E zqKBRc&|+*M@-HQlF>*HdFwp@)@s`)O^m3N*&EJzp2UnHB$V-0ohXjXBoLPA{*=ts= z_Ji?|@4V{z;SWclHfH@56(wJ-ZY1*7r+v7>RwDf%5GP_!$o+2>m^Fn)f&@ex2kqD0 zy6A#FyOSK@4*1(#-7S~SFMxJDmcBX*8W@A#x#qf{1FF@V67RgE=WhI5gsXz4E+!Xn zDLn$G_)4AaIhP;YZh_q5U)i}a@==YamgaN=#ShVAXl4*C-p7@R0kjX0 zSRSsUCzWDB(zy~Qu`8{j-Bqw>%HrPD18*;9cS1E|l<}4pXR~i0>Tj!_fvV}uG_qKV ziA$oMCdt2(FV$z~$zum@kU>|%_%*8B^6$!ri>)4=Ujc+v#i}1-&~F{|U4)CL46oHSbC{%q2yZsub00C~3S#&M_&iO8;+3IUNwjf67KH%v-@k>{sAxze zw;Rab_KM@JQS|Y2Gdqaxq^iKUVo^&5or41QFV)-ZzEqcln$xje$*y?T_M{EpWCc!A z8_c_wZ^~aIb%SZysDfQ6kyKswtxb7O7xzPFH^CCw$4z9DB!X znfQw#HXg3mIM3flHWz^Rr4}u(ojfZY7a;EBrrb(t6zG^JZ7PaSb!z#IQ>`9tJ2CI) zE~P6z8`E&x0{3f%_wRb@zIINTC}G1WuOHrw_-5x?j%;0JKNH%qBIyl^i^TIzZ|+cx zxneAYuU!F43u8UZhV5>bTmw2Cb2hU5nn|nFSAR0*uS$;vgqVlxxaJW6E{G3%{J#8w zleFl?kisEgEC`hhP0WqdF9MfV{*N(UW@XRxenN1XlDHfQWXf1@b<2yRwEUL5pRD*y zcuB18occ;KJ`_%P1o;E}eux2RgE>WNT)0kl9|q+(!oLD9eT{E+aiz?@H#%AZAM_4y z5B^HlINvH!HKnexivBEcqTp7c(A^1{P$ztY?McNYl8fh_zoNKx zBBiAXAra^7IXpP@=X)cLRciXFtIiU2AAad>ad;}=?E||rjA~sS>Gny=(=lPpb8-f= zcD6`7v;=5EF-p!4oAGF-fx%231*UG_!1m2tnAEpllm9rJcFdbZ?}}gHDlh75$kQq# z!ddXNVPZL-v=eu;$kV&)6EqAq4bZNaIQWScc`s>N`xxI7Bguxc%r1S_vam61Z?5jI z#2+QsF7pcdGtD&$j>h zcfN5f#(xf}JIlXy{=7WheSmN=TKbyR7ew8-*juKUXH+Wp&&M^jXsf4=7tD)?AVb<= zy!!dxh34n3%f{cTvF+`StE0vDR8gshQkv|Oo-J2lWQ0yj!sgr95ABqOreeXhK=(X0 zDwctP5X}NLLMtToEEzmRO`n3b8m3eoz&mo7f-gwa;)f%V|Cgdrl~jW9p5TP*M}UO; zuo5MbuS#WzTLmxR3yuGAYAmFELFA@}v*Xy$*%l{@ZaI4uL`T_082|q1vYBI8JKzWV zo6^j%NXc{q;};UfCb#1&cwPK9zAgLP8H81fk#LwG!)wDU`xC+}{tF$KK)YWZD{o<@ zX6Mwg*JBL(y^YeE%UR~oVR!EFko9-BHJs5o9g_R(Uuv$Vmo~L7!^N34>|A1AB^Cwh zpsPI0B!|#KMu}0x{pAr$$5j;F1I61^SJ4N}qiYfYIyx?1bfQvyo9qn_B> z8GvH-=ELJza1@EMORdg(c@AC`W2D_t+z}n*iFMOkZ{US!=T}EazY1_MijBYV&&{W{ z$2k;G=-Ns4vLgQ~Pe#p&atiF&$RtdNy5Ov&6j8$e>u4E&C_`TBEIdB0PAMM@*Nnba zIMv9*%W19woHKhLa+^YNzDob>yD@$Pn=iAEiE7{*z?TDq@d!X45(K(ry?t{F?3-EK zz73nJDF*OFq4B{{k4$h~b5>+%zD$6wB)m(n4o*|E`kK2nnuQVJ4;&p&ytFD(EMgr( zh!X{+C30d&o}NfVZZaT4}ljKxvx%eY+8kfup{tPw6)~9v=qjs?_am0 zO+pe6^`zMhq7+ZPq&2VedqB{|NcX_^QQ6wq+&83}FQ*-NoHBzSJoQ94z3pTAB-!xr zd!z?X_klVa%w}Q{PkJY*@9-kg{ua039thIen!XvKrXF8+N_tD4?o&!W!(y8ZWmg|B zHH1&tN*=G!Sko6+hJKn=ris{8(vA+5>xQssQv%Qd>v&9uGtQ5_Xp?ZRs438JY_ujD z<{agnZ+9(SNm9m)XJmcLBJqtlD9O>|Z;a`!{&*eR(- z<~#U4Y{+3jLOjzuwlDERgem{pX3p#Ra=Sc%P0(kp3I{Xws;=>}xY3@8`gh{L=Db3M z_un`Ei? z#@NBMxJh4E-40b|mL!KjVo^e{~zRN9Xg3crW*fU&EAR3XQGcGKo;=_p&hNdIWB-JHKa#Fy1PU>ZQ#9Dg$_hkBXA2-;21X4&(m=3- z2_i`IVB@v`5RE!PdIati$vBh^KE;M>J3ds%CacC0UC2g`JAoXu9k&9Ogp|O?1xd_d zf)+GvYO?UII83!zmO@#M*f>IH1V?PF8k+(+OQB36HVQif6Fx}B3MTVaD^ZMw0Wj5p zB`9FtM4qHN3;@i}1MWTQ&R}+rLNrMh6g+G)DjPX5p(9}VyHOaWl&F+p@_W+4I=XQx zT2<`pF7^jPQ;>uc9${uAAF2By)2rId8jcOA_e0bI@BW~-B<@3LY$Oqyj6! zfe|DF3)7sI=9~~f0vy?#ise+R=MNOldIEEs)(StNB)B_;%cF$owzD%f1gw|jQ4*zL zR3Q=7>I9dR71_M>Lc%^mpRN6uI{dLJqh3nAOL9>6qdHDDQ5~@oppAdkrk~@%0G1_N zz9+xYtfq)ilVkbOWDym;v8Sc&z%?(*C6E0giub9awwfEIO5skrn zm&XHf1g~PmEke&C)zsRLrpwC+>a_9NG#e&u^^-|SmGtdX#S702 znij`Zsr965ex@T-ML1H_)mj#k+gdu;%0T}>1R9<@7hsJZFq1f)=SmByRarg#FqFdo zi&t3aWMpD~e}~*ljh=WjB#bmHBE=4an@7otJdlDAe;?8vePF~=r&Lp0xIDk8%8|g-UR zVUjVa_(fHuhUgTfhEWMcHq={`_;vBof^fNM7^XO$fym7~6lDeXhUj`)n2g9tNt+^O z1SpD#h7tU2XhaZgJ0zA|8sEUa{)gtEZ?k1_bchq9iGj@9xcC3uCMQF6rcx|I;(%Q2 zTo$fy8dYf!j8rbs%+{)#jJ@XzU#q%Od3v-~z9wgGqegtz3|e!jCq+*KK{ZG(T*#QOh3s@4q(m*s{2XN4{Fn!)5Fs@FCb0 z_|V%&`cRt7@^B9TSpWb54_!gup{pPO9C&NJge&-nVH&4{Sv&&Q{?`Uwf!8I$0F+(I zqh@y~It2PSjvZ2(O6QwO@jp`r|1Y}f@i~arOGpMRvZO>oEet+xg&ms#preI?#$k-5 zXuyN6YiCSrDMtGxsuqLR99;1S0cUrONOSz(Z5>AfZd(KMS1+?7k%9iB^P}@Blo_RT&V$TOV51J^rQPNBY2{ z;p`w7Y>%u0mD6tcZBBO&ceILM-WOMR@h^9V5%Kvw|F_bcz#jk>Yqe;y02L_^goB}u zSd?xoFcTrYwOC~gA|dl{kWesJtqlJ-HsIpq;5S-Sp`nB-!)q(91k=7Y)d+*nkr!;* z#($a^LIA)efdGPONC3=cvQABzW>LD#a(m(IFJe{Pc}Z=x&~FCbcaaPSlk}2C%BPCs z+(47;*n+|F@{e`2xCHe=_d*Owtn9QdAg@|y>JR4JKan_EBfN82+vLb~Mmxc!`f=cM z48wi~x>r>KS+2A%27w_NkJMb?H`@AdWFcLy44$inUoBlCDV2@=^ zdeKLb{XgoI={Xu?x+(H65Z@LmIr@mPET&k9s_d7j3=Ei?= zLjE2j6>(eMr@NgjEiD0yYp?!r@}F@YWz$`9f%DZCJ$HA#^Q(gsUw8Nl1KDw+q#bW) zj~o_JgWc*^=eO!$6aPWYymt!aKF&F1$5K?gC&V|uG3fO1o5uBj*8FdKx;=o~;Wm$S0z_fOVt#32GVDobyB4z9cvH#= zsJY;G_bl4hkYb}G+ZF7G^J4z}f5Y_OzW#sL*ArVmbeiU(Gb6js1h9v9mE?8lfR7U& zBM-P3lZbf2Icmd@nrJrST~Eap$>9HnBvMqqDfJX4i&eKpl`}-)(LMOyfL;f$X!d=7 zzUShd4IwvEJ$eX8qxKs+Iq7#5XxF|N_JH_bx1^80QPxV5S<|?~zkdl|{`C~G#k}MY z(x5C0d=fSNB95DMDH}Vn^f@!v4h4TGfJsa1A{AyP)NqKT9W@ zp}ATHUreAzZ_c=P$ymSZ-2Gk4G$`*(%$D#ITXCn7|4snv0}~a91_9*SCTI;x(^`C? z%R}cb^wcJRhmNU5l|1lsDrROIzGFe*&?Ho-!Fy=m|^Ly60TtU8dnC=rc^RZJ%{>2 zN&Rn!i`fgO@@gDvt2Z#A`6h!6*>#A<=Lf!9q}+#16l2{9MkLlre$GAjibo!2v7QC5 zyqprYP(4|1J{1ZB-uBGVU|oFXH`{<>Wya+3jS0Jj$J5?d-F-cb;EAHN{TUuQfRD3w z`|7pIbj|}WeDO2kseW<6Dug2$Lc@lcUQ-qlU=&&;Rt>eg4_z1~fC zYa34;>N@ZyovK5*FaBsVZ$7LEH&d$9h;_%}#4TWfwPMbT*sH&+K(M;6`1#X7vGy6M zKhlh=q62MSg>u4~+2s~@m5ESy(qKo+f_eNioRa!BaNonXEQgMP%+J8Fm+C~Ce7dWl zW13VE=PbVrm^~n6#^9^6G$OgCbUy@o@NN6(s-K0JKBITrg@kT|^;q%w(Oq>BwY+8f zxhEeFk61|bj1J>*_i4w}@7?0J`q}Y39K}W=imvaTr>bX2>vLpu0W=1V1;W3yoRM)< zlnRXr>v$#P2a2OP;_F_~I2xfOk3q}jX+u`vx^WM8Lc%_s9DI$+;ZZs;zL2yCQc!i^(?7n@tAB$I6tx%-s(=w=qEoRKTB3vkrN(qLg|KS>D?_k1T8Ygjrb>7Vv5bZ#TJe>q-Bh$?&o`HDjmQXa!$i zeBiAZ>;_qT<3N9S`zPpip{GUQuZAya`)D--qBP^@-O`1jIL2Z8=KY_22!TzsuKu;X Y>P;=51I#}YybcN literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index d68b44e0..7c13a51a 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -489,6 +489,11 @@ def test_32(self): replay = sc2reader.load_replay("test_replays/3.2.0/1.SC2Replay") self.assertTrue(replay is not None) + def test_33(self): + for replaynum in range(1,4): + replay = sc2reader.load_replay("test_replays/3.3.0/{}.SC2Replay".format(replaynum)) + self.assertTrue(replay is not None) + def test_lotv_time(self): replay = sc2reader.load_replay("test_replays/lotv/lotv1.SC2Replay") self.assertEqual(replay.length.seconds, 1002) From 189dceab81ccc0570853aa4f7a1bc16d19f55fac Mon Sep 17 00:00:00 2001 From: hochst_a Date: Sat, 21 May 2016 21:38:23 +0200 Subject: [PATCH 215/238] Fix some non-python 3 things --- sc2reader/engine/plugins/context.py | 5 ++++- sc2reader/engine/plugins/creeptracker.py | 12 +++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index f7ea9862..ba8fccfe 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -30,7 +30,10 @@ def handleAbilityEvent(self, event, replay): event.logger.error(replay.filename) event.logger.error("Release String: "+replay.release_string) for player in replay.players: - event.logger.error("\t"+unicode(player).encode('ascii', 'ignore')) + try: + event.logger.error("\t"+unicode(player).encode('ascii', 'ignore')) + except: + event.logger.error("\t"+player.__str__()) self.logger.error("{0}\t{1}\tMissing ability {2:X} from {3}".format(event.frame, event.player.name, event.ability_id, replay.datapack.__class__.__name__)) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index 20b82f8f..b08cc637 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -1,10 +1,16 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -from sets import Set +try: + from sets import Set +except: + Set = set from PIL.Image import open as PIL_open -from PIL.Image import ANTIALIAS -from StringIO import StringIO +from PIL.Image import ANTIALIAS +try: + from StringIO import StringIO +except: + pass from collections import defaultdict from itertools import tee From 5dbe62bde6a33cd336dc58dafe2597907ffde5db Mon Sep 17 00:00:00 2001 From: hochst_a Date: Sat, 21 May 2016 22:39:02 +0200 Subject: [PATCH 216/238] Adding StringIO import for Python3 --- sc2reader/engine/plugins/creeptracker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index b08cc637..25ead4af 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -3,14 +3,14 @@ try: from sets import Set -except: +except ImportError: Set = set from PIL.Image import open as PIL_open from PIL.Image import ANTIALIAS try: from StringIO import StringIO -except: - pass +except ImportError: + from io import StringIO from collections import defaultdict from itertools import tee From 641e4943a6cfd322c5875aff8427823d2957f50d Mon Sep 17 00:00:00 2001 From: Anders Nickelsen Date: Thu, 9 Jun 2016 15:19:04 +0200 Subject: [PATCH 217/238] Run tests on circleci. --- circle.yml | 4 ++++ requirements.txt | 1 + 2 files changed, 5 insertions(+) create mode 100644 circle.yml create mode 100644 requirements.txt diff --git a/circle.yml b/circle.yml new file mode 100644 index 00000000..969c74cf --- /dev/null +++ b/circle.yml @@ -0,0 +1,4 @@ +test: + override: + - python -m unittest discover test_replays + - python -m unittest discover test_s2gs diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..7e2fba5e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Pillow From d5f5203ee7a94409bd07fd3ecdc4760bf909e308 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Thu, 9 Jun 2016 09:54:29 -0400 Subject: [PATCH 218/238] mark as expected a failure related to the APM from a HotS replay. it's a known bug that we're not going to fix for a long time, if ever. --- test_replays/test_all.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 7c13a51a..61d5b69e 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -303,6 +303,7 @@ def test_engine_plugins(self): self.assertEqual(code, 0) self.assertEqual(details, dict()) + @unittest.expectedFailure def test_factory_plugins(self): from sc2reader.factories.plugins.replay import APMTracker, SelectionTracker, toJSON From 4b730079fd46d8d292e1160fb89f27b27fa40198 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Thu, 9 Jun 2016 10:02:39 -0400 Subject: [PATCH 219/238] tell CircleCI to ignore the branches that we know are old and busted --- circle.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/circle.yml b/circle.yml index 969c74cf..2110527b 100644 --- a/circle.yml +++ b/circle.yml @@ -1,3 +1,11 @@ +general: + branches: + ignore: + - ggmaster + - hots + - jonomon + - master + - old_master test: override: - python -m unittest discover test_replays From 90bc21912507293ec1aeda9fcbb5dbb439aa6f03 Mon Sep 17 00:00:00 2001 From: Jonathan Gravel Date: Thu, 9 Jun 2016 00:11:49 -0400 Subject: [PATCH 220/238] Add handler for command_update_target_unit_event This is one step towards fixing Zerg Macro (ggtracker/ggtrackerstack#13, ggtracker/ggtrackerstack#49) and Terran Macro (ggtracker/ggtrackerstack#48) --- sc2reader/engine/plugins/context.py | 12 ++++++++++++ sc2reader/events/game.py | 16 ++++++++++++++++ sc2reader/readers.py | 25 +++++++++++++++---------- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index ba8fccfe..330788f4 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -14,6 +14,9 @@ def handleInitGame(self, event, replay): replay.units = set() replay.unit = dict() + # keep track of last TargetAbilityEvent for UpdateTargetAbilityEvent + self.last_target_ability_event = None + def handleGameEvent(self, event, replay): self.load_message_game_player(event, replay) @@ -47,6 +50,8 @@ def handleAbilityEvent(self, event, replay): self.logger.error("Other unit {0} not found".format(event.other_unit_id)) def handleTargetAbilityEvent(self, event, replay): + self.last_target_ability_event = event + if not replay.datapack: return @@ -62,6 +67,13 @@ def handleTargetAbilityEvent(self, event, replay): event.target = unit replay.objects[event.target_unit_id] = unit + def handleUpdateTargetAbilityEvent(self, event, replay): + # store corresponding TargetAbilityEvent data in this event + # currently using for *MacroTracker only, so only need ability name + event.ability_name = self.last_target_ability_event.ability_name + + self.handleTargetAbilityEvent(event, replay) + def handleSelectionEvent(self, event, replay): if not replay.datapack: return diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index a6ff2403..59996bf9 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -339,6 +339,22 @@ def __init__(self, frame, pid, data): self.location = (self.x, self.y, self.z) +class UpdateTargetAbilityEvent(TargetAbilityEvent): + """ + Extends :class:`TargetAbilityEvent` + + This event is generated when a TargetAbilityEvent is updated, likely due to + changing the target unit. It is unclear if this needs to be a separate event + from TargetAbilityEvent, but for flexibility, it will be treated + differently. + + One example of this event occuring is casting inject on a hatchery while + holding shift, and then shift clicking on a second hatchery. + """ + + name = 'UpdateTargetAbilityEvent' + + class SelfAbilityEvent(AbilityEvent): """ Extends :class:`AbilityEvent` diff --git a/sc2reader/readers.py b/sc2reader/readers.py index d8286c4a..d84f7122 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1525,7 +1525,7 @@ def __init__(self): 61: (None, self.trigger_hotkey_pressed_event), 103: (None, self.command_manager_state_event), 104: (None, self.command_update_target_point_event), - 105: (None, self.command_update_target_unit_event), + 105: (UpdateTargetAbilityEvent, self.command_update_target_unit_event), 106: (None, self.trigger_anim_length_query_by_name_event), 107: (None, self.trigger_anim_length_query_by_props_event), 108: (None, self.trigger_anim_offset_event), @@ -1596,19 +1596,24 @@ def command_update_target_point_event(self, data): def command_update_target_unit_event(self, data): return dict( - target=dict( - target_unit_flags=data.read_uint16(), + flags=0, # fill me with previous TargetUnitEvent.flags + ability=None, # fill me with previous TargetUnitEvent.ability + data=('TargetUnit', dict( + flags=data.read_uint16(), timer=data.read_uint8(), - tag=data.read_uint32(), - snapshot_unit_link=data.read_uint16(), - snapshot_control_player_id=data.read_bits(4) if data.read_bool() else None, - snapshot_upkeep_player_id=data.read_bits(4) if data.read_bool() else None, - snapshot_point=dict( + unit_tag=data.read_uint32(), + unit_link=data.read_uint16(), + control_player_id=data.read_bits(4) if data.read_bool() else None, + upkeep_player_id=data.read_bits(4) if data.read_bool() else None, + point=dict( x=data.read_bits(20), y=data.read_bits(20), z=data.read_bits(32) - 2147483648, - ) - ) + ), + )), + sequence=0, # fill me with previous TargetUnitEvent.flags + other_unit_tag=None, # fill me with previous TargetUnitEvent.flags + unit_group=None, # fill me with previous TargetUnitEvent.flags ) def command_event(self, data): From 9520a57c0825fe264b83b745c17b75e07a44371b Mon Sep 17 00:00:00 2001 From: Jonathan Gravel Date: Sat, 11 Jun 2016 15:24:15 -0400 Subject: [PATCH 221/238] UpdateTargetAbilityEvent: Safer implementation, per player ability tracking --- sc2reader/engine/plugins/context.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 330788f4..3372d84b 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -15,7 +15,7 @@ def handleInitGame(self, event, replay): replay.unit = dict() # keep track of last TargetAbilityEvent for UpdateTargetAbilityEvent - self.last_target_ability_event = None + self.last_target_ability_event = {} def handleGameEvent(self, event, replay): self.load_message_game_player(event, replay) @@ -28,6 +28,10 @@ def handleAbilityEvent(self, event, replay): return if event.ability_id not in replay.datapack.abilities: + # safeguard against missing abilities + if event.player.pid in self.last_target_ability_event: + del self.last_target_ability_event[event.player.pid] + if not getattr(replay, 'marked_error', None): replay.marked_error = True event.logger.error(replay.filename) @@ -50,7 +54,7 @@ def handleAbilityEvent(self, event, replay): self.logger.error("Other unit {0} not found".format(event.other_unit_id)) def handleTargetAbilityEvent(self, event, replay): - self.last_target_ability_event = event + self.last_target_ability_event[event.player.pid] = event if not replay.datapack: return @@ -68,9 +72,13 @@ def handleTargetAbilityEvent(self, event, replay): replay.objects[event.target_unit_id] = unit def handleUpdateTargetAbilityEvent(self, event, replay): - # store corresponding TargetAbilityEvent data in this event - # currently using for *MacroTracker only, so only need ability name - event.ability_name = self.last_target_ability_event.ability_name + # We may not find a TargetAbilityEvent before finding an + # UpdateTargetAbilityEvent, perhaps due to Missing Abilities in the + # datapack + if event.player.pid in self.last_target_ability_event: + # store corresponding TargetAbilityEvent data in this event + # currently using for *MacroTracker only, so only need ability name + event.ability_name = self.last_target_ability_event[event.player.pid].ability_name self.handleTargetAbilityEvent(event, replay) From 9fd95acbc447ee2adc492ae983cb7a4ca1156c1e Mon Sep 17 00:00:00 2001 From: Jonathan Gravel Date: Sat, 11 Jun 2016 15:24:25 -0400 Subject: [PATCH 222/238] UpdateTargetAbilityEvent: Unit tests --- test_replays/3.3.0/ggissue48.SC2Replay | Bin 0 -> 62663 bytes test_replays/3.3.0/ggissue49.SC2Replay | Bin 0 -> 51388 bytes test_replays/test_all.py | 20 ++++++++++++++++---- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 test_replays/3.3.0/ggissue48.SC2Replay create mode 100644 test_replays/3.3.0/ggissue49.SC2Replay diff --git a/test_replays/3.3.0/ggissue48.SC2Replay b/test_replays/3.3.0/ggissue48.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..57f06b5628fecc67711ec7417526098c2c88c8b5 GIT binary patch literal 62663 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 eOWpk7^-Bzv9Yv@|J1erS^0Emj{ude2*^ZD%CS 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 Qq0olfyP9-DM6U1u0h*3j#Q*>R literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 61d5b69e..94b58a66 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -495,12 +495,24 @@ def test_33(self): replay = sc2reader.load_replay("test_replays/3.3.0/{}.SC2Replay".format(replaynum)) self.assertTrue(replay is not None) + def test_33_shift_click_calldown_mule(self): + replay = sc2reader.load_replay("test_replays/3.3.0/ggissue48.SC2Replay") + def efilter(e): + return hasattr(e, "ability") and e.ability_name == "CalldownMULE" + self.assertEqual(len(filter(efilter, replay.events)), 29) + + def test_33_shift_click_spawn_larva(self): + replay = sc2reader.load_replay("test_replays/3.3.0/ggissue49.SC2Replay") + def efilter(e): + return hasattr(e, "ability") and e.ability_name == "SpawnLarva" + self.assertEqual(len(filter(efilter, replay.events)), 23) + def test_lotv_time(self): - replay = sc2reader.load_replay("test_replays/lotv/lotv1.SC2Replay") - self.assertEqual(replay.length.seconds, 1002) - self.assertEqual(replay.real_length.seconds, 1002) + replay = sc2reader.load_replay("test_replays/lotv/lotv1.SC2Replay") + self.assertEqual(replay.length.seconds, 1002) + self.assertEqual(replay.real_length.seconds, 1002) + - class TestGameEngine(unittest.TestCase): class TestEvent(object): name='TestEvent' From 32dec1261c4db57dbb308786961cbfd1abd32128 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 10:23:28 -0400 Subject: [PATCH 223/238] @mischanix wrote this back in Sept 2015 but I neglected to commit until now. He wrote: "I decided to spring for 64-bit support, so lots of stuff with the dump script changed. Lots of ID changes as well since HotS, it seems. Shame they still haven't shipped an editor capable of dumping the LotV balance data." However in Nov 2015, @icza writes: "LotV is released, and balance data export is available for LotV. Closing the issue" In any case, committing this in case it's useful in the future. --- sc2dump.cpp | 496 +++++++++++++++++++++++++--------------------------- 1 file changed, 234 insertions(+), 262 deletions(-) diff --git a/sc2dump.cpp b/sc2dump.cpp index f23fe64f..8fb1e473 100644 --- a/sc2dump.cpp +++ b/sc2dump.cpp @@ -1,262 +1,234 @@ -/* Dump type ids for Units and Abils for SC2. - * - * Authors: Robert Nix (@mischanix), Graylin Kim (@GraylinKim) - * - * Must be linked with the Microsoft Version.lib library. If compiling on 32 bit you may require the LAA option. - * - * Usage: sc2dump.exe - * Example: - * - * $ sc2dump.exe 24764/units.csv 24764/abils.csv - * Searching for a live SC2 process. - * - * Found SC2.exe - * Path: C:\Program Files (x86)\StarCraft II 2012 Beta\Versions\Base24764\SC2.exe - * Base Address: 590000 - * Build: 24764 - * - * Dumping Catalog@0x7903b54 - * Dumping CAbil@0x790b7f4 to 24764/24764_abils.csv - * Dumping CUnit@0x791f864 to 24764/24764_units.csv - * - * Done. - * - * If the script can't find the SC2 process or the offset is bad it will tell you. If SC2 is running an - * unknown offset you'll need to use CheatEngine to find a new one and make a new case for the switch - * statement. - * - * For Heart of the Swarm: - * 1. Attach to the process - * 2. Make sure that writable is unchecked and executable is fully checked - * 3. Do an array search for "8b 0d ?? ?? ?? ?? 8b 49" - * 4. Look for the most common match. - * 5. The the ?? ?? ?? ?? portion is the bytes in reverse order for the gameCatalog - * 6. Subtract the base address for the process (which you can get by running this script) - * 7. Add a new case for this build with that information. cUnitIndex and stringNameOffset generally won't change - * - * For Wings of Liberty: - * 1. Use the "a1 ?? ?? ?? ?? 8b 80" search string with the HotS instructions above. - * - */ -#include -#include -#include - -#include -#include -#include - -const int MAX_PROC_NAME_SIZE = 512; -const int MAX_PROC_LIST_SIZE = 2048; - -void DumpIds(HANDLE sc2_handle, uint32_t catalogRecordList, uint32_t stringNameOffset, FILE* out); -uint32_t ReadUInt(uint32_t address, HANDLE sc2_handle); -char* ReadString(uint32_t address, uint32_t length, HANDLE sc2_handle); -uint32_t GetModuleBase(DWORD, char *); - -HANDLE getSC2Handle(); -char* getSC2Info(HANDLE sc2_handle, uint32_t &base_address, uint32_t &build); - -int main(int argc, char* argv[]) { - if (argc < 3) { - printf("Both unit and ability output files are required (in that order).\n"); - ExitProcess(1); - } - - char* units_filename = argv[1]; - char* abils_filename = argv[2]; - - - printf("Searching for a live SC2 process.\n"); - HANDLE sc2_handle = getSC2Handle(); - if (sc2_handle == NULL) { - printf("Error: SC2.exe not found\n"); - ExitProcess(1); - } - - uint32_t build; - uint32_t base_address; - char* sc2_exe_path = getSC2Info(sc2_handle, base_address, build); - if (sc2_exe_path == NULL) { - printf("Error: Unable to acquire base address and build information.\n"); - ExitProcess(1); - } else { - printf("\nFound SC2.exe\n"); - printf(" Path: %s\n", sc2_exe_path); - printf(" Base Address: %x\n", base_address); - printf(" Build: %d\n", build); - } - - uint32_t gameCatalog = 0; - uint32_t cUnitIndex = 0; - uint32_t stringNameOffset = 0; - switch(build) { - case 23260: // WoL 1.5.3.23260 - gameCatalog = 0x1362BA0u; - cUnitIndex = 0x110u; - stringNameOffset = 0x64u; - break; - case 23925: // HotS beta 2.0.0.23925 - gameCatalog = 0x1EA2BE8u; - cUnitIndex = 0x110u; - stringNameOffset = 0x40u; - break; - case 24247: // HotS beta 2.0.0.24247 - gameCatalog = 0x10C9B28u; - cUnitIndex = 0x11cu; - stringNameOffset = 0x40u; - break; - case 24764: // HotS beta 2.0.3.24764 - gameCatalog = 0x10E79B8u; - cUnitIndex = 0x11cu; - stringNameOffset = 0x40u; - break; - default: - printf("Error: Missing offset values for build %d\n",build); - ExitProcess(1); - } - - uint32_t gameCatalogTable = ReadUInt(base_address + gameCatalog,sc2_handle); - printf("\nDumping Catalog@0x%x\n", gameCatalogTable); - - FILE* abils_file; - if (fopen_s(&abils_file,abils_filename, "w")==0) { - uint32_t abilCatalogList = ReadUInt(gameCatalogTable + 0x1c,sc2_handle); - printf(" Dumping CAbil@0x%x to %s\n", abilCatalogList, abils_filename); - DumpIds(sc2_handle, abilCatalogList, stringNameOffset, abils_file); - fclose(abils_file); - } else { - printf(" ERROR: Could not open %s for writing.",abils_filename); - } - - FILE* units_file; - if (fopen_s(&units_file, units_filename , "w")==0) { - uint32_t unitCatalogList = ReadUInt(gameCatalogTable + cUnitIndex,sc2_handle); - printf(" Dumping CUnit@0x%x to %s\n", unitCatalogList, units_filename); - DumpIds(sc2_handle, unitCatalogList, stringNameOffset, units_file); - fclose(units_file); - } else { - printf(" ERROR: Could not open %s for writing.",units_filename); - } - - printf("\nDone.\n"); - CloseHandle(sc2_handle); - return 0; -} - -void DumpIds(HANDLE sc2_handle, uint32_t catalogRecordList, uint32_t stringNameOffset, FILE* out) { - uint32_t recordsList = ReadUInt(catalogRecordList + 0x5c, sc2_handle); - if (recordsList == 0) { - printf("-- Error dumping table@%x: no list of catalog records found.\n", catalogRecordList); - return; - } - - uint32_t numEntries = ReadUInt(catalogRecordList + 0x50, sc2_handle); - for (uint32_t id = 0; id < numEntries; id++) { - uint32_t recordPtr = ReadUInt(recordsList + 4 * id, sc2_handle); - if (recordPtr != 0) { - uint32_t stringPtr = ReadUInt(ReadUInt(recordPtr + stringNameOffset, sc2_handle) + 0x10, sc2_handle) + 4; - uint32_t stringLength = ReadUInt(stringPtr, sc2_handle); - uint32_t string_flags = ReadUInt(stringPtr + 4,sc2_handle); - - // Some strings are actually stored else where in memory - uint32_t stringDataPtr = stringPtr+8; - if (string_flags & 4) { - stringDataPtr = ReadUInt(stringDataPtr,sc2_handle); - } - - char* name = ReadString(stringDataPtr, stringLength, sc2_handle); - if (strlen(name) != 0) { - fprintf(out, "%d,%s\n", id, name); - } - free(name); - } - } -} - -char* ReadString(uint32_t address, uint32_t length, HANDLE sc2_handle) { - char* result = (char*)malloc(length+1); - memset(result, 0, length+1); - ReadProcessMemory(sc2_handle, (LPCVOID)address, result, length, 0); - return result; -} - -uint32_t ReadUInt(uint32_t address, HANDLE sc2_handle) { - uint32_t result = 0; - ReadProcessMemory(sc2_handle, (LPCVOID)address, &result, sizeof(uint32_t), 0); - return result; -} - -uint32_t GetModuleBase(DWORD procId, char* modName) -{ - HANDLE snapshot; - MODULEENTRY32 modInfo; - snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, procId); - modInfo.dwSize = sizeof(MODULEENTRY32); - - if (Module32First(snapshot, &modInfo)) - { - // printf("mod %s\n", modInfo.szModule); - if (!strcmp(modInfo.szModule, modName)) - { - CloseHandle(snapshot); - return (uint32_t)modInfo.modBaseAddr; - } - - while (Module32Next(snapshot, &modInfo)) - { - // printf("mod %s\n", modInfo.szModule); - if (!strcmp(modInfo.szModule, modName)) - { - CloseHandle(snapshot); - return (uint32_t)modInfo.modBaseAddr; - } - } - } - CloseHandle(snapshot); - return 0; -} - -char* getSC2Info(HANDLE sc2_handle, uint32_t &base_address, uint32_t &build) { - char* sc2_exe_path = (char*)malloc(MAX_PROC_NAME_SIZE); - if(GetModuleFileNameEx(sc2_handle, 0, sc2_exe_path, MAX_PROC_NAME_SIZE)==0) { - printf("ERROR %d: Unable to retrieve executable file name", GetLastError()); - return NULL; - } - - DWORD infoSize = GetFileVersionInfoSize(sc2_exe_path, 0); - void *infoBuffer = malloc(infoSize); - VS_FIXEDFILEINFO *sc2VersionInfo; - - GetFileVersionInfo(sc2_exe_path, 0, infoSize, infoBuffer); - VerQueryValue(infoBuffer, "\\", (LPVOID*)&sc2VersionInfo, 0); - build = sc2VersionInfo->dwFileVersionLS & 0xffff; - free(infoBuffer); - - DWORD proc_id = GetProcessId(sc2_handle); - base_address = GetModuleBase(proc_id, "SC2.exe"); - return sc2_exe_path; -} - -HANDLE getSC2Handle() { - DWORD bytes_returned = 0; - DWORD proc_ids[MAX_PROC_LIST_SIZE]; // Should be large enough - if (EnumProcesses(proc_ids, MAX_PROC_LIST_SIZE, &bytes_returned)!=0) { - char buf[MAX_PROC_NAME_SIZE]; - DWORD proc_count = bytes_returned/sizeof(DWORD); - for (DWORD i=0; i < proc_count; i++) { - DWORD proc_id = proc_ids[i]; - HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, proc_id); - if (handle != NULL) { - if(GetModuleBaseName(handle, 0, buf, MAX_PROC_NAME_SIZE)!=0 && strcmp(buf, "SC2.exe")==0) { - return handle; - } else { - CloseHandle(handle); - } - } - } - } else { - printf("Error %d: Unable to enumerate processes.\n",GetLastError()); - } - return NULL; -} +/* Dump type ids for Units and Abils for SC2. + * + * Authors: Robert Nix (@mischanix), Graylin Kim (@GraylinKim) + * + * to compile with mingw-w64-x86_64-clang: + * clang -Wextra -Wall -Werror -O3 sc2dump.cpp -static -lversion -lpsapi + * + * Must be linked with the Microsoft Version.lib library. If compiling on 32 bit you may require the LAA option. + * + * Usage: sc2dump.exe + * Example: + * + * $ sc2dump.exe 24764/units.csv 24764/abils.csv + * Searching for a live SC2 process. + * + * Found SC2.exe + * Path: C:\Program Files (x86)\StarCraft II 2012 Beta\Versions\Base24764\SC2.exe + * Base Address: 590000 + * Build: 24764 + * + * Dumping Catalog@0x7903b54 + * Dumping CAbil@0x790b7f4 to 24764/24764_abils.csv + * Dumping CUnit@0x791f864 to 24764/24764_units.csv + * + * Done. + * + */ + +#include +#include +#include + +#include +#include +#include + +#define MODULE_NAME "SC2_x64.exe" +typedef uint64_t rptr_t; +#define PTR(x) (const void *)(x) + +HANDLE sc2_handle; + +char* ReadString(rptr_t address, uint32_t length) { + char* result = (char*)malloc(length+1); + memset(result, 0, length+1); + ReadProcessMemory(sc2_handle, PTR(address), result, length, 0); + return result; +} + +uint32_t ReadUInt(rptr_t address) { + uint32_t result = 0; + ReadProcessMemory(sc2_handle, PTR(address), &result, sizeof(uint32_t), 0); + return result; +} + +rptr_t ReadPtr(rptr_t address) { + rptr_t result = 0; + ReadProcessMemory(sc2_handle, PTR(address), &result, sizeof(rptr_t), 0); + return result; +} + +void DumpIds(rptr_t catalogRecordList, rptr_t stringNameOffset, FILE* out) { + rptr_t recordsList = ReadPtr(catalogRecordList + 0x48); + if (recordsList == 0) { + printf("-- Error dumping table@%p: no list of catalog records found.\n", PTR(catalogRecordList)); + return; + } + + uint32_t numEntries = ReadUInt(catalogRecordList + 0x38); + printf("%u %p\n", numEntries, PTR(recordsList)); + for (uint32_t id = 0; id < numEntries; id++) { + rptr_t recordPtr = ReadPtr(recordsList + sizeof(rptr_t) * id); + if (recordPtr != 0) { + rptr_t stringPtr = ReadPtr(ReadPtr(recordPtr + stringNameOffset) + 0x20) + 0x18; + uint32_t stringLength = ReadUInt(stringPtr) >> 2; + uint32_t stringFlags = ReadUInt(stringPtr + 4); + + // Strings are either inline or a pointer depending on length: + rptr_t stringDataPtr = stringPtr + 8; + if (stringFlags & 2) { + stringDataPtr = ReadPtr(stringDataPtr); + } + + char* name = ReadString(stringDataPtr, stringLength); + if (strlen(name) != 0) { + fprintf(out, "%d,%s\n", id, name); + } + free(name); + } + } +} + +rptr_t GetModuleBase(DWORD procId, const char* modName) +{ + HANDLE snapshot; + MODULEENTRY32 modInfo; + snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, procId); + modInfo.dwSize = sizeof(MODULEENTRY32); + + if (Module32First(snapshot, &modInfo)) + { + if (!strcmp(modInfo.szModule, modName)) + { + CloseHandle(snapshot); + return (rptr_t)(uintptr_t)modInfo.modBaseAddr; + } + + while (Module32Next(snapshot, &modInfo)) + { + if (!strcmp(modInfo.szModule, modName)) + { + CloseHandle(snapshot); + return (rptr_t)(uintptr_t)modInfo.modBaseAddr; + } + } + } + CloseHandle(snapshot); + return 0; +} + +char* getSC2Info(rptr_t &base_address, uint32_t &build) { + char* sc2_exe_path = (char*)malloc(512); + if(GetModuleFileNameEx(sc2_handle, 0, sc2_exe_path, 512)==0) { + printf("ERROR %lu: Unable to retrieve executable file name", GetLastError()); + return NULL; + } + + DWORD infoSize = GetFileVersionInfoSize(sc2_exe_path, 0); + void *infoBuffer = malloc(infoSize); + VS_FIXEDFILEINFO *sc2VersionInfo; + + GetFileVersionInfo(sc2_exe_path, 0, infoSize, infoBuffer); + VerQueryValue(infoBuffer, "\\", (LPVOID*)&sc2VersionInfo, 0); + build = sc2VersionInfo->dwFileVersionLS & 0xffff; + free(infoBuffer); + + DWORD proc_id = GetProcessId(sc2_handle); + base_address = GetModuleBase(proc_id, MODULE_NAME); + return sc2_exe_path; +} + +HANDLE getSC2Handle() { + DWORD bytes_returned = 0; + DWORD proc_ids[2048]; // Should be large enough + if (EnumProcesses(proc_ids, 2048, &bytes_returned)!=0) { + char buf[512]; + DWORD proc_count = bytes_returned/sizeof(DWORD); + for (DWORD i=0; i < proc_count; i++) { + DWORD proc_id = proc_ids[i]; + HANDLE handle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, proc_id); + if (handle != NULL) { + if(GetModuleBaseName(handle, 0, buf, 512)!=0 && strcmp(buf, MODULE_NAME)==0) { + return handle; + } else { + CloseHandle(handle); + } + } + } + } else { + printf("Error %lu: Unable to enumerate processes.\n", GetLastError()); + } + return NULL; +} + +int main(int argc, char *argv[]) { + if (argc < 3) { + printf("Both unit and ability output files are required (in that order).\n"); + ExitProcess(1); + } + + char *units_filename = argv[1]; + char *abils_filename = argv[2]; + + printf("Searching for a live SC2 process.\n"); + sc2_handle = getSC2Handle(); + if (sc2_handle == NULL) { + printf("Error: " MODULE_NAME " not found\n"); + ExitProcess(1); + } + + uint32_t build; + rptr_t base_address; + char* sc2_exe_path = getSC2Info(base_address, build); + if (sc2_exe_path == NULL) { + printf("Error: Unable to acquire base address and build information.\n"); + ExitProcess(1); + } else { + printf("\nFound " MODULE_NAME "\n"); + printf(" Path: %s\n", sc2_exe_path); + printf(" Base Address: %p\n", PTR(base_address)); + printf(" Build: %d\n", build); + } + + rptr_t gameCatalog = 0; + uint32_t cUnitIndex = 0; + uint32_t stringNameOffset = 0; + switch(build) { + case 37164: // LotV beta 2.5.5.37164 + gameCatalog = 0x3E7DC58u; + cUnitIndex = 0x280u; + stringNameOffset = 0x70u; + break; + default: + printf("Error: Missing offset values for build %d\n", build); + ExitProcess(1); + } + + rptr_t gameCatalogTable = ReadPtr(base_address + gameCatalog); + printf("\nDumping Catalog@0x%p\n", PTR(gameCatalogTable)); + + FILE* abils_file; + if (fopen_s(&abils_file, abils_filename, "w") == 0) { + rptr_t abilCatalogList = ReadPtr(gameCatalogTable + 0x8); + printf(" Dumping CAbil@0x%p to %s\n", PTR(abilCatalogList), abils_filename); + DumpIds(abilCatalogList, stringNameOffset, abils_file); + fclose(abils_file); + } else { + printf(" ERROR: Could not open %s for writing\n", abils_filename); + } + + FILE* units_file; + if (fopen_s(&units_file, units_filename, "w") == 0) { + rptr_t unitCatalogList = ReadPtr(gameCatalogTable + cUnitIndex); + printf(" Dumping CUnit@0x%p to %s\n", PTR(unitCatalogList), units_filename); + DumpIds(unitCatalogList, stringNameOffset, units_file); + fclose(units_file); + } else { + printf(" ERROR: Could not open %s for writing.\n", units_filename); + } + + printf("\nDone.\n"); + CloseHandle(sc2_handle); + return 0; +} From 7df594152e18c8208ea00e4f95484d2fb5b5dc91 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 14:56:51 -0400 Subject: [PATCH 224/238] fix usage message to have the right script name --- new_units.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/new_units.py b/new_units.py index c8134991..afe58f27 100644 --- a/new_units.py +++ b/new_units.py @@ -1,6 +1,6 @@ # Shows new data entries from the requested build files: # -# Usage: python new_data.py sc2reader/data/HotS/24764_units.csv sc2reader/data/HotS/24764_abilites.csv +# Usage: python new_units.py sc2reader/data/HotS/24764_units.csv sc2reader/data/HotS/24764_abilites.csv # # The output from this can be used to update the unit_lookup.csv and ability_lookup.csv files. Maybe the # script can be fixed to append these lines automatically... From cf67e1d80b69a1634be34629bba04222bd37ae17 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 14:58:59 -0400 Subject: [PATCH 225/238] add new abilities and units for 3.4.0 (44401) --- sc2reader/data/LotV/44401_abilities.csv | 338 ++++++++++++++++++++++++ sc2reader/data/LotV/44401_units.csv | 262 ++++++++++++++++++ sc2reader/data/__init__.py | 2 +- sc2reader/data/ability_lookup.csv | 45 ++++ 4 files changed, 646 insertions(+), 1 deletion(-) create mode 100755 sc2reader/data/LotV/44401_abilities.csv create mode 100755 sc2reader/data/LotV/44401_units.csv diff --git a/sc2reader/data/LotV/44401_abilities.csv b/sc2reader/data/LotV/44401_abilities.csv new file mode 100755 index 00000000..9f57e17e --- /dev/null +++ b/sc2reader/data/LotV/44401_abilities.csv @@ -0,0 +1,338 @@ +0,CAbil +1,CAbilEffect +2,CAbilQueueable +3,CAbilProgress +4,CAbilRedirect +5,CAbilArmMagazine +6,CAbilAttack +7,CAbilAugment +8,CAbilBattery +9,CAbilBeacon +10,CAbilBehavior +11,CAbilBuild +12,CAbilBuildable +13,CAbilEffectInstant +14,CAbilEffectTarget +15,CAbilHarvest +16,CAbilInteract +17,CAbilInventory +18,CAbilLearn +19,CAbilMerge +20,CAbilMergeable +21,CAbilMorph +22,CAbilMorphPlacement +23,CAbilMove +24,CAbilPawn +25,CAbilQueue +26,CAbilRally +27,CAbilResearch +28,CAbilRevive +29,CAbilSpecialize +30,CAbilStop +31,CAbilTrain +32,CAbilTransport +33,CAbilWarpable +34,CAbilWarpTrain +35,Taunt +36,stop +38,move +45,attack +58,SalvageShared +60,GhostHoldFire +61,GhostWeaponsFree +63,Explode +65,FungalGrowth +66,GuardianShield +67,MULERepair +70,Feedback +72,PlacePointDefenseDrone +73,HallucinationArchon +74,HallucinationColossus +75,HallucinationHighTemplar +76,HallucinationImmortal +77,HallucinationPhoenix +78,HallucinationProbe +79,HallucinationStalker +80,HallucinationVoidRay +81,HallucinationWarpPrism +82,HallucinationZealot +83,MULEGather +84,SeekerMissile +85,CalldownMULE +86,GravitonBeam +90,SpawnChangeling +97,Rally +98,ProgressRally +99,RallyCommand +100,RallyNexus +101,RallyHatchery +104,InfestedTerrans +105,NeuralParasite +106,SpawnLarva +107,StimpackMarauder +108,SupplyDrop +111,TimeWarp +114,SCVHarvest +115,ProbeHarvest +117,que1 +118,que5 +119,que5CancelToSelection +121,que5Addon +122,BuildInProgress +123,Repair +126,Stimpack +127,GhostCloak +129,MedivacHeal +130,SiegeMode +131,Unsiege +132,BansheeCloak +133,MedivacTransport +134,ScannerSweep +135,Yamato +136,AssaultMode +137,FighterMode +138,BunkerTransport +139,CommandCenterTransport +140,CommandCenterLiftOff +141,CommandCenterLand +143,BarracksLiftOff +145,FactoryLiftOff +147,StarportLiftOff +148,FactoryLand +149,StarportLand +151,BarracksLand +152,SupplyDepotLower +153,SupplyDepotRaise +166,WarpPrismTransport +171,PsiStorm +172,HangarQueue5 +179,DroneHarvest +181,UpgradeToLair +182,UpgradeToHive +183,UpgradeToGreaterSpire +189,MorphToBroodLord +190,BurrowBanelingDown +191,BurrowBanelingUp +192,BurrowDroneDown +193,BurrowDroneUp +194,BurrowHydraliskDown +195,BurrowHydraliskUp +196,BurrowRoachDown +197,BurrowRoachUp +198,BurrowZerglingDown +199,BurrowZerglingUp +200,BurrowInfestorTerranDown +201,BurrowInfestorTerranUp +202,RedstoneLavaCritterBurrow +203,RedstoneLavaCritterInjuredBurrow +204,RedstoneLavaCritterUnburrow +205,RedstoneLavaCritterInjuredUnburrow +206,OverlordTransport +210,BurrowQueenDown +211,BurrowQueenUp +212,NydusCanalTransport +213,Blink +214,BurrowInfestorDown +215,BurrowInfestorUp +216,MorphToOverseer +217,UpgradeToPlanetaryFortress +220,BurrowUltraliskDown +221,BurrowUltraliskUp +222,UpgradeToOrbital +223,UpgradeToWarpGate +224,MorphBackToGateway +225,OrbitalLiftOff +226,OrbitalCommandLand +227,ForceField +228,PhasingMode +229,TransportMode +233,TacNukeStrike +236,EMP +240,Transfusion +249,AttackRedirect +250,StimpackRedirect +251,StimpackMarauderRedirect +253,StopRedirect +254,GenerateCreep +256,SpineCrawlerUproot +257,SporeCrawlerUproot +258,SpineCrawlerRoot +259,SporeCrawlerRoot +261,BuildAutoTurret +262,ArchonWarp +265,Charge +269,Contaminate +272,que5Passive +273,que5PassiveCancelToSelection +301,DigesterCreepSpray +305,MorphToMothership +330,XelNagaHealingShrine +339,MothershipCoreMassRecall +341,MorphToHellion +351,MorphToHellionTank +359,MorphToSwarmHostBurrowedMP +360,MorphToSwarmHostMP +362,attackProtossBuilding +364,stopProtossBuilding +365,BlindingCloud +367,Yoink +370,ViperConsumeStructure +373,TestZerg +374,VolatileBurstBuilding +381,WidowMineBurrow +382,WidowMineUnburrow +383,WidowMineAttack +384,TornadoMissile +388,BurrowLurkerMPDown +389,BurrowLurkerMPUp +390,UpgradeToLurkerDenMP +391,HallucinationOracle +392,MedivacSpeedBoost +393,ExtendingBridgeNEWide8Out +394,ExtendingBridgeNEWide8 +395,ExtendingBridgeNWWide8Out +396,ExtendingBridgeNWWide8 +397,ExtendingBridgeNEWide10Out +398,ExtendingBridgeNEWide10 +399,ExtendingBridgeNWWide10Out +400,ExtendingBridgeNWWide10 +401,ExtendingBridgeNEWide12Out +402,ExtendingBridgeNEWide12 +403,ExtendingBridgeNWWide12Out +404,ExtendingBridgeNWWide12 +406,CritterFlee +407,OracleRevelation +415,MothershipCorePurifyNexus +416,XelNaga_Caverns_DoorE +417,XelNaga_Caverns_DoorEOpened +418,XelNaga_Caverns_DoorN +419,XelNaga_Caverns_DoorNE +420,XelNaga_Caverns_DoorNEOpened +421,XelNaga_Caverns_DoorNOpened +422,XelNaga_Caverns_DoorNW +423,XelNaga_Caverns_DoorNWOpened +424,XelNaga_Caverns_DoorS +425,XelNaga_Caverns_DoorSE +426,XelNaga_Caverns_DoorSEOpened +427,XelNaga_Caverns_DoorSOpened +428,XelNaga_Caverns_DoorSW +429,XelNaga_Caverns_DoorSWOpened +430,XelNaga_Caverns_DoorW +431,XelNaga_Caverns_DoorWOpened +432,XelNaga_Caverns_Floating_BridgeNE8Out +433,XelNaga_Caverns_Floating_BridgeNE8 +434,XelNaga_Caverns_Floating_BridgeNW8Out +435,XelNaga_Caverns_Floating_BridgeNW8 +436,XelNaga_Caverns_Floating_BridgeNE10Out +437,XelNaga_Caverns_Floating_BridgeNE10 +438,XelNaga_Caverns_Floating_BridgeNW10Out +439,XelNaga_Caverns_Floating_BridgeNW10 +440,XelNaga_Caverns_Floating_BridgeNE12Out +441,XelNaga_Caverns_Floating_BridgeNE12 +442,XelNaga_Caverns_Floating_BridgeNW12Out +443,XelNaga_Caverns_Floating_BridgeNW12 +444,XelNaga_Caverns_Floating_BridgeH8Out +445,XelNaga_Caverns_Floating_BridgeH8 +446,XelNaga_Caverns_Floating_BridgeV8Out +447,XelNaga_Caverns_Floating_BridgeV8 +448,XelNaga_Caverns_Floating_BridgeH10Out +449,XelNaga_Caverns_Floating_BridgeH10 +450,XelNaga_Caverns_Floating_BridgeV10Out +451,XelNaga_Caverns_Floating_BridgeV10 +452,XelNaga_Caverns_Floating_BridgeH12Out +453,XelNaga_Caverns_Floating_BridgeH12 +454,XelNaga_Caverns_Floating_BridgeV12Out +455,XelNaga_Caverns_Floating_BridgeV12 +456,TemporalField +480,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +481,SnowRefinery_Terran_ExtendingBridgeNEShort8 +482,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +483,SnowRefinery_Terran_ExtendingBridgeNWShort8 +497,CausticSpray +499,ImmortalOverload +500,MorphToRavager +501,MorphToLurker +503,ReleaseInterceptors +504,RavagerCorrosiveBile +505,BurrowRavagerDown +506,BurrowRavagerUp +508,PurificationNovaTargeted +510,LockOn +512,LockOnCancel +514,Hyperjump +516,ThorAPMode +517,ThorNormalMode +519,MothershipMassRecall +520,NydusWormTransport +521,OracleWeapon +527,LocustMPFlyingSwoop +528,HallucinationDisruptor +529,HallucinationAdept +530,VoidRaySwarmDamageBoost +531,SeekerDummyChannel +532,AiurLightBridgeNE8Out +533,AiurLightBridgeNE8 +534,AiurLightBridgeNE10Out +535,AiurLightBridgeNE10 +536,AiurLightBridgeNE12Out +537,AiurLightBridgeNE12 +538,AiurLightBridgeNW8Out +539,AiurLightBridgeNW8 +540,AiurLightBridgeNW10Out +541,AiurLightBridgeNW10 +542,AiurLightBridgeNW12Out +543,AiurLightBridgeNW12 +556,ShakurasLightBridgeNE8Out +557,ShakurasLightBridgeNE8 +558,ShakurasLightBridgeNE10Out +559,ShakurasLightBridgeNE10 +560,ShakurasLightBridgeNE12Out +561,ShakurasLightBridgeNE12 +562,ShakurasLightBridgeNW8Out +563,ShakurasLightBridgeNW8 +564,ShakurasLightBridgeNW10Out +565,ShakurasLightBridgeNW10 +566,ShakurasLightBridgeNW12Out +567,ShakurasLightBridgeNW12 +568,VoidMPImmortalReviveRebuild +570,ArbiterMPStasisField +571,ArbiterMPRecall +572,CorsairMPDisruptionWeb +573,MorphToGuardianMP +574,MorphToDevourerMP +575,DefilerMPConsume +576,DefilerMPDarkSwarm +577,DefilerMPPlague +578,DefilerMPBurrow +579,DefilerMPUnburrow +580,QueenMPEnsnare +581,QueenMPSpawnBroodlings +582,QueenMPInfestCommandCenter +590,ParasiticBomb +591,AdeptPhaseShift +594,LurkerHoldFire +595,LurkerRemoveHoldFire +598,LiberatorAGTarget +599,LiberatorAATarget +601,AiurLightBridgeAbandonedNE8Out +602,AiurLightBridgeAbandonedNE8 +603,AiurLightBridgeAbandonedNE10Out +604,AiurLightBridgeAbandonedNE10 +605,AiurLightBridgeAbandonedNE12Out +606,AiurLightBridgeAbandonedNE12 +607,AiurLightBridgeAbandonedNW8Out +608,AiurLightBridgeAbandonedNW8 +609,AiurLightBridgeAbandonedNW10Out +610,AiurLightBridgeAbandonedNW10 +611,AiurLightBridgeAbandonedNW12Out +612,AiurLightBridgeAbandonedNW12 +613,KD8Charge +616,AdeptPhaseShiftCancel +617,AdeptShadePhaseShiftCancel +618,SlaynElementalGrab +623,SpawnLocustsTargeted +625,MorphToTransportOverlord +628,ChannelSnipe +650,PowerSourceFast +1795,WidowMineArmed +2280,IsTransportOverlord diff --git a/sc2reader/data/LotV/44401_units.csv b/sc2reader/data/LotV/44401_units.csv new file mode 100755 index 00000000..90e47402 --- /dev/null +++ b/sc2reader/data/LotV/44401_units.csv @@ -0,0 +1,262 @@ +1,System_Snapshot_Dummy +7,DESTRUCTIBLE +8,ITEM +9,POWERUP +10,SMCAMERA +11,SMCHARACTER +12,STARMAP +13,SMSET +14,MISSILE +15,MISSILE_INVULNERABLE +16,MISSILE_HALFLIFE +17,PLACEHOLDER +18,PLACEHOLDER_AIR +19,PATHINGBLOCKER +20,BEACON +21,Colossus +24,RoboticsBay +24,RoboticsBay +25,RoboticsFacility +25,RoboticsFacility +26,Marine +27,Zergling +28,Zealot +29,VikingFighter +30,Corruptor +31,Immortal +44,TwilightCouncil +44,TwilightCouncil +44,TwilightCouncil +68,Baneling +69,BarracksTechLab +69,BarracksTechLab +69,FactoryTechLab +69,FactoryTechLab +69,TechLab +69,TechLab +96,Baneling +99,BanelingNest +99,BanelingNest +100,Marauder +101,Roach +102,Stalker +118,Lair +118,Lair +118,Lair +122,Hive +122,Hive +122,Hive +124,Armory +124,Barracks +124,Bunker +124,CommandCenter +124,EngineeringBay +124,Factory +124,FusionCore +124,GhostAcademy +124,MissileTurret +124,Refinery +124,SensorTower +124,Starport +124,SupplyDepot +135,Mothership +135,Mothership +135,Mothership +138,FleetBeacon +138,FleetBeacon +138,FleetBeacon +139,MothershipCore +139,MothershipCore +140,VoidRay +142,BarracksReactor +142,BarracksTechLab +144,FactoryReactor +144,FactoryTechLab +146,StarportReactor +146,StarportTechLab +150,SCV +154,Ghost +154,Marauder +154,Marine +154,Reaper +155,Cyclone +155,Hellion +155,HellionTank +155,SiegeTank +155,Thor +155,WidowMine +156,Banshee +156,Battlecruiser +156,Liberator +156,Medivac +156,Raven +156,VikingFighter +159,Nuke +165,Assimilator +165,CyberneticsCore +165,DarkShrine +165,FleetBeacon +165,Forge +165,Gateway +165,Nexus +165,PhotonCannon +165,Pylon +165,RoboticsBay +165,RoboticsFacility +165,Stargate +165,TemplarArchive +165,TwilightCouncil +167,Adept +167,DarkTemplar +167,HighTemplar +167,Sentry +167,Stalker +167,Zealot +168,Carrier +168,Oracle +168,Phoenix +168,Tempest +168,VoidRay +169,Colossus +169,Disruptor +169,Immortal +169,Observer +169,WarpPrism +170,Probe +174,Interceptor +174,Raven +178,BanelingNest +178,EvolutionChamber +178,Extractor +178,Hatchery +178,HydraliskDen +178,InfestationPit +178,NydusNetwork +178,RoachWarren +178,SpawningPool +178,SpineCrawler +178,Spire +178,SporeCrawler +178,UltraliskCavern +183,Overseer +188,Corruptor +188,Drone +188,Hydralisk +188,Infestor +188,Mutalisk +188,Overlord +188,Roach +188,SwarmHostMP +188,Ultralisk +188,Viper +188,Zergling +195,CommandCenter +195,CommandCenter +198,SCV +209,Adept +209,DarkTemplar +209,HighTemplar +209,Sentry +209,Stalker +209,Zealot +216,EngineeringBay +216,EngineeringBay +216,EngineeringBay +222,Barracks +222,Barracks +222,Barracks +229,SupplyDepot +229,SupplyDepot +238,Queen +253,GhostAcademy +253,GhostAcademy +255,CreepTumorQueen +260,CreepTumor +263,NydusCanal +268,Armory +268,Armory +268,Armory +285,MissileTurret +288,Banshee +289,Mutalisk +299,SiegeTank +299,SiegeTankSieged +308,MothershipCore +331,Factory +331,Factory +331,FactoryFlying +331,FactoryFlying +355,Starport +355,Starport +373,FusionCore +373,FusionCore +373,FusionCore +429,Hydralisk +446,Battlecruiser +532,Reaper +533,Drone +534,Probe +543,Ghost +544,Infestor +545,HighTemplar +557,Nuke +570,Thor +583,Hellion +586,OracleStasisTrap +605,Ultralisk +606,Phoenix +613,DarkTemplar +632,Nexus +632,Nexus +644,CyberneticsCore +644,CyberneticsCore +654,Gateway +654,Gateway +669,TemplarArchive +669,TemplarArchive +673,DarkShrine +673,DarkShrine +682,Forge +682,Forge +696,Stargate +696,Stargate +714,PhotonCannon +717,BroodLord +785,Sentry +796,Observer +846,Carrier +855,Interceptor +855,Interceptor +855,Interceptor +862,Tempest +878,SporeCrawler +906,Hatchery +906,Hatchery +912,SpawningPool +912,SpawningPool +912,SpawningPool +943,EvolutionChamber +943,EvolutionChamber +963,HydraliskDen +963,HydraliskDen +972,Spire +972,Spire +1000,UltraliskCavern +1000,UltraliskCavern +1006,InfestationPit +1006,InfestationPit +1006,InfestationPit +1015,NydusNetwork +1015,NydusNetwork +1033,RoachWarren +1033,RoachWarren +1033,RoachWarren +1058,GreaterSpire +1058,GreaterSpire +1110,LurkerDenMP +1110,LurkerDenMP +1248,Archon +1737,WidowMine +1755,SwarmHostMP +1818,LurkerMP +1819,Disruptor diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index a17bac10..5d2071c9 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -406,7 +406,7 @@ def load_build(expansion, version): # Load LotV Data lotv_builds = dict() -for version in ('base', ): +for version in ('base', '44401'): lotv_builds[version] = load_build('LotV', version) datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds, 'LotV': lotv_builds} diff --git a/sc2reader/data/ability_lookup.csv b/sc2reader/data/ability_lookup.csv index bec777b2..96e715c0 100755 --- a/sc2reader/data/ability_lookup.csv +++ b/sc2reader/data/ability_lookup.csv @@ -521,3 +521,48 @@ BypassArmorDroneCU,BypassArmorDroneCU ChannelSnipe,ChannelSnipe LockOnAir,LockOnAir PurificationNovaTargetted,PurificationNovaTargetted +SnowRefinery_Terran_ExtendingBridgeNEShort8Out,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +SnowRefinery_Terran_ExtendingBridgeNEShort8,SnowRefinery_Terran_ExtendingBridgeNEShort8 +SnowRefinery_Terran_ExtendingBridgeNWShort8Out,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +SnowRefinery_Terran_ExtendingBridgeNWShort8,SnowRefinery_Terran_ExtendingBridgeNWShort8 +PurificationNovaTargeted,PurificationNovaTargeted +AiurLightBridgeNE8Out,AiurLightBridgeNE8Out +AiurLightBridgeNE8,AiurLightBridgeNE8 +AiurLightBridgeNE10Out,AiurLightBridgeNE10Out +AiurLightBridgeNE10,AiurLightBridgeNE10 +AiurLightBridgeNE12Out,AiurLightBridgeNE12Out +AiurLightBridgeNE12,AiurLightBridgeNE12 +AiurLightBridgeNW8Out,AiurLightBridgeNW8Out +AiurLightBridgeNW8,AiurLightBridgeNW8 +AiurLightBridgeNW10Out,AiurLightBridgeNW10Out +AiurLightBridgeNW10,AiurLightBridgeNW10 +AiurLightBridgeNW12Out,AiurLightBridgeNW12Out +AiurLightBridgeNW12,AiurLightBridgeNW12 +ShakurasLightBridgeNE8Out,ShakurasLightBridgeNE8Out +ShakurasLightBridgeNE8,ShakurasLightBridgeNE8 +ShakurasLightBridgeNE10Out,ShakurasLightBridgeNE10Out +ShakurasLightBridgeNE10,ShakurasLightBridgeNE10 +ShakurasLightBridgeNE12Out,ShakurasLightBridgeNE12Out +ShakurasLightBridgeNE12,ShakurasLightBridgeNE12 +ShakurasLightBridgeNW8Out,ShakurasLightBridgeNW8Out +ShakurasLightBridgeNW8,ShakurasLightBridgeNW8 +ShakurasLightBridgeNW10Out,ShakurasLightBridgeNW10Out +ShakurasLightBridgeNW10,ShakurasLightBridgeNW10 +ShakurasLightBridgeNW12Out,ShakurasLightBridgeNW12Out +ShakurasLightBridgeNW12,ShakurasLightBridgeNW12 +AiurLightBridgeAbandonedNE8Out,AiurLightBridgeAbandonedNE8Out +AiurLightBridgeAbandonedNE8,AiurLightBridgeAbandonedNE8 +AiurLightBridgeAbandonedNE10Out,AiurLightBridgeAbandonedNE10Out +AiurLightBridgeAbandonedNE10,AiurLightBridgeAbandonedNE10 +AiurLightBridgeAbandonedNE12Out,AiurLightBridgeAbandonedNE12Out +AiurLightBridgeAbandonedNE12,AiurLightBridgeAbandonedNE12 +AiurLightBridgeAbandonedNW8Out,AiurLightBridgeAbandonedNW8Out +AiurLightBridgeAbandonedNW8,AiurLightBridgeAbandonedNW8 +AiurLightBridgeAbandonedNW10Out,AiurLightBridgeAbandonedNW10Out +AiurLightBridgeAbandonedNW10,AiurLightBridgeAbandonedNW10 +AiurLightBridgeAbandonedNW12Out,AiurLightBridgeAbandonedNW12Out +AiurLightBridgeAbandonedNW12,AiurLightBridgeAbandonedNW12 +SlaynElementalGrab,SlaynElementalGrab +PowerSourceFast,PowerSourceFast +WidowMineArmed,WidowMineArmed +IsTransportOverlord,IsTransportOverlord From 82fff8c93801ea60221a11d477f0690eba8d1f9e Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 14:59:21 -0400 Subject: [PATCH 226/238] add test for 3.4.0. it passed before we did anything for it, and it still passes. --- test_replays/3.4.0/issueYY.SC2Replay | Bin 0 -> 96395 bytes test_replays/test_all.py | 4 ++++ 2 files changed, 4 insertions(+) create mode 100755 test_replays/3.4.0/issueYY.SC2Replay diff --git a/test_replays/3.4.0/issueYY.SC2Replay b/test_replays/3.4.0/issueYY.SC2Replay new file mode 100755 index 0000000000000000000000000000000000000000..2b9ce2dca91a136caebbed85ba4cc1d6c528c137 GIT binary patch literal 96395 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 Date: Wed, 13 Jul 2016 15:09:43 -0400 Subject: [PATCH 227/238] register datapack so that the new ability info is actually used --- sc2reader/resources.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index aa00a880..17dea9e2 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -593,6 +593,7 @@ def register_default_datapacks(self): self.register_datapack(datapacks['HotS']['24764'], lambda r: r.expansion == 'HotS' and 24764 <= r.build < 38215) self.register_datapack(datapacks['HotS']['38215'], lambda r: r.expansion == 'HotS' and 38215 <= r.build) self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) + self.register_datapack(datapacks['LotV']['44401'], lambda r: r.expansion == 'LotV' and 44401 <= r.build) # Internal Methods def _get_reader(self, data_file): From 2d36f82ce7b8d4ba56270bb71b44480742fdf634 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 16:11:52 -0400 Subject: [PATCH 228/238] 44401 units, take 2 --- sc2reader/data/LotV/44401_units.csv | 1062 ++++++++++++++++++++------- 1 file changed, 815 insertions(+), 247 deletions(-) diff --git a/sc2reader/data/LotV/44401_units.csv b/sc2reader/data/LotV/44401_units.csv index 90e47402..ce3f67b3 100755 --- a/sc2reader/data/LotV/44401_units.csv +++ b/sc2reader/data/LotV/44401_units.csv @@ -13,250 +13,818 @@ 18,PLACEHOLDER_AIR 19,PATHINGBLOCKER 20,BEACON -21,Colossus -24,RoboticsBay -24,RoboticsBay -25,RoboticsFacility -25,RoboticsFacility -26,Marine -27,Zergling -28,Zealot -29,VikingFighter -30,Corruptor -31,Immortal -44,TwilightCouncil -44,TwilightCouncil -44,TwilightCouncil -68,Baneling -69,BarracksTechLab -69,BarracksTechLab -69,FactoryTechLab -69,FactoryTechLab -69,TechLab -69,TechLab -96,Baneling -99,BanelingNest -99,BanelingNest -100,Marauder -101,Roach -102,Stalker -118,Lair -118,Lair -118,Lair -122,Hive -122,Hive -122,Hive -124,Armory -124,Barracks -124,Bunker -124,CommandCenter -124,EngineeringBay -124,Factory -124,FusionCore -124,GhostAcademy -124,MissileTurret -124,Refinery -124,SensorTower -124,Starport -124,SupplyDepot -135,Mothership -135,Mothership -135,Mothership -138,FleetBeacon -138,FleetBeacon -138,FleetBeacon -139,MothershipCore -139,MothershipCore -140,VoidRay -142,BarracksReactor -142,BarracksTechLab -144,FactoryReactor -144,FactoryTechLab -146,StarportReactor -146,StarportTechLab -150,SCV -154,Ghost -154,Marauder -154,Marine -154,Reaper -155,Cyclone -155,Hellion -155,HellionTank -155,SiegeTank -155,Thor -155,WidowMine -156,Banshee -156,Battlecruiser -156,Liberator -156,Medivac -156,Raven -156,VikingFighter -159,Nuke -165,Assimilator -165,CyberneticsCore -165,DarkShrine -165,FleetBeacon -165,Forge -165,Gateway -165,Nexus -165,PhotonCannon -165,Pylon -165,RoboticsBay -165,RoboticsFacility -165,Stargate -165,TemplarArchive -165,TwilightCouncil -167,Adept -167,DarkTemplar -167,HighTemplar -167,Sentry -167,Stalker -167,Zealot -168,Carrier -168,Oracle -168,Phoenix -168,Tempest -168,VoidRay -169,Colossus -169,Disruptor -169,Immortal -169,Observer -169,WarpPrism -170,Probe -174,Interceptor -174,Raven -178,BanelingNest -178,EvolutionChamber -178,Extractor -178,Hatchery -178,HydraliskDen -178,InfestationPit -178,NydusNetwork -178,RoachWarren -178,SpawningPool -178,SpineCrawler -178,Spire -178,SporeCrawler -178,UltraliskCavern -183,Overseer -188,Corruptor -188,Drone -188,Hydralisk -188,Infestor -188,Mutalisk -188,Overlord -188,Roach -188,SwarmHostMP -188,Ultralisk -188,Viper -188,Zergling -195,CommandCenter -195,CommandCenter -198,SCV -209,Adept -209,DarkTemplar -209,HighTemplar -209,Sentry -209,Stalker -209,Zealot -216,EngineeringBay -216,EngineeringBay -216,EngineeringBay -222,Barracks -222,Barracks -222,Barracks -229,SupplyDepot -229,SupplyDepot -238,Queen -253,GhostAcademy -253,GhostAcademy -255,CreepTumorQueen -260,CreepTumor -263,NydusCanal -268,Armory -268,Armory -268,Armory -285,MissileTurret -288,Banshee -289,Mutalisk -299,SiegeTank -299,SiegeTankSieged -308,MothershipCore -331,Factory -331,Factory -331,FactoryFlying -331,FactoryFlying -355,Starport -355,Starport -373,FusionCore -373,FusionCore -373,FusionCore -429,Hydralisk -446,Battlecruiser -532,Reaper -533,Drone -534,Probe -543,Ghost -544,Infestor -545,HighTemplar -557,Nuke -570,Thor -583,Hellion -586,OracleStasisTrap -605,Ultralisk -606,Phoenix -613,DarkTemplar -632,Nexus -632,Nexus -644,CyberneticsCore -644,CyberneticsCore -654,Gateway -654,Gateway -669,TemplarArchive -669,TemplarArchive -673,DarkShrine -673,DarkShrine -682,Forge -682,Forge -696,Stargate -696,Stargate -714,PhotonCannon -717,BroodLord -785,Sentry -796,Observer -846,Carrier -855,Interceptor -855,Interceptor -855,Interceptor -862,Tempest -878,SporeCrawler -906,Hatchery -906,Hatchery -912,SpawningPool -912,SpawningPool -912,SpawningPool -943,EvolutionChamber -943,EvolutionChamber -963,HydraliskDen -963,HydraliskDen -972,Spire -972,Spire -1000,UltraliskCavern -1000,UltraliskCavern -1006,InfestationPit -1006,InfestationPit -1006,InfestationPit -1015,NydusNetwork -1015,NydusNetwork -1033,RoachWarren -1033,RoachWarren -1033,RoachWarren -1058,GreaterSpire -1058,GreaterSpire -1110,LurkerDenMP -1110,LurkerDenMP -1248,Archon -1737,WidowMine -1755,SwarmHostMP -1818,LurkerMP -1819,Disruptor +21,Ball +22,StereoscopicOptionsUnit +23,Colossus +24,TechLab +25,Reactor +27,InfestorTerran +28,BanelingCocoon +29,Baneling +30,Mothership +31,PointDefenseDrone +32,Changeling +33,ChangelingZealot +34,ChangelingMarineShield +35,ChangelingMarine +36,ChangelingZerglingWings +37,ChangelingZergling +39,CommandCenter +40,SupplyDepot +41,Refinery +42,Barracks +43,EngineeringBay +44,MissileTurret +45,Bunker +46,SensorTower +47,GhostAcademy +48,Factory +49,Starport +51,Armory +52,FusionCore +53,AutoTurret +54,SiegeTankSieged +55,SiegeTank +56,VikingAssault +57,VikingFighter +58,CommandCenterFlying +59,BarracksTechLab +60,BarracksReactor +61,FactoryTechLab +62,FactoryReactor +63,StarportTechLab +64,StarportReactor +65,FactoryFlying +66,StarportFlying +67,SCV +68,BarracksFlying +69,SupplyDepotLowered +70,Marine +71,Reaper +72,Ghost +73,Marauder +74,Thor +75,Hellion +76,Medivac +77,Banshee +78,Raven +79,Battlecruiser +80,Nuke +81,Nexus +82,Pylon +83,Assimilator +84,Gateway +85,Forge +86,FleetBeacon +87,TwilightCouncil +88,PhotonCannon +89,Stargate +90,TemplarArchive +91,DarkShrine +92,RoboticsBay +93,RoboticsFacility +94,CyberneticsCore +95,Zealot +96,Stalker +97,HighTemplar +98,DarkTemplar +99,Sentry +100,Phoenix +101,Carrier +102,VoidRay +103,WarpPrism +104,Observer +105,Immortal +106,Probe +107,Interceptor +108,Hatchery +109,CreepTumor +110,Extractor +111,SpawningPool +112,EvolutionChamber +113,HydraliskDen +114,Spire +115,UltraliskCavern +116,InfestationPit +117,NydusNetwork +118,BanelingNest +119,RoachWarren +120,SpineCrawler +121,SporeCrawler +122,Lair +123,Hive +124,GreaterSpire +125,Egg +126,Drone +127,Zergling +128,Overlord +129,Hydralisk +130,Mutalisk +131,Ultralisk +132,Roach +133,Infestor +134,Corruptor +135,BroodLordCocoon +136,BroodLord +137,BanelingBurrowed +138,DroneBurrowed +139,HydraliskBurrowed +140,RoachBurrowed +141,ZerglingBurrowed +142,InfestorTerranBurrowed +143,RedstoneLavaCritterBurrowed +144,RedstoneLavaCritterInjuredBurrowed +145,RedstoneLavaCritter +146,RedstoneLavaCritterInjured +147,QueenBurrowed +148,Queen +149,InfestorBurrowed +150,OverlordCocoon +151,Overseer +152,PlanetaryFortress +153,UltraliskBurrowed +154,OrbitalCommand +155,WarpGate +156,OrbitalCommandFlying +157,ForceField +158,WarpPrismPhasing +159,CreepTumorBurrowed +160,CreepTumorQueen +161,SpineCrawlerUprooted +162,SporeCrawlerUprooted +163,Archon +164,NydusCanal +165,BroodlingEscort +166,GhostAlternate +167,GhostNova +168,RichMineralField +169,RichMineralField750 +171,XelNagaTower +175,InfestedTerransEgg +176,Larva +177,ReaperPlaceholder +178,MarineACGluescreenDummy +179,FirebatACGluescreenDummy +180,MedicACGluescreenDummy +181,MarauderACGluescreenDummy +182,VultureACGluescreenDummy +183,SiegeTankACGluescreenDummy +184,VikingACGluescreenDummy +185,BansheeACGluescreenDummy +186,BattlecruiserACGluescreenDummy +187,OrbitalCommandACGluescreenDummy +188,BunkerACGluescreenDummy +189,MissileTurretACGluescreenDummy +190,HellbatACGluescreenDummy +191,GoliathACGluescreenDummy +192,CycloneACGluescreenDummy +193,WraithACGluescreenDummy +194,ScienceVesselACGluescreenDummy +195,HerculesACGluescreenDummy +196,ThorACGluescreenDummy +197,PerditionTurretACGluescreenDummy +198,FlamingBettyACGluescreenDummy +199,DevastationTurretACGluescreenDummy +200,BlasterBillyACGluescreenDummy +201,SpinningDizzyACGluescreenDummy +202,ZerglingKerriganACGluescreenDummy +203,RaptorACGluescreenDummy +204,QueenCoopACGluescreenDummy +205,HydraliskACGluescreenDummy +206,HydraliskLurkerACGluescreenDummy +207,MutaliskBroodlordACGluescreenDummy +208,BroodLordACGluescreenDummy +209,UltraliskACGluescreenDummy +210,TorrasqueACGluescreenDummy +211,OverseerACGluescreenDummy +212,LurkerACGluescreenDummy +213,SpineCrawlerACGluescreenDummy +214,SporeCrawlerACGluescreenDummy +215,NydusNetworkACGluescreenDummy +216,OmegaNetworkACGluescreenDummy +217,ZerglingZagaraACGluescreenDummy +218,SwarmlingACGluescreenDummy +219,BanelingACGluescreenDummy +220,SplitterlingACGluescreenDummy +221,AberrationACGluescreenDummy +222,ScourgeACGluescreenDummy +223,CorruptorACGluescreenDummy +224,BileLauncherACGluescreenDummy +225,SwarmQueenACGluescreenDummy +226,RoachACGluescreenDummy +227,RoachVileACGluescreenDummy +228,RavagerACGluescreenDummy +229,SwarmHostACGluescreenDummy +230,MutaliskACGluescreenDummy +231,GuardianACGluescreenDummy +232,DevourerACGluescreenDummy +233,ViperACGluescreenDummy +234,BrutaliskACGluescreenDummy +235,LeviathanACGluescreenDummy +236,ZealotACGluescreenDummy +237,ZealotAiurACGluescreenDummy +238,DragoonACGluescreenDummy +239,HighTemplarACGluescreenDummy +240,ArchonACGluescreenDummy +241,ImmortalACGluescreenDummy +242,ObserverACGluescreenDummy +243,PhoenixAiurACGluescreenDummy +244,ReaverACGluescreenDummy +245,TempestACGluescreenDummy +246,PhotonCannonACGluescreenDummy +247,ZealotVorazunACGluescreenDummy +248,ZealotShakurasACGluescreenDummy +249,StalkerShakurasACGluescreenDummy +250,DarkTemplarShakurasACGluescreenDummy +251,CorsairACGluescreenDummy +252,VoidRayACGluescreenDummy +253,VoidRayShakurasACGluescreenDummy +254,OracleACGluescreenDummy +255,DarkArchonACGluescreenDummy +256,DarkPylonACGluescreenDummy +257,ZealotPurifierACGluescreenDummy +258,SentryPurifierACGluescreenDummy +259,ImmortalKaraxACGluescreenDummy +260,ColossusACGluescreenDummy +261,ColossusPurifierACGluescreenDummy +262,PhoenixPurifierACGluescreenDummy +263,CarrierACGluescreenDummy +264,CarrierAiurACGluescreenDummy +265,KhaydarinMonolithACGluescreenDummy +266,ShieldBatteryACGluescreenDummy +271,NeedleSpinesWeapon +272,CorruptionWeapon +273,InfestedTerransWeapon +274,NeuralParasiteWeapon +275,PointDefenseDroneReleaseWeapon +276,HunterSeekerWeapon +277,MULE +279,ThorAAWeapon +280,PunisherGrenadesLMWeapon +281,VikingFighterWeapon +282,ATALaserBatteryLMWeapon +283,ATSLaserBatteryLMWeapon +284,LongboltMissileWeapon +285,D8ChargeWeapon +286,YamatoWeapon +287,IonCannonsWeapon +288,AcidSalivaWeapon +289,SpineCrawlerWeapon +290,SporeCrawlerWeapon +291,GlaiveWurmWeapon +292,GlaiveWurmM2Weapon +293,GlaiveWurmM3Weapon +294,StalkerWeapon +295,EMP2Weapon +296,BacklashRocketsLMWeapon +297,PhotonCannonWeapon +298,ParasiteSporeWeapon +300,Broodling +301,BroodLordBWeapon +304,AutoTurretReleaseWeapon +305,LarvaReleaseMissile +306,AcidSpinesWeapon +307,FrenzyWeapon +308,ContaminateWeapon +320,BeaconRally +321,BeaconArmy +322,BeaconAttack +323,BeaconDefend +324,BeaconHarass +325,BeaconIdle +326,BeaconAuto +327,BeaconDetect +328,BeaconScout +329,BeaconClaim +330,BeaconExpand +331,BeaconCustom1 +332,BeaconCustom2 +333,BeaconCustom3 +334,BeaconCustom4 +340,Rocks2x2NonConjoined +341,FungalGrowthMissile +342,NeuralParasiteTentacleMissile +343,Beacon_Protoss +344,Beacon_ProtossSmall +345,Beacon_Terran +346,Beacon_TerranSmall +347,Beacon_Zerg +348,Beacon_ZergSmall +349,Lyote +350,CarrionBird +351,KarakMale +352,KarakFemale +353,UrsadakFemaleExotic +354,UrsadakMale +355,UrsadakFemale +356,UrsadakCalf +357,UrsadakMaleExotic +358,UtilityBot +359,CommentatorBot1 +360,CommentatorBot2 +361,CommentatorBot3 +362,CommentatorBot4 +363,Scantipede +364,Dog +365,Sheep +366,Cow +367,InfestedTerransEggPlacement +368,InfestorTerransWeapon +369,MineralField +370,VespeneGeyser +371,SpacePlatformGeyser +372,RichVespeneGeyser +373,DestructibleSearchlight +374,DestructibleBullhornLights +375,DestructibleStreetlight +376,DestructibleSpacePlatformSign +377,DestructibleStoreFrontCityProps +378,DestructibleBillboardTall +379,DestructibleBillboardScrollingText +380,DestructibleSpacePlatformBarrier +381,DestructibleSignsDirectional +382,DestructibleSignsConstruction +383,DestructibleSignsFunny +384,DestructibleSignsIcons +385,DestructibleSignsWarning +386,DestructibleGarage +387,DestructibleGarageLarge +388,DestructibleTrafficSignal +389,TrafficSignal +390,BraxisAlphaDestructible1x1 +391,BraxisAlphaDestructible2x2 +392,DestructibleDebris4x4 +393,DestructibleDebris6x6 +394,DestructibleRock2x4Vertical +395,DestructibleRock2x4Horizontal +396,DestructibleRock2x6Vertical +397,DestructibleRock2x6Horizontal +398,DestructibleRock4x4 +399,DestructibleRock6x6 +400,DestructibleRampDiagonalHugeULBR +401,DestructibleRampDiagonalHugeBLUR +402,DestructibleRampVerticalHuge +403,DestructibleRampHorizontalHuge +404,DestructibleDebrisRampDiagonalHugeULBR +405,DestructibleDebrisRampDiagonalHugeBLUR +406,OverlordGenerateCreepKeybind +407,MengskStatueAlone +408,MengskStatue +409,WolfStatue +410,GlobeStatue +411,Weapon +412,GlaiveWurmBounceWeapon +413,BroodLordWeapon +414,BroodLordAWeapon +415,CreepBlocker1x1 +416,PermanentCreepBlocker1x1 +417,PathingBlocker1x1 +418,PathingBlocker2x2 +419,AutoTestAttackTargetGround +420,AutoTestAttackTargetAir +421,AutoTestAttacker +422,HelperEmitterSelectionArrow +423,MultiKillObject +424,ShapeGolfball +425,ShapeCone +426,ShapeCube +427,ShapeCylinder +428,ShapeDodecahedron +429,ShapeIcosahedron +430,ShapeOctahedron +431,ShapePyramid +432,ShapeRoundedCube +433,ShapeSphere +434,ShapeTetrahedron +435,ShapeThickTorus +436,ShapeThinTorus +437,ShapeTorus +438,Shape4PointStar +439,Shape5PointStar +440,Shape6PointStar +441,Shape8PointStar +442,ShapeArrowPointer +443,ShapeBowl +444,ShapeBox +445,ShapeCapsule +446,ShapeCrescentMoon +447,ShapeDecahedron +448,ShapeDiamond +449,ShapeFootball +450,ShapeGemstone +451,ShapeHeart +452,ShapeJack +453,ShapePlusSign +454,ShapeShamrock +455,ShapeSpade +456,ShapeTube +457,ShapeEgg +458,ShapeYenSign +459,ShapeX +460,ShapeWatermelon +461,ShapeWonSign +462,ShapeTennisball +463,ShapeStrawberry +464,ShapeSmileyFace +465,ShapeSoccerball +466,ShapeRainbow +467,ShapeSadFace +468,ShapePoundSign +469,ShapePear +470,ShapePineapple +471,ShapeOrange +472,ShapePeanut +473,ShapeO +474,ShapeLemon +475,ShapeMoneyBag +476,ShapeHorseshoe +477,ShapeHockeyStick +478,ShapeHockeyPuck +479,ShapeHand +480,ShapeGolfClub +481,ShapeGrape +482,ShapeEuroSign +483,ShapeDollarSign +484,ShapeBasketball +485,ShapeCarrot +486,ShapeCherry +487,ShapeBaseball +488,ShapeBaseballBat +489,ShapeBanana +490,ShapeApple +491,ShapeCashLarge +492,ShapeCashMedium +493,ShapeCashSmall +494,ShapeFootballColored +495,ShapeLemonSmall +496,ShapeOrangeSmall +497,ShapeTreasureChestOpen +498,ShapeTreasureChestClosed +499,ShapeWatermelonSmall +500,UnbuildableRocksDestructible +501,UnbuildableBricksDestructible +502,UnbuildablePlatesDestructible +503,Debris2x2NonConjoined +504,EnemyPathingBlocker1x1 +505,EnemyPathingBlocker2x2 +506,EnemyPathingBlocker4x4 +507,EnemyPathingBlocker8x8 +508,EnemyPathingBlocker16x16 +509,ScopeTest +510,SentryACGluescreenDummy +511,MineralField750 +527,HellionTank +528,CollapsibleTerranTowerDebris +529,DebrisRampLeft +530,DebrisRampRight +531,MothershipCore +535,LocustMP +536,CollapsibleRockTowerDebris +537,NydusCanalAttacker +538,NydusCanalCreeper +539,SwarmHostBurrowedMP +540,SwarmHostMP +541,Oracle +542,Tempest +543,WarHound +544,WidowMine +545,Viper +546,WidowMineBurrowed +547,LurkerMPEgg +548,LurkerMP +549,LurkerMPBurrowed +550,LurkerDenMP +551,ExtendingBridgeNEWide8Out +552,ExtendingBridgeNEWide8 +553,ExtendingBridgeNWWide8Out +554,ExtendingBridgeNWWide8 +555,ExtendingBridgeNEWide10Out +556,ExtendingBridgeNEWide10 +557,ExtendingBridgeNWWide10Out +558,ExtendingBridgeNWWide10 +559,ExtendingBridgeNEWide12Out +560,ExtendingBridgeNEWide12 +561,ExtendingBridgeNWWide12Out +562,ExtendingBridgeNWWide12 +564,CollapsibleRockTowerDebrisRampRight +565,CollapsibleRockTowerDebrisRampLeft +566,XelNaga_Caverns_DoorE +567,XelNaga_Caverns_DoorEOpened +568,XelNaga_Caverns_DoorN +569,XelNaga_Caverns_DoorNE +570,XelNaga_Caverns_DoorNEOpened +571,XelNaga_Caverns_DoorNOpened +572,XelNaga_Caverns_DoorNW +573,XelNaga_Caverns_DoorNWOpened +574,XelNaga_Caverns_DoorS +575,XelNaga_Caverns_DoorSE +576,XelNaga_Caverns_DoorSEOpened +577,XelNaga_Caverns_DoorSOpened +578,XelNaga_Caverns_DoorSW +579,XelNaga_Caverns_DoorSWOpened +580,XelNaga_Caverns_DoorW +581,XelNaga_Caverns_DoorWOpened +582,XelNaga_Caverns_Floating_BridgeNE8Out +583,XelNaga_Caverns_Floating_BridgeNE8 +584,XelNaga_Caverns_Floating_BridgeNW8Out +585,XelNaga_Caverns_Floating_BridgeNW8 +586,XelNaga_Caverns_Floating_BridgeNE10Out +587,XelNaga_Caverns_Floating_BridgeNE10 +588,XelNaga_Caverns_Floating_BridgeNW10Out +589,XelNaga_Caverns_Floating_BridgeNW10 +590,XelNaga_Caverns_Floating_BridgeNE12Out +591,XelNaga_Caverns_Floating_BridgeNE12 +592,XelNaga_Caverns_Floating_BridgeNW12Out +593,XelNaga_Caverns_Floating_BridgeNW12 +594,XelNaga_Caverns_Floating_BridgeH8Out +595,XelNaga_Caverns_Floating_BridgeH8 +596,XelNaga_Caverns_Floating_BridgeV8Out +597,XelNaga_Caverns_Floating_BridgeV8 +598,XelNaga_Caverns_Floating_BridgeH10Out +599,XelNaga_Caverns_Floating_BridgeH10 +600,XelNaga_Caverns_Floating_BridgeV10Out +601,XelNaga_Caverns_Floating_BridgeV10 +602,XelNaga_Caverns_Floating_BridgeH12Out +603,XelNaga_Caverns_Floating_BridgeH12 +604,XelNaga_Caverns_Floating_BridgeV12Out +605,XelNaga_Caverns_Floating_BridgeV12 +608,CollapsibleTerranTowerPushUnitRampLeft +609,CollapsibleTerranTowerPushUnitRampRight +612,CollapsibleRockTowerPushUnit +613,CollapsibleTerranTowerPushUnit +614,CollapsibleRockTowerPushUnitRampRight +615,CollapsibleRockTowerPushUnitRampLeft +616,DigesterCreepSprayTargetUnit +617,DigesterCreepSprayUnit +618,NydusCanalAttackerWeapon +619,ViperConsumeStructureWeapon +622,ResourceBlocker +623,TempestWeapon +624,YoinkMissile +628,YoinkVikingAirMissile +630,YoinkVikingGroundMissile +632,YoinkSiegeTankMissile +634,WarHoundWeapon +636,EyeStalkWeapon +639,WidowMineWeapon +640,WidowMineAirWeapon +641,MothershipCoreWeaponWeapon +642,TornadoMissileWeapon +643,TornadoMissileDummyWeapon +644,TalonsMissileWeapon +645,CreepTumorMissile +646,LocustMPEggAMissileWeapon +647,LocustMPEggBMissileWeapon +648,LocustMPWeapon +650,RepulsorCannonWeapon +654,CollapsibleRockTowerDiagonal +655,CollapsibleTerranTowerDiagonal +656,CollapsibleTerranTowerRampLeft +657,CollapsibleTerranTowerRampRight +658,Ice2x2NonConjoined +659,IceProtossCrates +660,ProtossCrates +661,TowerMine +662,PickupPalletGas +663,PickupPalletMinerals +664,PickupScrapSalvage1x1 +665,PickupScrapSalvage2x2 +666,PickupScrapSalvage3x3 +667,RoughTerrain +668,UnbuildableBricksSmallUnit +669,UnbuildablePlatesSmallUnit +670,UnbuildablePlatesUnit +671,UnbuildableRocksSmallUnit +672,XelNagaHealingShrine +673,InvisibleTargetDummy +674,ProtossVespeneGeyser +675,CollapsibleRockTower +676,CollapsibleTerranTower +677,ThornLizard +678,CleaningBot +679,DestructibleRock6x6Weak +680,ProtossSnakeSegmentDemo +681,PhysicsCapsule +682,PhysicsCube +683,PhysicsCylinder +684,PhysicsKnot +685,PhysicsL +686,PhysicsPrimitives +687,PhysicsSphere +688,PhysicsStar +689,CreepBlocker4x4 +690,DestructibleCityDebris2x4Vertical +691,DestructibleCityDebris2x4Horizontal +692,DestructibleCityDebris2x6Vertical +693,DestructibleCityDebris2x6Horizontal +694,DestructibleCityDebris4x4 +695,DestructibleCityDebris6x6 +696,DestructibleCityDebrisHugeDiagonalBLUR +697,DestructibleCityDebrisHugeDiagonalULBR +698,TestZerg +699,PathingBlockerRadius1 +700,DestructibleRockEx12x4Vertical +701,DestructibleRockEx12x4Horizontal +702,DestructibleRockEx12x6Vertical +703,DestructibleRockEx12x6Horizontal +704,DestructibleRockEx14x4 +705,DestructibleRockEx16x6 +706,DestructibleRockEx1DiagonalHugeULBR +707,DestructibleRockEx1DiagonalHugeBLUR +708,DestructibleRockEx1VerticalHuge +709,DestructibleRockEx1HorizontalHuge +710,DestructibleIce2x4Vertical +711,DestructibleIce2x4Horizontal +712,DestructibleIce2x6Vertical +713,DestructibleIce2x6Horizontal +714,DestructibleIce4x4 +715,DestructibleIce6x6 +716,DestructibleIceDiagonalHugeULBR +717,DestructibleIceDiagonalHugeBLUR +718,DestructibleIceVerticalHuge +719,DestructibleIceHorizontalHuge +720,DesertPlanetSearchlight +721,DesertPlanetStreetlight +722,UnbuildableBricksUnit +723,UnbuildableRocksUnit +724,ZerusDestructibleArch +725,Artosilope +726,Anteplott +727,LabBot +728,Crabeetle +729,CollapsibleRockTowerRampRight +730,CollapsibleRockTowerRampLeft +731,LabMineralField +732,LabMineralField750 +748,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +749,SnowRefinery_Terran_ExtendingBridgeNEShort8 +750,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +751,SnowRefinery_Terran_ExtendingBridgeNWShort8 +756,Tarsonis_DoorN +757,Tarsonis_DoorNLowered +758,Tarsonis_DoorNE +759,Tarsonis_DoorNELowered +760,Tarsonis_DoorE +761,Tarsonis_DoorELowered +762,Tarsonis_DoorNW +763,Tarsonis_DoorNWLowered +764,RavagerCocoon +765,Ravager +766,Liberator +767,RavagerBurrowed +769,ThorAP +770,Cyclone +771,LocustMPFlying +772,Disruptor +773,Adept +774,AiurLightBridgeNE8Out +775,AiurLightBridgeNE8 +776,AiurLightBridgeNE10Out +777,AiurLightBridgeNE10 +778,AiurLightBridgeNE12Out +779,AiurLightBridgeNE12 +780,AiurLightBridgeNW8Out +781,AiurLightBridgeNW8 +782,AiurLightBridgeNW10Out +783,AiurLightBridgeNW10 +784,AiurLightBridgeNW12Out +785,AiurLightBridgeNW12 +786,AiurTempleBridgeNE8Out +788,AiurTempleBridgeNE10Out +790,AiurTempleBridgeNE12Out +792,AiurTempleBridgeNW8Out +794,AiurTempleBridgeNW10Out +796,AiurTempleBridgeNW12Out +798,ShakurasLightBridgeNE8Out +799,ShakurasLightBridgeNE8 +800,ShakurasLightBridgeNE10Out +801,ShakurasLightBridgeNE10 +802,ShakurasLightBridgeNE12Out +803,ShakurasLightBridgeNE12 +804,ShakurasLightBridgeNW8Out +805,ShakurasLightBridgeNW8 +806,ShakurasLightBridgeNW10Out +807,ShakurasLightBridgeNW10 +808,ShakurasLightBridgeNW12Out +809,ShakurasLightBridgeNW12 +810,VoidMPImmortalReviveCorpse +811,GuardianCocoonMP +812,GuardianMP +813,DevourerCocoonMP +814,DevourerMP +815,DefilerMPBurrowed +816,DefilerMP +817,OracleStasisTrap +818,DisruptorPhased +819,LiberatorAG +820,AiurLightBridgeAbandonedNE8Out +821,AiurLightBridgeAbandonedNE8 +822,AiurLightBridgeAbandonedNE10Out +823,AiurLightBridgeAbandonedNE10 +824,AiurLightBridgeAbandonedNE12Out +825,AiurLightBridgeAbandonedNE12 +826,AiurLightBridgeAbandonedNW8Out +827,AiurLightBridgeAbandonedNW8 +828,AiurLightBridgeAbandonedNW10Out +829,AiurLightBridgeAbandonedNW10 +830,AiurLightBridgeAbandonedNW12Out +831,AiurLightBridgeAbandonedNW12 +832,CollapsiblePurifierTowerDebris +833,PurifierRichMineralField +834,PurifierRichMineralField750 +849,CollapsiblePurifierTowerPushUnit +851,LocustMPPrecursor +852,ReleaseInterceptorsBeacon +853,AdeptPhaseShift +854,RavagerCorrosiveBileMissile +855,HydraliskImpaleMissile +856,CycloneMissileLargeAir +857,CycloneMissile +858,CycloneMissileLarge +859,ThorAALance +860,OracleWeapon +861,TempestWeaponGround +862,RavagerWeaponMissile +863,ScoutMPAirWeaponLeft +864,ScoutMPAirWeaponRight +865,ArbiterMPWeaponMissile +866,GuardianMPWeapon +867,DevourerMPWeaponMissile +868,DefilerMPDarkSwarmWeapon +869,QueenMPEnsnareMissile +870,QueenMPSpawnBroodlingsMissile +871,LightningBombWeapon +872,HERCPlacement +873,GrappleWeapon +876,CausticSprayMissile +877,ParasiticBombMissile +878,ParasiticBombDummy +879,AdeptWeapon +880,AdeptUpgradeWeapon +881,LiberatorMissile +882,LiberatorDamageMissile +883,LiberatorAGMissile +884,KD8Charge +885,KD8ChargeWeapon +887,SlaynElementalGrabWeapon +888,SlaynElementalGrabAirUnit +889,SlaynElementalGrabGroundUnit +890,SlaynElementalWeapon +894,HERC +895,Moopy +896,Replicant +897,SeekerMissile +898,AiurTempleBridgeDestructibleNE8Out +899,AiurTempleBridgeDestructibleNE10Out +900,AiurTempleBridgeDestructibleNE12Out +901,AiurTempleBridgeDestructibleNW8Out +902,AiurTempleBridgeDestructibleNW10Out +903,AiurTempleBridgeDestructibleNW12Out +904,AiurTempleBridgeDestructibleSW8Out +905,AiurTempleBridgeDestructibleSW10Out +906,AiurTempleBridgeDestructibleSW12Out +907,AiurTempleBridgeDestructibleSE8Out +908,AiurTempleBridgeDestructibleSE10Out +909,AiurTempleBridgeDestructibleSE12Out +911,FlyoverUnit +912,CorsairMP +913,ScoutMP +915,ArbiterMP +916,ScourgeMP +917,DefilerMPPlagueWeapon +918,QueenMP +919,XelNagaDestructibleRampBlocker6S +920,XelNagaDestructibleRampBlocker6SE +921,XelNagaDestructibleRampBlocker6E +922,XelNagaDestructibleRampBlocker6NE +923,XelNagaDestructibleRampBlocker6N +924,XelNagaDestructibleRampBlocker6NW +925,XelNagaDestructibleRampBlocker6W +926,XelNagaDestructibleRampBlocker6SW +927,XelNagaDestructibleRampBlocker8S +928,XelNagaDestructibleRampBlocker8SE +929,XelNagaDestructibleRampBlocker8E +930,XelNagaDestructibleRampBlocker8NE +931,XelNagaDestructibleRampBlocker8N +932,XelNagaDestructibleRampBlocker8NW +933,XelNagaDestructibleRampBlocker8W +934,XelNagaDestructibleRampBlocker8SW +935,ReptileCrate +936,SlaynSwarmHostSpawnFlyer +937,SlaynElemental +938,PurifierVespeneGeyser +939,ShakurasVespeneGeyser +940,CollapsiblePurifierTowerDiagonal +941,CreepOnlyBlocker4x4 +942,PurifierMineralField +943,PurifierMineralField750 +944,Beacon_Nova +945,Beacon_NovaSmall +946,Ursadon +947,Ursula +948,TransportOverlordCocoon +949,OverlordTransport +950,PylonOvercharged +951,BypassArmorDrone +952,AdeptPiercingWeapon +953,CorrosiveParasiteWeapon From 2f7bfcfd1f12a7e289f6b29d7dec6ab49d747d7b Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 16:21:27 -0400 Subject: [PATCH 229/238] more units for unit lookup yay --- sc2reader/data/unit_lookup.csv | 184 +++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) diff --git a/sc2reader/data/unit_lookup.csv b/sc2reader/data/unit_lookup.csv index aa662358..e00ccb93 100755 --- a/sc2reader/data/unit_lookup.csv +++ b/sc2reader/data/unit_lookup.csv @@ -655,3 +655,187 @@ TransportOverlordCocoon,TransportOverlordCocoon OverlordTransport,OverlordTransport BypassArmorDrone,BypassArmorDrone CorrosiveParasiteWeapon,CorrosiveParasiteWeapon +GhostAlternate,GhostAlternate +GhostNova,GhostNova +MarineACGluescreenDummy,MarineACGluescreenDummy +FirebatACGluescreenDummy,FirebatACGluescreenDummy +MedicACGluescreenDummy,MedicACGluescreenDummy +MarauderACGluescreenDummy,MarauderACGluescreenDummy +VultureACGluescreenDummy,VultureACGluescreenDummy +SiegeTankACGluescreenDummy,SiegeTankACGluescreenDummy +VikingACGluescreenDummy,VikingACGluescreenDummy +BansheeACGluescreenDummy,BansheeACGluescreenDummy +BattlecruiserACGluescreenDummy,BattlecruiserACGluescreenDummy +OrbitalCommandACGluescreenDummy,OrbitalCommandACGluescreenDummy +BunkerACGluescreenDummy,BunkerACGluescreenDummy +MissileTurretACGluescreenDummy,MissileTurretACGluescreenDummy +HellbatACGluescreenDummy,HellbatACGluescreenDummy +GoliathACGluescreenDummy,GoliathACGluescreenDummy +CycloneACGluescreenDummy,CycloneACGluescreenDummy +WraithACGluescreenDummy,WraithACGluescreenDummy +ScienceVesselACGluescreenDummy,ScienceVesselACGluescreenDummy +HerculesACGluescreenDummy,HerculesACGluescreenDummy +ThorACGluescreenDummy,ThorACGluescreenDummy +PerditionTurretACGluescreenDummy,PerditionTurretACGluescreenDummy +FlamingBettyACGluescreenDummy,FlamingBettyACGluescreenDummy +DevastationTurretACGluescreenDummy,DevastationTurretACGluescreenDummy +BlasterBillyACGluescreenDummy,BlasterBillyACGluescreenDummy +SpinningDizzyACGluescreenDummy,SpinningDizzyACGluescreenDummy +ZerglingKerriganACGluescreenDummy,ZerglingKerriganACGluescreenDummy +RaptorACGluescreenDummy,RaptorACGluescreenDummy +QueenCoopACGluescreenDummy,QueenCoopACGluescreenDummy +HydraliskACGluescreenDummy,HydraliskACGluescreenDummy +HydraliskLurkerACGluescreenDummy,HydraliskLurkerACGluescreenDummy +MutaliskBroodlordACGluescreenDummy,MutaliskBroodlordACGluescreenDummy +BroodLordACGluescreenDummy,BroodLordACGluescreenDummy +UltraliskACGluescreenDummy,UltraliskACGluescreenDummy +TorrasqueACGluescreenDummy,TorrasqueACGluescreenDummy +OverseerACGluescreenDummy,OverseerACGluescreenDummy +LurkerACGluescreenDummy,LurkerACGluescreenDummy +SpineCrawlerACGluescreenDummy,SpineCrawlerACGluescreenDummy +SporeCrawlerACGluescreenDummy,SporeCrawlerACGluescreenDummy +NydusNetworkACGluescreenDummy,NydusNetworkACGluescreenDummy +OmegaNetworkACGluescreenDummy,OmegaNetworkACGluescreenDummy +ZerglingZagaraACGluescreenDummy,ZerglingZagaraACGluescreenDummy +SwarmlingACGluescreenDummy,SwarmlingACGluescreenDummy +BanelingACGluescreenDummy,BanelingACGluescreenDummy +SplitterlingACGluescreenDummy,SplitterlingACGluescreenDummy +AberrationACGluescreenDummy,AberrationACGluescreenDummy +ScourgeACGluescreenDummy,ScourgeACGluescreenDummy +CorruptorACGluescreenDummy,CorruptorACGluescreenDummy +BileLauncherACGluescreenDummy,BileLauncherACGluescreenDummy +SwarmQueenACGluescreenDummy,SwarmQueenACGluescreenDummy +RoachACGluescreenDummy,RoachACGluescreenDummy +RoachVileACGluescreenDummy,RoachVileACGluescreenDummy +RavagerACGluescreenDummy,RavagerACGluescreenDummy +SwarmHostACGluescreenDummy,SwarmHostACGluescreenDummy +MutaliskACGluescreenDummy,MutaliskACGluescreenDummy +GuardianACGluescreenDummy,GuardianACGluescreenDummy +DevourerACGluescreenDummy,DevourerACGluescreenDummy +ViperACGluescreenDummy,ViperACGluescreenDummy +BrutaliskACGluescreenDummy,BrutaliskACGluescreenDummy +LeviathanACGluescreenDummy,LeviathanACGluescreenDummy +ZealotACGluescreenDummy,ZealotACGluescreenDummy +ZealotAiurACGluescreenDummy,ZealotAiurACGluescreenDummy +DragoonACGluescreenDummy,DragoonACGluescreenDummy +HighTemplarACGluescreenDummy,HighTemplarACGluescreenDummy +ArchonACGluescreenDummy,ArchonACGluescreenDummy +ImmortalACGluescreenDummy,ImmortalACGluescreenDummy +ObserverACGluescreenDummy,ObserverACGluescreenDummy +PhoenixAiurACGluescreenDummy,PhoenixAiurACGluescreenDummy +ReaverACGluescreenDummy,ReaverACGluescreenDummy +TempestACGluescreenDummy,TempestACGluescreenDummy +PhotonCannonACGluescreenDummy,PhotonCannonACGluescreenDummy +ZealotVorazunACGluescreenDummy,ZealotVorazunACGluescreenDummy +ZealotShakurasACGluescreenDummy,ZealotShakurasACGluescreenDummy +StalkerShakurasACGluescreenDummy,StalkerShakurasACGluescreenDummy +DarkTemplarShakurasACGluescreenDummy,DarkTemplarShakurasACGluescreenDummy +CorsairACGluescreenDummy,CorsairACGluescreenDummy +VoidRayACGluescreenDummy,VoidRayACGluescreenDummy +VoidRayShakurasACGluescreenDummy,VoidRayShakurasACGluescreenDummy +OracleACGluescreenDummy,OracleACGluescreenDummy +DarkArchonACGluescreenDummy,DarkArchonACGluescreenDummy +DarkPylonACGluescreenDummy,DarkPylonACGluescreenDummy +ZealotPurifierACGluescreenDummy,ZealotPurifierACGluescreenDummy +SentryPurifierACGluescreenDummy,SentryPurifierACGluescreenDummy +ImmortalKaraxACGluescreenDummy,ImmortalKaraxACGluescreenDummy +ColossusACGluescreenDummy,ColossusACGluescreenDummy +ColossusPurifierACGluescreenDummy,ColossusPurifierACGluescreenDummy +PhoenixPurifierACGluescreenDummy,PhoenixPurifierACGluescreenDummy +CarrierACGluescreenDummy,CarrierACGluescreenDummy +CarrierAiurACGluescreenDummy,CarrierAiurACGluescreenDummy +KhaydarinMonolithACGluescreenDummy,KhaydarinMonolithACGluescreenDummy +ShieldBatteryACGluescreenDummy,ShieldBatteryACGluescreenDummy +PermanentCreepBlocker1x1,PermanentCreepBlocker1x1 +SentryACGluescreenDummy,SentryACGluescreenDummy +SnowRefinery_Terran_ExtendingBridgeNEShort8Out,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +SnowRefinery_Terran_ExtendingBridgeNEShort8,SnowRefinery_Terran_ExtendingBridgeNEShort8 +SnowRefinery_Terran_ExtendingBridgeNWShort8Out,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +SnowRefinery_Terran_ExtendingBridgeNWShort8,SnowRefinery_Terran_ExtendingBridgeNWShort8 +Tarsonis_DoorN,Tarsonis_DoorN +Tarsonis_DoorNLowered,Tarsonis_DoorNLowered +Tarsonis_DoorNE,Tarsonis_DoorNE +Tarsonis_DoorNELowered,Tarsonis_DoorNELowered +Tarsonis_DoorE,Tarsonis_DoorE +Tarsonis_DoorELowered,Tarsonis_DoorELowered +Tarsonis_DoorNW,Tarsonis_DoorNW +Tarsonis_DoorNWLowered,Tarsonis_DoorNWLowered +AiurLightBridgeNE8Out,AiurLightBridgeNE8Out +AiurLightBridgeNE8,AiurLightBridgeNE8 +AiurLightBridgeNE10Out,AiurLightBridgeNE10Out +AiurLightBridgeNE10,AiurLightBridgeNE10 +AiurLightBridgeNE12Out,AiurLightBridgeNE12Out +AiurLightBridgeNE12,AiurLightBridgeNE12 +AiurLightBridgeNW8Out,AiurLightBridgeNW8Out +AiurLightBridgeNW8,AiurLightBridgeNW8 +AiurLightBridgeNW10Out,AiurLightBridgeNW10Out +AiurLightBridgeNW10,AiurLightBridgeNW10 +AiurLightBridgeNW12Out,AiurLightBridgeNW12Out +AiurLightBridgeNW12,AiurLightBridgeNW12 +ShakurasLightBridgeNE8Out,ShakurasLightBridgeNE8Out +ShakurasLightBridgeNE8,ShakurasLightBridgeNE8 +ShakurasLightBridgeNE10Out,ShakurasLightBridgeNE10Out +ShakurasLightBridgeNE10,ShakurasLightBridgeNE10 +ShakurasLightBridgeNE12Out,ShakurasLightBridgeNE12Out +ShakurasLightBridgeNE12,ShakurasLightBridgeNE12 +ShakurasLightBridgeNW8Out,ShakurasLightBridgeNW8Out +ShakurasLightBridgeNW8,ShakurasLightBridgeNW8 +ShakurasLightBridgeNW10Out,ShakurasLightBridgeNW10Out +ShakurasLightBridgeNW10,ShakurasLightBridgeNW10 +ShakurasLightBridgeNW12Out,ShakurasLightBridgeNW12Out +ShakurasLightBridgeNW12,ShakurasLightBridgeNW12 +AiurLightBridgeAbandonedNE8Out,AiurLightBridgeAbandonedNE8Out +AiurLightBridgeAbandonedNE8,AiurLightBridgeAbandonedNE8 +AiurLightBridgeAbandonedNE10Out,AiurLightBridgeAbandonedNE10Out +AiurLightBridgeAbandonedNE10,AiurLightBridgeAbandonedNE10 +AiurLightBridgeAbandonedNE12Out,AiurLightBridgeAbandonedNE12Out +AiurLightBridgeAbandonedNE12,AiurLightBridgeAbandonedNE12 +AiurLightBridgeAbandonedNW8Out,AiurLightBridgeAbandonedNW8Out +AiurLightBridgeAbandonedNW8,AiurLightBridgeAbandonedNW8 +AiurLightBridgeAbandonedNW10Out,AiurLightBridgeAbandonedNW10Out +AiurLightBridgeAbandonedNW10,AiurLightBridgeAbandonedNW10 +AiurLightBridgeAbandonedNW12Out,AiurLightBridgeAbandonedNW12Out +AiurLightBridgeAbandonedNW12,AiurLightBridgeAbandonedNW12 +CollapsiblePurifierTowerDebris,CollapsiblePurifierTowerDebris +PurifierRichMineralField,PurifierRichMineralField +PurifierRichMineralField750,PurifierRichMineralField750 +CollapsiblePurifierTowerPushUnit,CollapsiblePurifierTowerPushUnit +CycloneMissileLargeAir,CycloneMissileLargeAir +CycloneMissileLarge,CycloneMissileLarge +DefilerMPDarkSwarmWeapon,DefilerMPDarkSwarmWeapon +SlaynElementalGrabWeapon,SlaynElementalGrabWeapon +SlaynElementalGrabAirUnit,SlaynElementalGrabAirUnit +SlaynElementalGrabGroundUnit,SlaynElementalGrabGroundUnit +SlaynElementalWeapon,SlaynElementalWeapon +Moopy,Moopy +Replicant,Replicant +AiurTempleBridgeDestructibleNE8Out,AiurTempleBridgeDestructibleNE8Out +AiurTempleBridgeDestructibleNE10Out,AiurTempleBridgeDestructibleNE10Out +AiurTempleBridgeDestructibleNE12Out,AiurTempleBridgeDestructibleNE12Out +AiurTempleBridgeDestructibleNW8Out,AiurTempleBridgeDestructibleNW8Out +AiurTempleBridgeDestructibleNW10Out,AiurTempleBridgeDestructibleNW10Out +AiurTempleBridgeDestructibleNW12Out,AiurTempleBridgeDestructibleNW12Out +AiurTempleBridgeDestructibleSW8Out,AiurTempleBridgeDestructibleSW8Out +AiurTempleBridgeDestructibleSW10Out,AiurTempleBridgeDestructibleSW10Out +AiurTempleBridgeDestructibleSW12Out,AiurTempleBridgeDestructibleSW12Out +AiurTempleBridgeDestructibleSE8Out,AiurTempleBridgeDestructibleSE8Out +AiurTempleBridgeDestructibleSE10Out,AiurTempleBridgeDestructibleSE10Out +AiurTempleBridgeDestructibleSE12Out,AiurTempleBridgeDestructibleSE12Out +CorsairMP,CorsairMP +ArbiterMP,ArbiterMP +DefilerMPPlagueWeapon,DefilerMPPlagueWeapon +ReptileCrate,ReptileCrate +SlaynSwarmHostSpawnFlyer,SlaynSwarmHostSpawnFlyer +SlaynElemental,SlaynElemental +PurifierVespeneGeyser,PurifierVespeneGeyser +ShakurasVespeneGeyser,ShakurasVespeneGeyser +CollapsiblePurifierTowerDiagonal,CollapsiblePurifierTowerDiagonal +CreepOnlyBlocker4x4,CreepOnlyBlocker4x4 +PurifierMineralField,PurifierMineralField +PurifierMineralField750,PurifierMineralField750 +Beacon_Nova,Beacon_Nova +Beacon_NovaSmall,Beacon_NovaSmall +Ursadon,Ursadon +Ursula,Ursula +PylonOvercharged,PylonOvercharged +AdeptPiercingWeapon,AdeptPiercingWeapon From a131d50f31bf30d431157c8670d51b1e492ae9ea Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 13 Jul 2016 16:42:58 -0400 Subject: [PATCH 230/238] howto on how to do the abilities and units nonsense --- sc2reader/data/HOWTO | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 sc2reader/data/HOWTO diff --git a/sc2reader/data/HOWTO b/sc2reader/data/HOWTO new file mode 100644 index 00000000..ba734b5b --- /dev/null +++ b/sc2reader/data/HOWTO @@ -0,0 +1,18 @@ +Sometimes when a new version comes out, such as (3.4.0) 44401, Bliz will update the ids used to identify units and abilities. + +See dsjoerg's commits on Jul 13, 2016 to see what you need to modify to handle something like that: https://github.com/ggtracker/sc2reader/commits/upstream + +1 use the Galaxy Editor and Export Balance Data. +2 To create the ability CSV file: ```find Balance\ Data -print0 | xargs -0 grep -h ' Date: Tue, 18 Oct 2016 10:46:30 -0400 Subject: [PATCH 231/238] handle 3.7 --- sc2reader/readers.py | 1 + test_replays/3.7.0/1.SC2Replay | Bin 0 -> 71897 bytes test_replays/test_all.py | 3 +++ 3 files changed, 4 insertions(+) create mode 100644 test_replays/3.7.0/1.SC2Replay diff --git a/sc2reader/readers.py b/sc2reader/readers.py index d84f7122..35766e20 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -123,6 +123,7 @@ def __call__(self, data, replay): tandem_id=data.read_bits(4) if replay.base_build >= 39576 and data.read_bool() else None, commander_mastery_level=data.read_uint32() if replay.base_build >= 42932 else None, commander_mastery_talents=[data.read_uint32() for i in range(data.read_bits(3))] if replay.base_build >= 42932 else None, + reward_overrides=[data.read_unit32() for i in range(data.read_bits(17))] if replay.base_build >= 47185 else None, ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, diff --git a/test_replays/3.7.0/1.SC2Replay b/test_replays/3.7.0/1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..be833dd79d03b161e0d64fa12391e52fd6ba5841 GIT binary patch literal 71897 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%0D)>FI)29`ov#E} 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 cN6~wXlOG&3N(*+*S?gY_ Date: Tue, 18 Oct 2016 19:04:29 -0400 Subject: [PATCH 232/238] add another replay to the 3.7 test, works fine --- test_replays/3.7.0/2.SC2Replay | Bin 0 -> 86626 bytes test_replays/test_all.py | 1 + 2 files changed, 1 insertion(+) create mode 100644 test_replays/3.7.0/2.SC2Replay diff --git a/test_replays/3.7.0/2.SC2Replay b/test_replays/3.7.0/2.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..7b55f76c94d09fc1eb7978f259af36823753d1dd GIT binary patch literal 86626 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 145c2ae2..9117b53b 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -518,6 +518,7 @@ def test_lotv_time(self): def test_37(self): replay = sc2reader.load_replay("test_replays/3.7.0/1.SC2Replay") + replay = sc2reader.load_replay("test_replays/3.7.0/2.SC2Replay") class TestGameEngine(unittest.TestCase): From dbffc7fb6283fca2415c51a8396b6660a04e6def Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Wed, 26 Oct 2016 14:46:49 -0400 Subject: [PATCH 233/238] add new abilities and units for 47185 --- sc2reader/data/LotV/47185_abilities.csv | 389 +++++++++++ sc2reader/data/LotV/47185_units.csv | 887 ++++++++++++++++++++++++ sc2reader/data/__init__.py | 2 +- sc2reader/data/ability_lookup.csv | 78 +++ sc2reader/data/unit_lookup.csv | 71 ++ sc2reader/resources.py | 1 + 6 files changed, 1427 insertions(+), 1 deletion(-) create mode 100644 sc2reader/data/LotV/47185_abilities.csv create mode 100644 sc2reader/data/LotV/47185_units.csv diff --git a/sc2reader/data/LotV/47185_abilities.csv b/sc2reader/data/LotV/47185_abilities.csv new file mode 100644 index 00000000..3c366947 --- /dev/null +++ b/sc2reader/data/LotV/47185_abilities.csv @@ -0,0 +1,389 @@ +0,CAbil +1,CAbilEffect +2,CAbilQueueable +3,CAbilProgress +4,CAbilRedirect +5,CAbilArmMagazine +6,CAbilAttack +7,CAbilAugment +8,CAbilBattery +9,CAbilBeacon +10,CAbilBehavior +11,CAbilBuild +12,CAbilBuildable +13,CAbilEffectInstant +14,CAbilEffectTarget +15,CAbilHarvest +16,CAbilInteract +17,CAbilInventory +18,CAbilLearn +19,CAbilMerge +20,CAbilMergeable +21,CAbilMorph +22,CAbilMorphPlacement +23,CAbilMove +24,CAbilPawn +25,CAbilQueue +26,CAbilRally +27,CAbilResearch +28,CAbilRevive +29,CAbilSpecialize +30,CAbilStop +31,CAbilTrain +32,CAbilTransport +33,CAbilWarpable +34,CAbilWarpTrain +35,Taunt +36,stop +38,move +45,attack +59,SprayTerran +60,SprayZerg +61,SprayProtoss +62,SalvageShared +64,GhostHoldFire +65,GhostWeaponsFree +67,Explode +69,FungalGrowth +70,GuardianShield +71,MULERepair +74,Feedback +76,PlacePointDefenseDrone +77,HallucinationArchon +78,HallucinationColossus +79,HallucinationHighTemplar +80,HallucinationImmortal +81,HallucinationPhoenix +82,HallucinationProbe +83,HallucinationStalker +84,HallucinationVoidRay +85,HallucinationWarpPrism +86,HallucinationZealot +87,MULEGather +88,SeekerMissile +89,CalldownMULE +90,GravitonBeam +94,SpawnChangeling +101,Rally +102,ProgressRally +103,RallyCommand +104,RallyNexus +105,RallyHatchery +108,InfestedTerrans +109,NeuralParasite +110,SpawnLarva +111,StimpackMarauder +112,SupplyDrop +115,TimeWarp +118,SCVHarvest +119,ProbeHarvest +121,que1 +122,que5 +123,que5CancelToSelection +125,que5Addon +126,BuildInProgress +127,Repair +130,Stimpack +131,GhostCloak +133,MedivacHeal +134,SiegeMode +135,Unsiege +136,BansheeCloak +137,MedivacTransport +138,ScannerSweep +139,Yamato +140,AssaultMode +141,FighterMode +142,BunkerTransport +143,CommandCenterTransport +144,CommandCenterLiftOff +145,CommandCenterLand +147,BarracksLiftOff +149,FactoryLiftOff +151,StarportLiftOff +152,FactoryLand +153,StarportLand +155,BarracksLand +156,SupplyDepotLower +157,SupplyDepotRaise +170,WarpPrismTransport +175,PsiStorm +176,HangarQueue5 +183,DroneHarvest +185,UpgradeToLair +186,UpgradeToHive +187,UpgradeToGreaterSpire +193,MorphToBroodLord +194,BurrowBanelingDown +195,BurrowBanelingUp +196,BurrowDroneDown +197,BurrowDroneUp +198,BurrowHydraliskDown +199,BurrowHydraliskUp +200,BurrowRoachDown +201,BurrowRoachUp +202,BurrowZerglingDown +203,BurrowZerglingUp +204,BurrowInfestorTerranDown +205,BurrowInfestorTerranUp +206,RedstoneLavaCritterBurrow +207,RedstoneLavaCritterInjuredBurrow +208,RedstoneLavaCritterUnburrow +209,RedstoneLavaCritterInjuredUnburrow +210,OverlordTransport +214,BurrowQueenDown +215,BurrowQueenUp +216,NydusCanalTransport +217,Blink +218,BurrowInfestorDown +219,BurrowInfestorUp +220,MorphToOverseer +221,UpgradeToPlanetaryFortress +224,BurrowUltraliskDown +225,BurrowUltraliskUp +226,UpgradeToOrbital +227,UpgradeToWarpGate +228,MorphBackToGateway +229,OrbitalLiftOff +230,OrbitalCommandLand +231,ForceField +232,PhasingMode +233,TransportMode +237,TacNukeStrike +240,EMP +244,Transfusion +253,AttackRedirect +254,StimpackRedirect +255,StimpackMarauderRedirect +257,StopRedirect +258,GenerateCreep +260,SpineCrawlerUproot +261,SporeCrawlerUproot +262,SpineCrawlerRoot +263,SporeCrawlerRoot +265,BuildAutoTurret +266,ArchonWarp +269,Charge +273,Contaminate +276,que5Passive +277,que5PassiveCancelToSelection +305,DigesterCreepSpray +309,MorphToMothership +334,XelNagaHealingShrine +343,MothershipCoreMassRecall +345,MorphToHellion +355,MorphToHellionTank +363,MorphToSwarmHostBurrowedMP +364,MorphToSwarmHostMP +366,attackProtossBuilding +368,stopProtossBuilding +369,BlindingCloud +371,Yoink +374,ViperConsumeStructure +377,TestZerg +378,VolatileBurstBuilding +385,WidowMineBurrow +386,WidowMineUnburrow +387,WidowMineAttack +388,TornadoMissile +392,BurrowLurkerMPDown +393,BurrowLurkerMPUp +394,UpgradeToLurkerDenMP +395,HallucinationOracle +396,MedivacSpeedBoost +397,ExtendingBridgeNEWide8Out +398,ExtendingBridgeNEWide8 +399,ExtendingBridgeNWWide8Out +400,ExtendingBridgeNWWide8 +401,ExtendingBridgeNEWide10Out +402,ExtendingBridgeNEWide10 +403,ExtendingBridgeNWWide10Out +404,ExtendingBridgeNWWide10 +405,ExtendingBridgeNEWide12Out +406,ExtendingBridgeNEWide12 +407,ExtendingBridgeNWWide12Out +408,ExtendingBridgeNWWide12 +410,CritterFlee +411,OracleRevelation +419,MothershipCorePurifyNexus +420,XelNaga_Caverns_DoorE +421,XelNaga_Caverns_DoorEOpened +422,XelNaga_Caverns_DoorN +423,XelNaga_Caverns_DoorNE +424,XelNaga_Caverns_DoorNEOpened +425,XelNaga_Caverns_DoorNOpened +426,XelNaga_Caverns_DoorNW +427,XelNaga_Caverns_DoorNWOpened +428,XelNaga_Caverns_DoorS +429,XelNaga_Caverns_DoorSE +430,XelNaga_Caverns_DoorSEOpened +431,XelNaga_Caverns_DoorSOpened +432,XelNaga_Caverns_DoorSW +433,XelNaga_Caverns_DoorSWOpened +434,XelNaga_Caverns_DoorW +435,XelNaga_Caverns_DoorWOpened +436,XelNaga_Caverns_Floating_BridgeNE8Out +437,XelNaga_Caverns_Floating_BridgeNE8 +438,XelNaga_Caverns_Floating_BridgeNW8Out +439,XelNaga_Caverns_Floating_BridgeNW8 +440,XelNaga_Caverns_Floating_BridgeNE10Out +441,XelNaga_Caverns_Floating_BridgeNE10 +442,XelNaga_Caverns_Floating_BridgeNW10Out +443,XelNaga_Caverns_Floating_BridgeNW10 +444,XelNaga_Caverns_Floating_BridgeNE12Out +445,XelNaga_Caverns_Floating_BridgeNE12 +446,XelNaga_Caverns_Floating_BridgeNW12Out +447,XelNaga_Caverns_Floating_BridgeNW12 +448,XelNaga_Caverns_Floating_BridgeH8Out +449,XelNaga_Caverns_Floating_BridgeH8 +450,XelNaga_Caverns_Floating_BridgeV8Out +451,XelNaga_Caverns_Floating_BridgeV8 +452,XelNaga_Caverns_Floating_BridgeH10Out +453,XelNaga_Caverns_Floating_BridgeH10 +454,XelNaga_Caverns_Floating_BridgeV10Out +455,XelNaga_Caverns_Floating_BridgeV10 +456,XelNaga_Caverns_Floating_BridgeH12Out +457,XelNaga_Caverns_Floating_BridgeH12 +458,XelNaga_Caverns_Floating_BridgeV12Out +459,XelNaga_Caverns_Floating_BridgeV12 +460,TemporalField +484,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +485,SnowRefinery_Terran_ExtendingBridgeNEShort8 +486,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +487,SnowRefinery_Terran_ExtendingBridgeNWShort8 +501,CausticSpray +503,ImmortalOverload +504,MorphToRavager +505,MorphToLurker +507,ReleaseInterceptors +508,RavagerCorrosiveBile +509,BurrowRavagerDown +510,BurrowRavagerUp +512,PurificationNovaTargeted +514,LockOn +516,LockOnCancel +518,Hyperjump +520,ThorAPMode +521,ThorNormalMode +523,MothershipMassRecall +524,NydusWormTransport +525,OracleWeapon +531,LocustMPFlyingSwoop +532,HallucinationDisruptor +533,HallucinationAdept +534,VoidRaySwarmDamageBoost +535,SeekerDummyChannel +536,AiurLightBridgeNE8Out +537,AiurLightBridgeNE8 +538,AiurLightBridgeNE10Out +539,AiurLightBridgeNE10 +540,AiurLightBridgeNE12Out +541,AiurLightBridgeNE12 +542,AiurLightBridgeNW8Out +543,AiurLightBridgeNW8 +544,AiurLightBridgeNW10Out +545,AiurLightBridgeNW10 +546,AiurLightBridgeNW12Out +547,AiurLightBridgeNW12 +560,ShakurasLightBridgeNE8Out +561,ShakurasLightBridgeNE8 +562,ShakurasLightBridgeNE10Out +563,ShakurasLightBridgeNE10 +564,ShakurasLightBridgeNE12Out +565,ShakurasLightBridgeNE12 +566,ShakurasLightBridgeNW8Out +567,ShakurasLightBridgeNW8 +568,ShakurasLightBridgeNW10Out +569,ShakurasLightBridgeNW10 +570,ShakurasLightBridgeNW12Out +571,ShakurasLightBridgeNW12 +572,VoidMPImmortalReviveRebuild +574,ArbiterMPStasisField +575,ArbiterMPRecall +576,CorsairMPDisruptionWeb +577,MorphToGuardianMP +578,MorphToDevourerMP +579,DefilerMPConsume +580,DefilerMPDarkSwarm +581,DefilerMPPlague +582,DefilerMPBurrow +583,DefilerMPUnburrow +584,QueenMPEnsnare +585,QueenMPSpawnBroodlings +586,QueenMPInfestCommandCenter +594,ParasiticBomb +595,AdeptPhaseShift +598,LurkerHoldFire +599,LurkerRemoveHoldFire +602,LiberatorAGTarget +603,LiberatorAATarget +605,AiurLightBridgeAbandonedNE8Out +606,AiurLightBridgeAbandonedNE8 +607,AiurLightBridgeAbandonedNE10Out +608,AiurLightBridgeAbandonedNE10 +609,AiurLightBridgeAbandonedNE12Out +610,AiurLightBridgeAbandonedNE12 +611,AiurLightBridgeAbandonedNW8Out +612,AiurLightBridgeAbandonedNW8 +613,AiurLightBridgeAbandonedNW10Out +614,AiurLightBridgeAbandonedNW10 +615,AiurLightBridgeAbandonedNW12Out +616,AiurLightBridgeAbandonedNW12 +617,KD8Charge +620,AdeptPhaseShiftCancel +621,AdeptShadePhaseShiftCancel +622,SlaynElementalGrab +624,PortCity_Bridge_UnitNE8Out +625,PortCity_Bridge_UnitNE8 +626,PortCity_Bridge_UnitSE8Out +627,PortCity_Bridge_UnitSE8 +628,PortCity_Bridge_UnitNW8Out +629,PortCity_Bridge_UnitNW8 +630,PortCity_Bridge_UnitSW8Out +631,PortCity_Bridge_UnitSW8 +632,PortCity_Bridge_UnitNE10Out +633,PortCity_Bridge_UnitNE10 +634,PortCity_Bridge_UnitSE10Out +635,PortCity_Bridge_UnitSE10 +636,PortCity_Bridge_UnitNW10Out +637,PortCity_Bridge_UnitNW10 +638,PortCity_Bridge_UnitSW10Out +639,PortCity_Bridge_UnitSW10 +640,PortCity_Bridge_UnitNE12Out +641,PortCity_Bridge_UnitNE12 +642,PortCity_Bridge_UnitSE12Out +643,PortCity_Bridge_UnitSE12 +644,PortCity_Bridge_UnitNW12Out +645,PortCity_Bridge_UnitNW12 +646,PortCity_Bridge_UnitSW12Out +647,PortCity_Bridge_UnitSW12 +648,PortCity_Bridge_UnitN8Out +649,PortCity_Bridge_UnitN8 +650,PortCity_Bridge_UnitS8Out +651,PortCity_Bridge_UnitS8 +652,PortCity_Bridge_UnitE8Out +653,PortCity_Bridge_UnitE8 +653,PowerSourceFast +654,PortCity_Bridge_UnitW8Out +655,PortCity_Bridge_UnitW8 +656,PortCity_Bridge_UnitN10Out +657,PortCity_Bridge_UnitN10 +658,PortCity_Bridge_UnitS10Out +659,PortCity_Bridge_UnitS10 +660,PortCity_Bridge_UnitE10Out +661,PortCity_Bridge_UnitE10 +662,PortCity_Bridge_UnitW10Out +663,PortCity_Bridge_UnitW10 +664,PortCity_Bridge_UnitN12Out +665,PortCity_Bridge_UnitN12 +666,PortCity_Bridge_UnitS12Out +667,PortCity_Bridge_UnitS12 +668,PortCity_Bridge_UnitE12Out +669,PortCity_Bridge_UnitE12 +670,PortCity_Bridge_UnitW12Out +671,PortCity_Bridge_UnitW12 +676,SpawnLocustsTargeted +678,MorphToTransportOverlord +681,ChannelSnipe +1847,WidowMineArmed +2375,IsTransportOverlord diff --git a/sc2reader/data/LotV/47185_units.csv b/sc2reader/data/LotV/47185_units.csv new file mode 100644 index 00000000..4acb67b5 --- /dev/null +++ b/sc2reader/data/LotV/47185_units.csv @@ -0,0 +1,887 @@ +1,System_Snapshot_Dummy +21,Ball +22,StereoscopicOptionsUnit +23,Colossus +24,TechLab +25,Reactor +27,InfestorTerran +28,BanelingCocoon +29,Baneling +30,Mothership +31,PointDefenseDrone +32,Changeling +33,ChangelingZealot +34,ChangelingMarineShield +35,ChangelingMarine +36,ChangelingZerglingWings +37,ChangelingZergling +39,CommandCenter +40,SupplyDepot +41,Refinery +42,Barracks +43,EngineeringBay +44,MissileTurret +45,Bunker +46,SensorTower +47,GhostAcademy +48,Factory +49,Starport +51,Armory +52,FusionCore +53,AutoTurret +54,SiegeTankSieged +55,SiegeTank +56,VikingAssault +57,VikingFighter +58,CommandCenterFlying +59,BarracksTechLab +60,BarracksReactor +61,FactoryTechLab +62,FactoryReactor +63,StarportTechLab +64,StarportReactor +65,FactoryFlying +66,StarportFlying +67,SCV +68,BarracksFlying +69,SupplyDepotLowered +70,Marine +71,Reaper +72,Ghost +73,Marauder +74,Thor +75,Hellion +76,Medivac +77,Banshee +78,Raven +79,Battlecruiser +80,Nuke +81,Nexus +82,Pylon +83,Assimilator +84,Gateway +85,Forge +86,FleetBeacon +87,TwilightCouncil +88,PhotonCannon +89,Stargate +90,TemplarArchive +91,DarkShrine +92,RoboticsBay +93,RoboticsFacility +94,CyberneticsCore +95,Zealot +96,Stalker +97,HighTemplar +98,DarkTemplar +99,Sentry +100,Phoenix +101,Carrier +102,VoidRay +103,WarpPrism +104,Observer +105,Immortal +106,Probe +107,Interceptor +108,Hatchery +109,CreepTumor +110,Extractor +111,SpawningPool +112,EvolutionChamber +113,HydraliskDen +114,Spire +115,UltraliskCavern +116,InfestationPit +117,NydusNetwork +118,BanelingNest +119,RoachWarren +120,SpineCrawler +121,SporeCrawler +122,Lair +123,Hive +124,GreaterSpire +125,Egg +126,Drone +127,Zergling +128,Overlord +129,Hydralisk +130,Mutalisk +131,Ultralisk +132,Roach +133,Infestor +134,Corruptor +135,BroodLordCocoon +136,BroodLord +137,BanelingBurrowed +138,DroneBurrowed +139,HydraliskBurrowed +140,RoachBurrowed +141,ZerglingBurrowed +142,InfestorTerranBurrowed +143,RedstoneLavaCritterBurrowed +144,RedstoneLavaCritterInjuredBurrowed +145,RedstoneLavaCritter +146,RedstoneLavaCritterInjured +147,QueenBurrowed +148,Queen +149,InfestorBurrowed +150,OverlordCocoon +151,Overseer +152,PlanetaryFortress +153,UltraliskBurrowed +154,OrbitalCommand +155,WarpGate +156,OrbitalCommandFlying +157,ForceField +158,WarpPrismPhasing +159,CreepTumorBurrowed +160,CreepTumorQueen +161,SpineCrawlerUprooted +162,SporeCrawlerUprooted +163,Archon +164,NydusCanal +165,BroodlingEscort +166,GhostAlternate +167,GhostNova +168,RichMineralField +169,RichMineralField750 +170,Ursadon +172,XelNagaTower +176,InfestedTerransEgg +177,Larva +178,ReaperPlaceholder +179,MarineACGluescreenDummy +180,FirebatACGluescreenDummy +181,MedicACGluescreenDummy +182,MarauderACGluescreenDummy +183,VultureACGluescreenDummy +184,SiegeTankACGluescreenDummy +185,VikingACGluescreenDummy +186,BansheeACGluescreenDummy +187,BattlecruiserACGluescreenDummy +188,OrbitalCommandACGluescreenDummy +189,BunkerACGluescreenDummy +190,BunkerUpgradedACGluescreenDummy +191,MissileTurretACGluescreenDummy +192,HellbatACGluescreenDummy +193,GoliathACGluescreenDummy +194,CycloneACGluescreenDummy +195,WraithACGluescreenDummy +196,ScienceVesselACGluescreenDummy +197,HerculesACGluescreenDummy +198,ThorACGluescreenDummy +199,PerditionTurretACGluescreenDummy +200,FlamingBettyACGluescreenDummy +201,DevastationTurretACGluescreenDummy +202,BlasterBillyACGluescreenDummy +203,SpinningDizzyACGluescreenDummy +204,ZerglingKerriganACGluescreenDummy +205,RaptorACGluescreenDummy +206,QueenCoopACGluescreenDummy +207,HydraliskACGluescreenDummy +208,HydraliskLurkerACGluescreenDummy +209,MutaliskBroodlordACGluescreenDummy +210,BroodLordACGluescreenDummy +211,UltraliskACGluescreenDummy +212,TorrasqueACGluescreenDummy +213,OverseerACGluescreenDummy +214,LurkerACGluescreenDummy +215,SpineCrawlerACGluescreenDummy +216,SporeCrawlerACGluescreenDummy +217,NydusNetworkACGluescreenDummy +218,OmegaNetworkACGluescreenDummy +219,ZerglingZagaraACGluescreenDummy +220,SwarmlingACGluescreenDummy +221,BanelingACGluescreenDummy +222,SplitterlingACGluescreenDummy +223,AberrationACGluescreenDummy +224,ScourgeACGluescreenDummy +225,CorruptorACGluescreenDummy +226,BileLauncherACGluescreenDummy +227,SwarmQueenACGluescreenDummy +228,RoachACGluescreenDummy +229,RoachVileACGluescreenDummy +230,RavagerACGluescreenDummy +231,SwarmHostACGluescreenDummy +232,MutaliskACGluescreenDummy +233,GuardianACGluescreenDummy +234,DevourerACGluescreenDummy +235,ViperACGluescreenDummy +236,BrutaliskACGluescreenDummy +237,LeviathanACGluescreenDummy +238,ZealotACGluescreenDummy +239,ZealotAiurACGluescreenDummy +240,DragoonACGluescreenDummy +241,HighTemplarACGluescreenDummy +242,ArchonACGluescreenDummy +243,ImmortalACGluescreenDummy +244,ObserverACGluescreenDummy +245,PhoenixAiurACGluescreenDummy +246,ReaverACGluescreenDummy +247,TempestACGluescreenDummy +248,PhotonCannonACGluescreenDummy +249,ZealotVorazunACGluescreenDummy +250,ZealotShakurasACGluescreenDummy +251,StalkerShakurasACGluescreenDummy +252,DarkTemplarShakurasACGluescreenDummy +253,CorsairACGluescreenDummy +254,VoidRayACGluescreenDummy +255,VoidRayShakurasACGluescreenDummy +256,OracleACGluescreenDummy +257,DarkArchonACGluescreenDummy +258,DarkPylonACGluescreenDummy +259,ZealotPurifierACGluescreenDummy +260,SentryPurifierACGluescreenDummy +261,ImmortalKaraxACGluescreenDummy +262,ColossusACGluescreenDummy +263,ColossusPurifierACGluescreenDummy +264,PhoenixPurifierACGluescreenDummy +265,CarrierACGluescreenDummy +266,CarrierAiurACGluescreenDummy +267,KhaydarinMonolithACGluescreenDummy +268,ShieldBatteryACGluescreenDummy +269,EliteMarineACGluescreenDummy +270,MarauderCommandoACGluescreenDummy +271,SpecOpsGhostACGluescreenDummy +272,HellbatRangerACGluescreenDummy +273,StrikeGoliathACGluescreenDummy +274,HeavySiegeTankACGluescreenDummy +275,RaidLiberatorACGluescreenDummy +276,RavenTypeIIACGluescreenDummy +277,CovertBansheeACGluescreenDummy +278,RailgunTurretACGluescreenDummy +279,BlackOpsMissileTurretACGluescreenDummy +280,SupplicantACGluescreenDummy +281,StalkerTaldarimACGluescreenDummy +282,SentryTaldarimACGluescreenDummy +283,HighTemplarTaldarimACGluescreenDummy +284,ImmortalTaldarimACGluescreenDummy +285,ColossusTaldarimACGluescreenDummy +286,WarpPrismTaldarimACGluescreenDummy +287,PhotonCannonTaldarimACGluescreenDummy +289,NeedleSpinesWeapon +290,CorruptionWeapon +291,InfestedTerransWeapon +292,NeuralParasiteWeapon +293,PointDefenseDroneReleaseWeapon +294,HunterSeekerWeapon +295,MULE +297,ThorAAWeapon +298,PunisherGrenadesLMWeapon +299,VikingFighterWeapon +300,ATALaserBatteryLMWeapon +301,ATSLaserBatteryLMWeapon +302,LongboltMissileWeapon +303,D8ChargeWeapon +304,YamatoWeapon +305,IonCannonsWeapon +306,AcidSalivaWeapon +307,SpineCrawlerWeapon +308,SporeCrawlerWeapon +309,GlaiveWurmWeapon +310,GlaiveWurmM2Weapon +311,GlaiveWurmM3Weapon +312,StalkerWeapon +313,EMP2Weapon +314,BacklashRocketsLMWeapon +315,PhotonCannonWeapon +316,ParasiteSporeWeapon +318,Broodling +319,BroodLordBWeapon +322,AutoTurretReleaseWeapon +323,LarvaReleaseMissile +324,AcidSpinesWeapon +325,FrenzyWeapon +326,ContaminateWeapon +338,BeaconRally +339,BeaconArmy +340,BeaconAttack +341,BeaconDefend +342,BeaconHarass +343,BeaconIdle +344,BeaconAuto +345,BeaconDetect +346,BeaconScout +347,BeaconClaim +348,BeaconExpand +349,BeaconCustom1 +350,BeaconCustom2 +351,BeaconCustom3 +352,BeaconCustom4 +353,Adept +359,Rocks2x2NonConjoined +360,FungalGrowthMissile +361,NeuralParasiteTentacleMissile +362,Beacon_Protoss +363,Beacon_ProtossSmall +364,Beacon_Terran +365,Beacon_TerranSmall +366,Beacon_Zerg +367,Beacon_ZergSmall +368,Lyote +369,CarrionBird +370,KarakMale +371,KarakFemale +372,UrsadakFemaleExotic +373,UrsadakMale +374,UrsadakFemale +375,UrsadakCalf +376,UrsadakMaleExotic +377,UtilityBot +378,CommentatorBot1 +379,CommentatorBot2 +380,CommentatorBot3 +381,CommentatorBot4 +382,Scantipede +383,Dog +384,Sheep +385,Cow +386,InfestedTerransEggPlacement +387,InfestorTerransWeapon +388,MineralField +389,VespeneGeyser +390,SpacePlatformGeyser +391,RichVespeneGeyser +392,DestructibleSearchlight +393,DestructibleBullhornLights +394,DestructibleStreetlight +395,DestructibleSpacePlatformSign +396,DestructibleStoreFrontCityProps +397,DestructibleBillboardTall +398,DestructibleBillboardScrollingText +399,DestructibleSpacePlatformBarrier +400,DestructibleSignsDirectional +401,DestructibleSignsConstruction +402,DestructibleSignsFunny +403,DestructibleSignsIcons +404,DestructibleSignsWarning +405,DestructibleGarage +406,DestructibleGarageLarge +407,DestructibleTrafficSignal +408,TrafficSignal +409,BraxisAlphaDestructible1x1 +410,BraxisAlphaDestructible2x2 +411,DestructibleDebris4x4 +412,DestructibleDebris6x6 +413,DestructibleRock2x4Vertical +414,DestructibleRock2x4Horizontal +415,DestructibleRock2x6Vertical +416,DestructibleRock2x6Horizontal +417,DestructibleRock4x4 +418,DestructibleRock6x6 +419,DestructibleRampDiagonalHugeULBR +420,DestructibleRampDiagonalHugeBLUR +421,DestructibleRampVerticalHuge +422,DestructibleRampHorizontalHuge +423,DestructibleDebrisRampDiagonalHugeULBR +424,DestructibleDebrisRampDiagonalHugeBLUR +425,OverlordGenerateCreepKeybind +426,MengskStatueAlone +427,MengskStatue +428,WolfStatue +429,GlobeStatue +430,Weapon +431,GlaiveWurmBounceWeapon +432,BroodLordWeapon +433,BroodLordAWeapon +434,CreepBlocker1x1 +435,PermanentCreepBlocker1x1 +436,PathingBlocker1x1 +437,PathingBlocker2x2 +438,AutoTestAttackTargetGround +439,AutoTestAttackTargetAir +440,AutoTestAttacker +441,HelperEmitterSelectionArrow +442,MultiKillObject +443,ShapeGolfball +444,ShapeCone +445,ShapeCube +446,ShapeCylinder +447,ShapeDodecahedron +448,ShapeIcosahedron +449,ShapeOctahedron +450,ShapePyramid +451,ShapeRoundedCube +452,ShapeSphere +453,ShapeTetrahedron +454,ShapeThickTorus +455,ShapeThinTorus +456,ShapeTorus +457,Shape4PointStar +458,Shape5PointStar +459,Shape6PointStar +460,Shape8PointStar +461,ShapeArrowPointer +462,ShapeBowl +463,ShapeBox +464,ShapeCapsule +465,ShapeCrescentMoon +466,ShapeDecahedron +467,ShapeDiamond +468,ShapeFootball +469,ShapeGemstone +470,ShapeHeart +471,ShapeJack +472,ShapePlusSign +473,ShapeShamrock +474,ShapeSpade +475,ShapeTube +476,ShapeEgg +477,ShapeYenSign +478,ShapeX +479,ShapeWatermelon +480,ShapeWonSign +481,ShapeTennisball +482,ShapeStrawberry +483,ShapeSmileyFace +484,ShapeSoccerball +485,ShapeRainbow +486,ShapeSadFace +487,ShapePoundSign +488,ShapePear +489,ShapePineapple +490,ShapeOrange +491,ShapePeanut +492,ShapeO +493,ShapeLemon +494,ShapeMoneyBag +495,ShapeHorseshoe +496,ShapeHockeyStick +497,ShapeHockeyPuck +498,ShapeHand +499,ShapeGolfClub +500,ShapeGrape +501,ShapeEuroSign +502,ShapeDollarSign +503,ShapeBasketball +504,ShapeCarrot +505,ShapeCherry +506,ShapeBaseball +507,ShapeBaseballBat +508,ShapeBanana +509,ShapeApple +510,ShapeCashLarge +511,ShapeCashMedium +512,ShapeCashSmall +513,ShapeFootballColored +514,ShapeLemonSmall +515,ShapeOrangeSmall +516,ShapeTreasureChestOpen +517,ShapeTreasureChestClosed +518,ShapeWatermelonSmall +519,UnbuildableRocksDestructible +520,UnbuildableBricksDestructible +521,UnbuildablePlatesDestructible +522,Debris2x2NonConjoined +523,EnemyPathingBlocker1x1 +524,EnemyPathingBlocker2x2 +525,EnemyPathingBlocker4x4 +526,EnemyPathingBlocker8x8 +527,EnemyPathingBlocker16x16 +528,ScopeTest +529,SentryACGluescreenDummy +530,MineralField750 +546,HellionTank +547,CollapsibleTerranTowerDebris +548,DebrisRampLeft +549,DebrisRampRight +550,MothershipCore +554,LocustMP +555,CollapsibleRockTowerDebris +556,NydusCanalAttacker +557,NydusCanalCreeper +558,SwarmHostBurrowedMP +559,SwarmHostMP +560,Oracle +561,Tempest +562,WarHound +563,WidowMine +564,Viper +565,WidowMineBurrowed +566,LurkerMPEgg +567,LurkerMP +568,LurkerMPBurrowed +569,LurkerDenMP +570,ExtendingBridgeNEWide8Out +571,ExtendingBridgeNEWide8 +572,ExtendingBridgeNWWide8Out +573,ExtendingBridgeNWWide8 +574,ExtendingBridgeNEWide10Out +575,ExtendingBridgeNEWide10 +576,ExtendingBridgeNWWide10Out +577,ExtendingBridgeNWWide10 +578,ExtendingBridgeNEWide12Out +579,ExtendingBridgeNEWide12 +580,ExtendingBridgeNWWide12Out +581,ExtendingBridgeNWWide12 +583,CollapsibleRockTowerDebrisRampRight +584,CollapsibleRockTowerDebrisRampLeft +585,XelNaga_Caverns_DoorE +586,XelNaga_Caverns_DoorEOpened +587,XelNaga_Caverns_DoorN +588,XelNaga_Caverns_DoorNE +589,XelNaga_Caverns_DoorNEOpened +590,XelNaga_Caverns_DoorNOpened +591,XelNaga_Caverns_DoorNW +592,XelNaga_Caverns_DoorNWOpened +593,XelNaga_Caverns_DoorS +594,XelNaga_Caverns_DoorSE +595,XelNaga_Caverns_DoorSEOpened +596,XelNaga_Caverns_DoorSOpened +597,XelNaga_Caverns_DoorSW +598,XelNaga_Caverns_DoorSWOpened +599,XelNaga_Caverns_DoorW +600,XelNaga_Caverns_DoorWOpened +601,XelNaga_Caverns_Floating_BridgeNE8Out +602,XelNaga_Caverns_Floating_BridgeNE8 +603,XelNaga_Caverns_Floating_BridgeNW8Out +604,XelNaga_Caverns_Floating_BridgeNW8 +605,XelNaga_Caverns_Floating_BridgeNE10Out +606,XelNaga_Caverns_Floating_BridgeNE10 +607,XelNaga_Caverns_Floating_BridgeNW10Out +608,XelNaga_Caverns_Floating_BridgeNW10 +609,XelNaga_Caverns_Floating_BridgeNE12Out +610,XelNaga_Caverns_Floating_BridgeNE12 +611,XelNaga_Caverns_Floating_BridgeNW12Out +612,XelNaga_Caverns_Floating_BridgeNW12 +613,XelNaga_Caverns_Floating_BridgeH8Out +614,XelNaga_Caverns_Floating_BridgeH8 +615,XelNaga_Caverns_Floating_BridgeV8Out +616,XelNaga_Caverns_Floating_BridgeV8 +617,XelNaga_Caverns_Floating_BridgeH10Out +618,XelNaga_Caverns_Floating_BridgeH10 +619,XelNaga_Caverns_Floating_BridgeV10Out +620,XelNaga_Caverns_Floating_BridgeV10 +621,XelNaga_Caverns_Floating_BridgeH12Out +622,XelNaga_Caverns_Floating_BridgeH12 +623,XelNaga_Caverns_Floating_BridgeV12Out +624,XelNaga_Caverns_Floating_BridgeV12 +627,CollapsibleTerranTowerPushUnitRampLeft +628,CollapsibleTerranTowerPushUnitRampRight +631,CollapsibleRockTowerPushUnit +632,CollapsibleTerranTowerPushUnit +633,CollapsibleRockTowerPushUnitRampRight +634,CollapsibleRockTowerPushUnitRampLeft +635,DigesterCreepSprayTargetUnit +636,DigesterCreepSprayUnit +637,NydusCanalAttackerWeapon +638,ViperConsumeStructureWeapon +641,ResourceBlocker +642,TempestWeapon +643,YoinkMissile +647,YoinkVikingAirMissile +649,YoinkVikingGroundMissile +651,YoinkSiegeTankMissile +653,WarHoundWeapon +655,EyeStalkWeapon +658,WidowMineWeapon +659,WidowMineAirWeapon +660,MothershipCoreWeaponWeapon +661,TornadoMissileWeapon +662,TornadoMissileDummyWeapon +663,TalonsMissileWeapon +664,CreepTumorMissile +665,LocustMPEggAMissileWeapon +666,LocustMPEggBMissileWeapon +667,LocustMPWeapon +669,RepulsorCannonWeapon +673,CollapsibleRockTowerDiagonal +674,CollapsibleTerranTowerDiagonal +675,CollapsibleTerranTowerRampLeft +676,CollapsibleTerranTowerRampRight +677,Ice2x2NonConjoined +678,IceProtossCrates +679,ProtossCrates +680,TowerMine +681,PickupPalletGas +682,PickupPalletMinerals +683,PickupScrapSalvage1x1 +684,PickupScrapSalvage2x2 +685,PickupScrapSalvage3x3 +686,RoughTerrain +687,UnbuildableBricksSmallUnit +688,UnbuildablePlatesSmallUnit +689,UnbuildablePlatesUnit +690,UnbuildableRocksSmallUnit +691,XelNagaHealingShrine +692,InvisibleTargetDummy +693,ProtossVespeneGeyser +694,CollapsibleRockTower +695,CollapsibleTerranTower +696,ThornLizard +697,CleaningBot +698,DestructibleRock6x6Weak +699,ProtossSnakeSegmentDemo +700,PhysicsCapsule +701,PhysicsCube +702,PhysicsCylinder +703,PhysicsKnot +704,PhysicsL +705,PhysicsPrimitives +706,PhysicsSphere +707,PhysicsStar +708,CreepBlocker4x4 +709,DestructibleCityDebris2x4Vertical +710,DestructibleCityDebris2x4Horizontal +711,DestructibleCityDebris2x6Vertical +712,DestructibleCityDebris2x6Horizontal +713,DestructibleCityDebris4x4 +714,DestructibleCityDebris6x6 +715,DestructibleCityDebrisHugeDiagonalBLUR +716,DestructibleCityDebrisHugeDiagonalULBR +717,TestZerg +718,PathingBlockerRadius1 +719,DestructibleRockEx12x4Vertical +720,DestructibleRockEx12x4Horizontal +721,DestructibleRockEx12x6Vertical +722,DestructibleRockEx12x6Horizontal +723,DestructibleRockEx14x4 +724,DestructibleRockEx16x6 +725,DestructibleRockEx1DiagonalHugeULBR +726,DestructibleRockEx1DiagonalHugeBLUR +727,DestructibleRockEx1VerticalHuge +728,DestructibleRockEx1HorizontalHuge +729,DestructibleIce2x4Vertical +730,DestructibleIce2x4Horizontal +731,DestructibleIce2x6Vertical +732,DestructibleIce2x6Horizontal +733,DestructibleIce4x4 +734,DestructibleIce6x6 +735,DestructibleIceDiagonalHugeULBR +736,DestructibleIceDiagonalHugeBLUR +737,DestructibleIceVerticalHuge +738,DestructibleIceHorizontalHuge +739,DesertPlanetSearchlight +740,DesertPlanetStreetlight +741,UnbuildableBricksUnit +742,UnbuildableRocksUnit +743,ZerusDestructibleArch +744,Artosilope +745,Anteplott +746,LabBot +747,Crabeetle +748,CollapsibleRockTowerRampRight +749,CollapsibleRockTowerRampLeft +750,LabMineralField +751,LabMineralField750 +767,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +768,SnowRefinery_Terran_ExtendingBridgeNEShort8 +769,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +770,SnowRefinery_Terran_ExtendingBridgeNWShort8 +775,Tarsonis_DoorN +776,Tarsonis_DoorNLowered +777,Tarsonis_DoorNE +778,Tarsonis_DoorNELowered +779,Tarsonis_DoorE +780,Tarsonis_DoorELowered +781,Tarsonis_DoorNW +782,Tarsonis_DoorNWLowered +783,RavagerCocoon +784,Ravager +785,Liberator +786,RavagerBurrowed +788,ThorAP +789,Cyclone +790,LocustMPFlying +791,Disruptor +792,AiurLightBridgeNE8Out +793,AiurLightBridgeNE8 +794,AiurLightBridgeNE10Out +795,AiurLightBridgeNE10 +796,AiurLightBridgeNE12Out +797,AiurLightBridgeNE12 +798,AiurLightBridgeNW8Out +799,AiurLightBridgeNW8 +800,AiurLightBridgeNW10Out +801,AiurLightBridgeNW10 +802,AiurLightBridgeNW12Out +803,AiurLightBridgeNW12 +804,AiurTempleBridgeNE8Out +806,AiurTempleBridgeNE10Out +808,AiurTempleBridgeNE12Out +810,AiurTempleBridgeNW8Out +812,AiurTempleBridgeNW10Out +814,AiurTempleBridgeNW12Out +816,ShakurasLightBridgeNE8Out +817,ShakurasLightBridgeNE8 +818,ShakurasLightBridgeNE10Out +819,ShakurasLightBridgeNE10 +820,ShakurasLightBridgeNE12Out +821,ShakurasLightBridgeNE12 +822,ShakurasLightBridgeNW8Out +823,ShakurasLightBridgeNW8 +824,ShakurasLightBridgeNW10Out +825,ShakurasLightBridgeNW10 +826,ShakurasLightBridgeNW12Out +827,ShakurasLightBridgeNW12 +828,VoidMPImmortalReviveCorpse +829,GuardianCocoonMP +830,GuardianMP +831,DevourerCocoonMP +832,DevourerMP +833,DefilerMPBurrowed +834,DefilerMP +835,OracleStasisTrap +836,DisruptorPhased +837,LiberatorAG +838,AiurLightBridgeAbandonedNE8Out +839,AiurLightBridgeAbandonedNE8 +840,AiurLightBridgeAbandonedNE10Out +841,AiurLightBridgeAbandonedNE10 +842,AiurLightBridgeAbandonedNE12Out +843,AiurLightBridgeAbandonedNE12 +844,AiurLightBridgeAbandonedNW8Out +845,AiurLightBridgeAbandonedNW8 +846,AiurLightBridgeAbandonedNW10Out +847,AiurLightBridgeAbandonedNW10 +848,AiurLightBridgeAbandonedNW12Out +849,AiurLightBridgeAbandonedNW12 +850,CollapsiblePurifierTowerDebris +851,PortCity_Bridge_UnitNE8Out +852,PortCity_Bridge_UnitNE8 +853,PortCity_Bridge_UnitSE8Out +854,PortCity_Bridge_UnitSE8 +855,PortCity_Bridge_UnitNW8Out +856,PortCity_Bridge_UnitNW8 +857,PortCity_Bridge_UnitSW8Out +858,PortCity_Bridge_UnitSW8 +859,PortCity_Bridge_UnitNE10Out +860,PortCity_Bridge_UnitNE10 +861,PortCity_Bridge_UnitSE10Out +862,PortCity_Bridge_UnitSE10 +863,PortCity_Bridge_UnitNW10Out +864,PortCity_Bridge_UnitNW10 +865,PortCity_Bridge_UnitSW10Out +866,PortCity_Bridge_UnitSW10 +867,PortCity_Bridge_UnitNE12Out +868,PortCity_Bridge_UnitNE12 +869,PortCity_Bridge_UnitSE12Out +870,PortCity_Bridge_UnitSE12 +871,PortCity_Bridge_UnitNW12Out +872,PortCity_Bridge_UnitNW12 +873,PortCity_Bridge_UnitSW12Out +874,PortCity_Bridge_UnitSW12 +875,PortCity_Bridge_UnitN8Out +876,PortCity_Bridge_UnitN8 +877,PortCity_Bridge_UnitS8Out +878,PortCity_Bridge_UnitS8 +879,PortCity_Bridge_UnitE8Out +880,PortCity_Bridge_UnitE8 +881,PortCity_Bridge_UnitW8Out +882,PortCity_Bridge_UnitW8 +883,PortCity_Bridge_UnitN10Out +884,PortCity_Bridge_UnitN10 +885,PortCity_Bridge_UnitS10Out +886,PortCity_Bridge_UnitS10 +887,PortCity_Bridge_UnitE10Out +888,PortCity_Bridge_UnitE10 +889,PortCity_Bridge_UnitW10Out +890,PortCity_Bridge_UnitW10 +891,PortCity_Bridge_UnitN12Out +892,PortCity_Bridge_UnitN12 +893,PortCity_Bridge_UnitS12Out +894,PortCity_Bridge_UnitS12 +895,PortCity_Bridge_UnitE12Out +896,PortCity_Bridge_UnitE12 +897,PortCity_Bridge_UnitW12Out +898,PortCity_Bridge_UnitW12 +899,PurifierRichMineralField +900,PurifierRichMineralField750 +915,CollapsiblePurifierTowerPushUnit +917,LocustMPPrecursor +918,ReleaseInterceptorsBeacon +919,AdeptPhaseShift +920,RavagerCorrosiveBileMissile +921,HydraliskImpaleMissile +922,CycloneMissileLargeAir +923,CycloneMissile +924,CycloneMissileLarge +925,ThorAALance +926,OracleWeapon +927,TempestWeaponGround +928,RavagerWeaponMissile +929,ScoutMPAirWeaponLeft +930,ScoutMPAirWeaponRight +931,ArbiterMPWeaponMissile +932,GuardianMPWeapon +933,DevourerMPWeaponMissile +934,DefilerMPDarkSwarmWeapon +935,QueenMPEnsnareMissile +936,QueenMPSpawnBroodlingsMissile +937,LightningBombWeapon +938,HERCPlacement +939,GrappleWeapon +942,CausticSprayMissile +943,ParasiticBombMissile +944,ParasiticBombDummy +945,AdeptWeapon +946,AdeptUpgradeWeapon +947,LiberatorMissile +948,LiberatorDamageMissile +949,LiberatorAGMissile +950,KD8Charge +951,KD8ChargeWeapon +953,SlaynElementalGrabWeapon +954,SlaynElementalGrabAirUnit +955,SlaynElementalGrabGroundUnit +956,SlaynElementalWeapon +961,DestructibleExpeditionGate6x6 +962,DestructibleZergInfestation3x3 +963,HERC +964,Moopy +965,Replicant +966,SeekerMissile +967,AiurTempleBridgeDestructibleNE8Out +968,AiurTempleBridgeDestructibleNE10Out +969,AiurTempleBridgeDestructibleNE12Out +970,AiurTempleBridgeDestructibleNW8Out +971,AiurTempleBridgeDestructibleNW10Out +972,AiurTempleBridgeDestructibleNW12Out +973,AiurTempleBridgeDestructibleSW8Out +974,AiurTempleBridgeDestructibleSW10Out +975,AiurTempleBridgeDestructibleSW12Out +976,AiurTempleBridgeDestructibleSE8Out +977,AiurTempleBridgeDestructibleSE10Out +978,AiurTempleBridgeDestructibleSE12Out +980,FlyoverUnit +981,CorsairMP +982,ScoutMP +984,ArbiterMP +985,ScourgeMP +986,DefilerMPPlagueWeapon +987,QueenMP +988,XelNagaDestructibleRampBlocker6S +989,XelNagaDestructibleRampBlocker6SE +990,XelNagaDestructibleRampBlocker6E +991,XelNagaDestructibleRampBlocker6NE +992,XelNagaDestructibleRampBlocker6N +993,XelNagaDestructibleRampBlocker6NW +994,XelNagaDestructibleRampBlocker6W +995,XelNagaDestructibleRampBlocker6SW +996,XelNagaDestructibleRampBlocker8S +997,XelNagaDestructibleRampBlocker8SE +998,XelNagaDestructibleRampBlocker8E +999,XelNagaDestructibleRampBlocker8NE +1000,XelNagaDestructibleRampBlocker8N +1001,XelNagaDestructibleRampBlocker8NW +1002,XelNagaDestructibleRampBlocker8W +1003,XelNagaDestructibleRampBlocker8SW +1004,ReptileCrate +1005,SlaynSwarmHostSpawnFlyer +1006,SlaynElemental +1007,PurifierVespeneGeyser +1008,ShakurasVespeneGeyser +1009,CollapsiblePurifierTowerDiagonal +1010,CreepOnlyBlocker4x4 +1011,PurifierMineralField +1012,PurifierMineralField750 +1013,Beacon_Nova +1014,Beacon_NovaSmall +1015,Ursula +1016,Elsecaro_Colonist_Hut +1017,TransportOverlordCocoon +1018,OverlordTransport +1019,PylonOvercharged +1020,BypassArmorDrone +1021,AdeptPiercingWeapon +1022,CorrosiveParasiteWeapon diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 5d2071c9..f9ddcb6b 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -406,7 +406,7 @@ def load_build(expansion, version): # Load LotV Data lotv_builds = dict() -for version in ('base', '44401'): +for version in ('base', '44401', '47185'): lotv_builds[version] = load_build('LotV', version) datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds, 'LotV': lotv_builds} diff --git a/sc2reader/data/ability_lookup.csv b/sc2reader/data/ability_lookup.csv index 96e715c0..b91ee5ec 100755 --- a/sc2reader/data/ability_lookup.csv +++ b/sc2reader/data/ability_lookup.csv @@ -566,3 +566,81 @@ SlaynElementalGrab,SlaynElementalGrab PowerSourceFast,PowerSourceFast WidowMineArmed,WidowMineArmed IsTransportOverlord,IsTransportOverlord +ActivateStasisWard,ActivateStasisWard +AdeptPiercingUpgrade,AdeptPiercingUpgrade +BurrowedMove,BurrowedMove +CliffWalk,CliffWalk +CloakingField,CloakingField +CombatDrugs,CombatDrugs +ConcussiveGrenade,ConcussiveGrenade +CycloneLockOnDamageUpgrade,CycloneLockOnDamageUpgrade +Detector,Detector +Disguise,Disguise +ExplosiveShrapnelShells,ExplosiveShrapnelShells +FlyingLocusts,FlyingLocusts +Frenzied,Frenzied +GravitonCatapult,GravitonCatapult +HighCapacityFuelTanks,HighCapacityFuelTanks +ImprovedEnergy,ImprovedEnergy +JetPack,JetPack +LiberatorAGRangeUpgrade,LiberatorAGRangeUpgrade +MutaliskRegeneration,MutaliskRegeneration +PermanentlyCloaked,PermanentlyCloaked +PermanentlyCloakedObserver,PermanentlyCloakedObserver +PermanentlyCloakedStasis,PermanentlyCloakedStasis +PointDefense,PointDefense +RadarField,RadarField +RapidRegeneration,RapidRegeneration +SwarmSeeds,SwarmSeeds +WidowMineBioSplash,WidowMineBioSplash +SprayTerran,SprayTerran +SprayZerg,SprayZerg +SprayProtoss,SprayProtoss +PortCity_Bridge_UnitNE8Out,PortCity_Bridge_UnitNE8Out +PortCity_Bridge_UnitNE8,PortCity_Bridge_UnitNE8 +PortCity_Bridge_UnitSE8Out,PortCity_Bridge_UnitSE8Out +PortCity_Bridge_UnitSE8,PortCity_Bridge_UnitSE8 +PortCity_Bridge_UnitNW8Out,PortCity_Bridge_UnitNW8Out +PortCity_Bridge_UnitNW8,PortCity_Bridge_UnitNW8 +PortCity_Bridge_UnitSW8Out,PortCity_Bridge_UnitSW8Out +PortCity_Bridge_UnitSW8,PortCity_Bridge_UnitSW8 +PortCity_Bridge_UnitNE10Out,PortCity_Bridge_UnitNE10Out +PortCity_Bridge_UnitNE10,PortCity_Bridge_UnitNE10 +PortCity_Bridge_UnitSE10Out,PortCity_Bridge_UnitSE10Out +PortCity_Bridge_UnitSE10,PortCity_Bridge_UnitSE10 +PortCity_Bridge_UnitNW10Out,PortCity_Bridge_UnitNW10Out +PortCity_Bridge_UnitNW10,PortCity_Bridge_UnitNW10 +PortCity_Bridge_UnitSW10Out,PortCity_Bridge_UnitSW10Out +PortCity_Bridge_UnitSW10,PortCity_Bridge_UnitSW10 +PortCity_Bridge_UnitNE12Out,PortCity_Bridge_UnitNE12Out +PortCity_Bridge_UnitNE12,PortCity_Bridge_UnitNE12 +PortCity_Bridge_UnitSE12Out,PortCity_Bridge_UnitSE12Out +PortCity_Bridge_UnitSE12,PortCity_Bridge_UnitSE12 +PortCity_Bridge_UnitNW12Out,PortCity_Bridge_UnitNW12Out +PortCity_Bridge_UnitNW12,PortCity_Bridge_UnitNW12 +PortCity_Bridge_UnitSW12Out,PortCity_Bridge_UnitSW12Out +PortCity_Bridge_UnitSW12,PortCity_Bridge_UnitSW12 +PortCity_Bridge_UnitN8Out,PortCity_Bridge_UnitN8Out +PortCity_Bridge_UnitN8,PortCity_Bridge_UnitN8 +PortCity_Bridge_UnitS8Out,PortCity_Bridge_UnitS8Out +PortCity_Bridge_UnitS8,PortCity_Bridge_UnitS8 +PortCity_Bridge_UnitE8Out,PortCity_Bridge_UnitE8Out +PortCity_Bridge_UnitE8,PortCity_Bridge_UnitE8 +PortCity_Bridge_UnitW8Out,PortCity_Bridge_UnitW8Out +PortCity_Bridge_UnitW8,PortCity_Bridge_UnitW8 +PortCity_Bridge_UnitN10Out,PortCity_Bridge_UnitN10Out +PortCity_Bridge_UnitN10,PortCity_Bridge_UnitN10 +PortCity_Bridge_UnitS10Out,PortCity_Bridge_UnitS10Out +PortCity_Bridge_UnitS10,PortCity_Bridge_UnitS10 +PortCity_Bridge_UnitE10Out,PortCity_Bridge_UnitE10Out +PortCity_Bridge_UnitE10,PortCity_Bridge_UnitE10 +PortCity_Bridge_UnitW10Out,PortCity_Bridge_UnitW10Out +PortCity_Bridge_UnitW10,PortCity_Bridge_UnitW10 +PortCity_Bridge_UnitN12Out,PortCity_Bridge_UnitN12Out +PortCity_Bridge_UnitN12,PortCity_Bridge_UnitN12 +PortCity_Bridge_UnitS12Out,PortCity_Bridge_UnitS12Out +PortCity_Bridge_UnitS12,PortCity_Bridge_UnitS12 +PortCity_Bridge_UnitE12Out,PortCity_Bridge_UnitE12Out +PortCity_Bridge_UnitE12,PortCity_Bridge_UnitE12 +PortCity_Bridge_UnitW12Out,PortCity_Bridge_UnitW12Out +PortCity_Bridge_UnitW12,PortCity_Bridge_UnitW12 diff --git a/sc2reader/data/unit_lookup.csv b/sc2reader/data/unit_lookup.csv index e00ccb93..93385a5b 100755 --- a/sc2reader/data/unit_lookup.csv +++ b/sc2reader/data/unit_lookup.csv @@ -839,3 +839,74 @@ Ursadon,Ursadon Ursula,Ursula PylonOvercharged,PylonOvercharged AdeptPiercingWeapon,AdeptPiercingWeapon +BunkerUpgradedACGluescreenDummy,BunkerUpgradedACGluescreenDummy +EliteMarineACGluescreenDummy,EliteMarineACGluescreenDummy +MarauderCommandoACGluescreenDummy,MarauderCommandoACGluescreenDummy +SpecOpsGhostACGluescreenDummy,SpecOpsGhostACGluescreenDummy +HellbatRangerACGluescreenDummy,HellbatRangerACGluescreenDummy +StrikeGoliathACGluescreenDummy,StrikeGoliathACGluescreenDummy +HeavySiegeTankACGluescreenDummy,HeavySiegeTankACGluescreenDummy +RaidLiberatorACGluescreenDummy,RaidLiberatorACGluescreenDummy +RavenTypeIIACGluescreenDummy,RavenTypeIIACGluescreenDummy +CovertBansheeACGluescreenDummy,CovertBansheeACGluescreenDummy +RailgunTurretACGluescreenDummy,RailgunTurretACGluescreenDummy +BlackOpsMissileTurretACGluescreenDummy,BlackOpsMissileTurretACGluescreenDummy +SupplicantACGluescreenDummy,SupplicantACGluescreenDummy +StalkerTaldarimACGluescreenDummy,StalkerTaldarimACGluescreenDummy +SentryTaldarimACGluescreenDummy,SentryTaldarimACGluescreenDummy +HighTemplarTaldarimACGluescreenDummy,HighTemplarTaldarimACGluescreenDummy +ImmortalTaldarimACGluescreenDummy,ImmortalTaldarimACGluescreenDummy +ColossusTaldarimACGluescreenDummy,ColossusTaldarimACGluescreenDummy +WarpPrismTaldarimACGluescreenDummy,WarpPrismTaldarimACGluescreenDummy +PhotonCannonTaldarimACGluescreenDummy,PhotonCannonTaldarimACGluescreenDummy +PortCity_Bridge_UnitNE8Out,PortCity_Bridge_UnitNE8Out +PortCity_Bridge_UnitNE8,PortCity_Bridge_UnitNE8 +PortCity_Bridge_UnitSE8Out,PortCity_Bridge_UnitSE8Out +PortCity_Bridge_UnitSE8,PortCity_Bridge_UnitSE8 +PortCity_Bridge_UnitNW8Out,PortCity_Bridge_UnitNW8Out +PortCity_Bridge_UnitNW8,PortCity_Bridge_UnitNW8 +PortCity_Bridge_UnitSW8Out,PortCity_Bridge_UnitSW8Out +PortCity_Bridge_UnitSW8,PortCity_Bridge_UnitSW8 +PortCity_Bridge_UnitNE10Out,PortCity_Bridge_UnitNE10Out +PortCity_Bridge_UnitNE10,PortCity_Bridge_UnitNE10 +PortCity_Bridge_UnitSE10Out,PortCity_Bridge_UnitSE10Out +PortCity_Bridge_UnitSE10,PortCity_Bridge_UnitSE10 +PortCity_Bridge_UnitNW10Out,PortCity_Bridge_UnitNW10Out +PortCity_Bridge_UnitNW10,PortCity_Bridge_UnitNW10 +PortCity_Bridge_UnitSW10Out,PortCity_Bridge_UnitSW10Out +PortCity_Bridge_UnitSW10,PortCity_Bridge_UnitSW10 +PortCity_Bridge_UnitNE12Out,PortCity_Bridge_UnitNE12Out +PortCity_Bridge_UnitNE12,PortCity_Bridge_UnitNE12 +PortCity_Bridge_UnitSE12Out,PortCity_Bridge_UnitSE12Out +PortCity_Bridge_UnitSE12,PortCity_Bridge_UnitSE12 +PortCity_Bridge_UnitNW12Out,PortCity_Bridge_UnitNW12Out +PortCity_Bridge_UnitNW12,PortCity_Bridge_UnitNW12 +PortCity_Bridge_UnitSW12Out,PortCity_Bridge_UnitSW12Out +PortCity_Bridge_UnitSW12,PortCity_Bridge_UnitSW12 +PortCity_Bridge_UnitN8Out,PortCity_Bridge_UnitN8Out +PortCity_Bridge_UnitN8,PortCity_Bridge_UnitN8 +PortCity_Bridge_UnitS8Out,PortCity_Bridge_UnitS8Out +PortCity_Bridge_UnitS8,PortCity_Bridge_UnitS8 +PortCity_Bridge_UnitE8Out,PortCity_Bridge_UnitE8Out +PortCity_Bridge_UnitE8,PortCity_Bridge_UnitE8 +PortCity_Bridge_UnitW8Out,PortCity_Bridge_UnitW8Out +PortCity_Bridge_UnitW8,PortCity_Bridge_UnitW8 +PortCity_Bridge_UnitN10Out,PortCity_Bridge_UnitN10Out +PortCity_Bridge_UnitN10,PortCity_Bridge_UnitN10 +PortCity_Bridge_UnitS10Out,PortCity_Bridge_UnitS10Out +PortCity_Bridge_UnitS10,PortCity_Bridge_UnitS10 +PortCity_Bridge_UnitE10Out,PortCity_Bridge_UnitE10Out +PortCity_Bridge_UnitE10,PortCity_Bridge_UnitE10 +PortCity_Bridge_UnitW10Out,PortCity_Bridge_UnitW10Out +PortCity_Bridge_UnitW10,PortCity_Bridge_UnitW10 +PortCity_Bridge_UnitN12Out,PortCity_Bridge_UnitN12Out +PortCity_Bridge_UnitN12,PortCity_Bridge_UnitN12 +PortCity_Bridge_UnitS12Out,PortCity_Bridge_UnitS12Out +PortCity_Bridge_UnitS12,PortCity_Bridge_UnitS12 +PortCity_Bridge_UnitE12Out,PortCity_Bridge_UnitE12Out +PortCity_Bridge_UnitE12,PortCity_Bridge_UnitE12 +PortCity_Bridge_UnitW12Out,PortCity_Bridge_UnitW12Out +PortCity_Bridge_UnitW12,PortCity_Bridge_UnitW12 +DestructibleExpeditionGate6x6,DestructibleExpeditionGate6x6 +DestructibleZergInfestation3x3,DestructibleZergInfestation3x3 +Elsecaro_Colonist_Hut,Elsecaro_Colonist_Hut diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 17dea9e2..fa6daf5a 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -594,6 +594,7 @@ def register_default_datapacks(self): self.register_datapack(datapacks['HotS']['38215'], lambda r: r.expansion == 'HotS' and 38215 <= r.build) self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) self.register_datapack(datapacks['LotV']['44401'], lambda r: r.expansion == 'LotV' and 44401 <= r.build) + self.register_datapack(datapacks['LotV']['47185'], lambda r: r.expansion == 'LotV' and 47185 <= r.build) # Internal Methods def _get_reader(self, data_file): From e6ca55b28c960771287dac39503655dab1428f61 Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Fri, 18 Nov 2016 15:58:36 -0800 Subject: [PATCH 234/238] fixing tests from graylinkim/ggtracker merge --- sc2reader/engine/plugins/creeptracker.py | 38 +++++++++++++----------- test_replays/test_all.py | 7 +++-- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index 25ead4af..14120770 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -5,8 +5,12 @@ from sets import Set except ImportError: Set = set -from PIL.Image import open as PIL_open -from PIL.Image import ANTIALIAS +try: + # required for CreepTracker, but CreepTracker is optional + from PIL.Image import open as PIL_open + from PIL.Image import ANTIALIAS +except ImportError: + pass try: from StringIO import StringIO except ImportError: @@ -43,7 +47,7 @@ def handleUnitDiedEvent(self, event, replay): except Exception as e: print("Whoa! {}".format(e)) pass - + def handleUnitInitEvent(self,event,replay): try: @@ -53,7 +57,7 @@ def handleUnitInitEvent(self,event,replay): except Exception as e: print("Whoa! {}".format(e)) pass - + def handleUnitBornEvent(self,event,replay): try: if event.unit_type_name== "Hatchery": @@ -81,14 +85,14 @@ def handleEndGame(self, event, replay): pass -## The class used to used to calculate the creep spread +## The class used to used to calculate the creep spread class creep_tracker(): def __init__(self,replay): #if the debug option is selected, minimaps will be printed to a file - ##and a stringIO containing the minimap image will be saved for - ##every minite in the game and the minimap with creep highlighted + ##and a stringIO containing the minimap image will be saved for + ##every minite in the game and the minimap with creep highlighted ## will be printed out. - self.debug = replay.opt.debug + self.debug = replay.opt['debug'] ##This list contains creep spread area for each player self.creep_spread_by_minute = dict() ## this list contains a minimap highlighted with creep spread for each player @@ -125,7 +129,7 @@ def __init__(self,replay): # resize height to MAPHEIGHT, and compute new width that # would preserve aspect ratio self.map_width = int(cropsize[0] * (float(self.map_height) / cropsize[1])) - self.mapSize =self.map_height * self.map_width + self.mapSize =self.map_height * self.map_width ## the following parameters are only needed if minimaps have to be printed # minimapSize = ( self.map_width,int(self.map_height) ) @@ -138,10 +142,10 @@ def __init__(self,replay): imageCenter = [(self.map_width/2), self.map_height/2] # this is the scaling factor to go from the SC2 coordinate # system to pixel coordinates - self.image_scale = float(self.map_height) / cropsize[1] + self.image_scale = float(self.map_height) / cropsize[1] self.transX =imageCenter[0] + self.image_scale * (mapCenter[0]) self.transY = imageCenter[1] + self.image_scale * (mapCenter[1]) - + def radius_to_map_positions(self,radius): ## this function converts all radius into map coordinates ## centred around the origin that the creep can exist @@ -180,7 +184,7 @@ def add_to_list(self,player_id,unit_id,unit_location,unit_type,event_time): def remove_from_list(self,unit_id,time_frame): ## This function searches is given a unit ID for every unit who died ## the unit id will be searched in cgu_gen_units for matches - ## if there are any, that unit will be removed from active CGUs + ## if there are any, that unit will be removed from active CGUs ## and appended as a new time frame for player_id in self.creep_gen_units: length_cgu_list = len(self.creep_gen_units[player_id]) @@ -194,7 +198,7 @@ def remove_from_list(self,unit_id,time_frame): self.creep_gen_units_times[player_id].append(time_frame) def cgu_gen_times_to_chunks(self,cgu_time_list): - ## this function returns the index and value of every cgu time + ## this function returns the index and value of every cgu time maximum_cgu_time = max(cgu_time_list) for i in range(0, maximum_cgu_time): a = list(filter(lambda x_y: x_y[1]//60==i , enumerate(cgu_time_list))) @@ -211,7 +215,7 @@ def cgu_in_min_to_cgu_units(self,player_id,cgu_in_minutes): cgu_units.append(self.creep_gen_units[player_id][index]) cgu_max_in_minute = max(cgu_units,key = len) yield cgu_max_in_minute - + def reduce_cgu_per_minute(self,player_id): #the creep_gen_units_lists contains every single time frame #where a CGU is added, @@ -224,7 +228,7 @@ def reduce_cgu_per_minute(self,player_id): self.creep_gen_units_times[player_id] = list(minutes) def get_creep_spread_area(self,player_id): - ## iterates through all cgus and and calculate the area + ## iterates through all cgus and and calculate the area for index,cgu_per_player in enumerate(self.creep_gen_units[player_id]): # convert cgu list into centre of circles and radius cgu_radius = map(lambda x: (x[1], self.unit_name_to_radius[x[2]]),\ @@ -234,7 +238,7 @@ def get_creep_spread_area(self,player_id): creep_area_positions = self.cgu_radius_to_map_positions(cgu_radius,self.radius_to_coordinates) cgu_event_time = self.creep_gen_units_times[player_id][index] cgu_event_time_str=str(int(cgu_event_time//60))+":"+str(cgu_event_time%60) - if self.debug: + if self.debug: self.print_image(creep_area_positions,player_id,cgu_event_time_str) creep_area = len(creep_area_positions) self.creep_spread_by_minute[player_id][cgu_event_time]=\ @@ -251,7 +255,7 @@ def cgu_radius_to_map_positions(self,cgu_radius,radius_to_coordinates): point = cgu[0] radius = cgu[1] ## subtract all radius_to_coordinates with centre of - ## cgu radius to change centre of circle + ## cgu radius to change centre of circle cgu_map_position = map( lambda x:(x[0]+point[0],x[1]+point[1])\ ,self.radius_to_coordinates[radius]) total_points_on_map= total_points_on_map | Set(cgu_map_position) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index f0f9e671..37bc8d38 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -13,6 +13,7 @@ import unittest import sc2reader +from sc2reader.exceptions import CorruptTrackerFileError sc2reader.log_utils.log_to_console("INFO") @@ -395,8 +396,10 @@ def test_creepTracker(self): assert replay.player[2].creep_spread_by_minute[780] == 22.42 def test_bad_unit_ids(self): - replay = sc2reader.load_replay("test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay", load_level=4) - replay = sc2reader.load_replay("test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay", load_level=4) + with self.assertRaises(CorruptTrackerFileError): + replay = sc2reader.load_replay("test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay", load_level=4) + with self.assertRaises(CorruptTrackerFileError): + replay = sc2reader.load_replay("test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay", load_level=4) def test_daedalus_point(self): replay = sc2reader.load_replay("test_replays/2.0.11.26825/DaedalusPoint.SC2Replay") From c86eb5a6076913373b438e9080424f7f1b546fd7 Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Mon, 28 Nov 2016 14:01:28 -0800 Subject: [PATCH 235/238] fixing more references from the CHANGELOG --- sc2reader/factories/plugins/replay.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sc2reader/factories/plugins/replay.py b/sc2reader/factories/plugins/replay.py index 492052b1..ad465609 100644 --- a/sc2reader/factories/plugins/replay.py +++ b/sc2reader/factories/plugins/replay.py @@ -140,13 +140,13 @@ def SelectionTracker(replay): if debug: logger.info("[{0}] {1} selected {2} units: {3}".format(Length(seconds=event.second), person.name, len(selections[0x0A].objects), selections[0x0A])) - elif event.name == 'SetToHotkeyEvent': + elif event.name == 'SetControlGroupEvent': selections = player_selections[event.frame] selections[event.control_group] = selections[0x0A].copy() if debug: logger.info("[{0}] {1} set hotkey {2} to current selection".format(Length(seconds=event.second), person.name, event.hotkey)) - elif event.name == 'AddToHotkeyEvent': + elif event.name == 'AddToControlGroupEvent': selections = player_selections[event.frame] control_group = selections[event.control_group].copy() error = not control_group.deselect(event.mask_type, event.mask_data) @@ -155,7 +155,7 @@ def SelectionTracker(replay): if debug: logger.info("[{0}] {1} added current selection to hotkey {2}".format(Length(seconds=event.second), person.name, event.hotkey)) - elif event.name == 'GetFromHotkeyEvent': + elif event.name == 'GetControlGroupEvent': selections = player_selections[event.frame] control_group = selections[event.control_group].copy() error = not control_group.deselect(event.mask_type, event.mask_data) From af4d492e402eca39f29c9d092777db9a185df521 Mon Sep 17 00:00:00 2001 From: dsjoerg Date: Tue, 6 Dec 2016 13:02:14 -0500 Subject: [PATCH 236/238] bump to 0.8.0, update some URLs and contributor info --- CHANGELOG.rst | 4 ++++ CONTRIBUTORS.txt | 6 ++++-- sc2reader/__init__.py | 2 +- setup.py | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index dce8cf4c..e0bd31ea 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,10 @@ CHANGELOG ============ +0.8.0 - +--------------------------- +* Merged into ggtracker/sc2reader, which mostly means that we have a bunch of parsing fixes. Thanks @StoicLoofah! + 0.7.0 - --------------------------- diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index e53bbcd4..aea5dd40 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -1,8 +1,10 @@ -Author and Maintainer: +Maintainer: + David Joerg - @dsjoerg on github + +Author: Graylin Kim - graylinkim @ github Contributors: - David Joerg - @dsjoerg on github Alexander Hanhikoski - @alexhanh on github Bas Peschier (fizzgig) - @bpeschier on github Jason Dana - @sheutka on github diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 8ae84731..0bcf512a 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -20,7 +20,7 @@ """ from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.7.0-pre" +__version__ = "0.8.0" import os import sys diff --git a/setup.py b/setup.py index 47cf417c..6b09d6ab 100644 --- a/setup.py +++ b/setup.py @@ -4,14 +4,14 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.7.0-pre', + version='0.8.0', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), author="Graylin Kim", author_email="graylin.kim@gmail.com", - url="https://github.com/GraylinKim/sc2reader", + url="https://github.com/ggtracker/sc2reader", platforms=["any"], From 8cdc7d2e0e42d9775ec743ee854f4152311ee75a Mon Sep 17 00:00:00 2001 From: Hugo Wainwright Date: Sun, 11 Dec 2016 17:51:05 +0000 Subject: [PATCH 237/238] added support for protocol 48258 --- sc2reader/data/LotV/48258_abilities.csv | 542 ++++++++++++++ sc2reader/data/LotV/48258_units.csv | 897 ++++++++++++++++++++++++ sc2reader/data/__init__.py | 2 +- sc2reader/data/ability_lookup.csv | 184 +++++ sc2reader/data/unit_lookup.csv | 10 + sc2reader/resources.py | 2 + 6 files changed, 1636 insertions(+), 1 deletion(-) create mode 100644 sc2reader/data/LotV/48258_abilities.csv create mode 100644 sc2reader/data/LotV/48258_units.csv diff --git a/sc2reader/data/LotV/48258_abilities.csv b/sc2reader/data/LotV/48258_abilities.csv new file mode 100644 index 00000000..2ca25a08 --- /dev/null +++ b/sc2reader/data/LotV/48258_abilities.csv @@ -0,0 +1,542 @@ +35,Taunt +36,stop +38,move +45,attack +59,SprayTerran +60,SprayZerg +61,SprayProtoss +62,SalvageShared +64,GhostHoldFire +65,GhostWeaponsFree +67,Explode +68,CarrierLaunchSpeedUpgrade +68,PhoenixRangeUpgrade +69,FungalGrowth +70,GuardianShield +71,MULERepair +72,Baneling +74,Feedback +76,PlacePointDefenseDrone +77,HallucinationArchon +78,HallucinationColossus +79,HallucinationHighTemplar +80,HallucinationImmortal +81,HallucinationPhoenix +82,HallucinationProbe +83,HallucinationStalker +84,HallucinationVoidRay +85,HallucinationWarpPrism +86,HallucinationZealot +87,MULEGather +88,SeekerMissile +89,CalldownMULE +90,GravitonBeam +94,SpawnChangeling +101,Rally +102,ProgressRally +103,RallyCommand +104,RallyNexus +105,RallyHatchery +106,GlialReconstitution +106,TunnelingClaws +108,InfestedTerrans +109,NeuralParasite +110,SpawnLarva +111,StimpackMarauder +112,SupplyDrop +115,TimeWarp +116,ChitinousPlating +118,SCVHarvest +119,ProbeHarvest +121,que1 +122,que5 +123,que5CancelToSelection +125,que5Addon +126,BuildInProgress +127,Repair +128,Armory +128,Barracks +128,Bunker +128,CommandCenter +128,EngineeringBay +128,Factory +128,FusionCore +128,GhostAcademy +128,MissileTurret +128,Refinery +128,SensorTower +128,Starport +128,SupplyDepot +130,Stimpack +131,GhostCloak +133,MedivacHeal +134,SiegeMode +135,Unsiege +136,BansheeCloak +137,MedivacTransport +138,ScannerSweep +139,Yamato +140,AssaultMode +141,FighterMode +142,BunkerTransport +143,CommandCenterTransport +144,CommandCenterLiftOff +145,CommandCenterLand +146,BarracksReactor +146,BarracksTechLab +147,BarracksLiftOff +148,FactoryReactor +148,FactoryTechLab +149,FactoryLiftOff +150,StarportReactor +150,StarportTechLab +151,StarportLiftOff +152,FactoryLand +153,StarportLand +154,SCV +155,BarracksLand +156,SupplyDepotLower +157,SupplyDepotRaise +158,Ghost +158,Marauder +158,Marine +158,Reaper +159,Cyclone +159,Hellion +159,HellionTank +159,SiegeTank +159,Thor +159,WidowMine +160,Banshee +160,Battlecruiser +160,Liberator +160,Medivac +160,Raven +160,VikingFighter +161,HiSecAutoTracking +161,NeosteelFrame +161,TerranBuildingArmor +161,TerranInfantryArmorsLevel1 +161,TerranInfantryArmorsLevel2 +161,TerranInfantryArmorsLevel3 +161,TerranInfantryWeaponsLevel1 +161,TerranInfantryWeaponsLevel2 +161,TerranInfantryWeaponsLevel3 +163,Nuke +164,PunisherGrenades +164,ShieldWall +164,Stimpack +165,DrillClaws +165,HighCapacityBarrels +166,BansheeCloak +166,BansheeSpeed +166,LiberatorAGRangeUpgrade +166,MedivacIncreaseSpeedBoost +166,RavenCorvidReactor +166,RavenRecalibratedExplosives +167,PersonalCloaking +168,TerranShipWeaponsLevel1 +168,TerranShipWeaponsLevel2 +168,TerranShipWeaponsLevel3 +168,TerranVehicleAndShipArmorsLevel1 +168,TerranVehicleAndShipArmorsLevel2 +168,TerranVehicleAndShipArmorsLevel3 +168,TerranVehicleWeaponsLevel1 +168,TerranVehicleWeaponsLevel2 +168,TerranVehicleWeaponsLevel3 +169,Assimilator +169,CyberneticsCore +169,DarkShrine +169,FleetBeacon +169,Forge +169,Gateway +169,Nexus +169,PhotonCannon +169,Pylon +169,RoboticsBay +169,RoboticsFacility +169,Stargate +169,TemplarArchive +169,TwilightCouncil +170,WarpPrismTransport +171,Adept +171,DarkTemplar +171,HighTemplar +171,Sentry +171,Stalker +171,Zealot +172,Carrier +172,Oracle +172,Phoenix +172,Tempest +172,VoidRay +173,Colossus +173,Disruptor +173,Immortal +173,Observer +173,WarpPrism +174,Probe +175,PsiStorm +176,HangarQueue5 +178,Interceptor +179,ProtossGroundArmorsLevel1 +179,ProtossGroundArmorsLevel2 +179,ProtossGroundArmorsLevel3 +179,ProtossGroundWeaponsLevel1 +179,ProtossGroundWeaponsLevel2 +179,ProtossGroundWeaponsLevel3 +179,ProtossShieldsLevel1 +179,ProtossShieldsLevel2 +179,ProtossShieldsLevel3 +180,ExtendedThermalLance +180,GraviticDrive +180,ObserverGraviticBooster +181,PsiStormTech +182,BanelingNest +182,EvolutionChamber +182,Extractor +182,Hatchery +182,HydraliskDen +182,InfestationPit +182,NydusNetwork +182,RoachWarren +182,SpawningPool +182,SpineCrawler +182,Spire +182,SporeCrawler +182,UltraliskCavern +183,DroneHarvest +184,ZergGroundArmorsLevel1 +184,ZergGroundArmorsLevel2 +184,ZergGroundArmorsLevel3 +184,ZergMeleeWeaponsLevel1 +184,ZergMeleeWeaponsLevel2 +184,ZergMeleeWeaponsLevel3 +184,ZergMissileWeaponsLevel1 +184,ZergMissileWeaponsLevel2 +184,ZergMissileWeaponsLevel3 +185,UpgradeToLair +186,UpgradeToHive +187,UpgradeToGreaterSpire +188,Burrow +188,overlordspeed +189,zerglingattackspeed +189,zerglingmovementspeed +190,EvolveMuscularAugments +191,ZergFlyerArmorsLevel1 +191,ZergFlyerArmorsLevel2 +191,ZergFlyerArmorsLevel3 +191,ZergFlyerWeaponsLevel1 +191,ZergFlyerWeaponsLevel2 +191,ZergFlyerWeaponsLevel3 +192,Corruptor +192,Drone +192,Hydralisk +192,Infestor +192,Mutalisk +192,Overlord +192,Roach +192,SwarmHostMP +192,Ultralisk +192,Viper +192,Zergling +193,MorphToBroodLord +194,BurrowBanelingDown +195,BurrowBanelingUp +196,BurrowDroneDown +197,BurrowDroneUp +198,BurrowHydraliskDown +199,BurrowHydraliskUp +200,BurrowRoachDown +201,BurrowRoachUp +202,BurrowZerglingDown +203,BurrowZerglingUp +204,BurrowInfestorTerranDown +205,BurrowInfestorTerranUp +206,RedstoneLavaCritterBurrow +207,RedstoneLavaCritterInjuredBurrow +208,RedstoneLavaCritterUnburrow +209,RedstoneLavaCritterInjuredUnburrow +210,OverlordTransport +213,Adept +213,DarkTemplar +213,HighTemplar +213,Sentry +213,Stalker +213,Zealot +214,BurrowQueenDown +215,BurrowQueenUp +216,NydusCanalTransport +217,Blink +218,BurrowInfestorDown +219,BurrowInfestorUp +220,MorphToOverseer +221,UpgradeToPlanetaryFortress +222,InfestorEnergyUpgrade +222,NeuralParasite +223,CentrificalHooks +224,BurrowUltraliskDown +225,BurrowUltraliskUp +226,UpgradeToOrbital +227,UpgradeToWarpGate +228,MorphBackToGateway +229,OrbitalLiftOff +230,OrbitalCommandLand +231,ForceField +232,PhasingMode +233,TransportMode +234,BattlecruiserEnableSpecializations +235,ProtossAirArmorsLevel1 +235,ProtossAirArmorsLevel2 +235,ProtossAirArmorsLevel3 +235,ProtossAirWeaponsLevel1 +235,ProtossAirWeaponsLevel2 +235,ProtossAirWeaponsLevel3 +235,WarpGateResearch +236,AdeptPiercingAttack +236,BlinkTech +236,Charge +237,TacNukeStrike +240,EMP +242,Queen +244,Transfusion +253,AttackRedirect +254,StimpackRedirect +255,StimpackMarauderRedirect +257,StopRedirect +258,GenerateCreep +259,CreepTumorQueen +260,SpineCrawlerUproot +261,SporeCrawlerUproot +262,SpineCrawlerRoot +263,SporeCrawlerRoot +264,CreepTumor +265,BuildAutoTurret +266,ArchonWarp +267,NydusCanal +269,Charge +273,Contaminate +276,que5Passive +277,que5PassiveCancelToSelection +305,DigesterCreepSpray +309,MorphToMothership +312,MothershipCore +334,XelNagaHealingShrine +343,MothershipCoreMassRecall +345,MorphToHellion +355,MorphToHellionTank +363,MorphToSwarmHostBurrowedMP +364,MorphToSwarmHostMP +366,attackProtossBuilding +368,stopProtossBuilding +369,BlindingCloud +371,Yoink +374,ViperConsumeStructure +377,TestZerg +378,VolatileBurstBuilding +385,WidowMineBurrow +386,WidowMineUnburrow +387,WidowMineAttack +388,TornadoMissile +392,BurrowLurkerMPDown +393,BurrowLurkerMPUp +394,UpgradeToLurkerDenMP +395,HallucinationOracle +396,MedivacSpeedBoost +397,ExtendingBridgeNEWide8Out +398,ExtendingBridgeNEWide8 +399,ExtendingBridgeNWWide8Out +400,ExtendingBridgeNWWide8 +401,ExtendingBridgeNEWide10Out +402,ExtendingBridgeNEWide10 +403,ExtendingBridgeNWWide10Out +404,ExtendingBridgeNWWide10 +405,ExtendingBridgeNEWide12Out +406,ExtendingBridgeNEWide12 +407,ExtendingBridgeNWWide12Out +408,ExtendingBridgeNWWide12 +410,CritterFlee +411,OracleRevelation +419,MothershipCorePurifyNexus +420,XelNaga_Caverns_DoorE +421,XelNaga_Caverns_DoorEOpened +422,XelNaga_Caverns_DoorN +423,XelNaga_Caverns_DoorNE +424,XelNaga_Caverns_DoorNEOpened +425,XelNaga_Caverns_DoorNOpened +426,XelNaga_Caverns_DoorNW +427,XelNaga_Caverns_DoorNWOpened +428,XelNaga_Caverns_DoorS +429,XelNaga_Caverns_DoorSE +430,XelNaga_Caverns_DoorSEOpened +431,XelNaga_Caverns_DoorSOpened +432,XelNaga_Caverns_DoorSW +433,XelNaga_Caverns_DoorSWOpened +434,XelNaga_Caverns_DoorW +435,XelNaga_Caverns_DoorWOpened +436,XelNaga_Caverns_Floating_BridgeNE8Out +437,XelNaga_Caverns_Floating_BridgeNE8 +438,XelNaga_Caverns_Floating_BridgeNW8Out +439,XelNaga_Caverns_Floating_BridgeNW8 +440,XelNaga_Caverns_Floating_BridgeNE10Out +441,XelNaga_Caverns_Floating_BridgeNE10 +442,XelNaga_Caverns_Floating_BridgeNW10Out +443,XelNaga_Caverns_Floating_BridgeNW10 +444,XelNaga_Caverns_Floating_BridgeNE12Out +445,XelNaga_Caverns_Floating_BridgeNE12 +446,XelNaga_Caverns_Floating_BridgeNW12Out +447,XelNaga_Caverns_Floating_BridgeNW12 +448,XelNaga_Caverns_Floating_BridgeH8Out +449,XelNaga_Caverns_Floating_BridgeH8 +450,XelNaga_Caverns_Floating_BridgeV8Out +451,XelNaga_Caverns_Floating_BridgeV8 +452,XelNaga_Caverns_Floating_BridgeH10Out +453,XelNaga_Caverns_Floating_BridgeH10 +454,XelNaga_Caverns_Floating_BridgeV10Out +455,XelNaga_Caverns_Floating_BridgeV10 +456,XelNaga_Caverns_Floating_BridgeH12Out +457,XelNaga_Caverns_Floating_BridgeH12 +458,XelNaga_Caverns_Floating_BridgeV12Out +459,XelNaga_Caverns_Floating_BridgeV12 +460,TemporalField +484,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +485,SnowRefinery_Terran_ExtendingBridgeNEShort8 +486,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +487,SnowRefinery_Terran_ExtendingBridgeNWShort8 +509,CausticSpray +512,MorphToRavager +513,MorphToLurker +516,RavagerCorrosiveBile +517,BurrowRavagerDown +518,BurrowRavagerUp +520,PurificationNovaTargeted +522,LockOn +524,LockOnCancel +526,Hyperjump +528,ThorAPMode +529,ThorNormalMode +531,MothershipMassRecall +532,NydusWormTransport +533,OracleWeapon +539,LocustMPFlyingSwoop +540,HallucinationDisruptor +541,HallucinationAdept +542,VoidRaySwarmDamageBoost +543,SeekerDummyChannel +544,AiurLightBridgeNE8Out +545,AiurLightBridgeNE8 +546,AiurLightBridgeNE10Out +547,AiurLightBridgeNE10 +548,AiurLightBridgeNE12Out +549,AiurLightBridgeNE12 +550,AiurLightBridgeNW8Out +551,AiurLightBridgeNW8 +552,AiurLightBridgeNW10Out +553,AiurLightBridgeNW10 +554,AiurLightBridgeNW12Out +555,AiurLightBridgeNW12 +568,ShakurasLightBridgeNE8Out +569,ShakurasLightBridgeNE8 +570,ShakurasLightBridgeNE10Out +571,ShakurasLightBridgeNE10 +572,ShakurasLightBridgeNE12Out +573,ShakurasLightBridgeNE12 +574,ShakurasLightBridgeNW8Out +575,ShakurasLightBridgeNW8 +576,ShakurasLightBridgeNW10Out +577,ShakurasLightBridgeNW10 +578,ShakurasLightBridgeNW12Out +579,ShakurasLightBridgeNW12 +580,VoidMPImmortalReviveRebuild +582,ArbiterMPStasisField +583,ArbiterMPRecall +584,CorsairMPDisruptionWeb +585,MorphToGuardianMP +586,MorphToDevourerMP +587,DefilerMPConsume +588,DefilerMPDarkSwarm +589,DefilerMPPlague +590,DefilerMPBurrow +591,DefilerMPUnburrow +592,QueenMPEnsnare +593,QueenMPSpawnBroodlings +594,QueenMPInfestCommandCenter +598,OracleStasisTrap +602,ParasiticBomb +603,AdeptPhaseShift +606,LurkerHoldFire +607,LurkerRemoveHoldFire +610,LiberatorAGTarget +611,LiberatorAATarget +613,AiurLightBridgeAbandonedNE8Out +614,AiurLightBridgeAbandonedNE8 +615,AiurLightBridgeAbandonedNE10Out +616,AiurLightBridgeAbandonedNE10 +617,AiurLightBridgeAbandonedNE12Out +618,AiurLightBridgeAbandonedNE12 +619,AiurLightBridgeAbandonedNW8Out +620,AiurLightBridgeAbandonedNW8 +621,AiurLightBridgeAbandonedNW10Out +622,AiurLightBridgeAbandonedNW10 +623,AiurLightBridgeAbandonedNW12Out +624,AiurLightBridgeAbandonedNW12 +625,KD8Charge +628,AdeptPhaseShiftCancel +629,AdeptShadePhaseShiftCancel +630,SlaynElementalGrab +632,PortCity_Bridge_UnitNE8Out +633,PortCity_Bridge_UnitNE8 +634,PortCity_Bridge_UnitSE8Out +635,PortCity_Bridge_UnitSE8 +636,PortCity_Bridge_UnitNW8Out +637,PortCity_Bridge_UnitNW8 +638,PortCity_Bridge_UnitSW8Out +639,PortCity_Bridge_UnitSW8 +640,PortCity_Bridge_UnitNE10Out +641,PortCity_Bridge_UnitNE10 +642,PortCity_Bridge_UnitSE10Out +643,PortCity_Bridge_UnitSE10 +644,PortCity_Bridge_UnitNW10Out +645,PortCity_Bridge_UnitNW10 +646,PortCity_Bridge_UnitSW10Out +646,PowerSourceFast +647,PortCity_Bridge_UnitSW10 +648,PortCity_Bridge_UnitNE12Out +649,PortCity_Bridge_UnitNE12 +650,PortCity_Bridge_UnitSE12Out +651,PortCity_Bridge_UnitSE12 +652,PortCity_Bridge_UnitNW12Out +653,PortCity_Bridge_UnitNW12 +654,PortCity_Bridge_UnitSW12Out +655,PortCity_Bridge_UnitSW12 +656,PortCity_Bridge_UnitN8Out +657,PortCity_Bridge_UnitN8 +658,PortCity_Bridge_UnitS8Out +659,PortCity_Bridge_UnitS8 +660,PortCity_Bridge_UnitE8Out +661,PortCity_Bridge_UnitE8 +662,PortCity_Bridge_UnitW8Out +663,PortCity_Bridge_UnitW8 +664,PortCity_Bridge_UnitN10Out +665,PortCity_Bridge_UnitN10 +666,PortCity_Bridge_UnitS10Out +667,PortCity_Bridge_UnitS10 +668,PortCity_Bridge_UnitE10Out +669,PortCity_Bridge_UnitE10 +670,PortCity_Bridge_UnitW10Out +671,PortCity_Bridge_UnitW10 +672,PortCity_Bridge_UnitN12Out +673,PortCity_Bridge_UnitN12 +674,PortCity_Bridge_UnitS12Out +675,PortCity_Bridge_UnitS12 +676,PortCity_Bridge_UnitE12Out +677,PortCity_Bridge_UnitE12 +678,PortCity_Bridge_UnitW12Out +679,PortCity_Bridge_UnitW12 +682,DarkTemplarBlink +686,SpawnLocustsTargeted +688,MorphToTransportOverlord +691,ChannelSnipe +694,DarkTemplarBlinkUpgrade +1843,WidowMineArmed +2378,IsTransportOverlord diff --git a/sc2reader/data/LotV/48258_units.csv b/sc2reader/data/LotV/48258_units.csv new file mode 100644 index 00000000..cc21644b --- /dev/null +++ b/sc2reader/data/LotV/48258_units.csv @@ -0,0 +1,897 @@ +1,System_Snapshot_Dummy +21,Ball +22,StereoscopicOptionsUnit +23,Colossus +24,TechLab +25,Reactor +27,InfestorTerran +28,BanelingCocoon +29,Baneling +30,Mothership +31,PointDefenseDrone +32,Changeling +33,ChangelingZealot +34,ChangelingMarineShield +35,ChangelingMarine +36,ChangelingZerglingWings +37,ChangelingZergling +39,CommandCenter +40,SupplyDepot +41,Refinery +42,Barracks +43,EngineeringBay +44,MissileTurret +45,Bunker +46,SensorTower +47,GhostAcademy +48,Factory +49,Starport +51,Armory +52,FusionCore +53,AutoTurret +54,SiegeTankSieged +55,SiegeTank +56,VikingAssault +57,VikingFighter +58,CommandCenterFlying +59,BarracksTechLab +60,BarracksReactor +61,FactoryTechLab +62,FactoryReactor +63,StarportTechLab +64,StarportReactor +65,FactoryFlying +66,StarportFlying +67,SCV +68,BarracksFlying +69,SupplyDepotLowered +70,Marine +71,Reaper +72,Ghost +73,Marauder +74,Thor +75,Hellion +76,Medivac +77,Banshee +78,Raven +79,Battlecruiser +80,Nuke +81,Nexus +82,Pylon +83,Assimilator +84,Gateway +85,Forge +86,FleetBeacon +87,TwilightCouncil +88,PhotonCannon +89,Stargate +90,TemplarArchive +91,DarkShrine +92,RoboticsBay +93,RoboticsFacility +94,CyberneticsCore +95,Zealot +96,Stalker +97,HighTemplar +98,DarkTemplar +99,Sentry +100,Phoenix +101,Carrier +102,VoidRay +103,WarpPrism +104,Observer +105,Immortal +106,Probe +107,Interceptor +108,Hatchery +109,CreepTumor +110,Extractor +111,SpawningPool +112,EvolutionChamber +113,HydraliskDen +114,Spire +115,UltraliskCavern +116,InfestationPit +117,NydusNetwork +118,BanelingNest +119,RoachWarren +120,SpineCrawler +121,SporeCrawler +122,Lair +123,Hive +124,GreaterSpire +125,Egg +126,Drone +127,Zergling +128,Overlord +129,Hydralisk +130,Mutalisk +131,Ultralisk +132,Roach +133,Infestor +134,Corruptor +135,BroodLordCocoon +136,BroodLord +137,BanelingBurrowed +138,DroneBurrowed +139,HydraliskBurrowed +140,RoachBurrowed +141,ZerglingBurrowed +142,InfestorTerranBurrowed +143,RedstoneLavaCritterBurrowed +144,RedstoneLavaCritterInjuredBurrowed +145,RedstoneLavaCritter +146,RedstoneLavaCritterInjured +147,QueenBurrowed +148,Queen +149,InfestorBurrowed +150,OverlordCocoon +151,Overseer +152,PlanetaryFortress +153,UltraliskBurrowed +154,OrbitalCommand +155,WarpGate +156,OrbitalCommandFlying +157,ForceField +158,WarpPrismPhasing +159,CreepTumorBurrowed +160,CreepTumorQueen +161,SpineCrawlerUprooted +162,SporeCrawlerUprooted +163,Archon +164,NydusCanal +165,BroodlingEscort +166,GhostAlternate +167,GhostNova +168,RichMineralField +169,RichMineralField750 +170,Ursadon +172,XelNagaTower +176,InfestedTerransEgg +177,Larva +178,ReaperPlaceholder +179,MarineACGluescreenDummy +180,FirebatACGluescreenDummy +181,MedicACGluescreenDummy +182,MarauderACGluescreenDummy +183,VultureACGluescreenDummy +184,SiegeTankACGluescreenDummy +185,VikingACGluescreenDummy +186,BansheeACGluescreenDummy +187,BattlecruiserACGluescreenDummy +188,OrbitalCommandACGluescreenDummy +189,BunkerACGluescreenDummy +190,BunkerUpgradedACGluescreenDummy +191,MissileTurretACGluescreenDummy +192,HellbatACGluescreenDummy +193,GoliathACGluescreenDummy +194,CycloneACGluescreenDummy +195,WraithACGluescreenDummy +196,ScienceVesselACGluescreenDummy +197,HerculesACGluescreenDummy +198,ThorACGluescreenDummy +199,PerditionTurretACGluescreenDummy +200,FlamingBettyACGluescreenDummy +201,DevastationTurretACGluescreenDummy +202,BlasterBillyACGluescreenDummy +203,SpinningDizzyACGluescreenDummy +204,ZerglingKerriganACGluescreenDummy +205,RaptorACGluescreenDummy +206,QueenCoopACGluescreenDummy +207,HydraliskACGluescreenDummy +208,HydraliskLurkerACGluescreenDummy +209,MutaliskBroodlordACGluescreenDummy +210,BroodLordACGluescreenDummy +211,UltraliskACGluescreenDummy +212,TorrasqueACGluescreenDummy +213,OverseerACGluescreenDummy +214,LurkerACGluescreenDummy +215,SpineCrawlerACGluescreenDummy +216,SporeCrawlerACGluescreenDummy +217,NydusNetworkACGluescreenDummy +218,OmegaNetworkACGluescreenDummy +219,ZerglingZagaraACGluescreenDummy +220,SwarmlingACGluescreenDummy +221,BanelingACGluescreenDummy +222,SplitterlingACGluescreenDummy +223,AberrationACGluescreenDummy +224,ScourgeACGluescreenDummy +225,CorruptorACGluescreenDummy +226,BileLauncherACGluescreenDummy +227,SwarmQueenACGluescreenDummy +228,RoachACGluescreenDummy +229,RoachVileACGluescreenDummy +230,RavagerACGluescreenDummy +231,SwarmHostACGluescreenDummy +232,MutaliskACGluescreenDummy +233,GuardianACGluescreenDummy +234,DevourerACGluescreenDummy +235,ViperACGluescreenDummy +236,BrutaliskACGluescreenDummy +237,LeviathanACGluescreenDummy +238,ZealotACGluescreenDummy +239,ZealotAiurACGluescreenDummy +240,DragoonACGluescreenDummy +241,HighTemplarACGluescreenDummy +242,ArchonACGluescreenDummy +243,ImmortalACGluescreenDummy +244,ObserverACGluescreenDummy +245,PhoenixAiurACGluescreenDummy +246,ReaverACGluescreenDummy +247,TempestACGluescreenDummy +248,PhotonCannonACGluescreenDummy +249,ZealotVorazunACGluescreenDummy +250,ZealotShakurasACGluescreenDummy +251,StalkerShakurasACGluescreenDummy +252,DarkTemplarShakurasACGluescreenDummy +253,CorsairACGluescreenDummy +254,VoidRayACGluescreenDummy +255,VoidRayShakurasACGluescreenDummy +256,OracleACGluescreenDummy +257,DarkArchonACGluescreenDummy +258,DarkPylonACGluescreenDummy +259,ZealotPurifierACGluescreenDummy +260,SentryPurifierACGluescreenDummy +261,ImmortalKaraxACGluescreenDummy +262,ColossusACGluescreenDummy +263,ColossusPurifierACGluescreenDummy +264,PhoenixPurifierACGluescreenDummy +265,CarrierACGluescreenDummy +266,CarrierAiurACGluescreenDummy +267,KhaydarinMonolithACGluescreenDummy +268,ShieldBatteryACGluescreenDummy +269,EliteMarineACGluescreenDummy +270,MarauderCommandoACGluescreenDummy +271,SpecOpsGhostACGluescreenDummy +272,HellbatRangerACGluescreenDummy +273,StrikeGoliathACGluescreenDummy +274,HeavySiegeTankACGluescreenDummy +275,RaidLiberatorACGluescreenDummy +276,RavenTypeIIACGluescreenDummy +277,CovertBansheeACGluescreenDummy +278,RailgunTurretACGluescreenDummy +279,BlackOpsMissileTurretACGluescreenDummy +280,SupplicantACGluescreenDummy +281,StalkerTaldarimACGluescreenDummy +282,SentryTaldarimACGluescreenDummy +283,HighTemplarTaldarimACGluescreenDummy +284,ImmortalTaldarimACGluescreenDummy +285,ColossusTaldarimACGluescreenDummy +286,WarpPrismTaldarimACGluescreenDummy +287,PhotonCannonTaldarimACGluescreenDummy +289,NeedleSpinesWeapon +290,CorruptionWeapon +291,InfestedTerransWeapon +292,NeuralParasiteWeapon +293,PointDefenseDroneReleaseWeapon +294,HunterSeekerWeapon +295,MULE +297,ThorAAWeapon +298,PunisherGrenadesLMWeapon +299,VikingFighterWeapon +300,ATALaserBatteryLMWeapon +301,ATSLaserBatteryLMWeapon +302,LongboltMissileWeapon +303,D8ChargeWeapon +304,YamatoWeapon +305,IonCannonsWeapon +306,AcidSalivaWeapon +307,SpineCrawlerWeapon +308,SporeCrawlerWeapon +309,GlaiveWurmWeapon +310,GlaiveWurmM2Weapon +311,GlaiveWurmM3Weapon +312,StalkerWeapon +313,EMP2Weapon +314,BacklashRocketsLMWeapon +315,PhotonCannonWeapon +316,ParasiteSporeWeapon +318,Broodling +319,BroodLordBWeapon +322,AutoTurretReleaseWeapon +323,LarvaReleaseMissile +324,AcidSpinesWeapon +325,FrenzyWeapon +326,ContaminateWeapon +338,BeaconRally +339,BeaconArmy +340,BeaconAttack +341,BeaconDefend +342,BeaconHarass +343,BeaconIdle +344,BeaconAuto +345,BeaconDetect +346,BeaconScout +347,BeaconClaim +348,BeaconExpand +349,BeaconCustom1 +350,BeaconCustom2 +351,BeaconCustom3 +352,BeaconCustom4 +353,Adept +359,Rocks2x2NonConjoined +360,FungalGrowthMissile +361,NeuralParasiteTentacleMissile +362,Beacon_Protoss +363,Beacon_ProtossSmall +364,Beacon_Terran +365,Beacon_TerranSmall +366,Beacon_Zerg +367,Beacon_ZergSmall +368,Lyote +369,CarrionBird +370,KarakMale +371,KarakFemale +372,UrsadakFemaleExotic +373,UrsadakMale +374,UrsadakFemale +375,UrsadakCalf +376,UrsadakMaleExotic +377,UtilityBot +378,CommentatorBot1 +379,CommentatorBot2 +380,CommentatorBot3 +381,CommentatorBot4 +382,Scantipede +383,Dog +384,Sheep +385,Cow +386,InfestedTerransEggPlacement +387,InfestorTerransWeapon +388,MineralField +389,VespeneGeyser +390,SpacePlatformGeyser +391,RichVespeneGeyser +392,DestructibleSearchlight +393,DestructibleBullhornLights +394,DestructibleStreetlight +395,DestructibleSpacePlatformSign +396,DestructibleStoreFrontCityProps +397,DestructibleBillboardTall +398,DestructibleBillboardScrollingText +399,DestructibleSpacePlatformBarrier +400,DestructibleSignsDirectional +401,DestructibleSignsConstruction +402,DestructibleSignsFunny +403,DestructibleSignsIcons +404,DestructibleSignsWarning +405,DestructibleGarage +406,DestructibleGarageLarge +407,DestructibleTrafficSignal +408,TrafficSignal +409,BraxisAlphaDestructible1x1 +410,BraxisAlphaDestructible2x2 +411,DestructibleDebris4x4 +412,DestructibleDebris6x6 +413,DestructibleRock2x4Vertical +414,DestructibleRock2x4Horizontal +415,DestructibleRock2x6Vertical +416,DestructibleRock2x6Horizontal +417,DestructibleRock4x4 +418,DestructibleRock6x6 +419,DestructibleRampDiagonalHugeULBR +420,DestructibleRampDiagonalHugeBLUR +421,DestructibleRampVerticalHuge +422,DestructibleRampHorizontalHuge +423,DestructibleDebrisRampDiagonalHugeULBR +424,DestructibleDebrisRampDiagonalHugeBLUR +425,OverlordGenerateCreepKeybind +426,MengskStatueAlone +427,MengskStatue +428,WolfStatue +429,GlobeStatue +430,Weapon +431,GlaiveWurmBounceWeapon +432,BroodLordWeapon +433,BroodLordAWeapon +434,CreepBlocker1x1 +435,PermanentCreepBlocker1x1 +436,PathingBlocker1x1 +437,PathingBlocker2x2 +438,AutoTestAttackTargetGround +439,AutoTestAttackTargetAir +440,AutoTestAttacker +441,HelperEmitterSelectionArrow +442,MultiKillObject +443,ShapeGolfball +444,ShapeCone +445,ShapeCube +446,ShapeCylinder +447,ShapeDodecahedron +448,ShapeIcosahedron +449,ShapeOctahedron +450,ShapePyramid +451,ShapeRoundedCube +452,ShapeSphere +453,ShapeTetrahedron +454,ShapeThickTorus +455,ShapeThinTorus +456,ShapeTorus +457,Shape4PointStar +458,Shape5PointStar +459,Shape6PointStar +460,Shape8PointStar +461,ShapeArrowPointer +462,ShapeBowl +463,ShapeBox +464,ShapeCapsule +465,ShapeCrescentMoon +466,ShapeDecahedron +467,ShapeDiamond +468,ShapeFootball +469,ShapeGemstone +470,ShapeHeart +471,ShapeJack +472,ShapePlusSign +473,ShapeShamrock +474,ShapeSpade +475,ShapeTube +476,ShapeEgg +477,ShapeYenSign +478,ShapeX +479,ShapeWatermelon +480,ShapeWonSign +481,ShapeTennisball +482,ShapeStrawberry +483,ShapeSmileyFace +484,ShapeSoccerball +485,ShapeRainbow +486,ShapeSadFace +487,ShapePoundSign +488,ShapePear +489,ShapePineapple +490,ShapeOrange +491,ShapePeanut +492,ShapeO +493,ShapeLemon +494,ShapeMoneyBag +495,ShapeHorseshoe +496,ShapeHockeyStick +497,ShapeHockeyPuck +498,ShapeHand +499,ShapeGolfClub +500,ShapeGrape +501,ShapeEuroSign +502,ShapeDollarSign +503,ShapeBasketball +504,ShapeCarrot +505,ShapeCherry +506,ShapeBaseball +507,ShapeBaseballBat +508,ShapeBanana +509,ShapeApple +510,ShapeCashLarge +511,ShapeCashMedium +512,ShapeCashSmall +513,ShapeFootballColored +514,ShapeLemonSmall +515,ShapeOrangeSmall +516,ShapeTreasureChestOpen +517,ShapeTreasureChestClosed +518,ShapeWatermelonSmall +519,UnbuildableRocksDestructible +520,UnbuildableBricksDestructible +521,UnbuildablePlatesDestructible +522,Debris2x2NonConjoined +523,EnemyPathingBlocker1x1 +524,EnemyPathingBlocker2x2 +525,EnemyPathingBlocker4x4 +526,EnemyPathingBlocker8x8 +527,EnemyPathingBlocker16x16 +528,ScopeTest +529,SentryACGluescreenDummy +530,MineralField750 +546,HellionTank +547,CollapsibleTerranTowerDebris +548,DebrisRampLeft +549,DebrisRampRight +550,MothershipCore +554,LocustMP +555,CollapsibleRockTowerDebris +556,NydusCanalAttacker +557,NydusCanalCreeper +558,SwarmHostBurrowedMP +559,SwarmHostMP +560,Oracle +561,Tempest +562,WarHound +563,WidowMine +564,Viper +565,WidowMineBurrowed +566,LurkerMPEgg +567,LurkerMP +568,LurkerMPBurrowed +569,LurkerDenMP +570,ExtendingBridgeNEWide8Out +571,ExtendingBridgeNEWide8 +572,ExtendingBridgeNWWide8Out +573,ExtendingBridgeNWWide8 +574,ExtendingBridgeNEWide10Out +575,ExtendingBridgeNEWide10 +576,ExtendingBridgeNWWide10Out +577,ExtendingBridgeNWWide10 +578,ExtendingBridgeNEWide12Out +579,ExtendingBridgeNEWide12 +580,ExtendingBridgeNWWide12Out +581,ExtendingBridgeNWWide12 +583,CollapsibleRockTowerDebrisRampRight +584,CollapsibleRockTowerDebrisRampLeft +585,XelNaga_Caverns_DoorE +586,XelNaga_Caverns_DoorEOpened +587,XelNaga_Caverns_DoorN +588,XelNaga_Caverns_DoorNE +589,XelNaga_Caverns_DoorNEOpened +590,XelNaga_Caverns_DoorNOpened +591,XelNaga_Caverns_DoorNW +592,XelNaga_Caverns_DoorNWOpened +593,XelNaga_Caverns_DoorS +594,XelNaga_Caverns_DoorSE +595,XelNaga_Caverns_DoorSEOpened +596,XelNaga_Caverns_DoorSOpened +597,XelNaga_Caverns_DoorSW +598,XelNaga_Caverns_DoorSWOpened +599,XelNaga_Caverns_DoorW +600,XelNaga_Caverns_DoorWOpened +601,XelNaga_Caverns_Floating_BridgeNE8Out +602,XelNaga_Caverns_Floating_BridgeNE8 +603,XelNaga_Caverns_Floating_BridgeNW8Out +604,XelNaga_Caverns_Floating_BridgeNW8 +605,XelNaga_Caverns_Floating_BridgeNE10Out +606,XelNaga_Caverns_Floating_BridgeNE10 +607,XelNaga_Caverns_Floating_BridgeNW10Out +608,XelNaga_Caverns_Floating_BridgeNW10 +609,XelNaga_Caverns_Floating_BridgeNE12Out +610,XelNaga_Caverns_Floating_BridgeNE12 +611,XelNaga_Caverns_Floating_BridgeNW12Out +612,XelNaga_Caverns_Floating_BridgeNW12 +613,XelNaga_Caverns_Floating_BridgeH8Out +614,XelNaga_Caverns_Floating_BridgeH8 +615,XelNaga_Caverns_Floating_BridgeV8Out +616,XelNaga_Caverns_Floating_BridgeV8 +617,XelNaga_Caverns_Floating_BridgeH10Out +618,XelNaga_Caverns_Floating_BridgeH10 +619,XelNaga_Caverns_Floating_BridgeV10Out +620,XelNaga_Caverns_Floating_BridgeV10 +621,XelNaga_Caverns_Floating_BridgeH12Out +622,XelNaga_Caverns_Floating_BridgeH12 +623,XelNaga_Caverns_Floating_BridgeV12Out +624,XelNaga_Caverns_Floating_BridgeV12 +627,CollapsibleTerranTowerPushUnitRampLeft +628,CollapsibleTerranTowerPushUnitRampRight +631,CollapsibleRockTowerPushUnit +632,CollapsibleTerranTowerPushUnit +633,CollapsibleRockTowerPushUnitRampRight +634,CollapsibleRockTowerPushUnitRampLeft +635,DigesterCreepSprayTargetUnit +636,DigesterCreepSprayUnit +637,NydusCanalAttackerWeapon +638,ViperConsumeStructureWeapon +641,ResourceBlocker +642,TempestWeapon +643,YoinkMissile +647,YoinkVikingAirMissile +649,YoinkVikingGroundMissile +651,YoinkSiegeTankMissile +653,WarHoundWeapon +655,EyeStalkWeapon +658,WidowMineWeapon +659,WidowMineAirWeapon +660,MothershipCoreWeaponWeapon +661,TornadoMissileWeapon +662,TornadoMissileDummyWeapon +663,TalonsMissileWeapon +664,CreepTumorMissile +665,LocustMPEggAMissileWeapon +666,LocustMPEggBMissileWeapon +667,LocustMPWeapon +669,RepulsorCannonWeapon +673,CollapsibleRockTowerDiagonal +674,CollapsibleTerranTowerDiagonal +675,CollapsibleTerranTowerRampLeft +676,CollapsibleTerranTowerRampRight +677,Ice2x2NonConjoined +678,IceProtossCrates +679,ProtossCrates +680,TowerMine +681,PickupPalletGas +682,PickupPalletMinerals +683,PickupScrapSalvage1x1 +684,PickupScrapSalvage2x2 +685,PickupScrapSalvage3x3 +686,RoughTerrain +687,UnbuildableBricksSmallUnit +688,UnbuildablePlatesSmallUnit +689,UnbuildablePlatesUnit +690,UnbuildableRocksSmallUnit +691,XelNagaHealingShrine +692,InvisibleTargetDummy +693,ProtossVespeneGeyser +694,CollapsibleRockTower +695,CollapsibleTerranTower +696,ThornLizard +697,CleaningBot +698,DestructibleRock6x6Weak +699,ProtossSnakeSegmentDemo +700,PhysicsCapsule +701,PhysicsCube +702,PhysicsCylinder +703,PhysicsKnot +704,PhysicsL +705,PhysicsPrimitives +706,PhysicsSphere +707,PhysicsStar +708,CreepBlocker4x4 +709,DestructibleCityDebris2x4Vertical +710,DestructibleCityDebris2x4Horizontal +711,DestructibleCityDebris2x6Vertical +712,DestructibleCityDebris2x6Horizontal +713,DestructibleCityDebris4x4 +714,DestructibleCityDebris6x6 +715,DestructibleCityDebrisHugeDiagonalBLUR +716,DestructibleCityDebrisHugeDiagonalULBR +717,TestZerg +718,PathingBlockerRadius1 +719,DestructibleRockEx12x4Vertical +720,DestructibleRockEx12x4Horizontal +721,DestructibleRockEx12x6Vertical +722,DestructibleRockEx12x6Horizontal +723,DestructibleRockEx14x4 +724,DestructibleRockEx16x6 +725,DestructibleRockEx1DiagonalHugeULBR +726,DestructibleRockEx1DiagonalHugeBLUR +727,DestructibleRockEx1VerticalHuge +728,DestructibleRockEx1HorizontalHuge +729,DestructibleIce2x4Vertical +730,DestructibleIce2x4Horizontal +731,DestructibleIce2x6Vertical +732,DestructibleIce2x6Horizontal +733,DestructibleIce4x4 +734,DestructibleIce6x6 +735,DestructibleIceDiagonalHugeULBR +736,DestructibleIceDiagonalHugeBLUR +737,DestructibleIceVerticalHuge +738,DestructibleIceHorizontalHuge +739,DesertPlanetSearchlight +740,DesertPlanetStreetlight +741,UnbuildableBricksUnit +742,UnbuildableRocksUnit +743,ZerusDestructibleArch +744,Artosilope +745,Anteplott +746,LabBot +747,Crabeetle +748,CollapsibleRockTowerRampRight +749,CollapsibleRockTowerRampLeft +750,LabMineralField +751,LabMineralField750 +767,SnowRefinery_Terran_ExtendingBridgeNEShort8Out +768,SnowRefinery_Terran_ExtendingBridgeNEShort8 +769,SnowRefinery_Terran_ExtendingBridgeNWShort8Out +770,SnowRefinery_Terran_ExtendingBridgeNWShort8 +775,Tarsonis_DoorN +776,Tarsonis_DoorNLowered +777,Tarsonis_DoorNE +778,Tarsonis_DoorNELowered +779,Tarsonis_DoorE +780,Tarsonis_DoorELowered +781,Tarsonis_DoorNW +782,Tarsonis_DoorNWLowered +783,CompoundMansion_DoorN +784,CompoundMansion_DoorNLowered +785,CompoundMansion_DoorNE +786,CompoundMansion_DoorNELowered +787,CompoundMansion_DoorE +788,CompoundMansion_DoorELowered +789,CompoundMansion_DoorNW +790,CompoundMansion_DoorNWLowered +791,RavagerCocoon +792,Ravager +793,Liberator +794,RavagerBurrowed +796,ThorAP +797,Cyclone +798,LocustMPFlying +799,Disruptor +800,AiurLightBridgeNE8Out +801,AiurLightBridgeNE8 +802,AiurLightBridgeNE10Out +803,AiurLightBridgeNE10 +804,AiurLightBridgeNE12Out +805,AiurLightBridgeNE12 +806,AiurLightBridgeNW8Out +807,AiurLightBridgeNW8 +808,AiurLightBridgeNW10Out +809,AiurLightBridgeNW10 +810,AiurLightBridgeNW12Out +811,AiurLightBridgeNW12 +812,AiurTempleBridgeNE8Out +814,AiurTempleBridgeNE10Out +816,AiurTempleBridgeNE12Out +818,AiurTempleBridgeNW8Out +820,AiurTempleBridgeNW10Out +822,AiurTempleBridgeNW12Out +824,ShakurasLightBridgeNE8Out +825,ShakurasLightBridgeNE8 +826,ShakurasLightBridgeNE10Out +827,ShakurasLightBridgeNE10 +828,ShakurasLightBridgeNE12Out +829,ShakurasLightBridgeNE12 +830,ShakurasLightBridgeNW8Out +831,ShakurasLightBridgeNW8 +832,ShakurasLightBridgeNW10Out +833,ShakurasLightBridgeNW10 +834,ShakurasLightBridgeNW12Out +835,ShakurasLightBridgeNW12 +836,VoidMPImmortalReviveCorpse +837,GuardianCocoonMP +838,GuardianMP +839,DevourerCocoonMP +840,DevourerMP +841,DefilerMPBurrowed +842,DefilerMP +843,OracleStasisTrap +844,DisruptorPhased +845,LiberatorAG +846,AiurLightBridgeAbandonedNE8Out +847,AiurLightBridgeAbandonedNE8 +848,AiurLightBridgeAbandonedNE10Out +849,AiurLightBridgeAbandonedNE10 +850,AiurLightBridgeAbandonedNE12Out +851,AiurLightBridgeAbandonedNE12 +852,AiurLightBridgeAbandonedNW8Out +853,AiurLightBridgeAbandonedNW8 +854,AiurLightBridgeAbandonedNW10Out +855,AiurLightBridgeAbandonedNW10 +856,AiurLightBridgeAbandonedNW12Out +857,AiurLightBridgeAbandonedNW12 +858,CollapsiblePurifierTowerDebris +859,PortCity_Bridge_UnitNE8Out +860,PortCity_Bridge_UnitNE8 +861,PortCity_Bridge_UnitSE8Out +862,PortCity_Bridge_UnitSE8 +863,PortCity_Bridge_UnitNW8Out +864,PortCity_Bridge_UnitNW8 +865,PortCity_Bridge_UnitSW8Out +866,PortCity_Bridge_UnitSW8 +867,PortCity_Bridge_UnitNE10Out +868,PortCity_Bridge_UnitNE10 +869,PortCity_Bridge_UnitSE10Out +870,PortCity_Bridge_UnitSE10 +871,PortCity_Bridge_UnitNW10Out +872,PortCity_Bridge_UnitNW10 +873,PortCity_Bridge_UnitSW10Out +874,PortCity_Bridge_UnitSW10 +875,PortCity_Bridge_UnitNE12Out +876,PortCity_Bridge_UnitNE12 +877,PortCity_Bridge_UnitSE12Out +878,PortCity_Bridge_UnitSE12 +879,PortCity_Bridge_UnitNW12Out +880,PortCity_Bridge_UnitNW12 +881,PortCity_Bridge_UnitSW12Out +882,PortCity_Bridge_UnitSW12 +883,PortCity_Bridge_UnitN8Out +884,PortCity_Bridge_UnitN8 +885,PortCity_Bridge_UnitS8Out +886,PortCity_Bridge_UnitS8 +887,PortCity_Bridge_UnitE8Out +888,PortCity_Bridge_UnitE8 +889,PortCity_Bridge_UnitW8Out +890,PortCity_Bridge_UnitW8 +891,PortCity_Bridge_UnitN10Out +892,PortCity_Bridge_UnitN10 +893,PortCity_Bridge_UnitS10Out +894,PortCity_Bridge_UnitS10 +895,PortCity_Bridge_UnitE10Out +896,PortCity_Bridge_UnitE10 +897,PortCity_Bridge_UnitW10Out +898,PortCity_Bridge_UnitW10 +899,PortCity_Bridge_UnitN12Out +900,PortCity_Bridge_UnitN12 +901,PortCity_Bridge_UnitS12Out +902,PortCity_Bridge_UnitS12 +903,PortCity_Bridge_UnitE12Out +904,PortCity_Bridge_UnitE12 +905,PortCity_Bridge_UnitW12Out +906,PortCity_Bridge_UnitW12 +907,PurifierRichMineralField +908,PurifierRichMineralField750 +923,CollapsiblePurifierTowerPushUnit +925,LocustMPPrecursor +926,ReleaseInterceptorsBeacon +927,AdeptPhaseShift +928,RavagerCorrosiveBileMissile +929,HydraliskImpaleMissile +930,CycloneMissileLargeAir +931,CycloneMissile +932,CycloneMissileLarge +933,ThorAALance +934,OracleWeapon +935,TempestWeaponGround +936,RavagerWeaponMissile +937,ScoutMPAirWeaponLeft +938,ScoutMPAirWeaponRight +939,ArbiterMPWeaponMissile +940,GuardianMPWeapon +941,DevourerMPWeaponMissile +942,DefilerMPDarkSwarmWeapon +943,QueenMPEnsnareMissile +944,QueenMPSpawnBroodlingsMissile +945,LightningBombWeapon +946,HERCPlacement +947,GrappleWeapon +950,CausticSprayMissile +951,ParasiticBombMissile +952,ParasiticBombDummy +953,AdeptWeapon +954,AdeptUpgradeWeapon +955,LiberatorMissile +956,LiberatorDamageMissile +957,LiberatorAGMissile +958,KD8Charge +959,KD8ChargeWeapon +961,SlaynElementalGrabWeapon +962,SlaynElementalGrabAirUnit +963,SlaynElementalGrabGroundUnit +964,SlaynElementalWeapon +969,DestructibleExpeditionGate6x6 +970,DestructibleZergInfestation3x3 +971,HERC +972,Moopy +973,Replicant +974,SeekerMissile +975,AiurTempleBridgeDestructibleNE8Out +976,AiurTempleBridgeDestructibleNE10Out +977,AiurTempleBridgeDestructibleNE12Out +978,AiurTempleBridgeDestructibleNW8Out +979,AiurTempleBridgeDestructibleNW10Out +980,AiurTempleBridgeDestructibleNW12Out +981,AiurTempleBridgeDestructibleSW8Out +982,AiurTempleBridgeDestructibleSW10Out +983,AiurTempleBridgeDestructibleSW12Out +984,AiurTempleBridgeDestructibleSE8Out +985,AiurTempleBridgeDestructibleSE10Out +986,AiurTempleBridgeDestructibleSE12Out +988,FlyoverUnit +989,CorsairMP +990,ScoutMP +992,ArbiterMP +993,ScourgeMP +994,DefilerMPPlagueWeapon +995,QueenMP +996,XelNagaDestructibleRampBlocker6S +997,XelNagaDestructibleRampBlocker6SE +998,XelNagaDestructibleRampBlocker6E +999,XelNagaDestructibleRampBlocker6NE +1000,XelNagaDestructibleRampBlocker6N +1001,XelNagaDestructibleRampBlocker6NW +1002,XelNagaDestructibleRampBlocker6W +1003,XelNagaDestructibleRampBlocker6SW +1004,XelNagaDestructibleRampBlocker8S +1005,XelNagaDestructibleRampBlocker8SE +1006,XelNagaDestructibleRampBlocker8E +1007,XelNagaDestructibleRampBlocker8NE +1008,XelNagaDestructibleRampBlocker8N +1009,XelNagaDestructibleRampBlocker8NW +1010,XelNagaDestructibleRampBlocker8W +1011,XelNagaDestructibleRampBlocker8SW +1012,ReptileCrate +1013,SlaynSwarmHostSpawnFlyer +1014,SlaynElemental +1015,PurifierVespeneGeyser +1016,ShakurasVespeneGeyser +1017,CollapsiblePurifierTowerDiagonal +1018,CreepOnlyBlocker4x4 +1019,PurifierMineralField +1020,PurifierMineralField750 +1021,BattleStationMineralField +1022,BattleStationMineralField750 +1023,Beacon_Nova +1024,Beacon_NovaSmall +1025,Ursula +1026,Elsecaro_Colonist_Hut +1027,TransportOverlordCocoon +1028,OverlordTransport +1029,PylonOvercharged +1031,BypassArmorDrone +1032,AdeptPiercingWeapon +1033,CorrosiveParasiteWeapon diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index b0503ce1..a6348f3a 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -406,7 +406,7 @@ def load_build(expansion, version): # Load LotV Data lotv_builds = dict() -for version in ('base', '44401', '47185'): +for version in ('base', '44401', '47185', '48258'): lotv_builds[version] = load_build('LotV', version) datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds, 'LotV': lotv_builds} diff --git a/sc2reader/data/ability_lookup.csv b/sc2reader/data/ability_lookup.csv index b91ee5ec..9267381b 100755 --- a/sc2reader/data/ability_lookup.csv +++ b/sc2reader/data/ability_lookup.csv @@ -644,3 +644,187 @@ PortCity_Bridge_UnitE12Out,PortCity_Bridge_UnitE12Out PortCity_Bridge_UnitE12,PortCity_Bridge_UnitE12 PortCity_Bridge_UnitW12Out,PortCity_Bridge_UnitW12Out PortCity_Bridge_UnitW12,PortCity_Bridge_UnitW12 +CarrierLaunchSpeedUpgrade,CarrierLaunchSpeedUpgrade +PhoenixRangeUpgrade,PhoenixRangeUpgrade +Baneling,Baneling +GlialReconstitution,GlialReconstitution +TunnelingClaws,TunnelingClaws +ChitinousPlating,ChitinousPlating +Armory,Armory +Barracks,Barracks +Bunker,Bunker +CommandCenter,CommandCenter +EngineeringBay,EngineeringBay +Factory,Factory +FusionCore,FusionCore +GhostAcademy,GhostAcademy +MissileTurret,MissileTurret +Refinery,Refinery +SensorTower,SensorTower +Starport,Starport +SupplyDepot,SupplyDepot +BarracksReactor,BarracksReactor +BarracksTechLab,BarracksTechLab +FactoryReactor,FactoryReactor +FactoryTechLab,FactoryTechLab +StarportReactor,StarportReactor +StarportTechLab,StarportTechLab +SCV,SCV +Ghost,Ghost +Marauder,Marauder +Marine,Marine +Reaper,Reaper +Cyclone,Cyclone +Hellion,Hellion +HellionTank,HellionTank +SiegeTank,SiegeTank +Thor,Thor +WidowMine,WidowMine +Banshee,Banshee +Battlecruiser,Battlecruiser +Liberator,Liberator +Medivac,Medivac +Raven,Raven +VikingFighter,VikingFighter +HiSecAutoTracking,HiSecAutoTracking +NeosteelFrame,NeosteelFrame +TerranBuildingArmor,TerranBuildingArmor +TerranInfantryArmorsLevel1,TerranInfantryArmorsLevel1 +TerranInfantryArmorsLevel2,TerranInfantryArmorsLevel2 +TerranInfantryArmorsLevel3,TerranInfantryArmorsLevel3 +TerranInfantryWeaponsLevel1,TerranInfantryWeaponsLevel1 +TerranInfantryWeaponsLevel2,TerranInfantryWeaponsLevel2 +TerranInfantryWeaponsLevel3,TerranInfantryWeaponsLevel3 +Nuke,Nuke +PunisherGrenades,PunisherGrenades +ShieldWall,ShieldWall +DrillClaws,DrillClaws +HighCapacityBarrels,HighCapacityBarrels +BansheeSpeed,BansheeSpeed +MedivacIncreaseSpeedBoost,MedivacIncreaseSpeedBoost +RavenCorvidReactor,RavenCorvidReactor +RavenRecalibratedExplosives,RavenRecalibratedExplosives +PersonalCloaking,PersonalCloaking +TerranShipWeaponsLevel1,TerranShipWeaponsLevel1 +TerranShipWeaponsLevel2,TerranShipWeaponsLevel2 +TerranShipWeaponsLevel3,TerranShipWeaponsLevel3 +TerranVehicleAndShipArmorsLevel1,TerranVehicleAndShipArmorsLevel1 +TerranVehicleAndShipArmorsLevel2,TerranVehicleAndShipArmorsLevel2 +TerranVehicleAndShipArmorsLevel3,TerranVehicleAndShipArmorsLevel3 +TerranVehicleWeaponsLevel1,TerranVehicleWeaponsLevel1 +TerranVehicleWeaponsLevel2,TerranVehicleWeaponsLevel2 +TerranVehicleWeaponsLevel3,TerranVehicleWeaponsLevel3 +Assimilator,Assimilator +CyberneticsCore,CyberneticsCore +DarkShrine,DarkShrine +FleetBeacon,FleetBeacon +Forge,Forge +Gateway,Gateway +Nexus,Nexus +PhotonCannon,PhotonCannon +Pylon,Pylon +RoboticsBay,RoboticsBay +RoboticsFacility,RoboticsFacility +Stargate,Stargate +TemplarArchive,TemplarArchive +TwilightCouncil,TwilightCouncil +Adept,Adept +DarkTemplar,DarkTemplar +HighTemplar,HighTemplar +Sentry,Sentry +Stalker,Stalker +Zealot,Zealot +Carrier,Carrier +Oracle,Oracle +Phoenix,Phoenix +Tempest,Tempest +VoidRay,VoidRay +Colossus,Colossus +Disruptor,Disruptor +Immortal,Immortal +Observer,Observer +WarpPrism,WarpPrism +Probe,Probe +Interceptor,Interceptor +ProtossGroundArmorsLevel1,ProtossGroundArmorsLevel1 +ProtossGroundArmorsLevel2,ProtossGroundArmorsLevel2 +ProtossGroundArmorsLevel3,ProtossGroundArmorsLevel3 +ProtossGroundWeaponsLevel1,ProtossGroundWeaponsLevel1 +ProtossGroundWeaponsLevel2,ProtossGroundWeaponsLevel2 +ProtossGroundWeaponsLevel3,ProtossGroundWeaponsLevel3 +ProtossShieldsLevel1,ProtossShieldsLevel1 +ProtossShieldsLevel2,ProtossShieldsLevel2 +ProtossShieldsLevel3,ProtossShieldsLevel3 +ExtendedThermalLance,ExtendedThermalLance +GraviticDrive,GraviticDrive +ObserverGraviticBooster,ObserverGraviticBooster +PsiStormTech,PsiStormTech +BanelingNest,BanelingNest +EvolutionChamber,EvolutionChamber +Extractor,Extractor +Hatchery,Hatchery +HydraliskDen,HydraliskDen +InfestationPit,InfestationPit +NydusNetwork,NydusNetwork +RoachWarren,RoachWarren +SpawningPool,SpawningPool +SpineCrawler,SpineCrawler +Spire,Spire +SporeCrawler,SporeCrawler +UltraliskCavern,UltraliskCavern +ZergGroundArmorsLevel1,ZergGroundArmorsLevel1 +ZergGroundArmorsLevel2,ZergGroundArmorsLevel2 +ZergGroundArmorsLevel3,ZergGroundArmorsLevel3 +ZergMeleeWeaponsLevel1,ZergMeleeWeaponsLevel1 +ZergMeleeWeaponsLevel2,ZergMeleeWeaponsLevel2 +ZergMeleeWeaponsLevel3,ZergMeleeWeaponsLevel3 +ZergMissileWeaponsLevel1,ZergMissileWeaponsLevel1 +ZergMissileWeaponsLevel2,ZergMissileWeaponsLevel2 +ZergMissileWeaponsLevel3,ZergMissileWeaponsLevel3 +Burrow,Burrow +overlordspeed,overlordspeed +zerglingattackspeed,zerglingattackspeed +zerglingmovementspeed,zerglingmovementspeed +EvolveMuscularAugments,EvolveMuscularAugments +ZergFlyerArmorsLevel1,ZergFlyerArmorsLevel1 +ZergFlyerArmorsLevel2,ZergFlyerArmorsLevel2 +ZergFlyerArmorsLevel3,ZergFlyerArmorsLevel3 +ZergFlyerWeaponsLevel1,ZergFlyerWeaponsLevel1 +ZergFlyerWeaponsLevel2,ZergFlyerWeaponsLevel2 +ZergFlyerWeaponsLevel3,ZergFlyerWeaponsLevel3 +Corruptor,Corruptor +Drone,Drone +Hydralisk,Hydralisk +Infestor,Infestor +Mutalisk,Mutalisk +Overlord,Overlord +Roach,Roach +SwarmHostMP,SwarmHostMP +Ultralisk,Ultralisk +Viper,Viper +Zergling,Zergling +Adept,Adept +DarkTemplar,DarkTemplar +HighTemplar,HighTemplar +Sentry,Sentry +Stalker,Stalker +Zealot,Zealot +InfestorEnergyUpgrade,InfestorEnergyUpgrade +CentrificalHooks,CentrificalHooks +BattlecruiserEnableSpecializations,BattlecruiserEnableSpecializations +ProtossAirArmorsLevel1,ProtossAirArmorsLevel1 +ProtossAirArmorsLevel2,ProtossAirArmorsLevel2 +ProtossAirArmorsLevel3,ProtossAirArmorsLevel3 +ProtossAirWeaponsLevel1,ProtossAirWeaponsLevel1 +ProtossAirWeaponsLevel2,ProtossAirWeaponsLevel2 +ProtossAirWeaponsLevel3,ProtossAirWeaponsLevel3 +WarpGateResearch,WarpGateResearch +AdeptPiercingAttack,AdeptPiercingAttack +BlinkTech,BlinkTech +Queen,Queen +CreepTumorQueen,CreepTumorQueen +CreepTumor,CreepTumor +NydusCanal,NydusCanal +MothershipCore,MothershipCore +DarkTemplarBlink,DarkTemplarBlink +DarkTemplarBlinkUpgrade,DarkTemplarBlinkUpgrade diff --git a/sc2reader/data/unit_lookup.csv b/sc2reader/data/unit_lookup.csv index 93385a5b..48545355 100755 --- a/sc2reader/data/unit_lookup.csv +++ b/sc2reader/data/unit_lookup.csv @@ -910,3 +910,13 @@ PortCity_Bridge_UnitW12,PortCity_Bridge_UnitW12 DestructibleExpeditionGate6x6,DestructibleExpeditionGate6x6 DestructibleZergInfestation3x3,DestructibleZergInfestation3x3 Elsecaro_Colonist_Hut,Elsecaro_Colonist_Hut +CompoundMansion_DoorN,CompoundMansion_DoorN +CompoundMansion_DoorNLowered,CompoundMansion_DoorNLowered +CompoundMansion_DoorNE,CompoundMansion_DoorNE +CompoundMansion_DoorNELowered,CompoundMansion_DoorNELowered +CompoundMansion_DoorE,CompoundMansion_DoorE +CompoundMansion_DoorELowered,CompoundMansion_DoorELowered +CompoundMansion_DoorNW,CompoundMansion_DoorNW +CompoundMansion_DoorNWLowered,CompoundMansion_DoorNWLowered +BattleStationMineralField,BattleStationMineralField +BattleStationMineralField750,BattleStationMineralField750 diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 15d89453..3916109a 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -604,6 +604,8 @@ def register_default_datapacks(self): self.register_datapack(datapacks['LotV']['base'], lambda r: r.expansion == 'LotV' and 34784 <= r.build) self.register_datapack(datapacks['LotV']['44401'], lambda r: r.expansion == 'LotV' and 44401 <= r.build) self.register_datapack(datapacks['LotV']['47185'], lambda r: r.expansion == 'LotV' and 47185 <= r.build) + self.register_datapack(datapacks['LotV']['48258'], lambda r: r.expansion == 'LotV' and 48258 <= r.build) + # Internal Methods def _get_reader(self, data_file): From 3730034a9f2bf0afd9295c882f57d976710e7c90 Mon Sep 17 00:00:00 2001 From: Spencer Krum Date: Wed, 18 Jan 2017 18:04:53 -0800 Subject: [PATCH 238/238] Remove unnecessary print statement --- sc2reader/readers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 8bbd7e9a..a40cd702 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1848,7 +1848,6 @@ def trigger_ping_event(self, data): class GameEventsReader_38996(GameEventsReader_38749): def trigger_ping_event(self, data): - print('yo') return dict( point=dict( x=data.read_uint32() - 2147483648,

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

r+}5l=R0^K&73cHu41lm}^-kuB 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%0AM&841fWEV8E@{ za|i?=^^%5U{&8jo78(Y7vEV|X_dP)mCI`AHGIaSvR#+}?3gGz4=xq<5G0{onotN*c zM9Bqk{tv{H)HlDPh*34fXKg%Pr!7Y>pMQqwRI`T#!GuRPkPPF&ZHC7m_ftddO|S&< zq^tksQibOw+Axf4z`G+#C!OZM^?kU<8Akg15<_{BPpszp_tpCpKy~cwouak@U)0JI zD(Qv3@Np4(!%m93-yfX1pU!_NgdXy>nK&rVGVhq>Vk7I$ z|LXkzOY(6^lrZ(vHm>_y)1mnU9D_d1;=ldPS6t68o0IRoV{ zLh3Yr7v3}IEVRjse;+3|(>S{nXGeZf=wFETmB2=$Ouz^GlGWniZ{Q3GOR%mm2;dp2 z^naxOxsdATq^{sSLfw6DT;gz?SIRj)l1u!bI^Cc$Cr_y99tO3%l(#q~<1*N6o-rKP zyQ(0szCI_rHtTq|mL=#5+&|-~Y+33kUbF+*(oRz-k?@$0@t0&W?jTERq(XC# zCuP)HguO#Tgk*0{e@0Is44cnC8Yas{RU7Xogn1=FyJxu2Fr)tTP!EZ0$-Pr-O|p|4 z|FPMz!45F|t2priH`SAji5BkNhx4rz^s+}gEI~r6H~abru6B*zy#JDGCYO!`_*KwF% zGgAAoXb@eeJ}%~jDR$%IUVD1?kMP^oqm|-IS4@8@Y@M$(VhAfc8Fv1f5vt}^)HuFI z^^ya&@yt^=+m=Qx;z8tx%Y%a?^5>*DvlXxzXr?TX?3d<_*!3fVVys93Z6cDeet{~T z_o6qx>J>I{e3A^#2eiAa1C_FnFyHkVK`|kg+C+17;9OjW`*XTtO#qP9MNF1Z_bf~= z1Fv5iwFr2MjWvzSs?bhld2&+wbJgILju|BA{rfe-;DePV6z1AjRr4Qpg!g8!Gq=q! zhs(gRm>SEb>Cye7z!&R{@-LPAz8w8jMoLeny$_K~kF@@-CYYgx(*E7M5b{HW_3-0d zm~j)d8P!y;lz^_|(ROoOL^mYdUq9U7dX4)u?+i*Zj`RKT+zxJe+<(c!Ep=JxOMTze z!_pgU;;lGV+P&4$^=o6-XufO0L9Gr{SJ%h3ET%p$c}7lSa_7d3+myGay-rG*!FDnX4EX-j*>Wc$F9fYw17k4BNSH7dG_k%@X^WfBWw{Sa zQM6BgF1Vtl&9KK(+{;gdS_rD)pCp;B%+lu8u(t~p8TF78X3ND}$Ih^2m)lmpAJFzt z>vtXoHAt`(Hrp!V(n;U6&dSBVahufBNQp-@-?aA4YQD9;`jd`K(C-^qL%Bbo*uh8- zp}*!0P>%+doj(7^PFmq^AttOcI%V zxaaUd>-3tyyI0;5zrG@o7O$vp_OSBr(}&-vwlKanlZ$hX1JU*vI!ksqx!H?J^zG&w z{I>ZXtNN?yO+r?!1LGG)HZxwMSGUmAo{W_&#y`Rz@Ip;GUh+j$wv3~?U3hy$ISbak SRiO``<$e#DFZVXjM*I(02)lOx literal 0 HcmV?d00001 diff --git a/test_replays/gameheart/gh_sameteam.SC2Replay b/test_replays/gameheart/gh_sameteam.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..3c2328281137436e2a4d30dede11513bb45bd57a GIT binary patch literal 73842 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 z zp`vr0w6A+A;PXnmmb-00W!GVWri%7UQ-YcJwjxW)oBX2Bt;8;2)KCmzow>E@=v{SH z2oiz%Vo0Y+_b7lZzLcN|41$kt9MBQ0_#dUyrQb?R!3kzp1gvz zH8qjy8HK}@qfNA}tRBoB-%QURb<*Sk)|uL{=r=o}+A8)C`L$7h={kKu`W=f#$+k5L^I+8@vgfosH(AVTsVCib5ewXAX;pcVHTx zXtBI?YDCdFixRA$ZQLLKj;DngEx26pq3RE=!=)mbTK!~+=jxa`1C^+4{Yw;`)U}Y^s8@o==EX( zmyG|!{B*e?1N(ixpu}s!r+=amS?Ry3ZZy5rusHh7sw7u!T|h>n zA!W)H)47*ka}}=d%Y5gB`g`WMs1!GO_`xcw0w9BEq%#dKCtAaI7q0zlXS4E9+2va@m8o7FEVd{pbZkMJ4aXiVDjJ^fnLOF?yBHMD;IDZlU z%Im*4pI%X!7JlYVECc`wbpZEQy8pth$l~g$=xE`&%5# z&0PW65kYm*KmAKaT`Bm8`LMZpkV1x7t7tP8*+6YSf@cQIO&wXt?z9+`uoMc<3^qq| zbSr`+&DFEJsQ^O?6K5&Zi$-~7CsV{_Ni}K$>=rp?rky|wf_9%um;cEd3%Q%~nZSg- zmPsHOAAB70EA;o>lY6IHN63XwQwzg`c=FRJY{%=8$oDYp-wH>MR8n#w0FowG01(1M zB2m6;FgaZt@?yBkSaF4*hnyOD97rT9t*5k4q2kpS1O-Jz;<}cPR7|@sF(H=AQ3xg=vk#!uR9T@Uw#X`ER>_x&FTZFzfW(#CBv%5Ah@@X z(L1Ap2oYMcXOa0~;$V!&7A#t^h!KL+O{bL=!&I17n~-BgX<4ZMBi_VlIt!?173fl zR{g~{)N(A`Ox-hxA)(7Jc+8bXHXBxQ!kCgY`Wqt)(Wk9McEgzql z6i-Tu`j|NQ>9^U5aMMn&N|f?SV%_E-N4qXbT9AL8p*9FBQbn~)rb*J5mI{aY{@reZ zK4*$|BJM2o9bT;fR=UxClUU>bY`3gel1JoK2A!ULapD8`uZ;0PuB`mw$HD+SI0*u1 z;`uoMP%ZF*q_3Mpam}P0PwqSj$Wld`vXC`A+22N1^PzZ%&z|D-DJQe5CC94h6msP2m)NKS>Wds&=8V!z{Hl2FrvG_0%t3pVTz?t7{({z@&I5_@Ld zCASJw-X*Kdwal+3I}$5Of=fjF-gB0zU&cn!_$_9@)AE>nX@egCCaY+pz}Nd(^mA>CtV&n_dMl`Q?%=wT+D7aHjAv3n?w~Q4e7vlhi=8r)P@)y695Ae3$ zj}0>Zku;gDv&q-1Ncyc>@o{YB394z$9A1(tw7)TJ^l`4hj~m9*cMW@|x-YnIhGbXCMboC!58{VGhK2MveT@i-Z`-+|hS(r>YnT20V zqc}hC@$8$xmFhV6KN7Dtj@Qem&Rg%ReLY)m5j9%h&2bFYkI}ZhL5&h>As?z?pU6Go zWdEwyz#kOfMK?5*MkEoEZPp<+;JK=M#DGVh{NDp&!4Gbvg|th`!#|1D8NZXdJY!PQ z%+)K8F9JH;wn6AT0l5G6oVfG_)`oOjk$VftIi3X!W%>Y!%}rX_s4*+bBuCSe0IhmF#%zrjB@y0n+fWe>vi_B-_uPg(%B6&{pJ| zCUmMuBf`+bc}1i-HE{dq4o?lLchMD0uuS&ykIlk@juXfXlLhjUhCEEjeQ29k?FwT7Sc0_VpmjgSY)Pfkb3N1 z)k(p1M_o0B8R`!!cJe=)Cv>*Hg=@T0^s{ivrlUV>W3egX${t$}$H=OD*LoL7uk)cR zdx_i0`l1>kd{>tR;N^Lgz*~tiquI9mMJKz^^c_1OyD|0S{6U35nL|zH(#YFR3H~CW zMl<0FYZe{x?oYARf{(t~mC{+KPt13z`ahS=+jX}xcFcn#&ZAudPcHkt##bzUy)Dsg zURu^Al7Eewd+dx`>iwO3gA)ds($EZbxmB*}qnSIuoo}i8ax3}Hfo@u5f`@*R<~^rT Kd#Qk!-2VZ$M3N5x literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index c46697ae..d6f23c6d 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -322,6 +322,37 @@ def test_factory_plugins(self): self.assertEqual(result["game_fps"], 16.0) self.assertTrue(result["is_ladder"]) + def test_gameheartnormalizer_plugin(self): + from sc2reader.engine.plugins.gameheart import GameHeartNormalizer + factory = sc2reader.factories.SC2Factory() + factory.register_plugin("Replay", GameHeartNormalizer()) + + replay = factory.load_replay("test_replays/gameheart/gameheart.SC2Replay") + self.assertEqual(replay.events[0].frame, 0) + self.assertEqual(replay.game_length.seconds, 636) + self.assertEqual(len(replay.observers), 5) + self.assertEqual(replay.players[0].name, 'SjoWBBII') + self.assertEqual(replay.players[0].play_race, 'Terran') + self.assertEqual(replay.players[1].name, 'Stardust') + self.assertEqual(replay.players[1].play_race, 'Protoss') + self.assertEqual(len(replay.teams), 2) + self.assertEqual(replay.teams[0].players[0].name, 'SjoWBBII') + self.assertEqual(replay.teams[1].players[0].name, 'Stardust') + self.assertEqual(replay.winner, replay.teams[1]) + + replay = factory.load_replay("test_replays/gameheart/gh_sameteam.SC2Replay") + self.assertEqual(replay.events[0].frame, 0) + self.assertEqual(replay.game_length.seconds, 424) + self.assertEqual(len(replay.observers), 5) + self.assertEqual(replay.players[0].name, 'EGJDRC') + self.assertEqual(replay.players[0].play_race, 'Zerg') + self.assertEqual(replay.players[1].name, 'LiquidTaeJa') + self.assertEqual(replay.players[1].play_race, 'Terran') + self.assertEqual(len(replay.teams), 2) + self.assertEqual(replay.teams[0].players[0].name, 'EGJDRC') + self.assertEqual(replay.teams[1].players[0].name, 'LiquidTaeJa') + self.assertEqual(replay.winner, replay.teams[0]) + def test_creepTracker(self): from sc2reader.engine.plugins import CreepTracker From 99bd6c1e17ed57b5767596c20db8caf66b3e98b8 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 6 Aug 2013 22:43:33 -0400 Subject: [PATCH 099/238] GameHeart plugin as a GameEngine plugin. --- .../articles/creatingagameengineplugin.rst | 4 +- sc2reader/engine/__init__.py | 11 +- sc2reader/engine/engine.py | 25 +-- sc2reader/engine/plugins/context.py | 12 +- sc2reader/engine/plugins/gameheart.py | 174 ++++++++++-------- test_replays/test_all.py | 15 +- 6 files changed, 126 insertions(+), 115 deletions(-) diff --git a/docs/source/articles/creatingagameengineplugin.rst b/docs/source/articles/creatingagameengineplugin.rst index d014e7a4..740820f3 100644 --- a/docs/source/articles/creatingagameengineplugin.rst +++ b/docs/source/articles/creatingagameengineplugin.rst @@ -65,11 +65,12 @@ Event handlers can choose to ``yield`` additional events which will be injected Early Exits -------------------- -If a plugin wishes to stop processing a replay it can yield a PluginExit event:: +If a plugin wishes to stop processing a replay it can yield a PluginExit event before returning:: def handleEvent(self, event, replay): if len(replay.tracker_events) == 0: yield PluginExit(self, code=0, details=dict(msg="tracker events required")) + return ... def handleAbilityEvent(self, event, replay): @@ -78,6 +79,7 @@ If a plugin wishes to stop processing a replay it can yield a PluginExit event:: catch Error as e: logger.error(e) yield PluginExit(self, code=0, details=dict(msg="Unexpected exception")) + return The GameEngine will intercept this event and remove the plugin from the list of active plugins for this replay. The exit code and details will be available from the replay:: diff --git a/sc2reader/engine/__init__.py b/sc2reader/engine/__init__.py index 8f5967b3..776a330b 100644 --- a/sc2reader/engine/__init__.py +++ b/sc2reader/engine/__init__.py @@ -2,13 +2,10 @@ from __future__ import absolute_import, print_function, unicode_literals, division import sys -from sc2reader.engine.engine import GameEngine, PluginExit +from sc2reader.engine.engine import GameEngine +from sc2reader.engine.events import PluginExit from sc2reader.engine.utils import GameState -from sc2reader.engine.plugins.apm import APMTracker -from sc2reader.engine.plugins.selection import SelectionTracker -from sc2reader.engine.plugins.context import ContextLoader -from sc2reader.engine.plugins.supply import SupplyTracker -from sc2reader.engine.plugins.creeptracker import CreepTracker +from sc2reader.engine import plugins def setGameEngine(engine): @@ -19,5 +16,5 @@ def setGameEngine(engine): module.register_plugins = engine.register_plugins _default_engine = GameEngine() -_default_engine.register_plugin(ContextLoader()) +_default_engine.register_plugin(plugins.ContextLoader()) setGameEngine(_default_engine) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 80c4e2d7..453d37c7 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -3,24 +3,7 @@ import collections from sc2reader.events import * - - -class InitGameEvent(object): - name = 'InitGame' - - -class EndGameEvent(object): - name = 'EndGame' - - -class PluginExit(object): - name = 'PluginExit' - - def __init__(self, plugin, code=0, details=None): - self.plugin = plugin - self.code = code - self.details = details or {} - +from sc2reader.engine.events import InitGameEvent, EndGameEvent, PluginExit class GameEngine(object): """ GameEngine Specification @@ -77,7 +60,7 @@ def handleEventName(self, event, replay) * handleAbilityEvent - called for all types of ability events * handleHotkeyEvent - called for all player hotkey events - Plugins may also handle optional InitGame and EndGame events generated + Plugins may also handle optional ``InitGame`` and ``EndGame`` events generated by the GameEngine before and after processing all the events: * handleInitGame - is called prior to processing a new replay to provide @@ -99,11 +82,12 @@ def handleUnitDoneEvent(self, event, replay): yield ExpansionEvent(event.frame, event.unit) .... - If a plugin wishes to stop processing a replay it can yield a PluginExit event:: + If a plugin wishes to stop processing a replay it can yield a PluginExit event before returning:: def handleEvent(self, event, replay): if len(replay.tracker_events) == 0: yield PluginExit(self, code=0, details=dict(msg="tracker events required")) + return ... def handleAbilityEvent(self, event, replay): @@ -161,6 +145,7 @@ def run(self, replay): plugins.remove(event.plugin) handlers.clear() replay.plugins[event.plugin.name] = (event.code, event.details) + continue # If we haven't compiled a list of handlers for this event yet, do so! if event.name not in handlers: diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 1a652170..bd90c109 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -239,19 +239,19 @@ def load_message_game_player(self, event, replay): pass # This is a global event def load_tracker_player(self, event, replay): - if event.pid in replay.player: - event.player = replay.player[event.pid] + if event.pid in replay.entity: + event.player = replay.entity[event.pid] else: self.logger.error("Bad pid ({0}) for event {1} at {2} [{3}].".format(event.pid, event.__class__, Length(seconds=event.second), event.frame)) def load_tracker_upkeeper(self, event, replay): - if event.upkeep_pid in replay.player: - event.unit_upkeeper = replay.player[event.upkeep_pid] + if event.upkeep_pid in replay.entity: + event.unit_upkeeper = replay.entity[event.upkeep_pid] elif event.upkeep_pid != 0: self.logger.error("Bad upkeep_pid ({0}) for event {1} at {2} [{3}].".format(event.upkeep_pid, event.__class__, Length(seconds=event.second), event.frame)) def load_tracker_controller(self, event, replay): - if event.control_pid in replay.player: - event.unit_controller = replay.player[event.control_pid] + if event.control_pid in replay.entity: + event.unit_controller = replay.entity[event.control_pid] elif event.control_pid != 0: self.logger.error("Bad control_pid ({0}) for event {1} at {2} [{3}].".format(event.control_pid, event.__class__, Length(seconds=event.second), event.frame)) diff --git a/sc2reader/engine/plugins/gameheart.py b/sc2reader/engine/plugins/gameheart.py index 62015323..2812f5b1 100644 --- a/sc2reader/engine/plugins/gameheart.py +++ b/sc2reader/engine/plugins/gameheart.py @@ -1,10 +1,14 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -from sc2reader import objects, utils +from datetime import datetime +from sc2reader.utils import Length, get_real_type +from sc2reader.objects import Observer, Team +from sc2reader.engine.events import PluginExit +from sc2reader.constants import GAME_SPEED_FACTOR -def GameHeartNormalizer(replay): +class GameHeartNormalizer(object): """ normalize a GameHeart replay to: 1) reset frames to the game start @@ -15,78 +19,96 @@ def GameHeartNormalizer(replay): Hopefully, the changes here will also extend to other replays that use in-game lobbies - This makes a few assumptions - 1) 1v1 game + GameHeart games have some constraints we can use here: + * They are all 1v1's. + * You can't random in GameHeart """ - - PRIMARY_BUILDINGS = set (['Hatchery', 'Nexus', 'CommandCenter']) - start_frame = -1 - actual_players = {} - - if not replay.tracker_events: - return replay # necessary using this strategy - - for event in replay.tracker_events: - if start_frame != -1 and event.frame > start_frame + 5: # fuzz it a little - break - if event.name == 'UnitBornEvent' and event.control_pid and \ - event.unit_type_name in PRIMARY_BUILDINGS: - if event.frame == 0: # it's a normal, legit replay - return replay - start_frame = event.frame - actual_players[event.control_pid] = event.unit.race - - # set game length starting with the actual game start - replay.frames -= start_frame - replay.game_length = utils.Length(seconds=replay.frames / 16) - - # this should cover events of all types - # not nuking entirely because there are initializations that may be relevant - for event in replay.events: - if event.frame < start_frame: - event.frame = 0 - event.second = 0 - else: - event.frame -= start_frame - event.second = event.frame >> 4 - - # replay.humans is okay because they're all still humans - # replay.person and replay.people is okay because the mapping is still true - - # add observers - # not reinitializing because players appear to have the properties of observers - # TODO in a better world, these players would get reinitialized - replay.observers += [player for player in replay.players if not player.pid in actual_players] - for observer in replay.observers: - observer.is_observer = True - observer.team_id = None - - # reset team - # reset teams - replay.team = {} - replay.teams = [] - - # reset players - replay.players = [player for player in replay.players if player.pid in actual_players] - for i, player in enumerate(replay.players): - race = actual_players[player.pid] - player.pick_race = race - player.play_race = race - - team = objects.Team(i + 1) - team.players.append(player) - team.result = player.result - player.team = team - replay.team[i + 1] = team - replay.teams.append(team) - - # set winner - if team.result == 'Win': - replay.winner = team - - # clear observers out of the players list - for pid in replay.player.keys(): - if not pid in actual_players: - del replay.player[pid] - - return replay + name = 'GameHeartNormalizer' + + PRIMARY_BUILDINGS = dict(Hatchery="Zerg", Nexus="Protoss", CommandCenter="Terran") + + def handleInitGame(self, event, replay): + # without tracker events game heart games can't be fixed + if len(replay.tracker_events) == 0: + yield PluginExit(self, code=0, details=dict()) + return + + start_frame = -1 + actual_players = {} + for event in replay.tracker_events: + if start_frame != -1 and event.frame > start_frame + 5: # fuzz it a little + break + if event.name == 'UnitBornEvent' and event.control_pid and event.unit_type_name in self.PRIMARY_BUILDINGS: + # In normal replays, starting units are born on frame zero. + if event.frame == 0: + yield PluginExit(self, code=0, details=dict()) + return + else: + start_frame = event.frame + actual_players[event.control_pid] = self.PRIMARY_BUILDINGS[event.unit_type_name] + + self.fix_entities(replay, actual_players) + self.fix_events(replay, start_frame) + + replay.frames -= start_frame + replay.game_length = Length(seconds=replay.frames / 16) + replay.real_type = get_real_type(replay.teams) + replay.real_length = Length(seconds=int(replay.game_length.seconds/GAME_SPEED_FACTOR[replay.speed])) + replay.start_time = datetime.utcfromtimestamp(replay.unix_timestamp-replay.real_length.seconds) + + def fix_events(self, replay, start_frame): + # Set back the game clock for all events + for event in replay.events: + if event.frame < start_frame: + event.frame = 0 + event.second = 0 + else: + event.frame -= start_frame + event.second = event.frame >> 4 + + def fix_entities(self, replay, actual_players): + # Change the players that aren't playing into observers + for p in [p for p in replay.players if p.pid not in actual_players]: + obs = Observer(p.sid, p.slot_data, p.uid, p.init_data, p.pid) + + # Because these obs start the game as players the client + # creates various Beacon units for them. + obs.units = p.units + + # Remove all references to the old player + del replay.player[p.pid] + del replay.entity[p.pid] + del replay.human[p.uid] + replay.players.remove(p) + replay.entities.remove(p) + replay.humans.remove(p) + + # Create all the necessary references for the new observer + replay.observer[obs.uid] = obs + replay.entity[obs.pid] = obs + replay.human[obs.uid] = obs + replay.observers.append(obs) + replay.entities.append(obs) + replay.humans.append(obs) + + # Maintain order, just in case someone is depending on it + replay.observers = sorted(replay.observers, key=lambda o: o.sid) + replay.entities = sorted(replay.entities, key=lambda o: o.sid) + replay.humans = sorted(replay.humans, key=lambda o: o.sid) + + # Assume one player per team, should be valid for GameHeart games + replay.team = dict() + replay.teams = list() + for index, player in enumerate(replay.players): + team_id = index+1 + team = Team(team_id) + replay.team[team_id] = team + replay.teams.append(team) + player.team = team + team.result = player.result + player.pick_race = actual_players[player.pid] + player.play_race = player.pick_race + team.players = [player] + team.result = player.result + if team.result == 'Win': + replay.winner = team diff --git a/test_replays/test_all.py b/test_replays/test_all.py index d6f23c6d..2ddc2a4a 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -323,11 +323,16 @@ def test_factory_plugins(self): self.assertTrue(result["is_ladder"]) def test_gameheartnormalizer_plugin(self): - from sc2reader.engine.plugins.gameheart import GameHeartNormalizer - factory = sc2reader.factories.SC2Factory() - factory.register_plugin("Replay", GameHeartNormalizer()) + from sc2reader.engine.plugins import GameHeartNormalizer + sc2reader.engine.register_plugin(GameHeartNormalizer()) + + # Not a GameHeart game! + replay = sc2reader.load_replay("test_replays/2.0.0.24247/molten.SC2Replay") + player_pids = set([ player.pid for player in replay.players]) + spawner_pids = set([ event.player.pid for event in replay.events if "TargetAbilityEvent" in event.name and event.ability.name == "SpawnLarva"]) + self.assertTrue(spawner_pids.issubset(player_pids)) - replay = factory.load_replay("test_replays/gameheart/gameheart.SC2Replay") + replay = sc2reader.load_replay("test_replays/gameheart/gameheart.SC2Replay") self.assertEqual(replay.events[0].frame, 0) self.assertEqual(replay.game_length.seconds, 636) self.assertEqual(len(replay.observers), 5) @@ -340,7 +345,7 @@ def test_gameheartnormalizer_plugin(self): self.assertEqual(replay.teams[1].players[0].name, 'Stardust') self.assertEqual(replay.winner, replay.teams[1]) - replay = factory.load_replay("test_replays/gameheart/gh_sameteam.SC2Replay") + replay = sc2reader.load_replay("test_replays/gameheart/gh_sameteam.SC2Replay") self.assertEqual(replay.events[0].frame, 0) self.assertEqual(replay.game_length.seconds, 424) self.assertEqual(len(replay.observers), 5) From 23e82abee1476a4faf2555c32a5c7f2e4330cdc8 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 7 Aug 2013 00:14:27 -0400 Subject: [PATCH 100/238] GameHeart on by default. --- sc2reader/engine/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sc2reader/engine/__init__.py b/sc2reader/engine/__init__.py index 776a330b..cd72973c 100644 --- a/sc2reader/engine/__init__.py +++ b/sc2reader/engine/__init__.py @@ -16,5 +16,6 @@ def setGameEngine(engine): module.register_plugins = engine.register_plugins _default_engine = GameEngine() +_default_engine.register_plugin(plugins.GameHeartNormalizer()) _default_engine.register_plugin(plugins.ContextLoader()) setGameEngine(_default_engine) From 9f6b076f7ba5a7660258d0027f7b51fc4ded0baf Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 7 Aug 2013 01:11:52 -0400 Subject: [PATCH 101/238] Oops. Forgot the events file. --- sc2reader/engine/events.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 sc2reader/engine/events.py diff --git a/sc2reader/engine/events.py b/sc2reader/engine/events.py new file mode 100644 index 00000000..44387e52 --- /dev/null +++ b/sc2reader/engine/events.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, print_function, unicode_literals, division + + +class InitGameEvent(object): + name = 'InitGame' + + +class EndGameEvent(object): + name = 'EndGame' + + +class PluginExit(object): + name = 'PluginExit' + + def __init__(self, plugin, code=0, details=None): + self.plugin = plugin + self.code = code + self.details = details or {} From bcd08593265659cff700baefa7b9f29b6d8ca18c Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 7 Aug 2013 08:26:57 -0400 Subject: [PATCH 102/238] Fix broken function reference. --- sc2reader/resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 3985b026..fae69313 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -770,7 +770,7 @@ def __init__(self, summary_file, filename=None, lang='enUS', **options): self.expansion = '' self.game_type = self.settings['Teams'].replace(" ", "") - self.real_type = real_type(self.teams) + self.real_type = utils.get_real_type(self.teams) # The s2gs file also keeps reference to a series of s2mv files # Some of these appear to be encoded bytes and others appear to be From 07617d1793479d6bf86c19f9fd80f1acccffbe16 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 7 Aug 2013 09:58:35 -0400 Subject: [PATCH 103/238] Add a short guide to getting started. --- docs/source/articles/conceptsinsc2reader.rst | 2 +- docs/source/index.rst | 4 ++++ sc2reader/resources.py | 13 +++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/source/articles/conceptsinsc2reader.rst b/docs/source/articles/conceptsinsc2reader.rst index 8813d646..d4467029 100644 --- a/docs/source/articles/conceptsinsc2reader.rst +++ b/docs/source/articles/conceptsinsc2reader.rst @@ -22,7 +22,7 @@ A default factory is automatically configured and attached to the ``sc2reader`` The default factory can be configured with the following environment variables: * SC2READER_CACHE_DIR - Enables caching to file at the specified directory. -* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries (not based on memory imprint!) +* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries; not based on memory imprint! Resources diff --git a/docs/source/index.rst b/docs/source/index.rst index 039b041c..61c9c99d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -58,6 +58,7 @@ I recommend the following steps when getting started: * Follow the `installation guide`_ * Read this article on replays: :doc:`articles/whatsinareplay` (5 minutes). * Read this article on sc2reader: :doc:`articles/conceptsinsc2reader` (5 minutes). +* Short introduction to sc2reader: :doc:`articles/gettingstarted` (5 minutes) Now that you've been oriented, you can see sc2reader in action by working through a couple of the tutorials below. @@ -75,7 +76,10 @@ The best way to pick sc2reader up and get started is probably by example. With t Articles ---------------- +A collection of short handwritten articles about aspects of working with replays and sc2reader. + * :doc:`articles/whatsinareplay` (5 minutes). +* :doc:`articles/gettingstarted` (5 minutes). * :doc:`articles/conceptsinsc2reader` (5 minutes). * :doc:`articles/creatingagameengineplugin` (10 minutes). diff --git a/sc2reader/resources.py b/sc2reader/resources.py index fae69313..cb944114 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -273,17 +273,18 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_message_events() self.load_players() - # Load events if requested + # Load tracker events if requested if load_level >= 3: - for data_file in ['replay.game.events']: + for data_file in ['replay.tracker.events']: self._read_data(data_file, self._get_reader(data_file)) - self.load_game_events() + self.load_tracker_events() - # Load tracker events if requested + + # Load events if requested if load_level >= 4: - for data_file in ['replay.tracker.events']: + for data_file in ['replay.game.events']: self._read_data(data_file, self._get_reader(data_file)) - self.load_tracker_events() + self.load_game_events() # Run this replay through the engine as indicated if engine: From b6adea431ab6e73b18c0499ab048ea99e317b4b0 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 09:41:32 -0400 Subject: [PATCH 104/238] Record the replay load_level for later. --- sc2reader/resources.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index cb944114..ae2364b2 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -189,6 +189,9 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.datapack = None self.raw_data = dict() + # The current load level of the replay + self.load_level = None + #default values, filled in during file read self.player_names = list() self.other_people = set() @@ -240,6 +243,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Unpack the MPQ and read header data if requested # Since the underlying traceback isn't important to most people, don't expose it in python2 anymore if load_level >= 0: + self.load_level = 0 try: self.archive = mpyq.MPQArchive(replay_file, listfile=False) except Exception as e: @@ -257,6 +261,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Load basic details if requested if load_level >= 1: + self.load_level = 1 for data_file in ['replay.initData', 'replay.details', 'replay.attributes.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_details() @@ -268,6 +273,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Load players if requested if load_level >= 2: + self.load_level = 2 for data_file in ['replay.message.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_message_events() @@ -275,6 +281,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Load tracker events if requested if load_level >= 3: + self.load_level = 3 for data_file in ['replay.tracker.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_tracker_events() @@ -282,6 +289,7 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Load events if requested if load_level >= 4: + self.load_level = 4 for data_file in ['replay.game.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_game_events() From 20fe0cbaf3ae95b1159474db395ba51e463e3923 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 19:52:45 -0400 Subject: [PATCH 105/238] README/documentation updates. --- README.rst | 207 +++++++++++------------- docs/source/articles/gettingstarted.rst | 73 +++++++++ 2 files changed, 166 insertions(+), 114 deletions(-) create mode 100644 docs/source/articles/gettingstarted.rst diff --git a/README.rst b/README.rst index 6cf59cd2..9f294ea0 100644 --- a/README.rst +++ b/README.rst @@ -1,51 +1,27 @@ What is sc2reader? ==================== -sc2reader is a python library for extracting information from various different -Starcraft II resources. These resources currently include Replays, Maps, and -Game Summaries; we may eventually include BNet profiles and possibly adapters -to the more entrenched SCII sites like sc2ranks. +sc2reader is a python library for extracting information from various different Starcraft II resources. These resources currently include Replays, Maps, and Game Summaries; we have plans to add support for Battle.net profiles and would gladly accept adapters to the more entrenched SCII sites such as sc2ranks. -Our goal is to give anyone and everyone the power to construct their own -tools, do their own analysis, and hack on their own Starcraft II projects -under the open MIT license. Currently powering: +There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created with out first being able to open up Starcraft II game files and analyze the data within. Our goal is to give anyone and everyone the power to construct their own tools, do their own analysis, and hack on their own Starcraft II projects under the open MIT license. -* Websites: `ggtracker.com`_, `gamereplays.org`_ -* Tools: `The Core`_ -* Experiments: `Midi Conversion`_ - -Our secondary goal is to become a reference implementation for people looking -to implement libraries in other languages. For replays, it implements the -replay format as specified in Blizzard's `s2protocol`_ project. -The following is a list of partial implementations in other languages: +Who Uses sc2reader? +====================== -* C#: `sc2replay-csharp`_ (special thanks for v1.5 help) -* C++: `sc2pp`_ -* Javascript: `comsat`_ -* PHP: `phpsc2replay`_ +sc2reader is currently powering: -Unfortunately sc2reader does not implement a battle.net scraper for profile -information. If you need the information I know of two projects that can get -you started: - -* Ruby: `bnet_scraper`_ - Maintained by Agora Games -* Python: `sc2profile`_ - Currently unmaintained, slightly dated. +* Websites: `ggtracker.com`_, `gamereplays.org`_, `sc2companion.com`_ +* Tools: `The Core`_ +* Experiments: `Midi Conversion`_ -If you'd like your tool, site, project, or implementation listed above, drop -us a line on our `mailing list`_ or stop by our #sc2reader IRC channel and say hi! +If you use sc2reader and you would like your tool, site, project, or implementation listed above, drop us a line on our `mailing list`_ or stop by our #sc2reader IRC channel and say hi! Current Status ================= -sc2reader is currently capable of parsing varying levels of information out of -the three primary resource types listed below. For a more detailed and exact -description of the information that can be extracted please consult the -`documentation`_ hosted on Read the Docs. - -The library is production ready and reasonably stable. `travis-ci`_ provides a -record of our `continuous testing`_ and `coveralls.io`_ provides a record of our `test coverage`_. +sc2reader is production ready at release and under active development on github. It is currently capable of parsing varying levels of information out of the three primary resource types listed below. For a more detailed and exact description of the information that can be extracted please consult the `documentation`_ hosted on ReadTheDocs. Replays @@ -90,22 +66,20 @@ in future releases. Maps ------- -Maps are currently parsed in the most minimal way possible and are an area for -big improvement in the future. Currently the Minimap.tga packaged with the map -is made available along with Name, Author, Description for ONLY enUS localized -SCII map files. More robust Map meta data extraction will likely be added in -future releases. +Maps can be parsed for the following information: + +* Minimap and Icon images (tga format) +* enUS localized Name, Author, Description, Website (if available) +* Map Dimensions, Camera Bounds, Tileset +* Player Slot data and Advanced Teams alliance/enemy data. -There's a lot more in here to be had for the adventurous. +There is a lot more in here to be had for the adventurous. Game Summaries ----------------- -Game Summary files are downloaded by the client in order to allow you to view -the game summary from your match history. Prior to 2.0.8 they were the only -way to get the information from the summary screen. Since the 2.0.8 release -you have been able to compute this information yourself from the replay files. +Game Summary files are downloaded by the client in order to allow you to view the game summary from your match history. Prior to 2.0.8 they were the only way to get the information from the summary screen. Since the 2.0.8 release you have been able to compute this information yourself from the replay files. Thank you Prillan and `Team Liquid`_ for helping to decode this file. @@ -115,76 +89,92 @@ Thank you Prillan and `Team Liquid`_ for helping to decode this file. * URLs to map localization files and images * Player build orders up to 64 (real) actions -Parsing on these files is now production ready for those that can get them. See -the `Team Liquid`_ thread for details on how to go about getting them. +Parsing on these files is now production ready for those that can get them. See the `Team Liquid`_ thread for details on how to go about getting them. Again, these files are generally unnecessary after the 2.0.8 release. - -Example Usage +Basic Usage ===================== -To demonstrate how you might use sc2reader in practice I've included some short -contrived scripts below. For more elaborate examples, checkout the docs and the -`sc2reader.scripts`_ package on Github or in the source. +For examples scripts, checkout the docs and the `sc2reader.scripts`_ package on Github or in the source. + +Loading Replays +------------------- +For many users, the most basic commands will handle all of their needs:: + + import sc2reader + replay = sc2reader.load_replay('MyReplay', load_map=true) +This will load all replay data and fix GameHeart games. In some cases, you don't need the full extent of the replay data. You can use the load level option to limit replay loading and improve load times:: -Downloading Maps --------------------- + # Release version and game length info. Nothing else + sc2reader.load_replay('MyReplay.SC2Replay', load_level=0) -Save all the minimaps for all the games you've ever played:: + # Also loads game details: map, speed, time played, etc + sc2reader.load_replay('MyReplay.SC2Replay', load_level=1) - import sc2reader, os, sys + # Also loads players and chat events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=2) - if not os.path.exists('minimaps'): - os.makedirs('minimaps') + # Also loads tracker events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=3) - # Only load details file (level 1) and fetch the map file from bnet - for replay in sc2reader.load_replays(sys.argv[1:], load_map=True, load_level=1): - minimap_path = os.path.join('minimaps', replay.map_name.replace(' ','_')+'.tga') - if not os.path.exists(minimap_path): - with open(minimap_path, 'w') as file_out: - file_out.write(replay.map.minimap) - print("Saved Map: {0} [{1}]".format(replay.map_name, replay.map_hash)) + # Also loads game events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=4) +If you want to load a collection of replays, you can use the plural form. Loading resources in this way returns a replay generator:: -Organizing Replays ----------------------- + replays = sc2reader.load_replays('path/to/replay/directory') -Organizing your 1v1 replays by race played and matchup and sortable by length:: - import sc2reader, os, shutil, sys +Loading Maps +---------------- - sorted_base = 'sorted' - path_to_replays = 'my/replays' +If you have a replay and want the map file as well, sc2reader can download the corresponding map file and load it in one of two ways:: - for replay in sc2reader.load_replays(sys.argv[1], load_level=2): - if replay.real_type != '1v1': - continue + replay = sc2reader.load_replay('MyReplay.SC2Replay', load_map=true) + replay.load_map() - try: - me = replay.player.name('ShadesofGray') - you = team[(me.team.number+1)%2].players[0] +If you are looking to only handle maps you can use the map specific load methods:: - matchup = "{0}v{1}".format(me.play_race[0], you.play_race[1]) + map = sc2reader.load_map('MyMap.SC2Map') + map = sc2reader.load_maps('path/to/maps/directory') - sorted_path = os.path.join(sorted_base,me.play_race[0],matchup) - if not os.path.exists(sorted_path): - os.makedirs(sorted_path) - filename = "{0} - {1}".format(replay.game_length, replay.filename) - src = os.join(path_to_replays,replay.filename) - dst = os.join(sorted_path, filename) - shutil.copyfile(src, dst) +Using the Cache +--------------------- + +If you are loading a lot of remote resources, you'll want to enable caching for sc2reader. Caching can be configured with the following environment variables: + +* SC2READER_CACHE_DIR - Enables caching to file at the specified directory. +* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries; not based on memory imprint! + +You can set these from inside your script with the following code **BEFORE** importing the sc2reader module:: + + os.environ['SC2READER_CACHE_DIR'] = "path/to/local/cache" + os.environ['SC2READER_CACHE_MAX_SIZE'] = 100 + + # if you have imported sc2reader anywhere already this won't work + import sc2reader - except KeyError as e: - continue # A game I didn't play in! + +Using Plugins +------------------ + +There are a growing number of community generated plugins that you can take advantage of in your project. See the article on `Creating GameEngine Plugins`_ for details on creating your own. To use these plugins you need to customize the game engine:: + + from sc2reader.engine.plugins import SelectionTracker, APMTracker + sc2reader.engine.register_plugin(SelectionTracker()) + sc2reader.engine.register_plugin(APMTracker()) + +The :class:`~sc2reader.engine.plugins.ContextLoader` and :class:`~sc2reader.engine.plugins.GameHeartNormalizer` plugins are registered by default. Installation ================ +sc2reader runs on any system with Python 2.6+, 3.2+, or PyPy installed. From PyPI (stable) @@ -205,8 +195,7 @@ or with setuptools (specify a valid x.x.x):: cd sc2reader-x.x.x python setup.py install -Releases to PyPi can be very delayed, for the latest and greatest you are encouraged -to install from Github master which is **usually** kept quite stable. +Releases to PyPi can be very delayed, for the latest and greatest you are encouraged to install from Github master. From Github @@ -214,7 +203,9 @@ From Github Github master is generally stable with development branches more unstable. -Install from the latest source on github with pip:: +We use `travis-ci`_ to provide a record of our `continuous testing`_ and `coveralls.io`_ provides a record of our `test coverage`_. Please verify that tests are passing before installing development versions. + +Install from the latest source on Github with pip:: pip install -e git+git://github.com/GraylinKim/sc2reader#egg=sc2reader @@ -229,36 +220,29 @@ or with setuptools:: For Contributors ------------------- -Contributors should install from an active git repository using setuptools in -`develop`_ mode. This will install links to the live code so that local edits -are available to external modules automatically:: +Contributors should install from an active git repository using setuptools in `develop`_ mode. This will install links to the live code so that local edits are available to external modules automatically:: git clone https://github.com/GraylinKim/sc2reader.git cd sc2reader python setup.py develop -Please review the CONTRIBUTING.md file and get in touch with us before doing -too much work. It'll make everyone happier in the long run. - +Please review the `CONTRIBUTING.md`_ file and get in touch with us before doing too much work. It'll make everyone happier in the long run. Testing ------------------- -We use the built in ``unittest`` module for testing. If you are still on Python -2.6 you will need to install ``unittest2`` because our test suite requires newer -features than are included in the main distribution. +We use the built in ``unittest`` module for testing. If you are still on Python 2.6 you will need to install ``unittest2`` because our test suite requires newer features than are included in the main distribution. To run the tests just use:: - python -m unittest discover test_replays - python -m unittest discover test_s2gs + python test_replays/test_all.py + python test_s2gs/test_all.py -When repeatedly running tests it can be very helpful to make sure you've -set a local cache directory to prevent long fetch times from battle.net:: +When repeatedly running tests it can be very helpful to make sure you've set a local cache directory to prevent long fetch times from battle.net:: export SC2READER_CACHE_DIR=local_cache # or - SC2READER_CACHE_DIR=local_cache py.test + SC2READER_CACHE_DIR=local_cache python test_replays/test_all.py Good luck, have fun! @@ -266,21 +250,13 @@ Good luck, have fun! Community ============== -sc2reader has a small but growing community of people looking to make tools and -websites with Starcraft II data. If that sounds like something you'd like to be -a part of please join our underused `mailing list`_ and start a conversation -or stop by #sc2reader on FreeNode and say 'Hi'. We have members from all over -Europe, Australia, and the United States currently, so regardless of the time, -you can probably find someone to talk to. +sc2reader has a small but growing community of people looking to make tools and websites with Starcraft II data. If that sounds like something you'd like to be a part of please join our underused `mailing list`_ and start a conversation or stop by #sc2reader on FreeNode and say 'Hi'. We have members from all over Europe, Australia, and the United States currently, so regardless of the time, you can probably find someone to talk to. Issues and Support ===================== -We have an `issue tracker`_ on Github that all bug reports and feature requests -should be directed to. We have a `mailing list`_ with Google Groups that you can -use to reach out for support. We are generally on FreeNode in the #sc2reader -and can generally provide live support and address issues there as well. +We have an `issue tracker`_ on Github that all bug reports and feature requests should be directed to. We have a `mailing list`_ with Google Groups that you can use to reach out for support. We are generally on FreeNode in the #sc2reader and can generally provide live support and address issues there as well. Acknowledgements @@ -297,7 +273,7 @@ and kept this project going. * Thanks to `ggtracker.com`_ for sponsoring further development and providing the thousands of test files used while adding s2gs and HotS support. * Thanks to Blizzard for supporting development of 3rd party tools and releasing - their `s2protocol`_ reference implementation. + their `s2protocol`_ full reference implementation. .. _s2protocol: https://github.com/Blizzard/s2protocol @@ -324,3 +300,6 @@ and kept this project going. .. _travis-ci: https://travis-ci.org/ .. _coveralls.io: https://coveralls.io .. _test coverage: https://coveralls.io/r/GraylinKim/sc2reader +.. _CONTRIBUTING.md: https://github.com/GraylinKim/sc2reader/blob/master/CONTRIBUTING.md +.. _sc2companion.com: http://sc2companion.com +.. _Creating GameEngine Plugins: http://sc2reader.readthedocs.org/en/latest/articles/creatingagameengineplugin.html diff --git a/docs/source/articles/gettingstarted.rst b/docs/source/articles/gettingstarted.rst new file mode 100644 index 00000000..af0f205f --- /dev/null +++ b/docs/source/articles/gettingstarted.rst @@ -0,0 +1,73 @@ +Getting Started with SC2Reader +================================== + +Loading Replays +------------------- +For many users, the most basic commands will handle all of their needs:: + + import sc2reader + replay = sc2reader.load_replay('MyReplay', load_map=true) + +This will load all replay data and fix GameHeart games. In some cases, you don't need the full extent of the replay data. You can use the load level option to limit replay loading and improve load times:: + + # Release version and game length info. Nothing else + sc2reader.load_replay('MyReplay.SC2Replay', load_level=0) + + # Also loads game details: map, speed, time played, etc + sc2reader.load_replay('MyReplay.SC2Replay', load_level=1) + + # Also loads players and chat events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=2) + + # Also loads tracker events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=3) + + # Also loads game events: + sc2reader.load_replay('MyReplay.SC2Replay', load_level=4) + +If you want to load a collection of replays, you can use the plural form. Loading resources in this way returns a replay generator:: + + replays = sc2reader.load_replays('path/to/replay/directory') + + +Loading Maps +---------------- + +If you have a replay and want the map file as well, sc2reader can download the corresponding map file and load it in one of two ways:: + + replay = sc2reader.load_replay('MyReplay.SC2Replay', load_map=true) + replay.load_map() + +If you are looking to only handle maps you can use the map specific load methods:: + + map = sc2reader.load_map('MyMap.SC2Map') + map = sc2reader.load_maps('path/to/maps/directory') + + +Using the Cache +--------------------- + +If you are loading a lot of remote resources, you'll want to enable caching for sc2reader. Caching can be configured with the following environment variables: + +* SC2READER_CACHE_DIR - Enables caching to file at the specified directory. +* SC2READER_CACHE_MAX_SIZE - Enables memory caching of resources with a maximum number of entries; not based on memory imprint! + +You can set these from inside your script with the following code **BEFORE** importing the sc2reader module:: + + os.environ['SC2READER_CACHE_DIR'] = "path/to/local/cache" + os.environ['SC2READER_CACHE_MAX_SIZE'] = 100 + + # if you have imported sc2reader anywhere already this won't work + import sc2reader + + +Using Plugins +------------------ + +There are a growing number of community generated plugins that you can take advantage of in your project. See the article on :doc:`creatingagameengineplugin` for details on creating your own. To use these plugins you need to customize the game engine:: + + from sc2reader.engine.plugins import SelectionTracker, APMTracker + sc2reader.engine.register_plugin(SelectionTracker()) + sc2reader.engine.register_plugin(APMTracker()) + +The :class:`~sc2reader.engine.plugins.ContextLoader` and :class:`~sc2reader.engine.plugins.GameHeartNormalizer` plugins are registered by default. From 27f40afca6f187a2c647863637902d354911ae4d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 20:09:31 -0400 Subject: [PATCH 106/238] Update the change log and move links around. --- CHANGELOG.rst | 35 ++++++++++++++++++++++------- README.rst | 61 +++++++++++++++++++++++++++------------------------ 2 files changed, 59 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f9c9017e..aba2358d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,10 +1,24 @@ CHANGELOG ============ -0.5.2 - --------------------- +0.6.0 - August 12th 2013 +------------------------ + +New Stuff: +~~~~~~~~~~~~~~~~ + +* Adds python 3.2+ support +* Adds experimental SC2Map.MapInfo parsing support. +* Implements new replay GameEngine and plugin support. +* Added a sc2json script contributed by @ChrisLundquist +* Adds plugin GameHeartNormalizer plugin by @StoicLoofah +* Hooked up coveralls.io for coverage reporting: https://coveralls.io/r/GraylinKim/sc2reader +* Hooked up travis-ci for continuous testing: https://travis-ci.org/GraylinKim/sc2reader +* Switched to built in python unittest module for testing. + +Changed Stuff (non-backwards compatible!): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* Adds experimental SC2Map.MapInfo parsing support. Replaces the useless MapInfo resource from before. * Summary.teams is now summary.team; summary.team is now summary.teams. To conform with replay name conventions * Fixed #136, unit types from tracker events are used when available. * Deprecated player.gateway for player.region @@ -12,12 +26,17 @@ CHANGELOG * Player.uid now means something completely different! Use player.toon_id instead * Player.uid is now the user id of the player (was player.cid) * PersonDict can no longer be constructed from a player list and new players cannot be added by string (name). Only integer keys accepted for setting. -* Added a sc2json script contributed by @ChrisLundquist -* Hooked up travis-ci for continuous testing. https://travis-ci.org/GraylinKim/sc2reader -* Switched to built in python unittest module for testing. * Log a warning instead of throwing an exception when using an unknown colors. - * An unknown hex value will use the hex value as the name. - * An unknown color name will use 0x000000 as the color. +** An unknown hex value will use the hex value as the name. +** An unknown color name will use 0x000000 as the color. +* Finally straighten out all these replay player list/dicts +** human/humans -> human entities, indexed by uid +** computer/computers -> computer entities, indexed by pid +** player/players -> actually playing in the game, indexed by pid +** observer/observers -> observing the game, indexed by uid +** entities -> players + observers || humans + computers, indexed by pid +** client/clients - (deprecated) same as human/humans +** people/person - (deprecated) same as entity/entities 0.5.1 - June 1, 2013 diff --git a/README.rst b/README.rst index 9f294ea0..d0f67ad3 100644 --- a/README.rst +++ b/README.rst @@ -1,3 +1,4 @@ + What is sc2reader? ==================== @@ -18,10 +19,19 @@ sc2reader is currently powering: If you use sc2reader and you would like your tool, site, project, or implementation listed above, drop us a line on our `mailing list`_ or stop by our #sc2reader IRC channel and say hi! +.. _ggtracker.com: http://ggtracker.com +.. _gamereplays.org: http://www.gamereplays.org/starcraft2/ +.. _sc2companion.com: http://sc2companion.com +.. _The Core: http://www.teamliquid.net/forum/viewmessage.php?topic_id=341878 +.. _Midi Conversion: https://github.com/obohrer/sc2midi + + Current Status ================= -sc2reader is production ready at release and under active development on github. It is currently capable of parsing varying levels of information out of the three primary resource types listed below. For a more detailed and exact description of the information that can be extracted please consult the `documentation`_ hosted on ReadTheDocs. +sc2reader is production ready at release and under active development on Github. It is currently capable of parsing varying levels of information out of the three primary resource types listed below. For a more detailed and exact description of the information that can be extracted please consult the `documentation`_ hosted on ReadTheDocs. + +.. _documentation: http://sc2reader.rtfd.org/ Replays @@ -93,6 +103,8 @@ Parsing on these files is now production ready for those that can get them. See Again, these files are generally unnecessary after the 2.0.8 release. +.. _Team Liquid: http://www.teamliquid.net/forum/viewmessage.php?topic_id=330926 + Basic Usage ===================== @@ -127,6 +139,8 @@ If you want to load a collection of replays, you can use the plural form. Loadin replays = sc2reader.load_replays('path/to/replay/directory') +.. _sc2reader.scripts: https://github.com/GraylinKim/sc2reader/tree/master/sc2reader/scripts + Loading Maps ---------------- @@ -168,7 +182,9 @@ There are a growing number of community generated plugins that you can take adva sc2reader.engine.register_plugin(SelectionTracker()) sc2reader.engine.register_plugin(APMTracker()) -The :class:`~sc2reader.engine.plugins.ContextLoader` and :class:`~sc2reader.engine.plugins.GameHeartNormalizer` plugins are registered by default. +The new GameHeartNormalizerplugin is registered by default. + +.. _Creating GameEngine Plugins: http://sc2reader.readthedocs.org/en/latest/articles/creatingagameengineplugin.html Installation @@ -216,6 +232,11 @@ or with setuptools:: cd sc2reader-master python setup.py install +.. _travis-ci: https://travis-ci.org/ +.. _coveralls.io: https://coveralls.io +.. _test coverage: https://coveralls.io/r/GraylinKim/sc2reader +.. _continuous testing: https://travis-ci.org/GraylinKim/sc2reader + For Contributors ------------------- @@ -228,6 +249,10 @@ Contributors should install from an active git repository using setuptools in `d Please review the `CONTRIBUTING.md`_ file and get in touch with us before doing too much work. It'll make everyone happier in the long run. +.. _develop: http://peak.telecommunity.com/DevCenter/setuptools#development-mode +.. _CONTRIBUTING.md: https://github.com/GraylinKim/sc2reader/blob/master/CONTRIBUTING.md + + Testing ------------------- @@ -258,6 +283,9 @@ Issues and Support We have an `issue tracker`_ on Github that all bug reports and feature requests should be directed to. We have a `mailing list`_ with Google Groups that you can use to reach out for support. We are generally on FreeNode in the #sc2reader and can generally provide live support and address issues there as well. +.. _mailing list: http://groups.google.com/group/sc2reader +.. _issue tracker: https://github.com/GraylinKim/sc2reader/issues + Acknowledgements ======================= @@ -275,31 +303,6 @@ and kept this project going. * Thanks to Blizzard for supporting development of 3rd party tools and releasing their `s2protocol`_ full reference implementation. - -.. _s2protocol: https://github.com/Blizzard/s2protocol -.. _ggtracker.com: http://ggtracker.com -.. _gamereplays.org: http://www.gamereplays.org/starcraft2/ -.. _Midi Conversion: https://github.com/obohrer/sc2midi -.. _sc2reader.scripts: https://github.com/GraylinKim/sc2reader/tree/master/sc2reader/scripts -.. _The Core: http://www.teamliquid.net/forum/viewmessage.php?topic_id=341878 -.. _PyPy: http://pypy.org/ -.. _sc2pp: https://github.com/zsol/sc2pp -.. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp -.. _comsat: https://github.com/tec27/comsat .. _phpsc2replay: http://code.google.com/p/phpsc2replay/ -.. _Team Liquid: http://www.teamliquid.net/forum/viewmessage.php?topic_id=330926 -.. _develop: http://peak.telecommunity.com/DevCenter/setuptools#development-mode -.. _documentation: http://sc2reader.rtfd.org/ -.. _mailing list: http://groups.google.com/group/sc2reader -.. _developers mailing list: http://groups.google.com/group/sc2reader-dev -.. _phpsc2replay: http://code.google.com/p/phpsc2replay/ -.. _issue tracker: https://github.com/GraylinKim/sc2reader/issues -.. _bnet_scraper: https://github.com/agoragames/bnet_scraper -.. _sc2profile: https://github.com/srounet/sc2profile -.. _continuous testing: https://travis-ci.org/GraylinKim/sc2reader -.. _travis-ci: https://travis-ci.org/ -.. _coveralls.io: https://coveralls.io -.. _test coverage: https://coveralls.io/r/GraylinKim/sc2reader -.. _CONTRIBUTING.md: https://github.com/GraylinKim/sc2reader/blob/master/CONTRIBUTING.md -.. _sc2companion.com: http://sc2companion.com -.. _Creating GameEngine Plugins: http://sc2reader.readthedocs.org/en/latest/articles/creatingagameengineplugin.html +.. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp +.. _s2protocol: https://github.com/Blizzard/s2protocol From aaab03f753d7ff468f2ede31af7cca58b2fb55d1 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 20:17:41 -0400 Subject: [PATCH 107/238] Small readme revisions. --- README.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index d0f67ad3..6db6b242 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ What is sc2reader? sc2reader is a python library for extracting information from various different Starcraft II resources. These resources currently include Replays, Maps, and Game Summaries; we have plans to add support for Battle.net profiles and would gladly accept adapters to the more entrenched SCII sites such as sc2ranks. -There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created with out first being able to open up Starcraft II game files and analyze the data within. Our goal is to give anyone and everyone the power to construct their own tools, do their own analysis, and hack on their own Starcraft II projects under the open MIT license. +There is a pressing need in the SC2 community for better statistics, better analytics, better tools for organizing and searching replays. Better websites for sharing replays and hosting tournaments. These tools can't be created without first being able to open up Starcraft II game files and analyze the data within. Our goal is to give anyone and everyone the power to construct their own tools, do their own analysis, and hack on their own Starcraft II projects under the open MIT license. Who Uses sc2reader? @@ -109,7 +109,10 @@ Again, these files are generally unnecessary after the 2.0.8 release. Basic Usage ===================== -For examples scripts, checkout the docs and the `sc2reader.scripts`_ package on Github or in the source. +..note:: + + For example scripts, checkout the docs and the `sc2reader.scripts`_ package on Github or in the source. + Loading Replays ------------------- @@ -211,7 +214,7 @@ or with setuptools (specify a valid x.x.x):: cd sc2reader-x.x.x python setup.py install -Releases to PyPi can be very delayed, for the latest and greatest you are encouraged to install from Github master. +Releases to PyPi can be very delayed (sorry!), for the latest and greatest you are encouraged to install from Github master. From Github From 01b61642ae6d43dafced1bf47740491b608ada66 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 20:59:50 -0400 Subject: [PATCH 108/238] Small additional changes for release. --- CHANGELOG.rst | 52 ++++++++++++++++++++++-------------------------- CONTRIBUTORS.txt | 4 ++-- README.rst | 2 ++ 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index aba2358d..cea71265 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,7 @@ New Stuff: ~~~~~~~~~~~~~~~~ * Adds python 3.2+ support +* Adds support for patch 2.0.10. * Adds experimental SC2Map.MapInfo parsing support. * Implements new replay GameEngine and plugin support. * Added a sc2json script contributed by @ChrisLundquist @@ -27,16 +28,16 @@ Changed Stuff (non-backwards compatible!): * Player.uid is now the user id of the player (was player.cid) * PersonDict can no longer be constructed from a player list and new players cannot be added by string (name). Only integer keys accepted for setting. * Log a warning instead of throwing an exception when using an unknown colors. -** An unknown hex value will use the hex value as the name. -** An unknown color name will use 0x000000 as the color. + * An unknown hex value will use the hex value as the name. + * An unknown color name will use 0x000000 as the color. * Finally straighten out all these replay player list/dicts -** human/humans -> human entities, indexed by uid -** computer/computers -> computer entities, indexed by pid -** player/players -> actually playing in the game, indexed by pid -** observer/observers -> observing the game, indexed by uid -** entities -> players + observers || humans + computers, indexed by pid -** client/clients - (deprecated) same as human/humans -** people/person - (deprecated) same as entity/entities + * human/humans -> human entities, indexed by uid + * computer/computers -> computer entities, indexed by pid + * player/players -> actually playing in the game, indexed by pid + * observer/observers -> observing the game, indexed by uid + * entities -> players + observers || humans + computers, indexed by pid + * client/clients - (deprecated) same as human/humans + * people/person - (deprecated) same as entity/entities 0.5.1 - June 1, 2013 @@ -57,27 +58,22 @@ Changed Stuff (non-backwards compatible!): * Support for all replays (arcade replays now parse!) from all versions * Support for the new replay.tracker.events added in 2.0.8 - * Units now have birth frame, death frame, and owner information - * New events for (roughly) tracking unit positions - * New events for tracking player resource stockpiles and collection rates - * More! + * Units now have birth frame, death frame, and owner information + * New events for (roughly) tracking unit positions + * New events for tracking player resource stockpiles and collection rates + * More! * Much more comprehensive documentation. * New unit model - * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. - * Units that can transform maintain a full type history. - * Units are correctly and uniquely identified by unit_id alone. + * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. + * Units that can transform maintain a full type history. + * Units are correctly and uniquely identified by unit_id alone. * Updated unit meta data: - * Mineral Cost - * Vespene Cost - * Supply Cost - * Flags for is_worker, is_army, is_building + * Mineral Cost + * Vespene Cost + * Supply Cost + * Flags for is_worker, is_army, is_building * Added ability meta data: - * is_build flag marking abilities that create units - * build_unit indicating the unit type that is built - * build_time indicating the build time for the ability - -0.4.0 - ??? --------------------- - -... + * is_build flag marking abilities that create units + * build_unit indicating the unit type that is built + * build_time indicating the build time for the ability diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 5494293f..e53bbcd4 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -8,8 +8,8 @@ Contributors: Jason Dana - @sheutka on github Cameron Zemek (grom) - @grom358 on github Fabien Reboia (srounet) - @srounet on github + Kevin Leung - @StoicLoofah on github Daniele Zannotti (Durrza) Mike Anderson -Special thanks to ggtracker, inc (ggtracker.com) for sponsoring -sc2reader's continued development. +Special thanks to ggtracker, inc (ggtracker.com) for sponsoring sc2reader's continued development. diff --git a/README.rst b/README.rst index 6db6b242..b747bd96 100644 --- a/README.rst +++ b/README.rst @@ -306,6 +306,8 @@ and kept this project going. * Thanks to Blizzard for supporting development of 3rd party tools and releasing their `s2protocol`_ full reference implementation. + .. _phpsc2replay: http://code.google.com/p/phpsc2replay/ .. _sc2replay-csharp: https://github.com/ascendedguard/sc2replay-csharp .. _s2protocol: https://github.com/Blizzard/s2protocol + From 170b4847d1353577cd1ad4a2b5d4870fdeca655a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Mon, 12 Aug 2013 21:00:11 -0400 Subject: [PATCH 109/238] New v0.6.0 release. --- MANIFEST.in | 2 ++ docs/source/conf.py | 4 ++-- sc2reader/__init__.py | 2 ++ setup.py | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index 6b5be921..adca023d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,7 @@ include LICENSE.txt include CONTRIBUTORS.txt +include CONTRIBUTING.md +include STYLE_GUIDE.rst include README.rst include CHANGELOG.rst recursive-include sc2reader *.csv *.json diff --git a/docs/source/conf.py b/docs/source/conf.py index 72686655..ede171f8 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,10 +50,10 @@ # built documents. # # The short X.Y version. -version = '0.5.1' +version = '0.6.0' # The full version, including alpha/beta/rc tags. -release = '0.5.0' +release = '0.6.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 5a965474..928d049f 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division +__version__ = "0.6.0" + import os import sys diff --git a/setup.py b/setup.py index 113a1b2b..56361dce 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.5.1', + version='0.6.0', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From 04988dba834fccc830d1bc2e870115f20f52b0b9 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 08:45:41 -0400 Subject: [PATCH 110/238] Fix changelog formatting. --- CHANGELOG.rst | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cea71265..f9812de4 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -28,16 +28,16 @@ Changed Stuff (non-backwards compatible!): * Player.uid is now the user id of the player (was player.cid) * PersonDict can no longer be constructed from a player list and new players cannot be added by string (name). Only integer keys accepted for setting. * Log a warning instead of throwing an exception when using an unknown colors. - * An unknown hex value will use the hex value as the name. - * An unknown color name will use 0x000000 as the color. + * An unknown hex value will use the hex value as the name. + * An unknown color name will use 0x000000 as the color. * Finally straighten out all these replay player list/dicts - * human/humans -> human entities, indexed by uid - * computer/computers -> computer entities, indexed by pid - * player/players -> actually playing in the game, indexed by pid - * observer/observers -> observing the game, indexed by uid - * entities -> players + observers || humans + computers, indexed by pid - * client/clients - (deprecated) same as human/humans - * people/person - (deprecated) same as entity/entities + * human/humans -> human entities, indexed by uid + * computer/computers -> computer entities, indexed by pid + * player/players -> actually playing in the game, indexed by pid + * observer/observers -> observing the game, indexed by uid + * entities -> players + observers || humans + computers, indexed by pid + * client/clients - (deprecated) same as human/humans + * people/person - (deprecated) same as entity/entities 0.5.1 - June 1, 2013 @@ -58,22 +58,22 @@ Changed Stuff (non-backwards compatible!): * Support for all replays (arcade replays now parse!) from all versions * Support for the new replay.tracker.events added in 2.0.8 - * Units now have birth frame, death frame, and owner information - * New events for (roughly) tracking unit positions - * New events for tracking player resource stockpiles and collection rates - * More! + * Units now have birth frame, death frame, and owner information + * New events for (roughly) tracking unit positions + * New events for tracking player resource stockpiles and collection rates + * More! * Much more comprehensive documentation. * New unit model - * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. - * Units that can transform maintain a full type history. - * Units are correctly and uniquely identified by unit_id alone. + * SiegeTank and SiegeTankSieged (and others with different forms) are no longer separate units. + * Units that can transform maintain a full type history. + * Units are correctly and uniquely identified by unit_id alone. * Updated unit meta data: - * Mineral Cost - * Vespene Cost - * Supply Cost - * Flags for is_worker, is_army, is_building + * Mineral Cost + * Vespene Cost + * Supply Cost + * Flags for is_worker, is_army, is_building * Added ability meta data: - * is_build flag marking abilities that create units - * build_unit indicating the unit type that is built - * build_time indicating the build time for the ability + * is_build flag marking abilities that create units + * build_unit indicating the unit type that is built + * build_time indicating the build time for the ability From 12545056bcf2617206335cd380067ff4fa85cd0d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 15:26:29 -0400 Subject: [PATCH 111/238] APMTracker needs to track APM for observers as well as players. --- sc2reader/engine/plugins/apm.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sc2reader/engine/plugins/apm.py b/sc2reader/engine/plugins/apm.py index 1074cd47..0d69b293 100644 --- a/sc2reader/engine/plugins/apm.py +++ b/sc2reader/engine/plugins/apm.py @@ -18,10 +18,10 @@ class APMTracker(object): name = 'APMTracker' def handleInitGame(self, event, replay): - for player in replay.players: - player.apm = defaultdict(int) - player.aps = defaultdict(int) - player.seconds_played = replay.length.seconds + for human in replay.humans: + human.apm = defaultdict(int) + human.aps = defaultdict(int) + human.seconds_played = replay.length.seconds def handlePlayerActionEvent(self, event, replay): event.player.aps[event.second] += 1 @@ -31,8 +31,8 @@ def handlePlayerLeaveEvent(self, event, replay): event.player.seconds_played = event.second def handleEndGame(self, event, replay): - for player in replay.players: - if len(player.apm.keys()) > 0: - player.avg_apm = sum(player.aps.values())/float(player.seconds_played)*60 + for human in replay.humans: + if len(human.apm.keys()) > 0: + human.avg_apm = sum(human.aps.values())/float(human.seconds_played)*60 else: - player.avg_apm = 0 + human.avg_apm = 0 From c1f5d33d77126b7853cb5eaec81aac5f10614c47 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 17:17:28 -0400 Subject: [PATCH 112/238] Make sure to process game events last. --- sc2reader/resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index ae2364b2..e31792fa 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -483,7 +483,7 @@ def load_game_events(self): return self.game_events = self.raw_data['replay.game.events'] - self.events = sorted(self.game_events+self.events, key=lambda e: e.frame) + self.events = sorted(self.events+self.game_events, key=lambda e: e.frame) # hideous hack for HotS 2.0.0.23925, see https://github.com/GraylinKim/sc2reader/issues/87 if self.events and self.events[-1].frame > self.frames: From 1777d843ee0f008296c74da9a4be5b5adda271fb Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 17:50:37 -0400 Subject: [PATCH 113/238] Add regression test for event order. --- test_replays/event_order.SC2Replay | Bin 0 -> 69989 bytes test_replays/test_all.py | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 test_replays/event_order.SC2Replay diff --git a/test_replays/event_order.SC2Replay b/test_replays/event_order.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..9cdfa1ca1c670db456e83af6a4eb2aa35b033842 GIT binary patch literal 69989 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 literal 0 HcmV?d00001 diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 2ddc2a4a..0ce32997 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -358,6 +358,9 @@ def test_gameheartnormalizer_plugin(self): self.assertEqual(replay.teams[1].players[0].name, 'LiquidTaeJa') self.assertEqual(replay.winner, replay.teams[0]) + def test_replay_event_order(self): + replay = sc2reader.load_replay("test_replays/event_order.SC2Replay") + def test_creepTracker(self): from sc2reader.engine.plugins import CreepTracker From 0c7f0b2cd47ed8b108f62494ad70144e24469d2b Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 18:29:55 -0400 Subject: [PATCH 114/238] Bump version to v0.6.1 [skip ci] --- docs/source/conf.py | 4 ++-- sc2reader/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index ede171f8..3eb38153 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,10 +50,10 @@ # built documents. # # The short X.Y version. -version = '0.6.0' +version = '0.6.1' # The full version, including alpha/beta/rc tags. -release = '0.6.0' +release = '0.6.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 928d049f..93e80ebb 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.0" +__version__ = "0.6.1" import os import sys diff --git a/setup.py b/setup.py index 56361dce..6ed4e196 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.0', + version='0.6.1', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From 041d2fcbd3d29402e92f452eeb91833a610908bb Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 13 Aug 2013 18:32:40 -0400 Subject: [PATCH 115/238] Update changelog for v0.6.1 [skip ci] --- CHANGELOG.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f9812de4..0f464c76 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,12 @@ CHANGELOG ============ +0.6.1 - August 13th 2013 +------------------------ + +* Fix bug in event ordering that caused game events to process before tracker events. +* Fix APMTracker to count APM for all humans, not just players. + 0.6.0 - August 12th 2013 ------------------------ From 68678bc4b923c7492aa8124e4a1139df8ecf40bc Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 16 Aug 2013 12:23:10 -0400 Subject: [PATCH 116/238] Remove dated download URL [skip ci]. --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index 6ed4e196..17031b14 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,6 @@ author="Graylin Kim", author_email="graylin.kim@gmail.com", url="https://github.com/GraylinKim/sc2reader", - download_url="https://github.com/GraylinKim/sc2reader/archive/v0.5.1.tar.gz", platforms=["any"], From daf9cd7d3cdb745fe570cf6ce1b5461ae555894a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 16 Aug 2013 12:49:22 -0400 Subject: [PATCH 117/238] Better fix for hours/minutes on game length. --- sc2reader/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/utils.py b/sc2reader/utils.py index be1f1253..94fb5637 100644 --- a/sc2reader/utils.py +++ b/sc2reader/utils.py @@ -252,12 +252,12 @@ class Length(timedelta): @property def hours(self): """ The number of hours in represented. """ - return int(self.seconds/3600) + return self.seconds//3600 @property def mins(self): """ The number of minutes in excess of the hours. """ - return int(self.seconds/60) % 60 + return self.seconds//60 % 60 @property def secs(self): From 44a6106e021d43e333288ac14c3cc8e43093ca00 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 14:55:48 -0400 Subject: [PATCH 118/238] Coverage reporting fix refs #145. --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 280df185..3d6c9240 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,9 +8,10 @@ python: install: - python setup.py install - pip install coveralls + - mkdir local_cache script: - - coverage run test_replays/test_all.py - - coverage run --append test_s2gs/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader test_replays/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader --append test_s2gs/test_all.py after_success: - coveralls branches: From e3020d072daae6018fbd60c9a4f5245bf083436c Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 15:53:31 -0400 Subject: [PATCH 119/238] Fix FileCaching for python3. --- sc2reader/factories/sc2factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/factories/sc2factory.py b/sc2reader/factories/sc2factory.py index ebc2e6c7..7518767b 100644 --- a/sc2reader/factories/sc2factory.py +++ b/sc2reader/factories/sc2factory.py @@ -274,7 +274,7 @@ def cache_set(self, cache_key, value): if not os.path.exists(bucket_dir): os.makedirs(bucket_dir) - with open(cache_path, 'w') as out: + with open(cache_path, 'wb') as out: out.write(value) def cache_path(self, cache_key): From b634e05ff7ae061e60a149ef4f9f93b0e7cd8629 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 15:55:28 -0400 Subject: [PATCH 120/238] Attempt to fix coverage take 2. --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3d6c9240..f640c349 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,8 @@ install: - pip install coveralls - mkdir local_cache script: - - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader test_replays/test_all.py - - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader --append test_s2gs/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader test_replays/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader --append test_s2gs/test_all.py after_success: - coveralls branches: From 6e19fe4d7dee88d7a34c7cbea771903a21d81d3d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 24 Aug 2013 16:36:46 -0400 Subject: [PATCH 121/238] Coverage fix take 3, use develop and not install. --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index f640c349..b1319cc2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,12 @@ python: - 3.3 - pypy install: - - python setup.py install + - python setup.py develop - pip install coveralls - mkdir local_cache script: - - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader test_replays/test_all.py - - SC2READER_CACHE_DIR=local_cache coverage run --source=./sc2reader --append test_s2gs/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader test_replays/test_all.py + - SC2READER_CACHE_DIR=local_cache coverage run --source=sc2reader --append test_s2gs/test_all.py after_success: - coveralls branches: From 2f433cf79df669ed2c540b1503e835072b6347cc Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 31 Aug 2013 20:23:23 -0400 Subject: [PATCH 122/238] Small clarification on the unit.finished_at time. --- sc2reader/data/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 769f7287..530837bc 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -48,7 +48,8 @@ def __init__(self, unit_id, flags): #: The frame the unit was finished at. Only available for 2.0.8+ replays. #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDoneEvent` is received. For units - #: that are born and not initiated this will be the same as :attr:`started_at`. + #: that are born and not initiated this will be the frame that the :class:`~sc2reader.events.tracker.UnitBornEvent` + #: is received. self.finished_at = None #: The frame the unit died at. Only available for 2.0.8+ replays. From 33769ab82e8d86c117bafa21cbf4a1b8b3f10068 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 31 Aug 2013 20:24:54 -0400 Subject: [PATCH 123/238] Substantial performance improvements. --- sc2reader/decoders.py | 23 ++++++++++------------- sc2reader/readers.py | 6 ++++-- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index ae233547..e0406b3f 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -176,7 +176,7 @@ def byte_align(self): def read_uint8(self): """ Returns the next 8 bits as an unsigned integer """ - data = self._buffer.read_uint8() + data = ord(self._buffer.read(1)) if self._bit_shift != 0: lo_mask, hi_mask = self._bit_masks[self._bit_shift] @@ -231,7 +231,7 @@ def read_uint64(self): def read_vint(self): """ Reads a signed integer of variable length """ - byte = self.read_uint8() + byte = ord(self._buffer.read(1)) negative = byte & 0x01 result = (byte & 0x7F) >> 1 bits = 6 @@ -335,8 +335,8 @@ def read_struct(self, datatype=None): """ Reads a nested data structure. If the type is not specified the first byte is used as the type identifier. """ - self.byte_align() # I think this is true - datatype = self.read_uint8() if datatype is None else datatype + self.byte_align() + datatype = ord(self._buffer.read(1)) if datatype is None else datatype if datatype == 0x00: # array data = [self.read_struct() for i in range(self.read_vint())] @@ -347,31 +347,28 @@ def read_struct(self, datatype=None): elif datatype == 0x02: # blob length = self.read_vint() - data = self.read_bytes(length) + data = self._buffer.read_bytes(length) elif datatype == 0x03: # choice flag = self.read_vint() data = self.read_struct() elif datatype == 0x04: # optional - exists = self.read_uint8() != 0 + exists = self._buffer.read_uint8() != 0 data = self.read_struct() if exists else None elif datatype == 0x05: # Struct - data = OrderedDict() entries = self.read_vint() - for i in range(entries): - key = self.read_vint() # Must be read first - data[key] = self.read_struct() + data = dict([(self.read_vint(), self.read_struct()) for i in range(entries)]) elif datatype == 0x06: # u8 - data = self.read_uint8() + data = ord(self._buffer.read(1)) elif datatype == 0x07: # u32 - data = self.read_bytes(4) # self.read_uint32() + data = self._buffer.read_bytes(4) # self.read_uint32() elif datatype == 0x08: # u64 - data = self.read_unit64() + data = self._buffer.read_unit64() elif datatype == 0x09: # vint data = self.read_vint() diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 7f7e1dca..5e980e36 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -2077,8 +2077,10 @@ def __call__(self, data, replay): frames = 0 events = list() while not decoder.done(): - frames += decoder.read_struct() - etype = decoder.read_struct() + decoder._buffer.read(3) # 03 00 09 + frames += decoder.read_vint() + decoder._buffer.read(1) # 09 + etype = decoder.read_vint() event_data = decoder.read_struct() event = self.EVENT_DISPATCH[etype](frames, event_data, replay.build) events.append(event) From ff28da275e8a71c8a23034f687a0c48ed283ce42 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sat, 31 Aug 2013 20:26:12 -0400 Subject: [PATCH 124/238] Fix the tutorial, thanks sil5555. --- docs/source/tutorials/prettyprinter.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/tutorials/prettyprinter.rst b/docs/source/tutorials/prettyprinter.rst index aa817977..1eb97b45 100644 --- a/docs/source/tutorials/prettyprinter.rst +++ b/docs/source/tutorials/prettyprinter.rst @@ -75,7 +75,7 @@ The replay object itself is a dumb data structure; there are no access methods o datetime.datetime(2011, 9, 20, 21, 8, 8) >>> replay.type '2v2' - >>> replay.map + >>> replay.map_name 'The Boneyard' >>> replay.length # string format is MM.SS Length(0, 1032) @@ -104,7 +104,7 @@ So now all we need to do is build the ouput using the available replay attribute -------------------------------------------- SC2 Version {release_string} {category} Game, {date} - {type} on {map} + {type} on {map_name} Length: {length} """.format(**replay.__dict__) @@ -120,7 +120,7 @@ Similar formatting written in a more verbose and less pythonic way: output += "--------------------------------------------\n" output += "SC2 Version "+replay.release_string+'\n' output += replay.category+" Game, "+str(replay.date)+'\n' - output += replay.type+" on "+replay.map+'\n' + output += replay.type+" on "+replay.map_name+'\n' output += "Length: "+str(replay.length) return output @@ -163,7 +163,7 @@ So lets put it all together into the final script, ``prettyPrinter.py``: -------------------------------------------- SC2 Version {release_string} {category} Game, {date} - {type} on {map} + {type} on {map_name} Length: {length} {formattedTeams} From 1799249e944f9097a2312391ba8fa3ff3b3fc2fe Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Sep 2013 12:49:11 -0400 Subject: [PATCH 125/238] Fix up a lot of small issues in the tutorial. [skip ci] --- docs/source/tutorials/prettyprinter.rst | 49 +++++++++++++------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/docs/source/tutorials/prettyprinter.rst b/docs/source/tutorials/prettyprinter.rst index 1eb97b45..a8584620 100644 --- a/docs/source/tutorials/prettyprinter.rst +++ b/docs/source/tutorials/prettyprinter.rst @@ -38,18 +38,18 @@ The first step is to get a script up to accept a path from the command line. if __name__ == '__main__': main() -Now we need to use sc2reader to read that file into a :class:`Replay` object that contains all the information that we are looking for. +Now we need to use sc2reader to read that file into a :class:`~sc2reader.resources.Replay` object that contains all the information that we are looking for. :: - from sc2reader import SC2Reader + from sc2reader.factories import SC2Factory def main(): path = sys.argv[1] - sc2 = SC2Reader() + sc2 = SC2Factory() replay = sc2.load_replay(path) -In the code above, we imported the :class:`SC2Reader` class from the sc2reader package. This class is a factory class that is used to load replays. This factory is configurable in a variety of ways but sane defaults are provided so that most users probably won't need to do any substantial configuration. In fact, because many users will never need to configure the SC2Reader factory the package provides a default factory that can be used by operating directly on the sc2reader package. +In the code above, we imported the :class:`~sc2reader.factories.SC2Factory` class from the ``sc2reader.factories`` package. This class is a factory class that is used to load replays. This factory is configurable in a variety of ways but sane defaults are provided so that most users probably won't need to do any substantial configuration. In fact, because many users will never need to configure the SC2Factory the package provides a default factory that can be used by operating directly on the sc2reader package. :: @@ -61,7 +61,7 @@ In the code above, we imported the :class:`SC2Reader` class from the sc2reader p We'll use this short hand method for the rest of this tutorial. -The replay object itself is a dumb data structure; there are no access methods only attributes. For our script we will need the following set of attributes, a full list of attributes can be found on the :class:`Replay` reference page. +The replay object itself is a dumb data structure; there are no access methods only attributes. For our script we will need the following set of attributes, a full list of attributes can be found on the :class:`~sc2reader.resources.Replay` reference page. :: @@ -71,13 +71,13 @@ The replay object itself is a dumb data structure; there are no access methods o '1.4.0.19679' >>> replay.category 'Ladder' - >>> replay.date + >>> replay.end_time datetime.datetime(2011, 9, 20, 21, 8, 8) >>> replay.type '2v2' >>> replay.map_name 'The Boneyard' - >>> replay.length # string format is MM.SS + >>> replay.game_length # string format is MM.SS Length(0, 1032) >>> replay.teams [, ] @@ -88,7 +88,7 @@ Many of the replay attributes are nested data structures which are generally all >>> replay.teams[0].players[0].color.hex 'B4141E' - >>> replay.player['Remedy'].url + >>> replay.player.name('Remedy').url 'http://us.battle.net/sc2/en/profile/2198663/1/Remedy/' Each of these nested structures can be found either on its own reference page or lumped together with the other minor structures on the Misc Structures page. @@ -103,13 +103,13 @@ So now all we need to do is build the ouput using the available replay attribute {filename} -------------------------------------------- SC2 Version {release_string} - {category} Game, {date} + {category} Game, {start_time} {type} on {map_name} - Length: {length} + Length: {game_length} """.format(**replay.__dict__) -In the code above we are taking advantage of the dump data structure design of the :class:`Replay` objects and unpacking its internal dictionary into the string.format method. If you aren't familiar with some of these concepts they are well worth reading up on; string templates are awesome! +In the code above we are taking advantage of the dump data structure design of the :class:`~sc2reader.resources.Replay` objects and unpacking its internal dictionary into the ``string.format`` method. If you aren't familiar with some of these concepts they are well worth reading up on; string templates are awesome! Similar formatting written in a more verbose and less pythonic way: @@ -119,12 +119,12 @@ Similar formatting written in a more verbose and less pythonic way: output = replay.filename+'\n' output += "--------------------------------------------\n" output += "SC2 Version "+replay.release_string+'\n' - output += replay.category+" Game, "+str(replay.date)+'\n' + output += replay.category+" Game, "+str(replay.start_time)+'\n' output += replay.type+" on "+replay.map_name+'\n' - output += "Length: "+str(replay.length) + output += "Length: "+str(replay.game_length) return output -Next we need to format the teams for display. The :class:`Team` and :class:`Player` data structures are pretty straightforward as well so we can apply a bit of string formatting and produce this: +Next we need to format the teams for display. The :class:`~sc2reader.objects.Team` and :class:`~sc2reader.objects.Player` data structures are pretty straightforward as well so we can apply a bit of string formatting and produce this: :: @@ -162,9 +162,9 @@ So lets put it all together into the final script, ``prettyPrinter.py``: {filename} -------------------------------------------- SC2 Version {release_string} - {category} Game, {date} + {category} Game, {start_time} {type} on {map_name} - Length: {length} + Length: {game_length} {formattedTeams} """.format(formattedTeams=formatTeams(replay), **replay.__dict__) @@ -182,10 +182,10 @@ So lets put it all together into the final script, ``prettyPrinter.py``: Making Improvements --------------------------- -So our script works fine for single files, but what if you want to handle multiple files or directories? sc2reader provides two functions for loading replays: :meth:`~SC2Reader.load_replay` and :meth:`~SC2Reader.load_replays` which return a single replay and a list respectively. :meth:`~SC2Reader.load_replay` was used above for convenience but :meth:`~SC2Reader.load_replays` is much more versitile. Here's the difference: +So our script works fine for single files, but what if you want to handle multiple files or directories? sc2reader provides two functions for loading replays: :meth:`~sc2reader.factories.SC2Factory.load_replay` and :meth:`~sc2reader.factories.SC2Factory.load_replays` which return a single replay and a list respectively. :meth:`~sc2reader.factories.SC2Factory.load_replay` was used above for convenience but :meth:`~sc2reader.factories.SC2Factory.load_replays` is much more versitile. Here's the difference: -* :meth:`~SC2Reader.load_replay`: accepts a file path or an opened file object. -* :meth:`~SC2Reader.load_replays`: accepts a collection of opened file objects or a path (both directory and file paths acceptable) or a collection of paths. You could even pass in a collection of mixed paths and opened file objects. +* :meth:`~sc2reader.factories.SC2Factory.load_replay`: accepts a file path or an opened file object. +* :meth:`~sc2reader.factories.SC2Factory.load_replays`: accepts a collection of opened file objects or file paths. Can also accept a single path to a directory; files will be pulled from the directory using :func:`~sc2reader.utils.get_files` and the given options. With this in mind, lets make a slight change to our main function to support any number of paths to any combination of files and directories: @@ -203,13 +203,13 @@ Any time that you start dealing with directories or collections of files you run * exclude: Default []. When recursing directories you can choose to exclude directories from the file search by directory name (not full path). * followlinks: Default false. When recursing directories, enables or disables the follow symlinks behavior. -Remember above that the short hand notation that we have been using works with a default instance of the SC2Reader class. :class:`SC2Reader` factories can be customized either on construction or with the :meth:`~SC2Reader.configure` method. +Remember above that the short hand notation that we have been using works with a default instance of the SC2Factory class. :class:`sc2reader.factories.SC2Factory` objects can be customized either on construction or with the :meth:`~sc2reader.factories.SC2Factory.configure` method. :: - from sc2reader import SC2Reader + from sc2reader.factories import SC2Factory - sc2 = SC2Reader( + sc2 = SC2Factory( directory='~/Documents/Starcraft II/Multiplayer/Replays', exclude=['Customs','Pros'], followlinks=True @@ -243,6 +243,7 @@ There are 4 available load levels: * 0: Parses the replay header for version, build, and length information * 1: Also parses the replay.details, replay.attribute.events and replay.initData files for game settings, map, and time information * 2: Also parses the replay.message.events file and constructs game teams and players. -* 3: Also parses the replay.game.events file for player action events. +* 3: Also parses the replay.tracker.events file +* 4: Also parses the replay.game.events file for player action events. -So that's it! An ideal prettyPrinter script might let the user configure these options as arguments using the argparse library. Such an expansion is beyond the scope of sc2reader though, so we'll leave it that one to you. +So that's it! An ideal prettyPrinter script might let the user configure these options as arguments using the ``argparse`` library. Such an expansion is beyond the scope of sc2reader though, so we'll leave it that one to you. From aaa2b890cb0436dce24beffc348f514e3b9c1412 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 5 Sep 2013 11:24:46 -0400 Subject: [PATCH 126/238] When we have tracker events, don't change type with game events. Fixes #152. --- sc2reader/engine/plugins/context.py | 5 ++++- sc2reader/events/game.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index bd90c109..4bea4e1a 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -49,9 +49,12 @@ def handleTargetAbilityEvent(self, event, replay): if event.target_unit_id in replay.objects: event.target = replay.objects[event.target_unit_id] - if not event.target.is_type(event.target_unit_type): + if not replay.tracker_events and not event.target.is_type(event.target_unit_type): replay.datapack.change_type(event.target, event.target_unit_type, event.frame) else: + # Often when the target_unit_id is not in replay.objects it is 0 because it + # is a target building/destructable hidden by fog of war. Perhaps we can match + # it through the fog using location? unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, 0x00, event.frame) event.target = unit replay.objects[event.target_unit_id] = unit diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 7ff46188..720b23a9 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -278,9 +278,12 @@ def __init__(self, frame, pid, data): self.target_timer = self.ability_type_data.get('timer', None) #: Unique id of the target unit. Available for TargetUnit type events. + #: This id can be 0 when the target unit is shrouded by fog of war. self.target_unit_id = self.ability_type_data.get('unit_tag', None) - #: A reference to the targetted unit + #: A reference to the targetted unit. When the :attr:`target_unit_id` is + #: 0 this target unit is a generic, reused fog of war unit of the :attr:`target_unit_type` + #: with an id of zero. It should not be confused with a real unit. self.target_unit = None #: Current integer type id of the target unit. Available for TargetUnit type events. From 46ee53593e159f20cc7a569e3350ba8fcacdc168 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 6 Sep 2013 00:21:55 -0400 Subject: [PATCH 127/238] Register plugin exceptions as PluginExit events. refs #149 --- sc2reader/engine/engine.py | 83 +++++++++++++++++--------------------- test_replays/test_all.py | 57 +++++++++++++++++++++++++- 2 files changed, 94 insertions(+), 46 deletions(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index 453d37c7..b4f4c8bb 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -102,6 +102,15 @@ def handleAbilityEvent(self, event, replay): replay:: code, details = replay.plugins['MyPlugin'] + + If your plugin depends on another plugin, it is a good idea to implement handlePluginExit + and be alerted if the plugin that you require fails. This way you can exit gracefully. You + can also check to see if the plugin name is in ``replay.plugin_failures``:: + + if 'RequiredPlugin' in replay.plugin_failures: + code, details = replay.plugins['RequiredPlugin'] + message = "RequiredPlugin failed with code: {0}. Cannot continue.".format(code) + yield PluginExit(self, code=1, details=dict(msg=message)) """ def __init__(self, plugins=[]): self._plugins = list() @@ -126,8 +135,11 @@ def run(self, replay): # remove them from this list and regenerate event handlers. plugins = list(self._plugins) - # Create a dict for storing plugin exit codes and details - replay.plugins = dict() + # Create a dict for storing plugin exit codes and details. + replay.plugin_result = replay.plugins = dict() + + # Create a list storing replay.plugins keys for failures. + replay.plugin_failures = list() # Fill event event queue with the replay events, bookmarked by Init and End events. event_queue = collections.deque() @@ -144,8 +156,9 @@ def run(self, replay): # Remove the plugin and reset the handlers. plugins.remove(event.plugin) handlers.clear() - replay.plugins[event.plugin.name] = (event.code, event.details) - continue + replay.plugin_result[event.plugin.name] = (event.code, event.details) + if event.code != 0: + replay.plugin_failures.append(event.plugin.name) # If we haven't compiled a list of handlers for this event yet, do so! if event.name not in handlers: @@ -155,19 +168,31 @@ def run(self, replay): event_handlers = handlers[event.name] # Events have the option of yielding one or more additional events - # which get processed after the current event finishes. - new_events = list() + # which get processed after the current event finishes. The new_events + # batch is constructed in reverse order because extendleft reverses + # the order again with a series of appendlefts. + new_events = collections.deque() for event_handler in event_handlers: - new_events.extend(event_handler(event, replay) or []) - - # extendleft does a series of appendlefts and reverses the order so we - # need to reverse the list first to have them added in order. + try: + for new_event in (event_handler(event, replay) or []): + if new_event.name == 'PluginExit': + new_events.append(new_event) + break + else: + new_events.appendleft(new_event) + except Exception as e: + if event_handler.im_self.name in ['ContextLoader']: + # Certain built in plugins should probably still cause total failure + raise # Maybe?? + else: + new_event = PluginExit(event_handler.im_self, code=1, details=dict(error=e)) + new_events.append(new_event) event_queue.extendleft(new_events) - # For any plugins that didn't yield a PluginExit event, record a successful - # completion. + # For any plugins that didn't yield a PluginExit event or throw unexpected exceptions, + # record a successful completion. for plugin in plugins: - replay.plugins[plugin.name] = (0, dict()) + replay.plugin_result[plugin.name] = (0, dict()) def _get_event_handlers(self, event, plugins): return sum([self._get_plugin_event_handlers(plugin, event) for plugin in plugins], []) @@ -197,35 +222,3 @@ def _has_event_handler(self, plugin, event): def _get_event_handler(self, plugin, event): return getattr(plugin, 'handle'+event.name, None) - - -if __name__ == '__main__': - from sc2reader.events import UserOptionsEvent, GameStartEvent, PlayerLeaveEvent - - class TestEvent(object): - name = 'TestEvent' - - def __init__(self, source): - self.source = source - - class TestPlugin(object): - yields = TestEvent - - def handleInitGame(self, event, replay,): - yield TestEvent(event.name) - - def handleTestEvent(self, event, replay): - print(event.source) - - def handleGameStartEvent(self, event, replay): - yield TestEvent(event.name) - - def handleEndGame(self, event, replay): - yield TestEvent(event.name) - - class TestReplay(object): - events = [UserOptionsEvent, UserOptionsEvent, GameStartEvent, PlayerLeaveEvent] - - engine = GameEngine() - engine.register_plugin(TestPlugin()) - events = engine.run(TestReplay) diff --git a/test_replays/test_all.py b/test_replays/test_all.py index 0ce32997..59d77108 100644 --- a/test_replays/test_all.py +++ b/test_replays/test_all.py @@ -361,7 +361,6 @@ def test_gameheartnormalizer_plugin(self): def test_replay_event_order(self): replay = sc2reader.load_replay("test_replays/event_order.SC2Replay") - def test_creepTracker(self): from sc2reader.engine.plugins import CreepTracker @@ -388,5 +387,61 @@ def test_creepTracker(self): assert replay.player[2].creep_spread_by_minute[420] == 9.4 assert replay.player[2].creep_spread_by_minute[780] == 22.42 + +class TestGameEngine(unittest.TestCase): + class TestEvent(object): + name='TestEvent' + def __init__(self, value): + self.value = value + def __str__(self): + return self.value + + class TestPlugin1(object): + name = 'TestPlugin1' + + def handleInitGame(self, event, replay): + yield TestGameEngine.TestEvent('b') + yield TestGameEngine.TestEvent('c') + + def handleTestEvent(self, event, replay): + print("morestuff") + if event.value == 'd': + yield sc2reader.engine.PluginExit(self, code=1, details=dict(msg="Fail!")) + else: + yield TestGameEngine.TestEvent('d') + + def handleEndGame(self, event, replay): + yield TestGameEngine.TestEvent('g') + + class TestPlugin2(object): + name = 'TestPlugin2' + def handleInitGame(self, event, replay): + replay.engine_events = list() + + def handleTestEvent(self, event, replay): + replay.engine_events.append(event) + + def handlePluginExit(self, event, replay): + yield TestGameEngine.TestEvent('e') + + def handleEndGame(self, event, replay): + yield TestGameEngine.TestEvent('f') + + class MockReplay(object): + def __init__(self, events): + self.events = events + + def test_plugin1(self): + engine = sc2reader.engine.GameEngine() + engine.register_plugin(self.TestPlugin1()) + engine.register_plugin(self.TestPlugin2()) + replay = self.MockReplay([self.TestEvent('a')]) + engine.run(replay) + self.assertEqual(''.join(str(e) for e in replay.engine_events), 'bdecaf') + self.assertEqual(replay.plugin_failures, ['TestPlugin1']) + self.assertEqual(replay.plugin_result['TestPlugin1'], (1, dict(msg="Fail!"))) + self.assertEqual(replay.plugin_result['TestPlugin2'], (0, dict())) + + if __name__ == '__main__': unittest.main() From 50e3adcaf6a815a39930a564abd1ed30405c104d Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 6 Sep 2013 00:22:16 -0400 Subject: [PATCH 128/238] Bump to 0.6.2 --- CHANGELOG.rst | 7 +++++++ docs/source/conf.py | 4 ++-- setup.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 0f464c76..b526235f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ CHANGELOG ============ +0.6.2 - September 5th 2013 +-------------------------- +* Fix rare bug where TargetedAbility events could overwrite unit types. +* Substantial performance boost (20% in local testing) +* Fixed serious bug with FileCaching that affected Python3 users. +* Plugins can now yield PluginExit events to broadcast their shutdown. + 0.6.1 - August 13th 2013 ------------------------ diff --git a/docs/source/conf.py b/docs/source/conf.py index 3eb38153..1272f575 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -50,10 +50,10 @@ # built documents. # # The short X.Y version. -version = '0.6.1' +version = '0.6.2' # The full version, including alpha/beta/rc tags. -release = '0.6.1' +release = '0.6.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/setup.py b/setup.py index 17031b14..a3691f14 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.1', + version='0.6.2', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From 07c3ecacc749b3d51915a808d6dca81a6ae5b00e Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Sep 2013 16:07:13 -0400 Subject: [PATCH 129/238] Properly handle hallucinated units. Fixes #153. --- sc2reader/data/__init__.py | 18 +++++++++++------- sc2reader/engine/plugins/context.py | 14 +++++++++----- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 530837bc..fd345a34 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -37,7 +37,7 @@ class Unit(object): Represents an in-game unit. """ - def __init__(self, unit_id, flags): + def __init__(self, unit_id): #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. self.owner = None @@ -66,8 +66,6 @@ def __init__(self, unit_id, flags): #: behind the fog of war is targetted. self.id = unit_id - self.flags = flags - #: A reference to the unit type this unit is current in. #: e.g. SeigeTank is a different type than SeigeTankSeiged self._type_class = None @@ -76,8 +74,14 @@ def __init__(self, unit_id, flags): #: in order by frame the type was acquired. self.type_history = OrderedDict() - #: Is this unit type a hallucinated one? Unsure of this flag.. - self.hallucinated = (flags & 2 == 2) + #: Is this unit type a hallucinated one? + self.hallucinated = False + + self.flags = 0 + + def apply_flags(self, flags): + self.flags = flags + self.hallucinated = flags & 2 == 2 def set_type(self, unit_type, frame): self._type_class = unit_type @@ -231,14 +235,14 @@ def __init__(self, build_id): #: A dictionary mapping integer ids to available abilities. self.abilities = dict() - def create_unit(self, unit_id, unit_type, unit_flags, frame): + def create_unit(self, unit_id, unit_type, frame): """ :param unit_id: The unique id of this unit. :param unit_type: The unit type to assign to the new unit Creates a new unit and assigns it to the specified type. """ - unit = Unit(unit_id, unit_flags) + unit = Unit(unit_id) self.change_type(unit, unit_type, frame) return unit diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 4bea4e1a..1795eecb 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -55,7 +55,7 @@ def handleTargetAbilityEvent(self, event, replay): # Often when the target_unit_id is not in replay.objects it is 0 because it # is a target building/destructable hidden by fog of war. Perhaps we can match # it through the fog using location? - unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, 0x00, event.frame) + unit = replay.datapack.create_unit(event.target_unit_id, event.target_unit_type, event.frame) event.target = unit replay.objects[event.target_unit_id] = unit @@ -64,7 +64,8 @@ def handleSelectionEvent(self, event, replay): return units = list() - for (unit_id, unit_type, subgroup, intra_subgroup) in event.new_unit_info: + # TODO: Blizzard calls these subgroup flags but that doesn't make sense right now + for (unit_id, unit_type, subgroup_flags, intra_subgroup_flags) in event.new_unit_info: # If we don't have access to tracker events, use selection events to create # new units and track unit type changes. It won't be perfect, but it is better # than nothing. @@ -79,7 +80,7 @@ def handleSelectionEvent(self, event, replay): if not unit.is_type(unit_type): replay.datapack.change_type(unit, unit_type, event.frame) else: - unit = replay.datapack.create_unit(unit_id, unit_type, 0x00, event.frame) + unit = replay.datapack.create_unit(unit_id, unit_type, event.frame) replay.objects[unit_id] = unit # If we have tracker events, the unit must already exist and must already @@ -87,6 +88,9 @@ def handleSelectionEvent(self, event, replay): else: unit = replay.objects[unit_id] + # Selection events hold flags on units (like hallucination) + unit.apply_flags(intra_subgroup_flags) + units.append(unit) event.new_units = event.objects = units @@ -110,7 +114,7 @@ def handleUnitBornEvent(self, event, replay): event.unit = replay.objects[event.unit_id] else: # TODO: How to tell if something is hallucination? - event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, 0, event.frame) + event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, event.frame) replay.objects[event.unit_id] = event.unit replay.active_units[event.unit_id_index] = event.unit @@ -189,7 +193,7 @@ def handleUnitInitEvent(self, event, replay): event.unit = replay.objects[event.unit_id] else: # TODO: How to tell if something is hallucination? - event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, 0, event.frame) + event.unit = replay.datapack.create_unit(event.unit_id, event.unit_type_name, event.frame) replay.objects[event.unit_id] = event.unit replay.active_units[event.unit_id_index] = event.unit From f2a7286e370ad8c4588e868123e72ded0d64a6af Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Sep 2013 17:36:01 -0400 Subject: [PATCH 130/238] Bump to 0.6.3. --- CHANGELOG.rst | 5 +++++ docs/source/conf.py | 5 +++-- sc2reader/__init__.py | 2 +- setup.py | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b526235f..7f26efeb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,11 @@ CHANGELOG ============ +0.6.3 - September 15th 2013 +--------------------------- + +* Properly mark hallucinated units. + 0.6.2 - September 5th 2013 -------------------------- * Fix rare bug where TargetedAbility events could overwrite unit types. diff --git a/docs/source/conf.py b/docs/source/conf.py index 1272f575..91b8a826 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,6 +12,7 @@ # serve to show the default. import sys, os +import sc2reader autodoc_member_order = "bysource" @@ -50,10 +51,10 @@ # built documents. # # The short X.Y version. -version = '0.6.2' +version = sc2reader.__version__ # The full version, including alpha/beta/rc tags. -release = '0.6.2' +release = sc2reader.__version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 93e80ebb..d32ab45f 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.1" +__version__ = "0.6.3" import os import sys diff --git a/setup.py b/setup.py index a3691f14..69d3cdd2 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.2', + version='0.6.3', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From f3b01911f74603d3fa391265e52b73f42b0121f1 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 15 Sep 2013 22:30:03 -0400 Subject: [PATCH 131/238] Updates to the plugin documentation. --- .../articles/creatingagameengineplugin.rst | 14 ++++- docs/source/plugins.rst | 59 +++++++++++-------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/docs/source/articles/creatingagameengineplugin.rst b/docs/source/articles/creatingagameengineplugin.rst index 740820f3..1d371aeb 100644 --- a/docs/source/articles/creatingagameengineplugin.rst +++ b/docs/source/articles/creatingagameengineplugin.rst @@ -33,7 +33,10 @@ Given the following plugins:: def handleTargetAbilityEvent(self, event, replay): pass -An engine handling a ``TargetAbilityEvent`` would call handlers in the following order:: + sc2reader.engine.register_plugin(Plugin1()) + sc2reader.engine.register_plugin(Plugin2()) + +When the engine handles a ``TargetAbilityEvent`` it will call handlers in the following order:: Plugin1.handleAbilityEvent(event, replay) Plugin2.handleEvent(event, replay) @@ -84,3 +87,12 @@ If a plugin wishes to stop processing a replay it can yield a PluginExit event b The GameEngine will intercept this event and remove the plugin from the list of active plugins for this replay. The exit code and details will be available from the replay:: code, details = replay.plugins['MyPlugin'] + +Using Your Plugin +----------------- + +To use your plugin with sc2reader, just register it to the game engine: + + sc2reader.engine.register_plugin(MyPlugin()) + +Plugins will be called in order of registration for each event. If plugin B depends on plugin A make sure to register plugin A first! diff --git a/docs/source/plugins.rst b/docs/source/plugins.rst index a311a6c5..b7ad5435 100644 --- a/docs/source/plugins.rst +++ b/docs/source/plugins.rst @@ -1,26 +1,42 @@ Plugins ============= -A plugin is pretty much just a callable function or object that accepts a replay -file as a single argument. sc2reader supports assignment of plugins to different -resource types via the :meth:`SC2Factory.register_plugin` factory method. +sc2reader has a built in game engine that you can plug into to efficiently process replay events. You can add plugins to the engine by calling :meth:`~sc2reader.engine.engine.GameEngine.register_plugin`:: -:: + import sc2reader + from sc2reader.engine.plugins import APMTracker, SelectionTracker + sc2reader.engine.register_plugin(APMTracker()) + sc2reader.engine.register_plugin(SelectionTracker()) - import sc2reader - from sc2reader.plugins.replay import APMTracker, SelectionTracker - sc2reader.register_plugin('Replay',APMTracker()) - sc2reader.register_plugin('Replay',SelectionTracker()) +Plugins will be called in order of registration for each event. If plugin B depends on plugin A make sure to register plugin A first! -The order you register plugins is the order they are executed in so be careful to -put register in the right order if you have dependencies between plugins. +See the :doc:`articles/creatingagameengineplugin` article for instructions on making your own plugins. + + +ContextLoader +------------- + +.. note:: + + This plugin is registered by default. + +This plugin creates and maintains all the :class:`~sc2reader.data.Unit` and :class:`~sc2reader.data.Ability` data objects from the raw replay data. This creates all the ``event.player``, ``event.unit``, ``event.ability`` object references and maintains other game data structures like :attr:`~sc2reader.resources.Replay.objects`. + + +GameHeartNormalizer +--------------------- + +.. note:: + + This plugin is registered by default. + +This plugin fixes player lists, teams, game lengths, and frames for games that were played with the GameHeart mod. APMTracker ---------------- -The APMTracker adds three simple fields based on a straight tally of non-camera -player action events such as selections, abilities, and hotkeys. +The :class:`~sc2reader.engine.plugins.APMTracker` adds three simple fields based on a straight tally of non-camera player action events such as selections, abilities, and hotkeys. * ``player.aps`` = a dictionary of second => total actions in that second * ``player.apm`` = a dictionary of minute => total actions in that minute @@ -30,21 +46,12 @@ player action events such as selections, abilities, and hotkeys. SelectionTracker -------------------- -The :class:`SelectionTracker` plugin simulates every person's selection at every -frame in both the hotkey and active selection buffers. This selection information -is stored in ``person.selection`` as a two dimensional array of lists. - -:: - - unit_list = replay.player[1].selection[frame][buffer] +.. note:: -Where buffer is a control group 0-9 or 10 which represents the active selection. + This plugin is intended to be used in conjunction with other user written plugins. If you attempt to use the ``player.selection`` attribute outside of a registered plugin the values will be the values as they were at the end of the game. -Keep in mind that the buffers are only updated for the following events: +The :class:`SelectionTracker` maintains a ``person.selection`` structure maps selection buffers for that player to the player's current selection:: - * The active selection changes - * When unit types change (eggs hatch, tanks siege) + active_selection = event.player.selection[10] -Buffers are not updated when units die unless the unit dies while selected (because -the active selection must change). Units that die while deslected won't get deselected -until the next time the control group they were saved in becomes active. +Where buffer is a control group 0-9 or a 10 which represents the active selection. From 088e2eb55a010f402e6297b72759d53dd07c9427 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 18 Sep 2013 15:00:25 -0400 Subject: [PATCH 132/238] Adjust tank supply cost. fixes #156. --- sc2reader/data/unit_info.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/data/unit_info.json b/sc2reader/data/unit_info.json index 9959a7ef..64d2a2ed 100644 --- a/sc2reader/data/unit_info.json +++ b/sc2reader/data/unit_info.json @@ -692,13 +692,13 @@ "is_army": true, "minerals": 150, "vespene": 125, - "supply": 2 + "supply": 3 }, "siegetanksieged": { "is_army": true, "minerals": 150, "vespene": 125, - "supply": 2 + "supply": 3 }, "starport": { "minerals": 150, From 3020b6029a075b6ad6fd26b5985801c581a5c8d0 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 20 Sep 2013 23:19:10 -0400 Subject: [PATCH 133/238] Consolidate and improve readers layer. --- sc2reader/decoders.py | 4 +- sc2reader/events/message.py | 17 +- sc2reader/readers.py | 752 +++--------------------------------- sc2reader/resources.py | 23 +- 4 files changed, 81 insertions(+), 715 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index e0406b3f..bb0bbd4c 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -166,8 +166,8 @@ def __init__(self, contents): self.read_bool = functools.partial(self.read_bits, 1) def done(self): - """ Returns true when all bits in the buffer have been used""" - return self.tell() == self.length and self._bit_shift == 0 + """ Returns true when all bytes in the buffer have been used""" + return self.tell() == self.length def byte_align(self): """ Moves cursor to the beginning of the next byte """ diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 0eb991e4..7608f8db 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -10,11 +10,10 @@ class MessageEvent(Event): name = 'MessageEvent' - def __init__(self, frame, pid, flags): + def __init__(self, frame, pid): self.pid = pid self.frame = frame self.second = frame >> 4 - self.flags = flags def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" @@ -28,10 +27,9 @@ def __str__(self): class ChatEvent(MessageEvent): name = 'ChatEvent' - def __init__(self, frame, pid, flags, target, text, extension): - super(ChatEvent, self).__init__(frame, pid, flags) + def __init__(self, frame, pid, target, text): + super(ChatEvent, self).__init__(frame, pid) self.target = target - self.extension = extension self.text = text self.to_all = (self.target == 0) self.to_allies = (self.target == 2) @@ -42,8 +40,8 @@ def __init__(self, frame, pid, flags, target, text, extension): class PacketEvent(MessageEvent): name = 'PacketEvent' - def __init__(self, frame, pid, flags, info): - super(PacketEvent, self).__init__(frame, pid, flags) + def __init__(self, frame, pid, info): + super(PacketEvent, self).__init__(frame, pid) self.info = info @@ -51,6 +49,7 @@ def __init__(self, frame, pid, flags, info): class PingEvent(MessageEvent): name = 'PingEvent' - def __init__(self, frame, pid, flags, x, y): - super(PingEvent, self).__init__(frame, pid, flags) + def __init__(self, frame, pid, target, x, y): + super(PingEvent, self).__init__(frame, pid) + self.target = target self.x, self.y = x, y diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 5e980e36..7aba7219 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -12,419 +12,22 @@ from sc2reader.decoders import BitPackedDecoder, ByteDecoder -class Reader(object): - def __init__(self, **options): - self.options = options - - def __call__(self, data, replay): - raise NotImplementedError - - -class InitDataReader_Base(Reader): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_bytes(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(5)+1, - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=None, - licenses=[], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_16561(InitDataReader_Base): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(5)+1, - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=None, - licenses=[], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_17326(InitDataReader_16561): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_19132(InitDataReader_17326): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=None, - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=None, - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(4))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=None, - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=None, - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=None, - ), - ) - - -class InitDataReader_22612(InitDataReader_19132): - +class InitDataReader(object): def __call__(self, data, replay): data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( + result = dict( + user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, + clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, + highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, + combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, + team_preference=data.read_uint8() if replay.base_build >= 16561 and data.read_bool() else None, test_map=data.read_bool(), test_auto=data.read_bool(), - examine=data.read_bool(), - custom_interface=None, + examine=data.read_bool() if replay.base_build >= 21955 else None, + custom_interface=data.read_bool() if replay.base_build >= 24764 else None, observe=data.read_bits(2), ) for i in range(data.read_bits(5))], @@ -443,7 +46,7 @@ def __call__(self, data, replay): fog=data.read_bits(2), observers=data.read_bits(2), user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64(), + client_debug_flags=data.read_uint64() if replay.base_build >= 22612 else None, ), game_speed=data.read_bits(3), game_type=data.read_bits(3), @@ -451,9 +54,9 @@ def __call__(self, data, replay): max_observers=data.read_bits(5), max_players=data.read_bits(5), max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), + max_colors=data.read_bits(6) if replay.base_build >= 17266 else data.read_bits(5)+1, max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, + max_controls=data.read_uint8()+(0 if replay.base_build >= 26490 else 1), map_size_x=data.read_uint8(), map_size_y=data.read_uint8(), map_file_sync_checksum=data.read_uint32(), @@ -466,14 +69,14 @@ def __call__(self, data, replay): allowedDifficulty=data.read_bits(data.read_bits(6)), allowedControls=data.read_bits(data.read_uint8()), allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=None, + allowed_ai_builds=data.read_bits(data.read_bits(7)) if replay.base_build >= 23925 else None, ) for i in range(data.read_bits(5))], default_difficulty=data.read_bits(6), - default_AI_build=None, - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6))], + default_ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, + cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], is_blizzardMap=data.read_bool(), is_premade_ffa=data.read_bool(), - is_coop_mode=None, + is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, ), lobby_state=dict( @@ -487,261 +90,43 @@ def __call__(self, data, replay): colorPref=data.read_bits(5) if data.read_bool() else None, race_pref=data.read_uint8() if data.read_bool() else None, difficulty=data.read_bits(6), - ai_build=None, + ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, handicap=data.read_bits(7), observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], + working_set_slot_id=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, + rewards=[data.read_uint32() for i in range(data.read_bits(6 if replay.base_build >= 24764 else 5))], + toon_handle=data.read_aligned_string(data.read_bits(7)) if replay.base_build >= 17266 else None, + licenses=[data.read_uint32() for i in range(data.read_bits(9))] if replay.base_build >= 19132 else [], ) for i in range(data.read_bits(5))], random_seed=data.read_uint32(), host_user_id=data.read_bits(4) if data.read_bool() else None, is_single_player=data.read_bool(), game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), - default_ai_build=None, + default_ai_build=data.read_bits(7) if replay.base_build >= 23260 else None, ), ) + if not data.done(): + raise ValueError("{0} bytes left!".format(data.length-data.tell())) + return result -class InitDataReader_23925(InitDataReader_22612): - +class AttributesEventsReader(object): def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=None, - highest_league=None, - combined_race_levels=None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=data.read_bool(), - custom_interface=None, - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64(), - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=data.read_bits(data.read_bits(7)), - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=data.read_bits(7), - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=data.read_bool(), - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=data.read_bits(7), - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=None, - rewards=[data.read_uint32() for i in range(data.read_bits(5))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7), - ), - ) - - -class InitDataReader_24764(InitDataReader_22612): - - def __call__(self, data, replay): - data = BitPackedDecoder(data) - return dict( - player_init_data=[dict( - name=data.read_aligned_string(data.read_uint8()), - clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - highest_league=data.read_uint8() if data.read_bool() else None, - combined_race_levels=data.read_uint32() if data.read_bool() else None, - random_seed=data.read_uint32(), - race_preference=data.read_uint8() if data.read_bool() else None, - team_preference=data.read_uint8() if data.read_bool() else None, - test_map=data.read_bool(), - test_auto=data.read_bool(), - examine=data.read_bool(), - custom_interface=data.read_bool(), - observe=data.read_bits(2), - ) for i in range(data.read_bits(5))], - - game_description=dict( - random_value=data.read_uint32(), - game_cache_name=data.read_aligned_string(data.read_bits(10)), - game_options=dict( - lock_teams=data.read_bool(), - teams_together=data.read_bool(), - advanced_shared_control=data.read_bool(), - random_races=data.read_bool(), - battle_net=data.read_bool(), - amm=data.read_bool(), - competitive=data.read_bool(), - no_victory_or_defeat=data.read_bool(), - fog=data.read_bits(2), - observers=data.read_bits(2), - user_difficulty=data.read_bits(2), - client_debug_flags=data.read_uint64(), - ), - game_speed=data.read_bits(3), - game_type=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - max_players=data.read_bits(5), - max_teams=data.read_bits(4)+1, - max_colors=data.read_bits(6), - max_races=data.read_uint8()+1, - max_controls=data.read_uint8()+1, - map_size_x=data.read_uint8(), - map_size_y=data.read_uint8(), - map_file_sync_checksum=data.read_uint32(), - map_file_name=data.read_aligned_string(data.read_bits(11)), - map_author_name=data.read_aligned_string(data.read_uint8()), - mod_file_sync_checksum=data.read_uint32(), - slot_descriptions=[dict( - allowed_colors=data.read_bits(data.read_bits(6)), - allowed_races=data.read_bits(data.read_uint8()), - allowedDifficulty=data.read_bits(data.read_bits(6)), - allowedControls=data.read_bits(data.read_uint8()), - allowed_observe_types=data.read_bits(data.read_bits(2)), - allowed_ai_builds=data.read_bits(data.read_bits(7)), - ) for i in range(data.read_bits(5))], - default_difficulty=data.read_bits(6), - default_AI_build=data.read_bits(7), - cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6))], - is_blizzardMap=data.read_bool(), - is_premade_ffa=data.read_bool(), - is_coop_mode=data.read_bool(), - ), - - lobby_state=dict( - phase=data.read_bits(3), - max_users=data.read_bits(5), - max_observers=data.read_bits(5), - slots=[dict( - control=data.read_uint8(), - user_id=data.read_bits(4) if data.read_bool() else None, - team_id=data.read_bits(4), - colorPref=data.read_bits(5) if data.read_bool() else None, - race_pref=data.read_uint8() if data.read_bool() else None, - difficulty=data.read_bits(6), - ai_build=data.read_bits(7), - handicap=data.read_bits(7), - observe=data.read_bits(2), - working_set_slot_id=data.read_uint8() if data.read_bool() else None, - rewards=[data.read_uint32() for i in range(data.read_bits(6))], - toon_handle=data.read_aligned_string(data.read_bits(7)), - licenses=[data.read_uint32() for i in range(data.read_bits(9))], - ) for i in range(data.read_bits(5))], - random_seed=data.read_uint32(), - host_user_id=data.read_bits(4) if data.read_bool() else None, - is_single_player=data.read_bool(), - game_duration=data.read_uint32(), - default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7), - ), - ) - - -class InitDataReader_26490(InitDataReader_24764): - - def __call__(self, data, replay): - data = super(InitDataReader_26490, self).__call__(data, replay) - data['game_description']['max_controls'] -= 1 - return data - - -class AttributesEventsReader_Base(Reader): - header_length = 4 - offset = False - - def __call__(self, data, replay): - # The replay.attribute.events file is comprised of a small header and - # single long list of attributes with the 0x00 00 03 E7 header on each - # element. Each element holds a four byte attribute id code, a one byte - # player id, and a four byte value code. Unlike the other files, this - # file is stored in little endian format. - # - # See: ``objects.Attribute`` for attribute id and value lookup logic - # data = ByteDecoder(data, endian='LITTLE') - attribute_events = list() - data.read_bytes(self.header_length) - for attribute in range(data.read_uint32()): - info = [ - data.read_uint32(), - data.read_uint32(), - data.read_uint8(), - ''.join(reversed(data.read_string(4))), - ] - attribute_events.append(Attribute(*info)) - - return attribute_events - - -class AttributesEventsReader_17326(AttributesEventsReader_Base): - # The header length is increased from 4 to 5 bytes from patch 17326 and on. - header_length = 5 - - -class DetailsReader(Reader): - + data.read_bytes(5 if replay.base_build >= 17326 else 4) + result = [Attribute( + data.read_uint32(), + data.read_uint32(), + data.read_uint8(), + ''.join(reversed(data.read_string(4))), + ) for i in range(data.read_uint32())] + if not data.done(): + raise ValueError("Not all bytes used up!") + return result + + +class DetailsReader(object): def __call__(self, data, replay): details = BitPackedDecoder(data).read_struct() return dict( @@ -787,13 +172,8 @@ def __call__(self, data, replay): ) -class MessageEventsReader_Base(Reader): - TARGET_BITS = 3 - +class MessageEventsReader(object): def __call__(self, data, replay): - # The replay.message.events file is a single long list containing three - # different element types (minimap pings, player messages, and some sort - # of network packets); each differentiated by flags. data = BitPackedDecoder(data) pings = list() messages = list() @@ -801,39 +181,33 @@ def __call__(self, data, replay): frame = 0 while not data.done(): - # All the element types share the same time, pid, flags header. frame += data.read_frames() pid = data.read_bits(5) - t = data.read_bits(3) - flags = data.read_uint8() - - if flags in (0x83, 0x89): - # We need some tests for this, probably not right - x = data.read_uint32() - y = data.read_uint32() - pings.append(PingEvent(frame, pid, flags, x, y)) - - elif flags == 0x80: - info = data.read_bytes(4) - packets.append(PacketEvent(frame, pid, flags, info)) - - elif flags & 0x80 == 0: - lo_mask = 2**self.TARGET_BITS-1 - hi_mask = 0xFF ^ lo_mask - target = flags & lo_mask - extension = (flags & hi_mask) << 3 - length = data.read_uint8() - text = data.read_aligned_string(length + extension) - messages.append(ChatEvent(frame, pid, flags, target, text, (flags, lo_mask, hi_mask, length, extension))) + flag = data.read_bits(4) + if flag == 0: # Client chat message + recipient = data.read_bits(3 if replay.base_build >= 21955 else 2) + text = data.read_aligned_string(data.read_bits(11)) + messages.append(ChatEvent(frame, pid, recipient, text)) - return AttributeDict(pings=pings, messages=messages, packets=packets) + elif flag == 1: # Client ping message + recipient = data.read_bits(3 if replay.base_build >= 21955 else 2) + x = data.read_uint32()-2147483648 + y = data.read_uint32()-2147483648 + pings.append(PingEvent(frame, pid, recipient, x, y)) + elif flag == 2: # Loading progress message + progress = data.read_uint32()-2147483648 + packets.append(PacketEvent(frame, pid, progress)) -class MessageEventsReader_Beta_24247(MessageEventsReader_Base): - TARGET_BITS = 4 + elif flag == 3: # Server ping message + pass + + data.byte_align() + + return AttributeDict(pings=pings, messages=messages, packets=packets) -class GameEventsReader_Base(Reader): +class GameEventsReader_Base(object): def __init__(self): self.EVENT_DISPATCH = { @@ -2056,7 +1430,7 @@ def trigger_mouse_moved_event(self, data): ) -class TrackerEventsReader_Base(Reader): +class TrackerEventsReader(object): def __init__(self): self.EVENT_DISPATCH = { @@ -2077,9 +1451,9 @@ def __call__(self, data, replay): frames = 0 events = list() while not decoder.done(): - decoder._buffer.read(3) # 03 00 09 + decoder._buffer.read(3) # 03 00 09 frames += decoder.read_vint() - decoder._buffer.read(1) # 09 + decoder._buffer.read(1) # 09 etype = decoder.read_vint() event_data = decoder.read_struct() event = self.EVENT_DISPATCH[etype](frames, event_data, replay.build) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index e31792fa..f9eeceaa 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -382,12 +382,12 @@ def load_players(self): if slot_data['control'] == 2: if slot_data['observe'] == 0: - self.entities.append(Participant(slot_id, slot_data, user_id, initData['player_init_data'][user_id], player_id, details['players'][detail_id], self.attributes.get(player_id, dict()))) + self.entities.append(Participant(slot_id, slot_data, user_id, initData['user_initial_data'][user_id], player_id, details['players'][detail_id], self.attributes.get(player_id, dict()))) detail_id += 1 player_id += 1 else: - self.entities.append(Observer(slot_id, slot_data, user_id, initData['player_init_data'][user_id], player_id)) + self.entities.append(Observer(slot_id, slot_data, user_id, initData['user_initial_data'][user_id], player_id)) player_id += 1 elif slot_data['control'] == 3: @@ -540,18 +540,11 @@ def register_datapack(self, datapack, filterfunc=lambda r: True): def register_default_readers(self): """Registers factory default readers.""" self.register_reader('replay.details', readers.DetailsReader(), lambda r: True) - self.register_reader('replay.initData', readers.InitDataReader_Base(), lambda r: 15405 <= r.base_build < 16561) - self.register_reader('replay.initData', readers.InitDataReader_16561(), lambda r: 16561 <= r.base_build < 17326) - self.register_reader('replay.initData', readers.InitDataReader_17326(), lambda r: 17326 <= r.base_build < 19132) - self.register_reader('replay.initData', readers.InitDataReader_19132(), lambda r: 19132 <= r.base_build < 22612) - self.register_reader('replay.initData', readers.InitDataReader_22612(), lambda r: 22612 <= r.base_build < 23925) - self.register_reader('replay.initData', readers.InitDataReader_23925(), lambda r: 23925 <= r.base_build < 24764) - self.register_reader('replay.initData', readers.InitDataReader_24764(), lambda r: 24764 <= r.base_build < 26490) - self.register_reader('replay.initData', readers.InitDataReader_26490(), lambda r: 26490 <= r.base_build) - self.register_reader('replay.message.events', readers.MessageEventsReader_Base(), lambda r: r.build < 24247 or r.versions[1] == 1) - self.register_reader('replay.message.events', readers.MessageEventsReader_Beta_24247(), lambda r: r.build >= 24247 and r.versions[1] == 2) - self.register_reader('replay.attributes.events', readers.AttributesEventsReader_Base(), lambda r: r.build < 17326) - self.register_reader('replay.attributes.events', readers.AttributesEventsReader_17326(), lambda r: r.build >= 17326) + self.register_reader('replay.initData', readers.InitDataReader(), lambda r: True) + self.register_reader('replay.tracker.events', readers.TrackerEventsReader(), lambda r: True) + self.register_reader('replay.message.events', readers.MessageEventsReader(), lambda r: True) + self.register_reader('replay.attributes.events', readers.AttributesEventsReader(), lambda r: True) + self.register_reader('replay.game.events', readers.GameEventsReader_15405(), lambda r: 15405 <= r.base_build < 16561) self.register_reader('replay.game.events', readers.GameEventsReader_16561(), lambda r: 16561 <= r.base_build < 17326) self.register_reader('replay.game.events', readers.GameEventsReader_17326(), lambda r: 17326 <= r.base_build < 18574) @@ -562,7 +555,7 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) - self.register_reader('replay.tracker.events', readers.TrackerEventsReader_Base(), lambda r: True) + def register_default_datapacks(self): """Registers factory default datapacks.""" From ec238c9b219fe603242c20ea063fe523caf6b729 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:01:50 -0400 Subject: [PATCH 134/238] Bump version to 0.6.4. --- CHANGELOG.rst | 7 +++++++ sc2reader/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7f26efeb..00f0f90e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ CHANGELOG ============ +0.6.4 - September 22nd 2013 +--------------------------- + +* Fix bug in code for logging errors. +* Fix siege tank supply count +* Small improvements to message.events parsing. + 0.6.3 - September 15th 2013 --------------------------- diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index d32ab45f..60b5eead 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -__version__ = "0.6.3" +__version__ = "0.6.4" import os import sys diff --git a/setup.py b/setup.py index 69d3cdd2..0f2fc7a7 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setuptools.setup( license="MIT", name="sc2reader", - version='0.6.3', + version='0.6.4', keywords=["starcraft 2", "sc2", "replay", "parser"], description="Utility for parsing Starcraft II replay files", long_description=open("README.rst").read()+"\n\n"+open("CHANGELOG.rst").read(), From b2aac81b005f1d18dfd41f826aebcbfff6e6da09 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 00:23:36 -0500 Subject: [PATCH 135/238] Initial pass at PTR 2.1 support. --- sc2reader/events/tracker.py | 113 +++++++++++++++++++++++++++--------- sc2reader/readers.py | 43 ++++++++++++++ sc2reader/resources.py | 4 +- 3 files changed, 131 insertions(+), 29 deletions(-) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index c689a07e..a1d25123 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -19,12 +19,30 @@ def load_context(self, replay): pass def _str_prefix(self): - return "{0}\t ".format(Length(seconds=int(self.frame/16))) + return "{0}\t ".format(Length(seconds=int(self.frame / 16))) def __str__(self): return self._str_prefix() + self.name +class PlayerSetupEvent(TrackerEvent): + """ Sent during game setup to help us organize players better """ + def __init__(self, frames, data, build): + super(PlayerSetupEvent, self).__init__(frames) + + #: The player id of the player we are setting up + self.pid = data[0] + + #: The type of this player. One of 1=human, 2=cpu, 3=neutral, 4=hostile + self.type = data[1] + + #: The user id of the player we are setting up. None of not human + self.uid = data[2] + + #: The slot id of the player we are setting up. None if not playing + self.sid = data[3] + + class PlayerStatsEvent(TrackerEvent): """ Player Stats events are generated for all players that were in the game @@ -178,10 +196,10 @@ def __init__(self, frames, data, build): self.resources_killed = self.minerals_killed + self.vespene_killed #: The food supply currently used - self.food_used = clamp(self.stats[29])/4096.0 + self.food_used = clamp(self.stats[29]) / 4096.0 #: The food supply currently available - self.food_made = clamp(self.stats[30])/4096.0 + self.food_made = clamp(self.stats[30]) / 4096.0 #: The total mineral value of all active forces self.minerals_used_active_forces = clamp(self.stats[31]) @@ -208,7 +226,7 @@ def __init__(self, frames, data, build): self.ff_vespene_lost_technology = clamp(self.stats[38]) if build >= 26490 else None def __str__(self): - return self._str_prefix()+"{0: >15} - Stats Update".format(self.player) + return self._str_prefix() + "{0: >15} - Stats Update".format(self.player) class UnitBornEvent(TrackerEvent): @@ -256,17 +274,24 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location - self.x = data[5] * 4 + #: The x coordinate of the center of the born unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[5] - #: The y coordinate of the location - self.y = data[6] * 4 + #: The y coordinate of the center of the born unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[6] #: The map location of the unit birth self.location = (self.x, self.y) + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit born {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} - Unit born {1}".format(self.unit_upkeeper, self.unit) class UnitDiedEvent(TrackerEvent): @@ -298,17 +323,39 @@ def __init__(self, frames, data, build): #: The player object of the that killed the unit. Not always available. self.killer = None - #: The x coordinate of the location - self.x = data[3] * 4 + #: The x coordinate of the center of the dying unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[3] - #: The y coordinate of the location - self.y = data[4] * 4 + #: The y coordinate of the center of the dying unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[4] #: The map location the unit was killed at. self.location = (self.x, self.y) + #: The index portion of the killing unit's id. Available for build 27950+ + self.killer_unit_index = None + + #: The recycle portion of the killing unit's id. Available for build 27950+ + self.killer_unit_recycle = None + + #: The unique id of the unit doing the killing. Available for build 27950+ + self.killer_unit_id = None + + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + else: + # Starcraft patch 2.1 introduced killer unit indexes + self.killer_unit_index = data[5] + self.killer_unit_recycle = data[6] + if self.killer_unit_index: + self.killer_unit_id = self.killer_unit_index << 18 | self.killer_unit_recycle + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) + return self._str_prefix() + "{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) class UnitOwnerChangeEvent(TrackerEvent): @@ -342,7 +389,7 @@ def __init__(self, frames, data, build): self.unit_controller = None def __str__(self): - return self._str_prefix()+"{0: >15} took {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} took {1}".format(self.unit_upkeeper, self.unit) class UnitTypeChangeEvent(TrackerEvent): @@ -367,7 +414,7 @@ def __init__(self, frames, data, build): self.unit_type_name = data[2].decode('utf8') def __str__(self): - return self._str_prefix()+"{0: >15} - Unit {0} type changed to {1}".format(self.unit.owner, self.unit, self.unit_type_name) + return self._str_prefix() + "{0: >15} - Unit {0} type changed to {1}".format(self.unit.owner, self.unit, self.unit_type_name) class UpgradeCompleteEvent(TrackerEvent): @@ -389,7 +436,7 @@ def __init__(self, frames, data, build): self.count = data[2] def __str__(self): - return self._str_prefix()+"{0: >15} - {1}upgrade completed".format(self.player, self.upgrade_type_name) + return self._str_prefix() + "{0: >15} - {1}upgrade completed".format(self.player, self.upgrade_type_name) class UnitInitEvent(TrackerEvent): @@ -432,17 +479,24 @@ def __init__(self, frames, data, build): #: The player object that controls this unit. 0 means neutral unit self.unit_controller = None - #: The x coordinate of the location - self.x = data[5] * 4 + #: The x coordinate of the center of the init unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.x = data[5] - #: The y coordinate of the location - self.y = data[6] * 4 + #: The y coordinate of the center of the init unit's footprint. Only 4 point resolution + #: prior to Starcraft Patch 2.1. + self.y = data[6] #: The map location the unit was started at self.location = (self.x, self.y) + if build < 27950: + self.x = self.x * 4 + self.y = self.y * 4 + self.location = (self.x, self.y) + def __str__(self): - return self._str_prefix()+"{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) + return self._str_prefix() + "{0: >15} - Unit initiated {1}".format(self.unit_upkeeper, self.unit) class UnitDoneEvent(TrackerEvent): @@ -470,7 +524,7 @@ def __init__(self, frames, data, build): self.unit = None def __str__(self): - return self._str_prefix()+"{0: >15} - Unit {1} done".format(self.unit.owner, self.unit) + return self._str_prefix() + "{0: >15} - Unit {1} done".format(self.unit.owner, self.unit) class UnitPositionsEvent(TrackerEvent): @@ -488,15 +542,20 @@ def __init__(self, frames, data, build): #: A dict mapping of units that had their position updated to their positions self.units = dict() - #: A list of (unit_index, (x,y)) derived from the first_unit_index and items + #: A list of (unit_index, (x,y)) derived from the first_unit_index and items. Prior to + #: Starcraft Patch 2.1 the coordinates have 4 point resolution. (15,25) recorded as (12,24). + #: Location prior to any rounding marks the center of the unit footprint. self.positions = list() unit_index = self.first_unit_index for i in range(0, len(self.items), 3): unit_index += self.items[i] - x = self.items[i+1]*4 - y = self.items[i+2]*4 + x = self.items[i + 1] + y = self.items[i + 2] + if build < 27950: + x = x * 4 + y = y * 4 self.positions.append((unit_index, (x, y))) def __str__(self): - return self._str_prefix()+"Unit positions update" + return self._str_prefix() + "Unit positions update" diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 7aba7219..2fd4d944 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -19,6 +19,7 @@ def __call__(self, data, replay): user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if replay.base_build >= 27950 and data.read_bool() else None, highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), @@ -74,6 +75,7 @@ def __call__(self, data, replay): default_difficulty=data.read_bits(6), default_ai_build=data.read_bits(7) if replay.base_build >= 23925 else None, cache_handles=[DepotFile(data.read_aligned_bytes(40)) for i in range(data.read_bits(6 if replay.base_build >= 21955 else 4))], + has_extension_mod=data.read_bool() if replay.base_build >= 27950 else None, is_blizzardMap=data.read_bool(), is_premade_ffa=data.read_bool(), is_coop_mode=data.read_bool() if replay.base_build >= 23925 else None, @@ -610,6 +612,7 @@ def camera_update_event(self, data): distance=data.read_uint16() if data.read_bool() else None, pitch=data.read_uint16() if data.read_bool() else None, yaw=data.read_uint16() if data.read_bool() else None, + reason=None, ) def trigger_abort_mission_event(self, data): @@ -1361,6 +1364,7 @@ def hijack_replay_game_event(self, data): name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=None, ) for i in range(data.read_bits(5))], method=data.read_bits(1), ) @@ -1381,6 +1385,7 @@ def game_user_join_event(self, data): name=data.read_aligned_string(data.read_bits(8)), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_log=None, ) @@ -1430,6 +1435,43 @@ def trigger_mouse_moved_event(self, data): ) +class GameEventsReader_27950(GameEventsReader_26490): + + def hijack_replay_game_event(self, data): + return dict( + user_infos=[dict( + game_user_id=data.read_bits(4), + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_uint8()), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + ) for i in range(data.read_bits(5))], + method=data.read_bits(1), + ) + + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ), + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=data.read_uint8() - 128 if data.read_bool() else None, + ) + + def game_user_join_event(self, data): + return dict( + observe=data.read_bits(2), + name=data.read_aligned_string(data.read_bits(8)), + toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, + clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, + clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + ) + + class TrackerEventsReader(object): def __init__(self): @@ -1443,6 +1485,7 @@ def __init__(self): 6: UnitInitEvent, 7: UnitDoneEvent, 8: UnitPositionsEvent, + 9: PlayerSetupEvent, } def __call__(self, data, replay): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index f9eeceaa..3cdda56e 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -553,10 +553,10 @@ def register_default_readers(self): self.register_reader('replay.game.events', readers.GameEventsReader_22612(), lambda r: 22612 <= r.base_build < 23260) self.register_reader('replay.game.events', readers.GameEventsReader_23260(), lambda r: 23260 <= r.base_build < 24247) self.register_reader('replay.game.events', readers.GameEventsReader_24247(), lambda r: 24247 <= r.base_build < 26490) - self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build) + self.register_reader('replay.game.events', readers.GameEventsReader_26490(), lambda r: 26490 <= r.base_build < 27950) + self.register_reader('replay.game.events', readers.GameEventsReader_27950(), lambda r: 27950 <= r.base_build) self.register_reader('replay.game.events', readers.GameEventsReader_HotSBeta(), lambda r: r.versions[1] == 2 and r.build < 24247) - def register_default_datapacks(self): """Registers factory default datapacks.""" self.register_datapack(datapacks['WoL']['16117'], lambda r: r.expansion == 'WoL' and 16117 <= r.build < 17326) From 9ab207de451dfa80d12a61db6fdbc10b7ea16870 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 20:54:39 -0500 Subject: [PATCH 136/238] Fix small bugs in PTR support. --- sc2reader/readers.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index 2fd4d944..c923a542 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -1369,6 +1369,18 @@ def hijack_replay_game_event(self, data): method=data.read_bits(1), ) + def camera_update_event(self, data): + return dict( + target=dict( + x=data.read_uint16(), + y=data.read_uint16(), + ) if data.read_bool() else None, + distance=data.read_uint16() if data.read_bool() else None, + pitch=data.read_uint16() if data.read_bool() else None, + yaw=data.read_uint16() if data.read_bool() else None, + reason=None, + ) + def trigger_target_mode_update_event(self, data): return dict( ability_link=data.read_uint16(), @@ -1399,7 +1411,7 @@ def user_options_event(self, data): sync_checksumming_enabled=data.read_bool(), is_map_to_map_transition=data.read_bool(), starting_rally=data.read_bool(), - debug_pause_enabled=None, + debug_pause_enabled=data.read_bool(), base_build_num=data.read_uint32(), use_ai_beacons=None, ) @@ -1455,7 +1467,7 @@ def camera_update_event(self, data): target=dict( x=data.read_uint16(), y=data.read_uint16(), - ), + ) if data.read_bool() else None, distance=data.read_uint16() if data.read_bool() else None, pitch=data.read_uint16() if data.read_bool() else None, yaw=data.read_uint16() if data.read_bool() else None, From dcb3e8ec046dd314bf55865da91d539b2083ab6a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 12 Dec 2013 21:36:34 -0500 Subject: [PATCH 137/238] The clan logo is a DepotFile location, not a string. --- sc2reader/readers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index c923a542..e4f373b9 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -19,7 +19,7 @@ def __call__(self, data, replay): user_initial_data=[dict( name=data.read_aligned_string(data.read_uint8()), clan_tag=data.read_aligned_string(data.read_uint8()) if replay.base_build >= 24764 and data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if replay.base_build >= 27950 and data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if replay.base_build >= 27950 and data.read_bool() else None, highest_league=data.read_uint8() if replay.base_build >= 24764 and data.read_bool() else None, combined_race_levels=data.read_uint32() if replay.base_build >= 24764 and data.read_bool() else None, random_seed=data.read_uint32(), @@ -1457,7 +1457,7 @@ def hijack_replay_game_event(self, data): name=data.read_aligned_string(data.read_uint8()), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) for i in range(data.read_bits(5))], method=data.read_bits(1), ) @@ -1480,7 +1480,7 @@ def game_user_join_event(self, data): name=data.read_aligned_string(data.read_bits(8)), toon_handle=data.read_aligned_string(data.read_bits(7)) if data.read_bool() else None, clan_tag=data.read_aligned_string(data.read_uint8()) if data.read_bool() else None, - clan_logo=data.read_aligned_string(40) if data.read_bool() else None, + clan_logo=DepotFile(data.read_aligned_bytes(40)) if data.read_bool() else None, ) From af974ebaa8acd53c7988fec9b94edac67b88650f Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:22:10 -0400 Subject: [PATCH 138/238] Flesh out the ping class. --- CHANGELOG.rst | 11 +++++++++++ sc2reader/events/message.py | 21 ++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 00f0f90e..997bce39 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,17 @@ CHANGELOG ============ + +0.6.5 - December ?? 2013 +--------------------------- + +* PingEvents now have new attributes: + * event.to_all - true if ping seen by all + * event.to_allies - true if ping seen by allies + * event.to_observers - true if ping seen by observers + * event.location - tuple of (event.x, event.y) + + 0.6.4 - September 22nd 2013 --------------------------- diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 7608f8db..5bd82c83 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -51,5 +51,24 @@ class PingEvent(MessageEvent): def __init__(self, frame, pid, target, x, y): super(PingEvent, self).__init__(frame, pid) + + #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. self.target = target - self.x, self.y = x, y + + #: Flag marked true of message was to all. + self.to_all = (self.target == 0) + + #: Flag marked true of message was to allies. + self.to_allies = (self.target == 2) + + #: Flag marked true of message was to observers. + self.to_observers = (self.target == 4) + + #: The x coordinate of the target location + self.x = x + + #: The y coordinate of the target location + self.y = y + + #: The (x,y) coordinate of the target location + self.location = (self.x, self.y) From 3579d0605e6239be0e7a8da17ba5b6883e29b5a4 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 22 Sep 2013 15:22:40 -0400 Subject: [PATCH 139/238] Misc. documentation improvements. --- docs/source/events/game.rst | 1 - docs/source/events/message.rst | 3 -- docs/source/events/tracker.rst | 1 - sc2reader/events/game.py | 49 +++++++++++++++++++++++++------- sc2reader/events/message.py | 14 +++++++++ sc2reader/events/tracker.py | 52 +++++++++++++++++----------------- 6 files changed, 78 insertions(+), 42 deletions(-) diff --git a/docs/source/events/game.rst b/docs/source/events/game.rst index ec253718..e3dd87a0 100644 --- a/docs/source/events/game.rst +++ b/docs/source/events/game.rst @@ -11,4 +11,3 @@ computer player. .. automodule:: sc2reader.events.game :members: - :undoc-members: \ No newline at end of file diff --git a/docs/source/events/message.rst b/docs/source/events/message.rst index fbaf0ae9..ffc57226 100644 --- a/docs/source/events/message.rst +++ b/docs/source/events/message.rst @@ -3,8 +3,5 @@ Message Events =================== -Coming soon! - .. automodule:: sc2reader.events.message :members: - :undoc-members: diff --git a/docs/source/events/tracker.rst b/docs/source/events/tracker.rst index 77df8ccf..36671b51 100644 --- a/docs/source/events/tracker.rst +++ b/docs/source/events/tracker.rst @@ -9,4 +9,3 @@ are also periodically recorded to snapshot aspects of the current game state. .. automodule:: sc2reader.events.tracker :members: - :undoc-members: \ No newline at end of file diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 720b23a9..56ad5fdd 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -18,11 +18,12 @@ class GameEvent(Event): def __init__(self, frame, pid): #: The id of the player generating the event. This is 16 for global non-player events. #: Prior to Heart of the Swarm this was the player id. Since HotS it is - #: now the user id (uid), we still call it pid for backwards compatibility. + #: now the user id (uid), we still call it pid for backwards compatibility. You shouldn't + #: ever need to use this; use :attr:`player` instead. self.pid = pid #: A reference to the :class:`~sc2reader.objects.Player` object representing - #: this player in the replay. Not available for global events (:attr:`pid` = 16) + #: this player in the replay. Not available for global events (:attr:`is_local` = False) self.player = None #: The frame of the game that this event was recorded at. 16 frames per game second. @@ -53,6 +54,9 @@ class GameStartEvent(GameEvent): def __init__(self, frame, pid, data): super(GameStartEvent, self).__init__(frame, pid) + #: ??? + self.data = data + class PlayerLeaveEvent(GameEvent): """ @@ -64,6 +68,9 @@ class PlayerLeaveEvent(GameEvent): def __init__(self, frame, pid, data): super(PlayerLeaveEvent, self).__init__(frame, pid) + #: ??? + self.data = data + class UserOptionsEvent(GameEvent): """ @@ -88,7 +95,7 @@ def __init__(self, frame, pid, data): self.sync_checksumming_enabled = data['sync_checksumming_enabled'] #: - is_map_to_map_transition = data['is_map_to_map_transition'] + self.is_map_to_map_transition = data['is_map_to_map_transition'] #: self.use_ai_beacons = data['use_ai_beacons'] @@ -144,11 +151,31 @@ def __init__(self, frame, pid, data): #: Flags on the command??? self.flags = data['flags'] - #: A dictionary of possible ability flags. Flag names are: alternate, - #: queued, preempt, smart_click, smart_rally, subgroup, set_autocast, - #: set_autocast_on, user, data_a, data_b, data_passenger, data_abil_queue_order_id, - #: ai, ai_ignore_on_finish, is_order, script, homogenous_interruption, - #: minimap, repeat, dispatch_to_other_unit, and target_self + #: A dictionary of possible ability flags. Flags are: + #: + #: * alternate + #: * queued + #: * preempt + #: * smart_click + #: * smart_rally + #: * subgroup + #: * set_autocast, + #: * set_autocast_on + #: * user + #: * data_a + #: * data_b + #: * data_passenger + #: * data_abil_queue_order_id, + #: * ai + #: * ai_ignore_on_finish + #: * is_order + #: * script + #: * homogenous_interruption, + #: * minimap + #: * repeat + #: * dispatch_to_other_unit + #: * target_self + #: self.flag = dict( alternate=0x1 & self.flags != 0, queued=0x2 & self.flags != 0, @@ -491,13 +518,13 @@ class CameraEvent(GameEvent): def __init__(self, frame, pid, data): super(CameraEvent, self).__init__(frame, pid) - #: The x coordinate of the center? of the camera + #: The x coordinate of the center of the camera self.x = (data['target']['x'] if data['target'] is not None else 0)/256.0 - #: The y coordinate of the center? of the camera + #: The y coordinate of the center of the camera self.y = (data['target']['y'] if data['target'] is not None else 0)/256.0 - #: The location of the center? of the camera + #: The location of the center of the camera self.location = (self.x, self.y) #: The distance to the camera target ?? diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 5bd82c83..259ae0c8 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -11,8 +11,13 @@ class MessageEvent(Event): name = 'MessageEvent' def __init__(self, frame, pid): + #: The user id (or player id for older replays) of the person that generated the event. self.pid = pid + + #: The frame of the game this event was applied self.frame = frame + + #: The second of the game (game time not real time) this event was applied self.second = frame >> 4 def _str_prefix(self): @@ -29,10 +34,19 @@ class ChatEvent(MessageEvent): def __init__(self, frame, pid, target, text): super(ChatEvent, self).__init__(frame, pid) + #: The numerical target type. 0 = to all; 2 = to allies; 4 = to observers. self.target = target + + #: The text of the message. self.text = text + + #: Flag marked true of message was to all. self.to_all = (self.target == 0) + + #: Flag marked true of message was to allies. self.to_allies = (self.target == 2) + + #: Flag marked true of message was to observers. self.to_observers = (self.target == 4) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index a1d25123..aecc0d8d 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -10,10 +10,15 @@ class TrackerEvent(Event): + """ + Parent class for all tracker events. + """ def __init__(self, frames): #: The frame of the game this event was applied self.frame = frames - self.second = frames >>4 + + #: The second of the game (game time not real time) this event was applied + self.second = frames >> 4 def load_context(self, replay): pass @@ -45,17 +50,15 @@ def __init__(self, frames, data, build): class PlayerStatsEvent(TrackerEvent): """ - Player Stats events are generated for all players that were in the game - even if they've since left every 10 seconds. An additional set of stats - events are generated at the end of the game. + Player Stats events are generated for all players that were in the game even if they've since + left every 10 seconds. An additional set of stats events are generated at the end of the game. - When a player leaves the game, a single PlayerStatsEvent is generated - for that player and no one else. That player continues to generate - PlayerStatsEvents at 10 second intervals until the end of the game. + When a player leaves the game, a single PlayerStatsEvent is generated for that player and no + one else. That player continues to generate PlayerStatsEvents at 10 second intervals until the + end of the game. - In 1v1 games, the above behavior can cause the losing player to have 2 - events generated at the end of the game. One for leaving and one for - the end of the game. + In 1v1 games, the above behavior can cause the losing player to have 2 events generated at the + end of the game. One for leaving and one for the end of the game. """ name = 'PlayerStatsEvent' @@ -231,15 +234,14 @@ def __str__(self): class UnitBornEvent(TrackerEvent): """ - Generated when a unit is created in a finished state in the game. Examples - include the Marine, Zergling, and Zealot (when trained from a gateway). - Units that enter the game unfinished (all buildings, warped in units) generate - a :class:`UnitInitEvent` instead. - - Unfortunately, units that are born do not have events marking their beginnings - like :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to - it are the :class:`~sc2reader.event.game.AbilityEvent` game events where the ability - is a train unit command. + Generated when a unit is created in a finished state in the game. Examples include the Marine, + Zergling, and Zealot (when trained from a gateway). Units that enter the game unfinished (all + buildings, warped in units) generate a :class:`UnitInitEvent` instead. + + Unfortunately, units that are born do not have events marking their beginnings like + :class:`UnitInitEvent` and :class:`UnitDoneEvent` do. The closest thing to it are the + :class:`~sc2reader.event.game.AbilityEvent` game events where the ability is a train unit + command. """ name = 'UnitBornEvent' @@ -441,10 +443,9 @@ def __str__(self): class UnitInitEvent(TrackerEvent): """ - The counter part to :class:`UnitDoneEvent`, generated by the game engine - when a unit is initiated. This applies only to units which are started - in game before they are finished. Primary examples being buildings and - warp-in units. + The counter part to :class:`UnitDoneEvent`, generated by the game engine when a unit is + initiated. This applies only to units which are started in game before they are finished. + Primary examples being buildings and warp-in units. """ name = 'UnitInitEvent' @@ -501,9 +502,8 @@ def __str__(self): class UnitDoneEvent(TrackerEvent): """ - The counter part to the :class:`UnitInitEvent`, generated by the game engine - when an initiated unit is completed. E.g. warp-in finished, building finished, - morph complete. + The counter part to the :class:`UnitInitEvent`, generated by the game engine when an initiated + unit is completed. E.g. warp-in finished, building finished, morph complete. """ name = 'UnitDoneEvent' From d443e7e58eef72840172d9c1a4a65936967f2e1a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 17 Nov 2013 18:33:45 -0500 Subject: [PATCH 140/238] Remove unused player_names. closes #158. --- sc2reader/resources.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 3cdda56e..08945c8e 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -193,7 +193,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_level = None #default values, filled in during file read - self.player_names = list() self.other_people = set() self.speed = "" self.type = "" From 28506b005c8710079d71b9875f248408436c7638 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:03:10 -0500 Subject: [PATCH 141/238] Remove map specific attributes from the listing. People that want map attribute information can run the relevant s2gs files through and get proper mappings for their use case. --- sc2reader/data/attributes.json | 32 +------------------------------- sc2reader/objects.py | 5 ++++- 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/sc2reader/data/attributes.json b/sc2reader/data/attributes.json index cc2149b2..d2d0eab4 100644 --- a/sc2reader/data/attributes.json +++ b/sc2reader/data/attributes.json @@ -1,35 +1,5 @@ { "attributes": { - "0001": [ - "Korhal (Urban)", - { - "0001": "Unclassified game type.", - "0002": "4v4 Team Monobattles", - "0003": "Work with your team to select a strong composition of units", - "0004": "Each player must select a single combat unit at the start of the game." - } - ], - "0002": [ - "Rated", - { - "0001": "Yes", - "0002": "No" - } - ], - "0003": [ - "Balance Teams", - { - "0001": "Yes", - "0002": "No" - } - ], - "0004": [ - "Ship Limit", - { - "0001": "No", - "0002": "Yes" - } - ], "0500": [ "Controller", { @@ -1046,4 +1016,4 @@ ] }, "decisions": "(dp0\nc__builtin__\nfrozenset\np1\n((lp2\nS'Hard'\np3\naVHarder\np4\na(I3004\nS'Hard'\np5\ntp6\natp7\nRp8\ng4\nsg1\n((lp9\n(I2001\nS'1v1'\np10\ntp11\naS'1 v 1'\np12\naV1v1\np13\natp14\nRp15\ng13\nsg1\n((lp16\n(I3104\nS'AB04'\np17\ntp18\naS'Agressive Push'\np19\naVAggressive Push\np20\natp21\nRp22\ng20\nsg1\n((lp23\nS'Agressive Push'\np24\naVAggressive Push\np25\na(I3199\nS'AB04'\np26\ntp27\natp28\nRp29\ng25\nsg1\n((lp30\nV6v6\np31\naS'6 v 6'\np32\na(I2001\nS'6v6'\np33\ntp34\natp35\nRp36\ng31\nsg1\n((lp37\nS'Agressive Push'\np38\na(I3102\nS'AB04'\np39\ntp40\naVAggressive Push\np41\natp42\nRp43\ng41\nsg1\n((lp44\nI2003\naVTeams2v2\np45\naS'Team'\np46\natp47\nRp48\ng45\nsg1\n((lp49\nVLadder\np50\na(I3009\nS'Amm'\np51\ntp52\naS'Automated Match Making'\np53\natp54\nRp55\ng50\nsg1\n((lp56\n(I2001\nS'5v5'\np57\ntp58\naS'5 v 5'\np59\naV5v5\np60\natp61\nRp62\ng60\nsg1\n((lp63\nI3141\naVAI Build (Terran)\np64\naS'AI Build'\np65\natp66\nRp67\ng64\nsg1\n((lp68\n(I2001\nS'3v3'\np69\ntp70\naS'3 v 3'\np71\naV3v3\np72\natp73\nRp74\ng72\nsg1\n((lp75\nI3142\naVAI Build (Terran)\np76\naS'AI Build'\np77\natp78\nRp79\ng76\nsg1\n((lp80\n(I3200\nS'AB04'\np81\ntp82\naS'Agressive Push'\np83\naVAggressive Push\np84\natp85\nRp86\ng84\nsg1\n((lp87\nVAI Build (Protoss)\np88\naI3174\naS'AI Build'\np89\natp90\nRp91\ng88\nsg1\n((lp92\nS'Very Hard'\np93\naVElite\np94\na(I3004\nS'VyHd'\np95\ntp96\natp97\nRp98\ng94\nsg1\n((lp99\nS'Agressive Push'\np100\naVAggressive Push\np101\na(I3167\nS'AB04'\np102\ntp103\natp104\nRp105\ng101\nsg1\n((lp106\nI3204\naVAI Build (Zerg)\np107\naS'AI Build'\np108\natp109\nRp110\ng107\nsg1\n((lp111\nVInsane\np112\naS'Cheater 3 (Insane)'\np113\na(I3004\nS'Insa'\np114\ntp115\natp116\nRp117\ng112\nsg1\n((lp118\n(I3007\nS'Watc'\np119\ntp120\naS'Observer'\np121\naS'Watcher'\np122\natp123\nRp124\ng121\nsg1\n((lp125\nI3205\naVAI Build (Zerg)\np126\naS'AI Build'\np127\natp128\nRp129\ng126\nsg1\n((lp130\nVTeams5v5\np131\naI2007\naS'Team'\np132\natp133\nRp134\ng131\nsg1\n((lp135\n(I2001\nS'FFA'\np136\ntp137\naVFFA\np138\naS'Free For All'\np139\natp140\nRp141\ng138\nsg1\n((lp142\nS'Unknown'\np143\naI2012\naS'Team'\np144\natp145\nRp146\ng144\nsg1\n((lp147\nI3206\naVAI Build (Zerg)\np148\naS'AI Build'\np149\natp150\nRp151\ng148\nsg1\n((lp152\n(I3168\nS'AB04'\np153\ntp154\naS'Agressive Push'\np155\naVAggressive Push\np156\natp157\nRp158\ng156\nsg1\n((lp159\nI3172\naVAI Build (Protoss)\np160\naS'AI Build'\np161\natp162\nRp163\ng160\nsg1\n((lp164\nS'Level 1 (Very Easy)'\np165\na(I3004\nS'VyEy'\np166\ntp167\naVVery Easy\np168\natp169\nRp170\ng168\nsg1\n((lp171\nS'Agressive Push'\np172\naVAggressive Push\np173\na(I3135\nS'AB04'\np174\ntp175\natp176\nRp177\ng173\nsg1\n((lp178\nV2v2\np179\naS'2 v 2'\np180\na(I2001\nS'2v2'\np181\ntp182\natp183\nRp184\ng179\nsg1\n((lp185\nS'Agressive Push'\np186\na(I3166\nS'AB04'\np187\ntp188\naVAggressive Push\np189\natp190\nRp191\ng189\nsg1\n((lp192\nVTeamsFFA\np193\naI2006\naS'Team'\np194\natp195\nRp196\ng193\nsg1\n((lp197\nVAI Build (Terran)\np198\naS'AI Build'\np199\naI3143\natp200\nRp201\ng198\nsg1\n((lp202\nVTeams7v7\np203\naI2011\naS'Team'\np204\natp205\nRp206\ng203\nsg1\n((lp207\nVMedium\np208\naS'Level 3 (Medium)'\np209\na(I3004\nS'Medi'\np210\ntp211\natp212\nRp213\ng208\nsg1\n((lp214\nI3140\naVAI Build (Terran)\np215\naS'AI Build'\np216\natp217\nRp218\ng215\nsg1\n((lp219\nS'Level 2 (Easy)'\np220\na(I3004\nS'Easy'\np221\ntp222\naVEasy\np223\natp224\nRp225\ng223\nsg1\n((lp226\n(I3136\nS'AB04'\np227\ntp228\naS'Agressive Push'\np229\naVAggressive Push\np230\natp231\nRp232\ng230\nsg1\n((lp233\nI2008\naVTeams6v6\np234\naS'Team'\np235\natp236\nRp237\ng234\nsg1\n((lp238\nS'Agressive Push'\np239\naVAggressive Push\np240\na(I3103\nS'AB04'\np241\ntp242\natp243\nRp244\ng240\nsg1\n((lp245\nV4v4\np246\naS'4 v 4'\np247\na(I2001\nS'4v4'\np248\ntp249\natp250\nRp251\ng246\nsg1\n((lp252\nS'Agressive Push'\np253\na(I3134\nS'AB04'\np254\ntp255\naVAggressive Push\np256\natp257\nRp258\ng256\nsg1\n((lp259\nVTeams1v1\np260\naI2002\naS'Team'\np261\natp262\nRp263\ng260\nsg1\n((lp264\nI3139\naVAI Build (Terran)\np265\naS'AI Build'\np266\natp267\nRp268\ng265\nsg1\n((lp269\nVAI Build (Zerg)\np270\naS'AI Build'\np271\naI3207\natp272\nRp273\ng270\nsg1\n((lp274\nI3171\naVAI Build (Protoss)\np275\naS'AI Build'\np276\natp277\nRp278\ng275\nsg1\n((lp279\nI3173\naS'AI Build'\np280\naVAI Build (Protoss)\np281\natp282\nRp283\ng281\nsg1\n((lp284\nVTeams3v3\np285\naI2004\naS'Team'\np286\natp287\nRp288\ng285\nsg1\n((lp289\nVAI Build (Protoss)\np290\naS'AI Build'\np291\naI3175\natp292\nRp293\ng290\nsg1\n((lp294\nVTeams4v4\np295\naI2005\naS'Team'\np296\natp297\nRp298\ng295\nsg1\n((lp299\nI3203\naVAI Build (Zerg)\np300\naS'AI Build'\np301\natp302\nRp303\ng300\nsg1\n((lp304\nS'Agressive Push'\np305\na(I3198\nS'AB04'\np306\ntp307\naVAggressive Push\np308\natp309\nRp310\ng308\ns." -} \ No newline at end of file +} diff --git a/sc2reader/objects.py b/sc2reader/objects.py index a0557145..e5391b66 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -62,6 +62,7 @@ def __repr__(self): return str(self) +@log_utils.loggable class Attribute(object): def __init__(self, header, attr_id, player, value): @@ -70,7 +71,9 @@ def __init__(self, header, attr_id, player, value): self.player = player if self.id not in LOBBY_PROPERTIES: - raise ValueError("Unknown attribute id: "+self.id) + self.logger.info("Unknown attribute id: {0}".format(self.id)) + self.name = "Unknown" + self.value = None else: self.name, lookup = LOBBY_PROPERTIES[self.id] self.value = lookup[value.strip("\x00 ")[::-1]] From 49158d11c6af8ae7bea3c5f3b6737091608ec5f8 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:15:20 -0500 Subject: [PATCH 142/238] Raise an informative error on corrupt tracker file This way people can reliably catch this issue and deal with it as they wish. Conflicts: sc2reader/resources.py --- sc2reader/exceptions.py | 4 ++++ sc2reader/resources.py | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/sc2reader/exceptions.py b/sc2reader/exceptions.py index 15845101..caf13b86 100644 --- a/sc2reader/exceptions.py +++ b/sc2reader/exceptions.py @@ -10,6 +10,10 @@ class SC2ReaderLocalizationError(SC2ReaderError): pass +class CorruptTrackerFileError(SC2ReaderError): + pass + + class MPQError(SC2ReaderError): pass diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 08945c8e..d09c9718 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -16,7 +16,7 @@ from sc2reader import readers from sc2reader import exceptions from sc2reader.data import builds as datapacks -from sc2reader.exceptions import SC2ReaderLocalizationError +from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES @@ -184,7 +184,7 @@ class Replay(Resource): #: SC2 Expansion. One of 'WoL', 'HotS' expasion = str() - def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, **options): + def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.engine, do_tracker_events=True, **options): super(Replay, self).__init__(replay_file, filename, **options) self.datapack = None self.raw_data = dict() @@ -279,13 +279,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_players() # Load tracker events if requested - if load_level >= 3: + if load_level >= 3 and do_tracker_events: self.load_level = 3 for data_file in ['replay.tracker.events']: self._read_data(data_file, self._get_reader(data_file)) self.load_tracker_events() - # Load events if requested if load_level >= 4: self.load_level = 4 @@ -295,6 +294,12 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en # Run this replay through the engine as indicated if engine: + resume_events = [ev for ev in self.game_events if ev.name == 'HijackReplayGameEvent'] + if self.base_build <= 26490 and self.tracker_events and len(resume_events) > 0: + raise CorruptTrackerFileError( + "Cannot run engine on resumed games with tracker events. Run again with the " + + "do_tracker_events=False option to generate context without tracker events.") + engine.run(self) def load_details(self): From e1f3d4e35c2b386a4d546f380c3bac7a39680f41 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 21:18:50 -0500 Subject: [PATCH 143/238] Fix python3 bug in plugin error handling routine. --- sc2reader/engine/engine.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sc2reader/engine/engine.py b/sc2reader/engine/engine.py index b4f4c8bb..f1909534 100644 --- a/sc2reader/engine/engine.py +++ b/sc2reader/engine/engine.py @@ -181,11 +181,11 @@ def run(self, replay): else: new_events.appendleft(new_event) except Exception as e: - if event_handler.im_self.name in ['ContextLoader']: + if event_handler.__self__.name in ['ContextLoader']: # Certain built in plugins should probably still cause total failure raise # Maybe?? else: - new_event = PluginExit(event_handler.im_self, code=1, details=dict(error=e)) + new_event = PluginExit(event_handler.__self__, code=1, details=dict(error=e)) new_events.append(new_event) event_queue.extendleft(new_events) From 6e929cc47b97c0f78c60b5dc6281ee7496d769cd Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Sun, 1 Dec 2013 22:19:08 -0500 Subject: [PATCH 144/238] Remove some old % style string formatting. --- sc2reader/decoders.py | 2 +- sc2reader/events/game.py | 6 +++--- sc2reader/events/message.py | 2 +- sc2reader/objects.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sc2reader/decoders.py b/sc2reader/decoders.py index bb0bbd4c..63324649 100644 --- a/sc2reader/decoders.py +++ b/sc2reader/decoders.py @@ -374,6 +374,6 @@ def read_struct(self, datatype=None): data = self.read_vint() else: - raise TypeError("Unknown Data Structure: '%s'" % datatype) + raise TypeError("Unknown Data Structure: '{0}'".format(datatype)) return data diff --git a/sc2reader/events/game.py b/sc2reader/events/game.py index 56ad5fdd..a4eb5446 100644 --- a/sc2reader/events/game.py +++ b/sc2reader/events/game.py @@ -37,7 +37,7 @@ def __init__(self, frame, pid): def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) + return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): return self._str_prefix() + self.name @@ -575,7 +575,7 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}" % (self.minerals, self.vespene, self.terrazine, self.custom, self.reciever) + return self._str_prefix() + " transfer {0} minerals, {1} gas, {2} terrazine, and {3} custom to {4}".format(self.minerals, self.vespene, self.terrazine, self.custom, self.recipient) class ResourceRequestEvent(GameEvent): @@ -600,7 +600,7 @@ def __init__(self, frame, pid, data): self.custom_resource = self.resources[3] if len(self.resources) >= 4 else None def __str__(self): - return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom" % (self.minerals, self.vespene, self.terrazine, self.custom) + return self._str_prefix() + " requests {0} minerals, {1} gas, {2} terrazine, and {3} custom".format(self.minerals, self.vespene, self.terrazine, self.custom) class ResourceRequestFulfillEvent(GameEvent): diff --git a/sc2reader/events/message.py b/sc2reader/events/message.py index 259ae0c8..aeadc568 100644 --- a/sc2reader/events/message.py +++ b/sc2reader/events/message.py @@ -22,7 +22,7 @@ def __init__(self, frame, pid): def _str_prefix(self): player_name = self.player.name if getattr(self, 'pid', 16) != 16 else "Global" - return "%s\t%-15s " % (Length(seconds=int(self.frame/16)), player_name) + return "{0}\t{1:<15} ".format(Length(seconds=int(self.frame / 16)), player_name) def __str__(self): return self._str_prefix() + self.name diff --git a/sc2reader/objects.py b/sc2reader/objects.py index e5391b66..784ef9e2 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -82,7 +82,7 @@ def __repr__(self): return str(self) def __str__(self): - return "[%s] %s: %s" % (self.player, self.name, self.value) + return "[{0}] {1}: {2}".format(self.player, self.name, self.value) class Entity(object): From f9cbeaa9aee60d727344cb07d815d3dfde95cd45 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 21:22:04 -0500 Subject: [PATCH 145/238] Remove a couple more defunct replay attributes. Conflicts: CHANGELOG.rst --- CHANGELOG.rst | 3 +++ sc2reader/resources.py | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 997bce39..082ccc4a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,9 @@ CHANGELOG 0.6.5 - December ?? 2013 --------------------------- +* Removed the defunct replay.player_names attribute. +* Removed the defunct replay.events_by_type attribute. +* Removed the defunct replay.other_people attribute. * PingEvents now have new attributes: * event.to_all - true if ping seen by all * event.to_allies - true if ping seen by allies diff --git a/sc2reader/resources.py b/sc2reader/resources.py index d09c9718..751f7daa 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -193,7 +193,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.load_level = None #default values, filled in during file read - self.other_people = set() self.speed = "" self.type = "" self.game_type = "" @@ -205,7 +204,6 @@ def __init__(self, replay_file, filename=None, load_level=4, engine=sc2reader.en self.map_hash = "" self.gateway = "" self.events = list() - self.events_by_type = defaultdict(list) self.teams, self.team = list(), dict() self.player = utils.PersonDict() From e3ff027ae1d77c1d685d91c4816f4f81c6f2bd54 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 22:46:19 -0500 Subject: [PATCH 146/238] Use generic UnitType and Ability classes for data. The dynamically created classes don't play well with pickle and were unncessarily complex. The only change here is that you can't use this anymore. unit._type_class.__class__.__name__ Instead you can use the shorter: unit._type_class.name No problem. Conflicts: CHANGELOG.rst --- CHANGELOG.rst | 1 + sc2reader/data/__init__.py | 77 ++++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 082ccc4a..cd71c9ed 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,7 @@ CHANGELOG 0.6.5 - December ?? 2013 --------------------------- +* Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. * Removed the defunct replay.player_names attribute. * Removed the defunct replay.events_by_type attribute. * Removed the defunct replay.other_people attribute. diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index fd345a34..d3ba0d58 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -33,10 +33,7 @@ class Unit(object): - """ - Represents an in-game unit. - """ - + """Represents an in-game unit.""" def __init__(self, unit_id): #: A reference to the player that currently owns this unit. Only available for 2.0.8+ replays. self.owner = None @@ -195,22 +192,64 @@ def __repr__(self): return str(self) +class UnitType(object): + """ Represents an in game unit type """ + def __init__(self, type_id, str_id=None, name=None, title=None, race=None, minerals=0, + vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): + #: The internal integer id representing this unit type + self.id = type_id + + #: The internal string id representing this unit type + self.str_id = str_id + + #: The name of this unit type + self.name = name + + #: The printable title of this unit type; has spaces and possibly punctuation + self.title = title + + #: The race this unit type belongs to + self.race = race + + #: The mineral cost of this unit type + self.minerals = minerals + + #: The vespene cost of this unit type + self.vespene = vespene + + #: The supply cost of this unit type + self.supply = supply + + #: Boolean flagging this unit type as a building + self.is_building = is_building + + #: Boolean flagging this unit type as a worker + self.is_worker = is_worker + + #: Boolean flagging this unit type as an army unit + self.is_army = is_army + + class Ability(object): + """ Represents an in-game ability """ + def __init__(self, id, name=None, title=None, is_build=False, build_time=0, build_unit=None): + #: The internal integer id representing this ability. + self.id = id - #: The internal integer id representing this ability. - id = None + #: The name of this ability + self.name = name - #: The name of this ability - name = "" + #: The printable title of this ability; has spaces and possibly punctuation. + self.title = title - #: Boolean flagging this ability as creating a new unit. - is_build = False + #: Boolean flagging this ability as creating a new unit. + self.is_build = is_build - #: The number of seconds required to build this unit. 0 if not ``is_build``. - build_time = 0 + #: The number of seconds required to build this unit. 0 if not ``is_build``. + self.build_time = build_time - #: A reference to the :class:`Unit` type built by this ability. None if not ``is_build``. - build_unit = None + #: A reference to the :class:`UnitType` type built by this ability. Default to None. + self.build_unit = build_unit @loggable @@ -260,20 +299,20 @@ def change_type(self, unit, new_type, frame): self.logger.error("Unable to change type of {0} to {1} [frame {2}]; unit type not found in build {3}".format(unit, new_type, frame, self.id)) def add_ability(self, ability_id, name, title=None, is_build=False, build_time=None, build_unit=None): - ability = type(str(name), (Ability,), dict( - id=ability_id, + ability = Ability( + ability_id, name=name, title=title or name, is_build=is_build, build_time=build_time, build_unit=build_unit - )) + ) setattr(self, name, ability) self.abilities[ability_id] = ability def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', minerals=0, vespene=0, supply=0, is_building=False, is_worker=False, is_army=False): - unit = type(str(name), (Unit,), dict( - id=type_id, + unit = UnitType( + type_id, str_id=str_id, name=name, title=title or name, From c4eea744fac4b2c4113bd3c36e4280d26e7975e8 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 22:51:20 -0500 Subject: [PATCH 147/238] datapacks is a better word than builds here. --- sc2reader/data/__init__.py | 2 +- sc2reader/resources.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index d3ba0d58..d5e7f97b 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -388,4 +388,4 @@ def load_build(expansion, version): for version in ('base', '23925', '24247', '24764'): hots_builds[version] = load_build('HotS', version) -builds = {'WoL': wol_builds, 'HotS': hots_builds} +datapacks = builds = {'WoL': wol_builds, 'HotS': hots_builds} diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 751f7daa..5e6aceed 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -4,7 +4,6 @@ from collections import defaultdict, namedtuple from datetime import datetime import hashlib -import sys from xml.etree import ElementTree import zlib @@ -15,7 +14,7 @@ from sc2reader import log_utils from sc2reader import readers from sc2reader import exceptions -from sc2reader.data import builds as datapacks +from sc2reader.data import datapacks from sc2reader.exceptions import SC2ReaderLocalizationError, CorruptTrackerFileError from sc2reader.objects import Participant, Observer, Computer, Team, PlayerSummary, Graph, BuildEntry, MapInfo from sc2reader.constants import REGIONS, GAME_SPEED_FACTOR, LOBBY_PROPERTIES From 8a62df6f9ed395bbe5b835e226f739876ccc9e82 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:21:45 -0500 Subject: [PATCH 148/238] Fix typo. --- sc2reader/data/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index d5e7f97b..4c69d516 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -323,7 +323,7 @@ def add_unit_type(self, type_id, str_id, name, title=None, race='Neutral', miner is_building=is_building, is_worker=is_worker, is_army=is_army, - )) + ) setattr(self, name, unit) self.units[type_id] = unit self.units[str_id] = unit From 74606f85dc4c43707f36bbbbc2d2a961bd5141bd Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:22:28 -0500 Subject: [PATCH 149/238] Use a regular dict for raw data results. --- sc2reader/readers.py | 4 ++-- sc2reader/resources.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index e4f373b9..f3fa55c4 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -8,7 +8,7 @@ from sc2reader.events.game import * from sc2reader.events.message import * from sc2reader.events.tracker import * -from sc2reader.utils import AttributeDict, DepotFile +from sc2reader.utils import DepotFile from sc2reader.decoders import BitPackedDecoder, ByteDecoder @@ -206,7 +206,7 @@ def __call__(self, data, replay): data.byte_align() - return AttributeDict(pings=pings, messages=messages, packets=packets) + return dict(pings=pings, messages=messages, packets=packets) class GameEventsReader_Base(object): diff --git a/sc2reader/resources.py b/sc2reader/resources.py index 5e6aceed..3e3b508f 100644 --- a/sc2reader/resources.py +++ b/sc2reader/resources.py @@ -470,9 +470,9 @@ def load_message_events(self): if 'replay.message.events' not in self.raw_data: return - self.messages = self.raw_data['replay.message.events'].messages - self.pings = self.raw_data['replay.message.events'].pings - self.packets = self.raw_data['replay.message.events'].packets + self.messages = self.raw_data['replay.message.events']['messages'] + self.pings = self.raw_data['replay.message.events']['pings'] + self.packets = self.raw_data['replay.message.events']['packets'] self.message_events = self.messages+self.pings+self.packets self.events = sorted(self.events + self.message_events, key=lambda e: e.frame) From 95643873641b0a2457a94165a5024386e36259e4 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Tue, 10 Dec 2013 23:24:12 -0500 Subject: [PATCH 150/238] Misc import and documentation improvements. --- sc2reader/__init__.py | 56 +++++++++++++++++++++++++++++++-- sc2reader/events/__init__.py | 5 ++- sc2reader/factories/__init__.py | 2 +- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/sc2reader/__init__.py b/sc2reader/__init__.py index 60b5eead..040febcb 100644 --- a/sc2reader/__init__.py +++ b/sc2reader/__init__.py @@ -1,4 +1,23 @@ # -*- coding: utf-8 -*- +""" + sc2reader + ~~~~~~~~~~~ + + A library for loading data from Starcraft II game resources. + + SC2Factory methods called on the package will be delegated to the default + SC2Factory. To default to a cached factory set one or more of the following + variables in your environment: + + SC2READER_CACHE_DIR = '/absolute/path/to/existing/cache/directory/' + SC2READER_CACHE_MAX_SIZE = MAXIMUM_CACHE_ENTRIES_TO_HOLD_IN_MEMORY + + You can also set the default factory via setFactory, useFileCache, useDictCache, + or useDoubleCache functions. + + :copyright: (c) 2011 by Graylin Kim. + :license: MIT, see LICENSE for more details. +""" from __future__ import absolute_import, print_function, unicode_literals, division __version__ = "0.6.4" @@ -13,12 +32,25 @@ # setup the library logging log_utils.setup() -# For backwards compatibility +# For backwards compatibility, goes away in 0.7 SC2Reader = factories.SC2Factory def setFactory(factory): - # Expose a nice module level interface + """ + :param factory: The new default factory for the package. + + Links the following sc2reader global methods to the specified factory:: + + * sc2reader.load_replay(s) + * sc2reader.load_map(s) + * sc2reader.load_game_summar(y|ies) + * sc2reader.configure + * sc2reader.reset + * sc2reader.register_plugin + + These methods when called will delegate to the factory for execution. + """ module = sys.modules[__name__] module.load_replays = factory.load_replays module.load_replay = factory.load_replay @@ -35,14 +67,34 @@ def setFactory(factory): def useFileCache(cache_dir, **options): + """ + :param cache_dir: Absolute path to the existing cache directory + + Set the default factory to a new FileCachedSC2Factory with the given cache_dir. + All remote resources are saved to the file system for faster access times. + """ setFactory(factories.FileCachedSC2Factory(cache_dir, **options)) def useDictCache(cache_max_size=0, **options): + """ + :param cache_max_size: The maximum number of cache entries to hold in memory + + Set the default factory to a new DictCachedSC2Factory with the given cache_dir. + A limited number of remote resources are cached in memory for faster access times. + """ setFactory(factories.DictCachedSC2Factory(cache_max_size, **options)) def useDoubleCache(cache_dir, cache_max_size=0, **options): + """ + :param cache_dir: Absolute path to the existing cache directory + :param cache_max_size: The maximum number of cache entries to hold in memory + + Set the default factory to a new DoubleCachedSC2Factory with the given cache_dir. + A limited number of remote resources are cached in memory for faster access times. + All remote resources are saved to the file system for faster access times. + """ setFactory(factories.DoubleCachedSC2Factory(cache_dir, cache_max_size, **options)) diff --git a/sc2reader/events/__init__.py b/sc2reader/events/__init__.py index db2cc164..6ceaa632 100644 --- a/sc2reader/events/__init__.py +++ b/sc2reader/events/__init__.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals, division -import sc2reader.events.base -import sc2reader.events.game -import sc2reader.events.message +# Export all events of all types to the package interface +from sc2reader.events import base, game, message, tracker from sc2reader.events.base import * from sc2reader.events.game import * from sc2reader.events.message import * diff --git a/sc2reader/factories/__init__.py b/sc2reader/factories/__init__.py index 583b67ea..c6c469f6 100644 --- a/sc2reader/factories/__init__.py +++ b/sc2reader/factories/__init__.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, print_function, unicode_literals, division from sc2reader.factories.sc2factory import SC2Factory from sc2reader.factories.sc2factory import FileCachedSC2Factory From 8075ac4f5b186c48f0dd668be9f36f44cd7b4226 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Wed, 11 Dec 2013 21:30:24 -0500 Subject: [PATCH 151/238] Clarify the highest leauge user attribute. --- sc2reader/objects.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sc2reader/objects.py b/sc2reader/objects.py index 784ef9e2..d243d3a1 100644 --- a/sc2reader/objects.py +++ b/sc2reader/objects.py @@ -234,7 +234,8 @@ def __init__(self, uid, init_data): #: The user's combined Battle.net race levels self.combined_race_levels = init_data['combined_race_levels'] - #: The user's highest leauge in the current season + #: The highest 1v1 league achieved by the user in the current season with 1 as Bronze and + #: 7 as Grandmaster. 8 seems to indicate that there is no current season 1v1 ranking. self.highest_league = init_data['highest_league'] #: A flag indicating if this person was the one who recorded the game. From b246755639714f63bd0cc805e7b4986764e28e96 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 00:51:45 -0500 Subject: [PATCH 152/238] Fixes #165, properly parse mouse click events. --- sc2reader/readers.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index f3fa55c4..e8bd0173 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -936,7 +936,7 @@ def trigger_mouse_clicked_event(self, data): position_world=dict( x=data.read_bits(20), y=data.read_bits(20), - z=data.read_uint32()-2147483648, + z=data.read_uint32() - 2147483648, ), ) @@ -1421,15 +1421,15 @@ def trigger_mouse_clicked_event(self, data): button=data.read_uint32(), down=data.read_bool(), position_ui=dict( - x=data.read_uint32(), - y=data.read_uint32(), + x=data.read_bits(11), + y=data.read_bits(11), ), position_world=dict( - x=data.read_uint32()-2147483648, - y=data.read_uint32()-2147483648, - z=data.read_uint32()-2147483648, + x=data.read_bits(20) - 2147483648, + y=data.read_bits(20) - 2147483648, + z=data.read_uint32() - 2147483648, ), - flags=data.read_uint8()-128, + flags=data.read_uint8() - 128, ) def trigger_mouse_moved_event(self, data): @@ -1441,9 +1441,9 @@ def trigger_mouse_moved_event(self, data): position_world=dict( x=data.read_bits(20), y=data.read_bits(20), - z=data.read_uint32()-2147483648, + z=data.read_uint32() - 2147483648, ), - flags=data.read_uint8()-128, + flags=data.read_uint8() - 128, ) From 79ddc8820be3551f62967a770d58e642f736fcbf Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 01:47:23 -0500 Subject: [PATCH 153/238] Bring the changelog for 0.6.5 up to speed. --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cd71c9ed..bdb986d7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,7 @@ CHANGELOG --------------------------- * Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. +* Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) * Removed the defunct replay.player_names attribute. * Removed the defunct replay.events_by_type attribute. * Removed the defunct replay.other_people attribute. From 8179ff682175eb0b1b8b2a3b8bc66a65d3bbe578 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 02:29:38 -0500 Subject: [PATCH 154/238] Fix initdata parsing for base_build 23260 replays. --- sc2reader/readers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index e8bd0173..1c71ed3f 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -105,7 +105,7 @@ def __call__(self, data, replay): is_single_player=data.read_bool(), game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7) if replay.base_build >= 23260 else None, + default_ai_build=data.read_bits(7) if replay.base_build >= 24764 else None, ), ) if not data.done(): From 5eea8457033ef4d55111dee4ddd4265f901aad78 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 02:29:59 -0500 Subject: [PATCH 155/238] Add name to the CreepTracker plugin. --- sc2reader/engine/plugins/creeptracker.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sc2reader/engine/plugins/creeptracker.py b/sc2reader/engine/plugins/creeptracker.py index e6e0a418..8e2d9e50 100644 --- a/sc2reader/engine/plugins/creeptracker.py +++ b/sc2reader/engine/plugins/creeptracker.py @@ -15,6 +15,8 @@ class CreepTracker(object): player.creep_spread by minute This uses the creep_tracker class to calculate the features ''' + name = 'CreepTracker' + def handleInitGame(self, event, replay): try: if len( replay.tracker_events) ==0 : From f5b1975aebf50af78d41b8f192dabc128ad78b2a Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 13:26:51 -0500 Subject: [PATCH 156/238] Fix a small rebase error, my bad. --- sc2reader/engine/plugins/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/engine/plugins/__init__.py b/sc2reader/engine/plugins/__init__.py index 9afff5a5..15e77ff3 100644 --- a/sc2reader/engine/plugins/__init__.py +++ b/sc2reader/engine/plugins/__init__.py @@ -7,4 +7,4 @@ from sc2reader.engine.plugins.supply import SupplyTracker from sc2reader.engine.plugins.creeptracker import CreepTracker from sc2reader.engine.plugins.gameheart import GameHeartNormalizer ->>>>>>> GameHeart Plugin + From 4b45b622638b4a9e4c1b594d4113eeea3a39b953 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Fri, 13 Dec 2013 02:29:38 -0500 Subject: [PATCH 157/238] Fix initdata parsing for base_build 23260 replays. --- sc2reader/readers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sc2reader/readers.py b/sc2reader/readers.py index e835123f..e3434fd7 100644 --- a/sc2reader/readers.py +++ b/sc2reader/readers.py @@ -105,7 +105,7 @@ def __call__(self, data, replay): is_single_player=data.read_bool(), game_duration=data.read_uint32(), default_difficulty=data.read_bits(6), - default_ai_build=data.read_bits(7) if replay.base_build >= 23260 else None, + default_ai_build=data.read_bits(7) if replay.base_build >= 24764 else None, ), ) if not data.done(): From 9949c9bdd54b1bdefdd293d1ea427471f0069bd4 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 19 Dec 2013 00:02:44 -0500 Subject: [PATCH 158/238] Add killer logic to ContextLoader, refine the API. --- sc2reader/data/__init__.py | 16 +++++++++++++++- sc2reader/engine/plugins/context.py | 20 ++++++++++++++------ sc2reader/events/tracker.py | 27 ++++++++++++++++++--------- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index 4c69d516..833aa434 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -53,10 +53,24 @@ def __init__(self, unit_id): #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDiedEvent` is received. self.died_at = None + #: Deprecated, see :attr:`self.killing_player` + self.killed_by = None + #: A reference to the player that killed this unit. Only available for 2.0.8+ replays. #: This value is not set if the killer is unknown or not relevant (morphed into a #: different unit or used to create a building, etc) - self.killed_by = None + self.killing_player = None + + #: A reference to the unit that killed this unit. Only available for 2.1+ replays. + #: This value is not set if the killer is unknown or not relevant (morphed into a + #: different unit or used to create a building, etc). If the killing unit dies before + #: the killed unit dies, a bug may cause the killing unit to be None. This can occur + #: due because of projectile speeds. + self.killing_unit = None + + #: A list of units that this unit has killed. Only available for 2.1+ replays. + #: The unit only gets credit for the kills that it gets the final blow on. + self.killed_units = list() #: The unique in-game id for this unit. The id can sometimes be zero because #: TargetAbilityEvents will create a new unit with id zero when a unit diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index 099569a0..3ed91769 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -141,13 +141,21 @@ def handleUnitDiedEvent(self, event, replay): else: self.logger.error("Unit {0} died at {1} [{2}] before it was born!".format(event.unit_id, Length(seconds=event.second), event.frame)) - if event.killer_pid in replay.player: - event.killer = replay.player[event.killer_pid] + if event.killing_player_id in replay.player: + event.killing_player = event.killer = replay.player[event.killing_player_id] if event.unit: - event.unit.killed_by = event.killer - event.killer.killed_units.append(event.unit) - elif event.killer_pid: - self.logger.error("Unknown killer pid {0} at {1} [{2}]".format(event.killer_pid, Length(seconds=event.second), event.frame)) + event.unit.killing_player = event.unit.killed_by = event.killing_player + event.killing_player.killed_units.append(event.unit) + elif event.killing_player_id: + self.logger.error("Unknown killing player id {0} at {1} [{2}]".format(event.killing_player_id, Length(seconds=event.second), event.frame)) + + if event.killing_unit_id in replay.objects: + event.killing_unit = replay.objects[event.killing_unit_id] + if event.unit: + event.unit.killing_unit = event.killing_unit + event.killing_unit.killed_units.append(event.unit) + elif event.killing_unit_id: + self.logger.error("Unknown killing unit id {0} at {1} [{2}]".format(event.killing_unit_id, Length(seconds=event.second), event.frame)) def handleUnitOwnerChangeEvent(self, event, replay): self.load_tracker_controller(event, replay) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index aecc0d8d..8a97c0ac 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -319,12 +319,18 @@ def __init__(self, frames, data, build): #: The unit object that died self.unit = None - #: The id of the player that killed this unit. None when not available. + #: Deprecated, see :attr:`killing_player_id` self.killer_pid = data[2] - #: The player object of the that killed the unit. Not always available. + #: Deprecated, see :attr:`killing_player` self.killer = None + #: The id of the player that killed this unit. None when not available. + self.killing_player_id = data[2] + + #: The player object of the that killed the unit. Not always available. + self.killing_player = None + #: The x coordinate of the center of the dying unit's footprint. Only 4 point resolution #: prior to Starcraft Patch 2.1. self.x = data[3] @@ -337,13 +343,16 @@ def __init__(self, frames, data, build): self.location = (self.x, self.y) #: The index portion of the killing unit's id. Available for build 27950+ - self.killer_unit_index = None + self.killing_unit_index = None #: The recycle portion of the killing unit's id. Available for build 27950+ - self.killer_unit_recycle = None + self.killing_unit_recycle = None #: The unique id of the unit doing the killing. Available for build 27950+ - self.killer_unit_id = None + self.killing_unit_id = None + + #: A reference to the :class:`Unit` that killed this :class:`Unit` + self.killing_unit = None if build < 27950: self.x = self.x * 4 @@ -351,10 +360,10 @@ def __init__(self, frames, data, build): self.location = (self.x, self.y) else: # Starcraft patch 2.1 introduced killer unit indexes - self.killer_unit_index = data[5] - self.killer_unit_recycle = data[6] - if self.killer_unit_index: - self.killer_unit_id = self.killer_unit_index << 18 | self.killer_unit_recycle + self.killing_unit_index = data[5] + self.killing_unit_recycle = data[6] + if self.killing_unit_index: + self.killing_unit_id = self.killing_unit_index << 18 | self.killing_unit_recycle def __str__(self): return self._str_prefix() + "{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) From 53e56784508932c7aa967bf400cdb366ed9ccce4 Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 19 Dec 2013 00:02:44 -0500 Subject: [PATCH 159/238] Add killer logic to ContextLoader, refine the API. --- sc2reader/data/__init__.py | 16 +++++++++++++++- sc2reader/engine/plugins/context.py | 20 ++++++++++++++------ sc2reader/events/tracker.py | 27 ++++++++++++++++++--------- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/sc2reader/data/__init__.py b/sc2reader/data/__init__.py index f4e095f4..0fe1b712 100755 --- a/sc2reader/data/__init__.py +++ b/sc2reader/data/__init__.py @@ -53,10 +53,24 @@ def __init__(self, unit_id): #: Specifically, it is the frame that the :class:`~sc2reader.events.tracker.UnitDiedEvent` is received. self.died_at = None + #: Deprecated, see :attr:`self.killing_player` + self.killed_by = None + #: A reference to the player that killed this unit. Only available for 2.0.8+ replays. #: This value is not set if the killer is unknown or not relevant (morphed into a #: different unit or used to create a building, etc) - self.killed_by = None + self.killing_player = None + + #: A reference to the unit that killed this unit. Only available for 2.1+ replays. + #: This value is not set if the killer is unknown or not relevant (morphed into a + #: different unit or used to create a building, etc). If the killing unit dies before + #: the killed unit dies, a bug may cause the killing unit to be None. This can occur + #: due because of projectile speeds. + self.killing_unit = None + + #: A list of units that this unit has killed. Only available for 2.1+ replays. + #: The unit only gets credit for the kills that it gets the final blow on. + self.killed_units = list() #: The unique in-game id for this unit. The id can sometimes be zero because #: TargetUnitCommandEvents will create a new unit with id zero when a unit diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index b6b67af9..d9d1241f 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -146,13 +146,21 @@ def handleUnitDiedEvent(self, event, replay): else: self.logger.error("Unit {0} died at {1} [{2}] before it was born!".format(event.unit_id, Length(seconds=event.second), event.frame)) - if event.killer_pid in replay.player: - event.killer = replay.player[event.killer_pid] + if event.killing_player_id in replay.player: + event.killing_player = event.killer = replay.player[event.killing_player_id] if event.unit: - event.unit.killed_by = event.killer - event.killer.killed_units.append(event.unit) - elif event.killer_pid: - self.logger.error("Unknown killer pid {0} at {1} [{2}]".format(event.killer_pid, Length(seconds=event.second), event.frame)) + event.unit.killing_player = event.unit.killed_by = event.killing_player + event.killing_player.killed_units.append(event.unit) + elif event.killing_player_id: + self.logger.error("Unknown killing player id {0} at {1} [{2}]".format(event.killing_player_id, Length(seconds=event.second), event.frame)) + + if event.killing_unit_id in replay.objects: + event.killing_unit = replay.objects[event.killing_unit_id] + if event.unit: + event.unit.killing_unit = event.killing_unit + event.killing_unit.killed_units.append(event.unit) + elif event.killing_unit_id: + self.logger.error("Unknown killing unit id {0} at {1} [{2}]".format(event.killing_unit_id, Length(seconds=event.second), event.frame)) def handleUnitOwnerChangeEvent(self, event, replay): self.load_tracker_controller(event, replay) diff --git a/sc2reader/events/tracker.py b/sc2reader/events/tracker.py index 8eaaf7a1..62e25099 100644 --- a/sc2reader/events/tracker.py +++ b/sc2reader/events/tracker.py @@ -313,12 +313,18 @@ def __init__(self, frames, data, build): #: The unit object that died self.unit = None - #: The id of the player that killed this unit. None when not available. + #: Deprecated, see :attr:`killing_player_id` self.killer_pid = data[2] - #: The player object of the that killed the unit. Not always available. + #: Deprecated, see :attr:`killing_player` self.killer = None + #: The id of the player that killed this unit. None when not available. + self.killing_player_id = data[2] + + #: The player object of the that killed the unit. Not always available. + self.killing_player = None + #: The x coordinate of the center of the dying unit's footprint. Only 4 point resolution #: prior to Starcraft Patch 2.1. self.x = data[3] @@ -331,13 +337,16 @@ def __init__(self, frames, data, build): self.location = (self.x, self.y) #: The index portion of the killing unit's id. Available for build 27950+ - self.killer_unit_index = None + self.killing_unit_index = None #: The recycle portion of the killing unit's id. Available for build 27950+ - self.killer_unit_recycle = None + self.killing_unit_recycle = None #: The unique id of the unit doing the killing. Available for build 27950+ - self.killer_unit_id = None + self.killing_unit_id = None + + #: A reference to the :class:`Unit` that killed this :class:`Unit` + self.killing_unit = None if build < 27950: self.x = self.x * 4 @@ -345,10 +354,10 @@ def __init__(self, frames, data, build): self.location = (self.x, self.y) else: # Starcraft patch 2.1 introduced killer unit indexes - self.killer_unit_index = data[5] - self.killer_unit_recycle = data[6] - if self.killer_unit_index: - self.killer_unit_id = self.killer_unit_index << 18 | self.killer_unit_recycle + self.killing_unit_index = data[5] + self.killing_unit_recycle = data[6] + if self.killing_unit_index: + self.killing_unit_id = self.killing_unit_index << 18 | self.killing_unit_recycle def __str__(self): return self._str_prefix() + "{0: >15} - Unit died {1}.".format(self.unit.owner, self.unit) From 3d34e4c5bdc3d7ec1e5ef8855e9e8be56edbc4cf Mon Sep 17 00:00:00 2001 From: Graylin Kim Date: Thu, 19 Dec 2013 00:19:01 -0500 Subject: [PATCH 160/238] Update the changelog. --- CHANGELOG.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index bdb986d7..96001a59 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,13 @@ CHANGELOG 0.6.5 - December ?? 2013 --------------------------- +* Deprecated unit.killed_by in favor of unit.killing_player +* Added unit.killed_units +* Added unit.killing_unit +* Added UnitDiedEvent.killing_player +* Added UnitDiedEvent.killing_unit +* Deprecated UnitDiedEvent.killer_pid in favor of UnitDiedEvent.killing_player_id +* Deprecated UnitDiedEvent.killer in favor of UnitDiedEvent.killing_player * Use generic UnitType and Ability classes for data. This means no more unit._type_class.__class__.__name__. But hopefully people were not doing that anyway. * Now a CorruptTrackerFileError is raised when the tracker file is corrupted (generally only older resume_from_replay replays) * Removed the defunct replay.player_names attribute. From e5001a3a56aeb3097cdfed85ebf0a74f29b0db81 Mon Sep 17 00:00:00 2001 From: David Joerg Date: Sat, 4 Jan 2014 22:51:33 -0400 Subject: [PATCH 161/238] added a replay thats failing for GGTracker, but surprisingly it turns out not failing for sc2reader. mpyq issue --- .../2.0.11.26825/DaedalusPoint.SC2Replay | Bin 0 -> 65070 bytes test_replays/test_all.py | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 test_replays/2.0.11.26825/DaedalusPoint.SC2Replay diff --git a/test_replays/2.0.11.26825/DaedalusPoint.SC2Replay b/test_replays/2.0.11.26825/DaedalusPoint.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..140a80a9f2112fd8dbd387c79d5f5f2b524a27ff GIT binary patch literal 65070 zcmeFYWpErpwnVFfHnQSpz%wB)9yYnVyBliEs zzWbw+PM*rV5jV3c@}#VSB0c~T000010D*rAG&}&3PTASO@w=mesWVto66|PVZ*Aa# z&%^`?jR=5)goFbE;Q$~wELgaNLMV8+`)nv691sLo)(Qy=`bY5J_TL`(Zx8%`#sjhn zig3^HWe=z?s$;baQy?gjS)Bmx4{LB7_=YKV^ z|EmBE@qc9m0RRL4=LNjbB%!Ns+-dg}F1#O=Zok**9cdGxj|9|q6Y$-gP zUz-$=AU~7s_h>=v4J^QYU^<%)P=O8-U>_LweN)G*kGj@JVyYj(F`M*%@BiQB|MtLt zd*J^+9)KnR03iTCXpDcKFr%}tD~OdOr;O{}dUpK$#f` z2MG&z&^`(YghWh%qn1u7m~ z4{!g46eftwyEDi%p(ibH()m0=uQV2>BGvWu@ZFg`Y4IsU{x75{949k+u=4faPIqtr z*2Sy->VWP;?VxeSozg5h1x?_8Avy7_+6zTBA3kg05Q^~#gz_To{o5Q3J0M07H6#z! zT>lH{CnSVdoO<76EVx9Y#v;+H97s=Nj>Z51d})h+ywTkMFXZ@wTL%W7WNesi@Vsv+ z2cPrHgtp6P2L|})MnaCwLl_GLz=4Csg98x&0Yq>BFc1O+s9;G)&=Q=HTIsTULM^C? zL>1OF=VB7lpitK6w>xzOKtTWfXHS0H%72eOt>kHV&F{rCE# z57H|_XH+AQS`Z0Iv2Eb|#N(&N1DgxjoL*)I7 zxA{Ur0Kgmok%tQaAjSaZ?dFtf#J+2Vrd7nvnbc?laa|3$DdD~bdwt1*-q7?c4R z13;EDsvQN(x|@X3Yvl`{(-N_x%iQ~Qe;OUlj;!Ov0_b}u<05WBWwkrSN< zK2?ShWI?M@09D6;`o-{v1jH(eN)Cfx3`dQEZ|HvaNGZ0*s2anNU1s{=IVfS<4|j`H zy=sU8jp9qsqR?~H=CXmZ`fCWK_z9Q;^-y{0SfwgxHhQ#aA;N^>U_?(;I)%9}2JXSU z*3j0J_j$tnhv`b{R1UW{8}`JBl#_zS?-n>?A|jK5`;3VhrQ#`&COMQ8tdpS*uJcUI8^TEd#W6VPhc#a;LdfC{ z>R)|e9}~eOPvH+%WviK=5Q3jawL-ZnS)krLRPqFX-ANlwjY$o`rXOFW*q%zW^#>^KW}+tEn>Nx#;eQSYGUcByfyU*S){4 zBue4Yap*t3^#xoe`-A*ZaseG61!d=ux}K)I=Q+kZLuk< zE1F`r))1{_H%Yl(Ez<~*geZg-2?B>1&5KI(*@eD&8DI_wn5-}Ny?=p!{VkN*u z8B&$U(vs4=VcsvKpz_lI)l2M1B%QdMg|m7T3$%ZoAqx`PhNRLdAy0DG-+|^fj#kF;*WS4 z%QEXC*!)9TET=RdYH1FQRhD&bo>9=!+@gT>AE>l!z8UZU3M)UeI0Y?IE#k!8h84}> z;VS^3gi4kmno$%W;?Dq}fMx)IsXPzjj6J?^34muTBA6(7T7X+-j>n8!Ubw&nwcwdk z;t%rw_e+5UC9g0y2Y>=IvjPCDc>n4k^6>t%mcn5OLqaL~XINUtAbmmiExM5r%P_ah zu_y^Eny^MoFo?5EKP|!JD;iW;4>qU1q<+nb!FZ1-%`eZOKI7v9B`z&3F1<%5Srjha zTiS>xeZX6%6;c>48B>#6I1uxx&y`ZF$xt&Xn!^`~3Q|{mIfzrpxUbKhrdwnoZe=}L zfJ;O7M#LcaX&pK9t--**(;!q8J(~nBc+HM~cXa*U0};llql;?Z@Hs7^K|>`SRvug@ zgCVwtS=~tsDisq4)m?O0(56VA%g8%Ina8)n;LP=INySl@3qdfG`Ddk(FnvK+_hpFA zinLH7I0#%uf-87k8xB)+H`6rMX@efJt6t=Wu@VUY>Jg zNX=Nw4inxw%GE+0Ui9&6-WJb2vnceo zu%d3EQ2BI>yPqY22qnT)3T0gFbn9@jIqS%dGKsL0Cl;C=1IZXkLnmA&DVD zf)0DXjs=C2`CYJ|`Ufe=*P5(TmX~K!zZ5t{t|Qc<$&$eKeZs=TjlgP2@L^o6tgRCS z1dH&kBKY9Qxzp9VQYx33iiA# z+&@upB$&}A+6WI6nLlJ@BZhvg6gGPEt6AGkJhY`_cwR`xJ{o7G`Id|#MpGEEED6o_ z_8H|RM%k4_fx4IKr&0sFOc5Mubfpln+OV6Hv5GnBNFs=CEX#?NgbN)|(r2jJoRv-D zSnzrOtl(5Wa^ccQE|U?aE_|6F2`$to$R~?%ukwT?1ryFj%J7tXIGm+Sv}@ApebC^~ zrT`H@Cp>?HVrMy^JR&7biW(OXh<#?LiH-=|(K;aM(?@b^%MyJ}Q|JS*lHesQ46mA2 zii8ML)BOv`sZ|sGbGYRQ5Zq$m{RDB4T2O3%pE*fH20|fp5QuG1qL^9&iB@HW)(6AD z9HP9c3RkGn)i`uyEp0(WTSpm&3=Io)bQ~wnCc`}+f{zj_(iIn@M~$$8SOXwn2|EJo zFiHZ^p@PP($@!_$DpmBGGrB@S0zI`kbf7nD-RP!GYW(Dp8j65MO?X8@*v?qD-7$s- zVtp=woaD?~ikd<=G0o|K9F-uHJcdl|DW3_8BlwkUq#~ zY6uwq3Do=i4gF~P(k**Tt#k(z{BTuS> z5p01dDPvf?CPyUGPO0|hJLrbDj$G49X(koap_^K-L1~3cT*myJ$W|X%}ZPAbzQ*rrle>?K%D=3R+U15#M|Ofr#(%MR@!MQisX`66U9rTLNWCl zdMJw=AH`2?UmIO%`nonw!h@F1%1r6UTWGPLX5{UkcKlC^oi%w0LQ&G`GfTY+UE}RX zSMuM?w$z~5^=ApfnDMGU*B`}7C3|XIo-`-RFzmV@D?P6eyMOMzy5qUqU}o%b?t9Sw z*5~YQa@i`+^ZGGt1pAx*Kyr1sD|&j*3hC8Sq0P_Feu#;8VrM?b&nJYcT=vil(JW5b zdXUL0dT@}W+PBV5U5Ql`=^g|}nfeBAJ6#X^T&k{kJW@deN(srz# zVBCKFu5?T&^lbYzW_)zeefmx#W!g|;Ty5-({5y9nWC>x~$CR1Nd@fh(dRd-D{k&~F z>H(?abL*92hRN!ztg@Ko(}d+Kj1xT({GkmlMp|!GX?dl#4_${tRb5I&`4`k=Ip#&Y zAH)%2l6e*;BV)yMp(=wXT)8w@D}z#7>4}-9lm>?J<%Mm4Yq%r9U zhG_^ol#!z>l(3|&s_LT5aHFV;vn+YVq0DvabL#XZ3VA)^X}KDm+pSPA&mxtZILQiS zL(%OiET>OGkpty)iNZ^Jm6AQg9W7=7SQSBXwH!&sI=t%j$ae*_s0nee#@8gGg^@rh zsc>Iki81pf8SVtd2s+v9q1AJ0iEB!<8el4TSbu4}!ZCktqdP2@6ZQq?j4vSCemHjM4h{n}?4& zhXk8;AC6FV;TV+)8h>}XkRUM962gd|#A~q&xaB!$5`L3iXO<@Bh+bEeVI_*V$2-!J z^QWw@iRug&d`Vho$e2p=dSvTG{t;CPd`qrJtDgSJx|8j4Z&wzS)&1$Q>~HgJ(d z*eas8+#0t1s%=KNhZP0(H7%yKeUbNQOCy`%CU*XBo6Apqmomx%PjgD8={FG~tUIks zwhJ>x{^zt44JRoCYi6``Cht_v@_<8Mks>TBg)|V!V}{MgY}h%2qvxr#Z$m>I_u3sU zdBKEIA2kX@pEcqjFrX=qcU^&@<5=p9hTHYpu|>HoBA2@B5xE@4 zPbE|hiJ4oz9SY%a4VLerVJ!lr*WW0%mNz4m!jw+XSr0-W(uqG5-=x1^Cu`9@%Z_-8 zD491d3qs1m`$xEig(;cd#913{NNA1gex;~p{(ByL;ivws#^D=v2_+w_aLZ5ip^ms2 zp*aFn-o4K(+ZaCYho11K-?U%1mm^sRuLO+38fU5rPU4St6^RF^^t|}DGl#CERrzskCoYvdv-dmTP;*ftqhNDVE z5pHX?%>Rg7%Evab)PFJ)@&NLQRpksw4QB14!@1Kjb%+Cu~Ct2`io zK}pw#CE;*x+65E^2^+tre&OA-6FsQN3lQ46?91V9PGH2UN2@K&SH5tYWvW-M?XKH6 zj(&^W_qqIy4QIvn^73PARfxBpcldC~ouYeGw#bd^KKU9m&u6AicVT0aW!`(omaP}onGFKgJs$E zo$g}geJegn$_o1Cj%s7AkKVKLFUccG<7>668v@sa6bPRXvI=&16_P0};Sfl{<*$*K zy$B3%boHp}n-m-eF7(AYp*iAacU*5Z4QY&ClrJ3L!}~=G6>QS5v4TYUD~}s&r&b7_ zF|&yb@aQCi@(LZh!GEQv38m;wNNwG8c*+HexSKnPK4OHc>dpuo!Tuf93=3eWy5X%8 zBLmyFKBke$(YHZ^w`-q#XM@N~XC!w&m-alLZ{?2$)LDLv(;+SD&r7*ElP89Vj6eol ziyimGiTQTG%@ncKY?}M38uTCe&p@u2o!Z0V_~TO5Be1@6+*V${u=Djc9tlJSHqxvH zLgv%P_t{luA#|G(4vS6KuH~HX1l1?ghTUc#PR{(Wf4R!0g`Y65TY93D{Uw{LO#eWp@*i?O>2<@~!OI z`9IY;RJCk;&j`Mwp7DLa??p$j^kJOD!wiM$Z1vXa1V&~hAeyQRdClLu*G3uP%IPML z(pG&O=Lbxtc+-XD>%7uQAZ`v~6D5-`6m+wXqW`Hf`)k50tDf89e((GP$rYX4kuFN= zSMzb2L+1$?4a}Nj2Zd?+d0Y*3;*>eX6C=>(^0xrmdBaxAOq;B?zNj@Cu0joqPo&4q zTQlM4+oij@ZfLE&DSwEGQV*Vz?vZYRQL~lYH9Kl;{tg=Up+Utj!J+PhizY|66YJM> z(OeQn$G8VHn4nATi#ml_0Saot>4S{sd#F}B8oi;N0T9{3LLoGZeUZlR&ST z&VlP@^9Lw;u=4MjcnBm!8v02qgVDq@^d6lj9o2+-uzGK%eu>#q2s!!)f6Iq4{wCv` znPm~12l8+vw?1dB+I)L*h&plB-L}P4b5gP5fjU|Y0G4)VhJE=RK#zm?Rlu7{B+-vP zg{MFC6aq&+^6H4Oq2h(qlFf^i;jp1ygmZIS>&A4$#@6tsW*;)&tkrK5C#1pxcBzW}xr4TG=mu3&4_Osz)*jq-nHEw7 ziQTGn@MH<0po1!A%+FMx9v`K?Ggzf;X`A{szbURhC`njYCmiG{eQi5%WO06r z_}FfjruWG2Nyr^fc)c0ebtk_T(Vy9fD41GV(_HyWN@tuCPy@x=ZH%m@=+^7MbY3ff zlIw@%#`h|tS(?T*sr5*Z9LmcCrD_mddR)hAzawLI4rIZmjyY%M%*k<70!on5iDH27 z6*&($1xltJw8MN7$W^#rUC4QA@27ZHE?`bd>x zm8Z5*fH{WQ#v}}ZhFD)K+BZric4{{=@i=g|a)(E}n!0yPF4Y$tKqf42)+ZZ;NCu{N zOP4abP=k<@I`ki9Wz;wO^lGd-M6>MIQ4pm~#XSU&GuQ*jaXd1Z&#WtW2^*5YHJk zD~)(@o-zCJUfR>$Yha(a7WSmc|j{@S?&8&p%p-4Y7 z2(ra_0^;5jhdKH{y-5<6tYSz>KSjFVp~Wy}6FrvH-=$5nxTlvJrgyooG_<3WOjJY! zbJg0~PK+p)YmmYS+y3H=g?ZiGjCCGK*9H360p!X(N@X}DGId~+naf}0Hw+0I4v}f2 z92$&L=Hs3F0<}5GF^H0gCs1_;JKN#59`|Fvy8xbXFYU*c66BKLb7jc7o?-shKpii8 zkogCU<69yJ763$%O>jQ!53#EPU^|r!6|GrCNK!wuat!o-5H|=qZcPQbWhy*0yFU(~ zB+E} zyLImc;AtwjJ1pSYg8X)Gh?tHUR*FB94QCq`tctzsOF6X5!Q%>|a{2%f^TKHO-44jU zHmrD-?-y!)H+r|diA=iWZ@jTFnepK5R=z0>YXX$h-KPU}3y<0X+vW!Mr?+S{r-mRi z>A>H-uGPm4tR`iey3NRA)2nxAkOH$1s;rU}B-HMX1>7?uhZkbIcg8GNYpF32t%J&YB4>P+SE+?>6nU0Rnq&HI|}44EkcLm?=i_ zB||DZP}p9O5QNvrloh@6&M8}_a=+B->{E#}RV0XhTzK4dOcU?!rEYM=vu^~AeOJ{T zysB6LQ3Sne%ZDkZB2tFWYP)Vu8_)MRT3S|fJtTm|)@XsywBEQpmjiL!uQ!|IhOu(Mr`Y16k?n)g@El&-OD>8>Jk*jr&JXFi{YWE3fdqLe*dGk zKX7EEb0PDMmfrpr&o!m2zwn?zJlA9B&H}ya@-*7&eR@UEGi#-QIDF7E208M=@IAKd z&%`h@b%D3yZT5PQ4 zWF!0^pTC3wfQnD5<669JK4$t1fv4t=s&IcWzu+3IB5KpO?)HjE3FrlgcPbVDqn!Am+PjMe@|z?#bz1i}ptkLF{fW z&yH>9SNi1wC9<;J-AV5#c=5AOLz6d4gHkh}m{^~Qb=1yon`K?Q@G;k?qr`lLo5U>J zaeszTon3P@P@|>uJef(s9qz1E>N%ycynw6-0jcFmDqZonrNNd!Y(4qH(NuXf)ydsO zSI0Nm55{44UVr@oiYav1+#Cu^wgmy>R3f-XoBN2UD5kq3l=0XWw#iantI^qzm=_WP2U)TFhe8x zv36Q0LuRJm9i@waz*AD4v1k@Ne+k0?G+A~>u2z;czuMORw}sZ#3e?adyO8C9*D-V0 z;E(q2Ms0t*z4#|hd;X&2)#RRc#T6g5@an)sj4~`u>N&+?na75?1xHfm^iJPvpOq%# z{Xlugo>li~tK_O7s$q9!FIX4!ut{GR&#hpgWfVtEOvMz4%{Y(2Ppg!{z0q5dSi{eW zQZ0;HrGV_baft_#A1pikYP|VauVTyXTgj!=wJ+5)YI;g;xQ**PgrJucbP{mrg{86~ zj{R7B{RsA>@mM;*-!8Ex>IH&^{0Hjq7uCUlaVAxTERde66?(w0*K%taa`7^H^?|kI|?0@HI|T zFxc?aEfU@+R4Os3Lj5gVwX6dfa7yjNe9bK{!9EK*GmRUd!8lezzMMVf*?MV#cQB_{ z$)A9uvJRNRSSAl<-h}RiT?}sWoMnfl9-1z-+7_(r>6} zm?oI^v2?y-TflrjBs3jkQT_I4-ldAeH4$I;OGO+3$Z`giOX5c8du*KBY6r|_PaKO7 zoGl?X(Rz@PN8sUv%KT&(7YpLis~ng3Q~Z0HujPrvSK!Pt!&u-tQ0)>8Y0ZLA?nL3+ zwKpkJtszdPYzceXA`Vl{9aQq_zV!+v_41DuvcezqQTW&#aIgU=6-2u{$cURCZtYYy zQP4~+W3fXVS$ZxTb_Yziv04=-lhH5gr?x)U#sbL^>!@!ZYkPXq*~L5CnvLoF`(hnF z5EB#)PwxGWbCl&F-M6uO1B#78lCMzE&F@f zcxHw>g8NXtzffouU@0r8Y9~>k(_jxMmkw1f6z4qE!^jh+%3VXDwyx=j4cBEm-9@x7 zXjN5obV`qkOseH!;TjvQt$1NCjqn|npj5j?6`U2yn4;ESiBdao4yI!IIzr9Yohblq z`(D%asZKRU9$&d8GMR{&8XPn<4=MMp<1FVgVypt+S7xUB$W{d!|2P%Yf*ZVhztt+Z zO&E0S5?t3n^TYNv=e6mR%A|Z*K6k;rsd=E81rH*(bWgtwKSC7~OaNeL+%pE%(Qh>Q!CExUkyApdMWqX*{3c~^5-`CqVPyG z#!-JJzz&;tI9s&#n{N2yNvy8EhL3*Tl_NSY_SWw53}`v_y%aR_{y0RqTka?ApCG`; z{$4QwWqy~$$%N?hyN9OaOVNPN_zO4J7J+ep`{IM@x7{2>2GwPhx%Z!cPErW*TJ|a# zmvo}*w?w*`4|qQd@UuhvS5S)wKu+}mSS!@O!Q-0~_*$@0@~o4fVCTW_1!!X7cEP-t zj2wFF1UdGZ&{Y!jLIN*petxdzPB8fNIX?b8i~!eF8B?Pf-vm?o`#imzp;M}pW>v^m zH-5H8Ew)s7ONSicO5i|ZPKAhByFyMFLG7T_b_fg;>j$O?c z&#e#dks*^nz&q5mA@Y11d(!qRhK&#P#?Iqfj8>g&D@Rxz{~-r$T%P$cJiTsJ4`>07 z-Wzhf5*;XLU$~{~Lwuk_Z-K&~2Jepvrb+)J_+1kXsm}UKYVGhs!>HrYU)k5v_;0i{ z)J`y!wdX>P!po76<1uhBC?eso>LpIs73yWg^UmFUfp!k8V@65V!GgH~A_dSR(0?eB zj@n=r2yHvzc01+qem-8`SkYb_T)yZqbncoB_jZeF%Me-B(XDD_Jak=L;V55N=j;p| z{lVT<2^lmICrKV%nITccy1@v*z!g(YG!Ot`UOyf$GTIK z2vsK+Qq@{f z5z$`t5e6Zjb4pX)h9sq*iI5lev35`QR7HI2I3L2E%;C~X;jj*E=xM`I)PZE}q7NohWjzf4z>fo_p`ef+SV_I2W1iU{XUfMknr zSv;{U3g#wDpCueUA4X~9x{9L#0?Ycl?w!T}G#@vu(WJNnPC>}})vfOg$$r%Agp$9L z9b?oh!;3FMXawZz;TG%KXj(HtD=~DmzzVZ3C##72MgkoORLAKxVuv^+iDke`0Q44S>nb^(3B9e{o>_-sW)@Bl+YFt=5rThrY#$_7i+ zoqd@#5I=wc|Aj|oezxJdT0EnOi{1*4(G9b4w`kiTo9mOs>|kkiTG(&yH}zVb=jDuN zAc9?dP4@HwH<-^RKj76>EoleL&Li99!xYU)uIF5}bNy`hb@CS+2!}YuR%rDa5*2L$ zokYJ(6BL(E5!);2ZJC9=w(T`pF7ixA9BV~+Py6dTWR2uS!D2XY9-?&MkU*1JE`n%~ zJ&Kqhfa3tG*x=9zpMi5sfoJh$%LHLjbop_$E+uTTklj5q-^9n zqOhO`#@8# zvbL^ecOEx5NkKUwVB(dP?&YBpnUtObourI^@py41d~6ge{QyqjOc-=0l?f?X(}D^3 z2&98c^G8Gt^dj(uNI>0n?R|G31E~zYKXDiQ)YZMj4)XhwD4B%Vg!a}XgUi#m0}Lyh zu5rG`ox#Zc=8g0*RHFw!-<(81h=KS?hG2KulpjZLNbz|fx-g2Nm*YZcqu5v3Y;y+r z!3}AM48sD`e~%;VG^CF6;xWwiHNuqUlqU{_Xy}?rKyzJtmHd^!m=RiRP692DsSgbB zuncn6$ngt1_!ix+l>_hJ7mk7(jzKIRcM_qYejcvtJO3sS*%H6uGV1e~oje}tkY43q zb2PI2qNRgrD|h)_@H78Buo<~3XftP|Ci3;KXUJSP;>(&x5zGo8$Db)W)qtuuE>hl0 zc0zQP7VC?{OuW%NLxKA@g^~>@yG939G;8dwn^AjBLv2;<_>Tdiy@6?@JtZoY+;Df+0M*^G{ku z9`;UB#_4nZmSOw#=R@U~vtO)i8{ttf zPc(C(8d@(4#dcEE6Y|!j=(bhnj{SulJb9^VQw=)9QJ6i0IHSx)s?toDLok}AS=3`q zFw*qCdUZp@t;&A`hcx@pe42^ZPE0oA@EMXz;zg=qBC{}57 zogHdrOb#88mzAtYFvJsS9$|~_$UQVI)9q*wz76rJU*JF`vScGNl6G!vGC-K<394a~ zXJ0!t&0;t^wsYk;%{}A8L@EP)K*6C_a=b`0qbuSGX0|Be z`E6x{vWxS)7%k)r4*65ui9Ua;fkJ-#jc3DBqqFK3f5iPZ6%-v7=UXK!6o+xE$RSsz zj3wP0Rg})s%$2CRgQ-)|ygO^o?<|pnySKApoLg`8%)>-J+nvq3*R3yGtC!8l7E4Bv z?S5N=OmaI5NkaEEi_o*BHp9XnO4}{zzeEPdarf#!s^_PE_@+lmL3+sLy7dWov;GL% z#wn^2awS?8IC*^1dwp)TCJiuq(UvOa2O$V{!S74Y_ZPAB_JI1)eH9OTN8 zKZz(FA9+Q^-o)(2ICwO6gXCp3JBfZ-Y)L@=v{w)KI$uPgm(I9c&n{@OKp08gt?Q0j zQEJ+>!QlF{$r(mvy2G`-%dZJ@L-V4sElF5#-uFh80nd?)-R9L zvBl_hXY=f=X zJ^`g{LT0T!M>!(_t&=BP5pIzCWVx_sxX;it%mRb=Rf{yStI@>GV<)n5^&v zpacAZHS^nBD>Mu81x2b4jUq9`!)h8hdq(JqKZMv^khDP+Ac`Hp?^7JFsr3yLG!Li& zRvl2b%5pf}O0OP3{nggPP&==Ma93p-%Ug%Wx{IeBd^-v`F61g2z4fWi(xpa*+i!(O zKz{U1_9}BaFtJh_L3V!a{W+ugVEWm$VgbAJ$9=akd0iYdck(M>vk+4U++N9LfXQ{B zcf-xS>T3L;TnRP2`THvn2;YF9C-H$HdQzZDWGlTiI(Z)#EWUK~NlEdYgJt)FZ$Kwj z%}^2C)mw8W$;#kxj$%@!_+VwbS?0XFX^uu{A0D2>ME{4RHsLxQY4zzxP)RSfU2Ra! zCTlnC(&NcDI?kSE+h}gfi}!wQZXXG6EwIcVFaLtmP8T8|(d#?A5*|yfs{qg1%z!>l z8fJ`>-f!u5;$Jqm(Em=fiLI_Kl)3cWX>$ANtq1f>bbJZe2@H`72OAwDIa@u4Xc5)D zz@4Lhzi)dbms!S*v50zZ)nA*M3djJ0cCt1$$}mS04;F8))9k%&_olu$I)B$zqa1(1 z7RB^|$EpcpWG=p4Zw0)2#-0v3A0npnEElPKm-BXNj<5^0m8z-N4612tClp$}$Td&9 zT(bYGZVZK<@{-->?5+Fewi4=UgZfDeH?gxv@xJvVh6?3=I#RC(L?D;wnGXRA*qozW z&#?MA34fLKyJioskVv4E%DfH}0MS-CLlBLYX*F>?F_w$oP!rv1=G49#3q0E`g#7)p zx^54W{qeRWi^558$DkEKC;AW9cO=u@_(W4&PM)`34)(?QM8Uggiq{ndEqb>VaVY4tbTaQl0cf33CvDjgDo*&1Ql9 ze-Uk45KGnpATIp=Uj^I$Y235-b3WeO{>r%+*fY1u5T5tS`UDDr26U}N{Hg+o4>`D# zVzf-_OA93@DKUn&JZ?|2{kZ3Et`+@0T?PPLyU7CHJT{zBN_F>^o&h(oEQpG zj%MZiMafqhFV<)&0a2oPc_^{+OL;W;v1I|351C#Fj9Umi^TMTDeYmoX z4D$y*!8vn_(lUs=Me(w^2V6c`(08F`kSu_8Y;Nw~<(B#UGgdyKk{DL@f45r94Uyzg z!@+`~859|5<(D9p_dtvC=jgy3RuM0i0gm#fjP$a9x^&Obp)pI(7+j)~3=}w+|LCll z&2MuSgwBZ4f{98Nms#i7B_1Hoknk+dm?266;3eTj1r`-bHcaHl*_{1_i z{qYq`Oa8qcrs#o{6_=USe43QPl9d%Ch*SoEI77_9gR+DY`zI7<^%VT442Kj62a5?3 z2O|2*GBHY)7Rvq;i?hzLrk5F%htKs>Uow4J8i@h^VP;f$|2M{IW>!3Ti9Yl6l7ONC zeb%Azi1HYj41;{Jmfk(L`inyg8YQ?lF}Hh>UK8=&jb%~kO?BlQ(?}J?iOJ2MCkbfq z0ePA4-d1poZ7VfyGv!d#I6>tMR*%+2-wVyCU!weC7hbr$KD4uAGa}kI<18*3hhI@AdR*Ts2{}} zKz061Pee5c29qX8`T4PvEQ&bkPCC^zjy3C=?b&SYy6^Jk3M8@qmc2>+iv zLN~vG5cV*F2>H9n;r#^pjI4!ROzBXXpe#$(E`6~nZFvVUlt~Axpy%FA(3&)oz?Kc> zfYbOq*(`wz`K?dSvAN1R6wt&*+~gW7(leflq|2SA3~%#Dcv%Nixb-tCYMWoEjy$Xc z#-x6;u5s_?mUfC#vS_pmExG4+a+}1K8M3rK^#TfR5+tB#oHt|2ebu_Qe662*0(_({ z3(eoYcag+jyF2C)zZFPzkP7mDIu(7NGGyy#S{<` zHKi7tIBjiv=hRFZn2^|J3q!e$)sRS9JZHHHt(=(7fFawc{PJn)7Y49P)#DGYCQ$X zzAf}tqRLSGHc14Ly=!s%G3X9b(%Nl4rq&ouKs?+uJdLoq=aT5aUGV)z}Kg54YvWE2TQ!z7g2yE0d5=Ly~k_ zQc0B7KLuaq4*Lj?KBnhisA`v8nOW*3e>D#&!oLfT4D!89)=+I`WiW9_O!hBrt%~Ie zjC9tDJoak@R%0W+l!x0`J>7Uxdp&>NFDM9`;T-TM$I0RRA^kBYUL@0(=@w!d&YJQS7{6?|0tNuF?_%X^rIdWiV$$FbHxZC-3)%=Ee{4a`v4C zHN>Devg(ExY`ZfGMX6sA?MY40NMxY+LR4~%)YONz4jyx;F8_BpsB9E-Fhsi{gmaY$ zzQ@%MLXZX<7p^*HM{@Vd_6v`6cgQ0)kLA(P(s^rG;liqu!=G=n2?M|7$SxvaXv>L> z(u0EG2a&!DjrzomXAbRhd4Zs{j!#94R9_GLxI}iu%A&Jim#`4}KiIzxyfCTjJ$bKM(1Yr6tZpRw{d@>b3P1LT7w;&bBNP}_jU7x}w z|DtIdb^X@O^CB45W*Agn5|)5N%DwINO75QB@La=Zee3f1r@E1%G(g)R+*RQ|Y>_ic_ZPH2c28Nei0}J7^7pfc$TQzm88rzfj8sP$8cm2wa5jySsU>-+ zJ~!Mz(qI6yon^P~)#a3QM_?L-CDM{go3Ucr7f(4QFi0y!{w!RW%T$2 zXjBUpO!A0AS6pm%j*=uEE(;bW)ebJ^zBDHrvrG=0=MGSzs3b|+x`{~je2%eeW1gC+ zDC&T*$KYxRNN~`SQW___ zFe@CE`^wF>idN;hHo~LmF79Lz>2AS4{to~-K*qmQA{+=&F%Am5nRQ}A zLLh*yMG{;uC_KeR zfPFId9z=MRZ#Y>1{W-qR4|PErkSbUa{-tXDA@h9G%#u0V9&QwOwwFbZ^5{J$xTirq z*53})P^BR5cI?bq6rt4{mO&4Ub#At>_=m#xp)|_Lde45S6l{l?aIDtHFX&pDw9=3Kxt+RuC{_% z+pg7IMPmP`hK=q=j!?oipX#K_oW!UA;^1?64L z-qMt0aY&d--CTf%+F6c=lW`q`27{Zez=J@ESVwg=o`zqE4X!HY@dIW9gsXGZmc!!4 zj<{9JBIXG63!a3cpqyh>@oMzl^kEpL7-1SiAi>5juk?1L?+==dx3-KG;wsML3#y(y zvfYIn)%N_oO)}STk|gV5jlIrq^xp1pYcJUBSyJ}Wi4%DEv$&=zfU2S@N+^n`qKcWM zl4dEr_eYZO+qZAH`5NJmEQ1YO^liMDL-vhWV}7(?vDxtZFbQy@gYt z)k@8JtZzs4=lWBn@$JDQF$MOCc+kB2PTF0rRkN+l;ai(jaaqJ7XYfJ7qV6q`1xszs%4{y)krAjJVNFZUTLA$__U}IaS|03@)MK<3Z(6s8*jPFQN=6{ zMTpu(n9&_sN(9I+JM~(Jsw)NTqhR#V3lS!?NJQ%_C6ijn4W&w4BNz)a*d$_v0_Itp zR+|e{ZHV_|t+P;K&D-4NxC9zCHP|fTOwpzy0vs09WhAh3i*=4(K&MZ7j93ETw_|4t zQ8x?2$a^yKARqy4V6E9CRDoJ&4nVbX>jg%GX@JHynAp!s7F`-_7#BuObKIsFvu}e2 zR^&r31SC{muL$-7VB?1TaE4*JliB_C(A6N=CegLA(PiIX|*;F zU1k2V2h3NR+cAcX!=omuFRz*#3q?zRsCSUQe#{w_qrtreC;eP836M7b)~~q~WwX0d z4CcK>SS}$IW@giX`4VC%xg>IMwuR}WKo=(fYwzHls3~gga7mhlXY6>^s6a2jX6}gB zySQanzJ>gN!9^h|?u=s^9D`z)fuWYU-c{d7*nOT7oE1lsZcHQHU-&gk!ipr^Y6Gc$ zXp%b=r$Cg=4FGX%d)AM7#N5$&1LQzN@M-V{Awp0hZk5GGni>Kjq(UgD79tuNN(QK^ zT9GMIBx#a@6vl>tN-%A!m(~K~3vBae60Yol1xSfS^)MN#lVC~^8xF>S76L>7p@^3R zj2lt39R9aO7b3>lR{TYsrP*2Np{Oq`S&bnOMSkenTRfb=3K9nQL5kIZctpv#YS2jq zL0=5wKc(iciV_6I9Ur=s&!iz)1^H1A*Pw}V*#OzJTWo}M{Cu<1S%?M(?p#V4HRKRY@v^*f*Zsc113Zfg%IJvHePZYW-F#qO!d+#zomP& z8A%HXfZ-(I#XOOzV$Ona9bRD>fGrafFi8RH2hoQsBB7}sx3C1sA_#&Aw8JNPh)ty5 zwl<87qewx9u`I#0jz;5HhM_u>cEO;6vT&nl+F07yl1)5&jFV+$$4~()WfnkoBC8?Q zLo6q8P!lbYO$vZeTyP`5MhKjfV*qnl3~hiLZp2QC9pn!94N4p?k~t>p+otP=uQ zXzR!Xq3ci(BIU8#TNJMa+td?;uaGnruz{_FlZRrSG`9UX1_U*5*t2A2#ef0|yd+JJ zMT%tIDar>!tV{z54hJN9MH0BEP%GtSfKDlqZkj@{wnD*EfT5v76Br2-s=(ChqIMmE zf^1=)dINIhsEn^x+F?t5u?+S;{n~9R-N{)XAcD~;FEH%gkY4tj8kF?2rjLbHHB+2J z0E=S_GLcL+jUNrpclF@)To;Et2WP0#^!oQL{=jQESxucj6{R|OC4-#7G&fhA`(7Fi zT+PRWdHV^#`0P=_Du{?#DwwEAV1kyQh$f&|+-C!KLmk^)19);cTaDi_ju6DLNgPgL z1rr5SloXQ@AW{TXF-s6qLA{I#38H0U2qa<}Ge$BhazNm)AxIc|W|Lw_P-Wmaz%&8x zs6bH1K@5k6J$zV(QYWBdsGAuo2Jnm7~Rzx#}1D-Z=JZgFs6txh9IDr5TPOz36LlZmnh>g0!L`M!AxLdLv$|V#N z6-^~g5N_7(vle=QL4fU-Mu&VWtpu78MF9=wMJ|RDa)@2rK+Kd+Sa(|I9PO2Nz`=OH4jag6jYSR#sg*yKu-n{MKlDGDZ-Sr3?r_E zG*?uMjA(Y)A9U?u#2gzrK^PtyY}&$GYTobk%I4INkkuOkWBR1Im{SBJ1Phrq8_3*j zHw%0+5SfEVL()c`kglT%SF@n||AK1V%vlzsE5p46JEWpZ0!@oRC94)uX_R|OhBljD zVbR$}&={})2V<-zECH7z@u#ccPoSxJdPk>N-|lkT+itS4Ad_RnhnD1r+rLu~0p(W@ z^N4$o65|HK&zO}E6|DqyxnbIM4UWqprtQQwS|LM{fsJ1>8+M&zD;Nk^TGe1cxg=qP zOYl|%ZfUDdaflK_ASL`}D2%8C9HB)eVnHIqFl-rqX{RKSS692-S+XCAqdQ;4c3EkV z&=e%nEy>OzQpuF0+eoNwfY`>`0}*O5IGZaMLn3BH7E1xWfL@3HlmT%B#>6HtF8xZ$ z2~@7pIi)(H#N(KF&ECZAlz``PfCA(q69VcSW_x}uQ4~a!R0g9197SR3^BE$NE%Tp2 zkJ7Ob$&-K}KyG%!k46yB9^QLgyKxdQ2lPfDbZPsV*MHw*sRDsC(90+cB1%jVXHViw zzwU?<7S)IrKGXDL@)QYpEeIslrX@cviGeuS(IC_{=QIaJ+`wU`2KLV@^i0xREqV9V zo7Ep~LQ0pwuwT`nMNKK|?HT!&5*<&R%{_%nTiz1a`oB-}HPISa?WM!Z>u{1ieEM2u zNvrjFgngm5m9VpaQ9iyuax}{Lu^$%~W){>5B@&u?CI8ap^cx6py`G2 z%#$WbrJi=7BEugVBe9kb8p+C1xtcj+!}EW7VK?@)-RkgEJlOdsWr{q=Xd(24PmEND zD2G)P5eeoYddVQP6WNX!(W$~k5RQ8>;xC8XcC%>g9?vl2&?i?R{@z^ye${;2ti*OM zA8i|}5%RKO=<5Fc?k76v&_QQAmE)Laq<{AELp6|!h75+tCTy#6>!MB;#_Q;=fDY2I?B4gqg?0d)G*?2mP=P|#Pdz|L zA_@>N&M=~yVuE9)B`eIPLPg|~S6JVrUZG&YCSQ}X9G&<=RR+~{#oPET7VM|#B1&AvGNHTr34#;xXrUKUu!hLvGtx2o~yHSdH0M?5hF_7t2K; zBI4+H|HWtV>95Q>_v2DZ{Q)+SwPzKd{L&HEvFr~38*Ot6}1%#?VT+)2`XV?b;O4+UR?@)y`@1Y7#!}<02az~X| zm$tTm4u~-G!yGBvGC^vrjtGNPH$PLm{$k`vrjtm??Ld|Mr{DXoq#v~70~AW;7p&tZ zltcmDE;4hO5djeq4Yu1Gd$rk&CbHP8u&R*iZYzl=B|Ng^k zL<~ZK8Ic16u-U|q6B+|ekCl(6%jNuDCh<>E;eCt!3;8^i)1JUaHXJ1kU=Sz|1Yj*d zO)x(9v4+CYIj{aHj@uKj#G@4%5HWye3_x@c3#HDCW?E>+zmdDJdfmzPVfrwuQhxCC60X~l=kw)m5gsSk}i3WD@Je~7cpwTcP7EsbeHiUh8 z0aI3gMqe92!Kf*~kzwWzCPgV*Kx}2t(?q*nynheb%|fKrFkCYfK3cbq&+epx!wKjt zxaop!TE;;|6Xpble0{^>57)kG#;ZE)L$$bFJpZZoMpe+o~|-y-%44E`|A|59t4|Ft7k$U<;30R(bd-vYoml9DSl^>!t34p!FN%!@y@k7qA z|D;-XnGFMQ+(d>1fT0PENppOyosX`|C*jfYBMRWp)zL<uuKOxEMw7t+#^~4wFFC!1yInrWDshMO26o?+xdcxJMYmGVHwh zEzi)#r+%xW5Wxot@>X? zZRsZfZ}JFH{lmhJn`l?Ep=+8ggQvXgZ?ogYr5XdN!Lk~xN@~vDrgG9`%MvP*$TT_p z#dTEhvaUHj&V+f@C1TDp=W^a0^85a0p!x4(e4s7r&txN4OI{@BD*m%uap}-X%8*k+ zy11*h6+?R|tXWj=X$>fsJ)LDsaHk5LO4Y{NuCC|Z(@S;)Bpfc`)kBGzWroZ!EHW2M zs@qJdu9LPCsvCnHjaW#PaXqDKXNk@!EFqadClSSxOx{)xqr%r$`ALxS?BS8?~!_!%S_A6~DI5ckV4LF$3FKDL5*TC0yLIo2yY)FJV)hqJTK) z&5%gSt*L^kKsQH55b4Tie+!&q2`Gj~X-@7eOKfDJTOE{&_9RxAZ*5i8cNYcK3-Zvk z(3_qoWMWy&Pp5bTju-PgPr zQ*`!ivDe8q9$_uJoujwMN~^y(%ut#Ti+8P;UjaC63@u2~!g}VgDJ;V#A>dlyj29hC zO_&8b1@WsiS__JEJG9Vqu~=;#i(?lIHETlcNUqziI>%K8W)p3st-9=8wPN^L0Z5H* z-IQOI_GJ$>=F*S0-Wh_L3;`Md06?hg{twyw;$%9EHqpCD``#X!WWS62uU!*#e)(qo=+hg(Y~w@)%K^I=2;2&=8s>8u~>(osczoIzdO=OR*I zT*%r;wkj4)m`Qm%?X0QwJHjuoS^?bMNK_2>j3TCvjzlJoig6+U|H_l&&XLoh5 zbm2t?9z!b~7`YLyM-_vu2=n6BE%f1E$Y* z;eLcHU_vB)UhyqPx5@LiR9D2nYWY|W0M?j9k)dW|3C=bQmT3wa-tnX9UzVLJ0Ok$? zWgu}5)U42T{nn@upXAW|P+BR>LIB^TL82Mr?GZ8^mxJuLlpz}XITBe-6f;7_XNR+u ziB;mON{{dKu2DKC>m!k96$f@%f>+Xzt~11EX3yByL%-=Hct4BxB_;S7(}2BtObG-5 z6EG4Kbe{>}9uiFTS-DSP!x2+W>1pX~e`gbC4_(HTo7+JOzz7Xv1FS;uP|z?oEl1Sx zu#B~5^)+ekuy07D(@epgP()-`FPO%TK8^S7)}+OVQeUvYXs}W^&$M4n zS0Ge0PGK@cS(e-O(7yYsqS==@1!&gD*WqMl)L5*kq)3rg>W&Hgx{U6qoq%UyW7&-a z+He~{-2^;N*hr1<;ZzTu`K%ADD2V^R`F?-cAtHrtTkD#0Sszvm`8!f6Yj?J>*kxU- zRga#}coxah8z!VvT$1$+5Bbnq{Cj%_Gf(XK5-+EF;P3PW#PlP*-D%HSQMcjfwPFNH zk^rF=@>u+wMIlRGx7iWZq{Ho8yA4mXWOh&Hqhi<={n)O z@EW&+;e5yXlVLo|-D;d50q!vVVd7{;5Ewi-za}$@2MN~sdSy94xg5GI5nq$Fy;n>) zs3|fsAkW!tW126gsGP@ir0|8U-n_8LlU)y;@;;w7Ve4X_-mYnoI(a80awX9V_&ujy zHyNS@@{Y7YWfZkR^eh?RFu>i~PdwqQHd#ho5=A_02^=dlIz3i~dEGS_^Nl-<_MbXVxS`pzM5uU@#7VpNZ(K=T6Sw#K z4*S{D*YxVrX~dR9tf@_=$Jo|0tTwZFxf^YPeO`)VGCFbY!`;R@PUplf=t3tBfx^tb{hx zV=iRh2Q7;w+S*5B-D7sFg4`}xJ{q=E$i;NW0R=v4TCu+6J38BguDOR?_SlRYMKPy# zx=v2rmXA0_JB-T<35t4_7ZDWkOO+$P1Cy<@X2;bnnIdDYDIMKI1Q+SJ@P1VUZags9 z>8|bemJw?A&Z^dU?^M%$we5|9%X7T;L}9lhiq8!(W_n+WRb)^N`}S_qmn!PT)#r8B zi3UM>Y;yN+*}A~r3-Qx!xni^1up~O=n-SZ!*xIgKls0d(b`4#kc#5pny|rql?Rw5u_#Pi?i*$&u`mw>I%j8%h?zEE4nvyIfl6 zy>{%fm<#0j@Q^Nfq>yVP`A8SQv%^UsIS)gRmoCyhR}Ju=b28&zg9T#VhcAetjB2cU zZhoH^(9r$b$}DN6Zg#DZxkOVc_v7eLN~ukSM{yK_))qY!2fvX9+04sfqMUh5#qqUg zfw8Ylj4}Yo?2b>($ePJ`e`xRWd5#4mg9d3^Xlc6EtAm47xR&!i%{|s{y}_C;-mdR@ z@Z_|Xb>pO8?LwXDOKM3Y)-i{v-HvNQ<63Pn3~cLLhPjEuS(vj?LuQY#eyqC0EL^`k zfBhY&Pp;mmqvn`St)V{LUoQ~cR6fbX<{52?fL}&$Zu!AaK3&qdkK;U%Z&2!_uI+yv z3rso+ChgKd1pO!+ZvP*c1m+R}rQ6ha_V>zlFM>@Fc%1jzeYTV5b$j&fGhg*iSZOPU zoH$QhUJzbJ&syPXo*DI@nL{%e1GfwgIhUbNx6ZF_%It;1xKmgRk%5b$YC*-z*IzVh z%C@*8$v?>JuH=1<+(dz2RrnhCqwUPRdg^z45B)WHin(d?jc7BJt*^q znFlfBTix+=BfcpeGYBMv@j(qqHgECZ$iW!JDQD3+0mqgk!2c6dad9cS;&utMrCKOg zuHfPk5M>IlwY;D^1tf0EbHS0)N+1k?E0r!W6w0ocS->DD5G5rg1qu{}B0xegh%$mu zka?%k8Ksy}KJ+#=q{4O+Xi8XQpsAXQ8LEm{sb~r!B1$HqX^JYSSeOEqmWnAthKh=! zi7F~eM3|ajVv2%9fS`t$2qu`KrXp%2kRW1)7z$Pph?s$iqN!q~ps9*x8cJxSrXZ@O zfTPIE;F|~Ep?i+0}#}@s=@iajzfE;J3_c$!{GX#Kf^RiL_ z8B@3Npnr*qX zc}3OCz^-OpC+?9DLEf*pG!g5(KU5)`qR+7&{9GdsOil+-9se)2-|+rOy~Dhmh5p|# zSoBQ^V9ORo0hTTASc&USLLf2X2Gd~v6ieCRu}cS<&Kr22v)hX6qfnIcDrwpc^TRNY z46G0p0Wj;}``^Th7vQYfM{H-h0wXdg{~--S1t5fC1nu@e?8{(-p9s6f`~Zz z9FIShud@7IncSXJwb^W?a?EgAdib};(Qn1sI;$vv*lWt`9OO~4GEb}b9a-d%jc?7e z4#E=G&O}E#o>3v6I3QjQ>1RFbiIZp$fS}0`(7?uv(q_a;Fcsun7y-JHG5}L)B?&E+ z|9TZ`2qWY;a>^SLa+rqkARd@XFkBwQ-#tk+yv3#5-ax03+m?*zC@el})h-GZk`3+U z7ozR%z|W$y*(R7E45CqkDlh{$*{G;`TF?Pef6fMvJ;NdZf&HHz1e77}6rBhe+ovin7>zFJ?v}xoN>W>5x)gmxf~_R zTJ^_Gw1fbqC*YuUg}!2E!80#$f^#5U=3Mgq^?yjNu+BJF28&;nF-k$t{pS!Dc1d?5 z+P%%HdlLpL?~-Co}hE~ z=@JNV4nsj;fP)fSSvpWYcLH;9W~{92puCektrD=Ny6_`lfXabaoWSWX5X$Sxyj~lS5!Og?~GFK2N&PP4E598M${43$e~} z|4KIfQOx4qdXHD3{?ogJk#^2*Cxhl!dalH@c9qd9y>LsaxWo~OG8z5K3F8J+7hJ2v z&ZmxEMcbxLWIIm75fp~qF8_@PAW0V-Gbg8b{Uxh5QHEh(K?~nR6}J%E zZMW!h{|r?IVHcocg`~iETLPa9&EA-3D#xO0XjV2rQ4rBWKZcFxndrlZkm` z{788(T*hpC7A{)TE58oC7K<97ye@HQ5z<2~g&$En4nwFA%i3Yd3yY*5@{=Zwf9Kxdu@^y0*;tr>t;!@3`rb6XDq4 z=Ugf~IzHq_VXk5)Vb6~;)-VW3lQ7i^wHF$xS_1hIiY60=3RBU+u%MDior)(w#xX|WpD_a5@6W@+$0>FYjrU&Ac~uiWLk?e=!A)COl& zXm(%Je1(4w1tAI2E-Mgxw4Z+we3w*_fV_ply@8M@?tU6w^X8LgjMbLfmX9g)S;sE@ z)sII!a~=GwZD6KmX2L9DI!24EB;4`w{eNo}sOT|R#KP3zqWsct$t`tQ{$Q6~p`30T zw(B;%{)_9)ZD_o(aH80#v{#7uF9it+@Ys0&4aKrNjS49f!vE@=-kmOjXi@GF2e+VO z`EHv3NAJ*m3{q6V6GTZvB&ok38cqDJPgF`>O%iPRRO3q5(u>V5J=cK{#tjO#jEQHb zhrpe7m?i*8cp1L&-gkDkfk!G68SpnW$WvlhKO`D?7odToOwAq_q0r@*D6oex!C31q=(_-L8rYo&n zMak@(-kh;At%Aoc*vXiH-|FyZW!`T-Wq5}6E=6*7XFiv*F*fpodWuisKy510kR)6u zIg8^oMiWo4IMrU7&MU>*e%rWBQ4IK#imX&xZKw_DU#})_)~!1UQzGtjg}-oTAlbc} zGdaW?GT8VPLJo>*pZB!xP_kd8K~|7Y1-6ywgs{knH~;JE80z5LSVNf6-Hx6gMv!e> z&8?jIR}i;@F*=PLR}HFr1__c;J~_?*tlEq5Qk^GMFK*Z%mj{nO(a+rM_zhGnv+CI2NjfGjhX4$4xT-C^7jzKR9~RcyM-Iy^?LS_!Bc1jGK`s$_`E`h;9q$HR%lzW^m?q zDatQtu{wO8c>G(fmq8FuaHudR-at$eDG4!zAh~D9s0ZLs{!IbsK1u=sowyY|D?sb? zs^-Q*^7wz3@mKb1po2hAfXst!$DHXp1*M`JM-8TUBFn^+XKSJL%z>aVlau&z<^c?I zvHgSUb_J10YWI=V>??K#x-qE6T#s`zDC0K#FD4w#w&zdRsmxO@oQVA)WziuQ%IvuW z6Jc)Np;uUmom9_6+;X@Ww3~?9AUt zi~D>%IlH;>8&_*h=rnl|@(IIf%8b}p-0g-2sRn<5MUl?3M=%blhzy#gLM+=at5~tN z1^lmn#d77;mp8S0H>9rkxx36;9}C@yRXrG6Z>u%y=O~KD;(FO?3VJA`*V6#Ui%4Ax zD6UC@008^!;(jW+8XzVWan!5pwfcG~HZj|sxy%l?mEX1cEjV9LYO77h6#n~bh=KI=Yg}`ve%vLMDy+so4m@+Y6TpAySBF#aNND!8(jQJLN=_5NOw0a zbOyJXvRNIywp09B#xj--R8hy6ce+wpGdH{X#hWny8fW-$Se}R1aqy(e~%M=?~mfwPv7(G z=ADQ@LJ$X4)Nw7jH4r3EF1f30=pAS&`Y+(Xdx{#ivPs&w_oMOD@mr0EMuA12`DxWJ z`OClsp}Rh!h%PC7%@JBkW*_x&U7KK%1>`FS&_i}xAY%g&0~ieQ)y?l0!F1@%mfo~S zIfx(EV0>-y@rYijPw%^=8KrLM=ldF~R&?`9GclyUyFVfKm|xG{#)b$mmS}${qx|2? z;rlq7>~9bRdc8QR^GLKe%G4PI%3ZgU<8*c?d)oWYTO9(`yXuSqm)~vY@F#u}@mCiw zVaY~)#x$pBAvOeaNEr}^a6Epu4pd{fEs6vi!E_RQoN$tZYE0HUtYXB?K8yU%2+n@C zm!IbKOsZ{_X3gPkPyI$O_ba+n`+oiTFFyHk^@^?Dt{6P8`+NzRoNwIN)#;~Ie(S-e z5AmYCnZE#B8be8qi4cT=p6qQiqitjDm}=-5wP+e=8+15-YQ_MUn`;Z}m^4~T-AQX; zhY3Xs_N1Ifzbl%y?wQ}^l@p@}>4`0$#>e~XVLV9Ru7Hk*vRE-PQ%AWCIJ34Sv$s}W z`UJ+JYq<qc#pll~fq0Wg5r_u@fM% zJK5aMulQx1-{;Wl5fUW|X4oQzzrJS5K}rZU``aa%A@Slkca&=lJ9`yKNO6u|s*vuS zoU%psdr;b|)`nMoEmzN9sDbn~wUl4#ygapJU9qt4nRd#$+?ekz=H9hNg1_><{WAaa z3Vw_&63htOHSFy`d%m77zf#0jfv_4!oYCj!c!_RV_?hCqgL(gwRBkmsx6;wc`k3O zqL1J9v=KxUr-+?f!qxJ$7hDI5jh-7 zEYqcl`zd4YQv09ZDe2 z+3C*3%-Al(F#5l~__-iPC{F5XZWtWpDAu2L=bDAW(D%8XR%G=JwAF-pU)i`|kbhGE9%0|3k+9eg#B6B4vuiB&+u z2?g%U^|3$D*1L<3EdK=hEP^xX=`kC0hi~D|S?5q}LJb5U{{^$}`9GeHf2hvRqt)W{ zrVID7sA&?&s4n+2`-BYe@UmSVD1?0@W!&kyV%M#NdyEl4D5NuRMz$-Fisbr^9*==h zKzj{6d}ZB#-<@k;kFRI;Sw*W*(xQAdsi`zmOK@|S?q4OW$XKmLFFp1rTZCzU)goeFsxXw#C@9FssOj-+gk2vy?7kzJ-IbBeaVRel%@X-&fL}jORIu zAkZ;Ed5xgw|CVy@ZEdS3j|$$gfk8^Ui^9qCUfb9!*qmd2<}erRw)wURZGsmo-Fe(8 zYJOqNT7oNU{9{~+2h@Fv<6T8PzH0Gzu13z5xoYTpT8v!A3wwn; zMgxR0gOlTS@mCw8b)Lw<|B3T8%L10A0>E;tY0)! zUF2B*vc!RcC$qHNe|bTB#vw{i0Y}uKXcFU6QKX$No)x_9PV0Nj7~nKIrz4PQ<@z}s z7i{=u_h_8#LHjJe7C>V_U?jO-6!)Aj8-xE;EVBcC*BCBO;b*Vkw%0XmX>E>@p~4mo zf!k4qItXYHa>MzW0H66PKr?^bQ?E}WIpElOthsJ(N63tS8R+%FqU2xZa!AmBe5w$F z!TK&^YNMt%m1vOpqN=`%%hyx0lJt6(H^2eNFAQzZRBjmc{~*w`tAyb=tt#8{;V?J8 zJEkE(0OJ%~GWN}_L4z^9^q&*Gj%MO!%v$;<9W$y*6eCQk39KnlI;T2FH~+;wxnR9t zD}_5$y_tQx(zC|5irhoVYdBBQYL3OSuyjKwF;IivD-mT>g4Hi3U*O0@M`Rpg#YCLq zU7bd@RT7}}og%nZU*R26TecUSWQ)U@ichEHWqfc~CJ~IRxP`+7&COE?80!>+>+pNr zw%k+)bLr`naJ0b*j}S1732n+)DPqrGQGwjU1)(`_Oy5+LDi-%erU9MeRvPSqA z5eoz>T(UUM$r}xw*2~P>DGG=qD6C?5s42ZM zwsdL&RETBSCX+HkZ&;bAhHB=TmK=>+l3`nAA(RV;d(?(DNMw-sOhJlkWIGdPlCgm9 zqIBqY=}F zcqIYmCTKfTkXjB*@Y)5L>&6tHf>L z?C)7-U%A=Ci)7nPrR>`>LlQQjCM#lg4QiyrU^mD6&B0tn!@&xO^!+a%8q1ta0r@HO zVv1vCh#fLv&eG_LbtZjBxG4~nm`wEE)0x@$7j`Vv@G3UZpr-XN)p`K1x6XyW#2hO;E}sWJek~ zsf}xf*cZ6GEHpBy^%Fyqba_1i(?oy}v5cf7v=9}d$P7}V?5Urh^}Zl^?#dK(Jfoqe zH&}^Y3`&v}xr7TNqK$)!ro z-4b|~kf#QtJY|kL%6iCpEd-4|*OMNv6-Q|y8GB`0nrAz@18!V%mM-rNlX(s^YA1oL z$|9bmp?mL&5-Th*oQxh3tDQP~b*bBYZPzepY{^9grzcY{3e?acxYiV{s;?szXxd>y zshu-&P%`x*2#8LS5J?bDkvYp6X?@w&AzkJ{Ex}?F*9k&vmtq&sRPG8Y+}a}6XJt;S zQE-}j96+Xp$)i}++e*d~O2pqiTwL6(5?U#6G)a?|Re@PW!&ks}1ZG4udn%&$N!E!7 z3Z8WiLxndpLNAbvLZyu1j1k1B_*yS0Z)vzG=&h#|Qwj=*4??d+QzA9YIIabnS6R9- zDH2WH!ZX{wrN#XR=X?h=&o|b^lLW#cDIv*67d#YHLGrC0 zkEu$mQU?d!TLHsN+VPDrD!hu*iB)h9K$}e@2K|#P?vOO#wqtAKIxRLvyl~@X&eWv) zht9fJ3R_W0h_QuL8mb@%qmtJyho8KEtpVfrp3B>OCj|^ZgV=z;cK$lY(WeaI9zK4r>xFfo+Vv-SM4hHP?6$zP!+ZBpXX<(^PyaJ6K&vi zTB+}p!FcX}9G35ckKN+HZdw)#Ka&ZuU_3|oSX}-O!N=C{Th}H>?{@x7?A)fPsucla zxxM=T7ft;(^FEhZY0wn1XpnrqcFmp&TLZIVKE)0a{kPGG8N!KiTWgdf*u6ZyP*@<6 z5POQ5*9Kt41tW1vUe++kp^Z5xF0N$q^u1+GAw`5oxnt~og|AR{bzaQ7`i4E$uEwvj zvTG8@s7vAos)UK~QCRu0qA!WoCG*LDVZ$(zD7jkeUYH_s!Y_rel!yRcTtyFl^5UJX z(tYBf_CnKbE+;?}@mVI$R-;AAh|b=u&QFNgEFELWq*SBHUJ`Ez5CF#!-tx-qiu5n< z{WC!i7X}manDd?VkYJ)0H_Lvsc5D6oS02jwHoNNb~)nYO1{u49!`@`sx4@7lNilj0$wZ5WZ;#?R);}wZn*e z>vH&fZyPn?tFNV%c(R96Z_Us60xTD`uWcQJ?7K6Q`pIHFwrS(aRiQ&;(6QioEYb{S#w*6~lYzcpy;zddjHKr(qPl`3Gi2Jyvtd4Cf`@yqR&S9x zj>}%L61+YZp09ZdRYW}gF8}oRi&s>_p_!;psoL|BwXyqTTE_|GX2 z5CqzIPWm3+QY!k!$wBFFt0s%!{i0?IhH5?I7p`H}!kGvvW4J13*#kM0l*NWF9c`I| zBvda5q|24|n9@Z*ek=p83i@@QmVm9hp5MHfa}Qv{Jkgk*w_yQG_+4ZLs*edIgt*`U zkUpvEg@rZ;H1;d7I_?Vs65v#w3jV;pm*(Wa0~h1vsmDZsh6Wj7m6qvQRzm@%QwX%d z6{aeMF+ssz13eZVy*yE0Z*=13bC31phv=|;lk7a$?){G=&Oc;CG*{@82BANW6DN&B zBimgJqp`|@`CfL7$Xu!)DB`4Z1GoG##y~igsEqH?FKrCs->F+D0{0RS6(E7PI5yxm z*qo#cZnJ!OlF!2e--_tLB&kVYeq{mg%U zT)wU^djo>^$YOF;&eOgd_Pdg@I7f|zbb`i9Guog~;JzD;o}WR3z5nRNx1kN>hk3iA zYfQngNdfoH-67SlT$`U9`l$=?eRP;3zYbJiBjn}@lc$5R-E6N}RW7^P8auTKr!FdR zU*RpE^p$~OoUN0^bO@Pt29}8p#D-JE_$Zy@q(=z>4CK8v9jtebfqT{v&Lwnyt|}$) z4XB#3zZb;u{yw(9f7jsid`mk2o1c*+&c)IXB?xi?XzE2X^Q=tKPCXMSxilIX+=O|k zj?vunf62#myntLn7i~m}LTGXwAu!b3%JHNyEO1u$AL#QPXFG%IXPWSCT46<)ZIPqe zOV;=4Zvj8D6oo8NA2^jk0hTEeDke8npb|8onup0p!_J}@lcK@l>{|}CM291GDYT)I z20+lky9Xtw!cWLfxbQws@~}S@bW-ntXD5-h%QI2A9ImT2SnGyKd|onY0I_YLT_wspId2Xhz}?qJS)*&p(n@Ms-iF z(At~)!%582LExe=x(Oo<6t2YJQ$jX#dr;p()Sw6YTfWfGTJsrW+NcD)W|gmTH);`r zo@&?6Z1n&H0&aY*%gc%T(qlfg>o&Iu=&mgEeUEqMd~QB3w&nMyr|gH%l?x#?BtuYw z58@e&qF3xS9y$DA3QA?>!xo&Thow9GS1jm*kj_TJkLcLkTiz*9gV%e#&~*XmE@Jrj zWv^h(LB+()O!lW!h_%A7Pj7Nc*@%n-5R}G3bo?3Ui;v$`H&tGp$jHZCU^9y_@;w`B z`K7Qt7{le>zFA8`1N{_f)+riCWi)YoqQK=~Pun3PwPr8|ASs9d8a{phn&~gJwP*2< zv^t4rhw>8SR|xn31RoM0ZR;UXHo*xa}ja*uKlxTGK;(7#y`34okQjTf>=? zz28I%3@~H zh#0UIR}CfPVj!PuZNk*$45g#WvX%DQynqOc-bs#5zwZj) zXWdYl7}gWLl!+%*29=YpBySyUG#A<5o2&G_-un;@(|nu#Mdi)+!72oK3fu`OAjZI? zAS3xfPG_qX-yHLvDpzuii|MgTp=22s0+f1|!+~>&e?dtTYcOV}Dj=}X_x%^1kk|uI z`JB2-S18#Ua~PAzuh~E*5OYnhBF%I4^{<(Yu>aQfp6w*-cp?iu*W-sCu2#I=kdVjJ zF92x(Ar4Xk0UpdnHx3RWl>rD;g$#wVyP!tH9-pZW2}Gf1|7IAngruSW6q2c6xENXm zk=-QYDBY`l=E;}tUoWHBf7jGLQs|`su@E5-?1U6%+!hN$V@hMRxYSD;Q*>R;9iW9n z%!?@5E{;hNSO0l-T900Mnr;)66N}!J7l8k0ZoTGEJj5pb7$U9b z%ZPli%5hUzeP)qdt#Gm+)K$vy^cz+PtAf?JQ*z=2FnV%!tUXlp&jPFx$5uq=R9$0~ zCc%>Z+O{!mPTTHj+qP}nwr$(CJ#D+EZQI*#-=E#Ab1Dj%Re!Q>#fgl#S7VRF34XYf zqg$#AKI40I1zj>a8#wGK&aNW|bHd;Wj(oYFdc@T=nEXd*CA_Vm0H3gD3}SniAe8zFh9|&uWHz?1fX3bd?-BX8h@eOsbEbZrorO z+q=DNqCQ0!1iTomrpJZIqr9fg)8>%3rCBOp&3gK&u*seh03&kH`*Pr)NHO3dDTIDP zzl!uI|27Px9upcCOML!ntK#fLqFmy&rE{6WJ?9~B2{gTuGKQaa<4b?s^IHv8?(~~{F=0pyx(g(raMHs`db!worC_kHM=*S zk=^Q_=37@T^n4NKCI%=snr`8?PdafOANJS=GR^>14BPNSRY6y9AMvihZ50FMIrF-v z>iDn5AZBJfk*D8p&4G|6D2OB#67Du5f8z%ze*s~C35*A$tXuS=fl@z~6M!8tgqbRz znt^cBvoo}4eLl=3D!%7T2~oFO1}}L&cNm)Gp5p(3hd*Sq)HiW+mR|2iktTo>` zVZQ-+`>Tt49KMbG3Rk%~dFN_TwRL3rFMx!QIhyK@BW=s88_c_#?@p8Um;FS!^lt_5 zSW4zxaCX}aF9cTyQSnm0yQj>Rk$YYLF(sog#D=sW@Zkv3$pjR2&l=;mAu$2>EZF9)Rz$|18eyMe$Q`|&^rW0th+JwdyR&2`Vw>fEy6q)&N z`YveYzjh@maUWOSkQy*Pd*9-D8!Kv=7CwVMo^);T5(w=7+Kw5bpyi-qD1OKd_$Vk6 z?(UQ1hUJ0e1{8(CFl_bF&@dchnE8=FmGDgG9@o1>z(Q+K1w*A&FHezANU``Iz?Jce z*9~&tqEFX+@0G;mLRc)~@QIB!7~D)_VP3;{+-X5^(1V_ zF3M-Z{XSw1{(#|6qFaf|2*l@Ix@~dO{Enym^XDbM?SdYUhBM*jK~)o3*G7mBf;5f= z)GI^~9rheqPNT&Ci=4Z1g9E3?VSuA3gg*gZr z=dgBdQq^ZQ8sIU;SQ8=0p%x-0SAFy^1Oz;&zvykV9i7bdPZW4*P@YoGFCaM9U7~{D zG=_1Gj=v0ygr!McSB-M0U<)2Ln$Eu+kyG>@*o~wTj}AB!jTJ_Vsl~WxJ`^DS^3FMT zqefXhI7o4%$A|o7?7REQJs&%g_^zaG@_qa;S$oGyILYz|#flV-38FCDJ^T06xOPtL zaZn`>M92LY0{DXupRaFOL;p#QCf}GrZblNX%n$lH4^%(NKaCONFV73Y#IpMuOC=a| zyJ!eDA~1oKFIxZIS{*m{P`vFqJHm)(Swa{(s&evMPb*v>HtplvRdC*DR}V(UgW?)C zm0)JKh?EzkzDF_MDPOAa(#BAKr--hN!qlmBe%DMdWch|#3-uw#(8OL2xb5GKNHC=a z))Vw%1iFx`d;nN6*^RP~A624=O<9AnYJ#>yGd76_=$=BSy~( z8U0)wHcV`k!}>G{ra5p9@9KGdJ*C3@3t9&q4F+130_`!<$G=sawy_iK(7RE@j@899 zvHkwny`H)mL0GS;Lp{P1Ib!$K+WsZV(w3V``QzQz-im~}oAB?#;8zY9m;rk=pP8wf zl?FJomCjnvhN5c~EN`ku!g-lNjk?840g;s{1F(SCwg%#-k23Xc7d6AAG zsDD0v(1O?w*PNC5I#f#sE46!5%T4?DkCSt*T8#LfkMyo9b|bquKf;zobHb)oR%khB zIgqF#s(hIso(2VdvMCD_MeE2tF#;TnS;^m*OEJPgQVNO*7{c^?(r^KW3@5&Z%3F0c z$OK})`ukv=LxY*bPS$Wn^%lU=9G%Zt`xdrXS0^N!(^bh?vuu2lTd-DB=TEQOsP?f? zhL-msM35F+S9Qhrb?TlY=b5!rSm|aAFY1aCsU$Rrqnodt8G#_7w1IuR2Hb24pj2%k zI*W>AP~?nq;xqIm-87aIJ!+meK6UG_J9iX5O^dHy%&hZYD$n<8XGNc0mC%fDy(%J+ z2^GtPMKzCyG6VcG5Drxs(1iLi?1he{i(L5ptmhde+gNe;QcM;2HcKwLh?vKn=#0y1HKM6N+DV^in**9QLJR4F= zecA@Uhkwv!cYd3MT)J5ETf(6y*pAxtbUD&+oTzA-vfDlEpH@U?a|by(b;!EU$FYrL zF8zwh!)DRI%MuPI3c@DBmJ@)oBBzNbELU2^{u&5GAvtt2kjNauEr#mq9z|z{?C+ip zXLFcjD)19yL@N%7pq8*D`?oGsrU_$?X-$Hx&H@KFCB3qi8P9c>-d)OKr(&s|AdZ%q zu4pEv)GCCyT#P&rgshj?gE$bVgexMi082^Dr;;#l4GOG`_;piQLLL1tiJy}NOwa|2 zYruqDJv>#K**}RaN(wx|%)-MSEHmk#+K?Q4h75<|z$y&VZ_PR&)@G4dx(;;_y%;8A z_jg1+2`2bCRoYBUjyrL%LJ?m_oU6}l0c~*egHfiKMIR~O-tXTH4Xffn`+lZr?KYPj$+2rK?(7H5% z@I;wDRb7L^WXdi4ETdx5BYb+5v088>7doM$LPh3mU6fccNxh7aS^BY@?z=5uOKW^w zT}+)aWXT{#E?t7Z!ya1*0uvj#ry_!>CzcU#(79i}Qj!V&Ww5e8U`Ao8*zW1xcsqrvck~;1hC< zuG4bnwiv>E!m4PjaaZ$HvK1|?%BxHZ3@r%)) zPUJzaE11g_0t&MGNhZngJVhKo+2$!E7<#7Y0*mQ%JZzDuI;eC8sCgTLVq@lGqkr87 z^*vlp&=`+FDDHW2!0=Q<~;pGa+ULE<8;4(-O9U(G*y6N93r3uPK zqJd}>G8!n13QsXIdPCt~Ova#sqMvJ2>?1OylHE~g{mzg$jKe6k!0+Q|Uz*C?`)C7USr1xoQq{iq-Bj3 zNDL-=iDY`HWa`(Coy_5&xQZMk@D0~cnMvv-6D|ZiS{RUF7X1mv#AzX6`kJCZf;7_^jG8R;yOeY;G}@XN!1eYU?Ps3snQzegdwAGahzs0kzyYS z8lab!1*In_VQZ~tCeiif;A{kLU4RKN#m42fkwL>LE-&eT8}g>|PO!%);QLX)wnPrN zRENc!BeKH-q+>}05&6#ZVH3S;;O|-@5Zu#+P!I?8)p4?6kpTULCi8{H>lLsRf>cA( zB>@}~pnmEhB*0i~nv;-Ik;8`?Nx|@hbRDql8u~nCT-Tm;bn+sw=*$xE$K`3e>)U2y z1eby+dp$%lTL{om;RLo@u%alMFC{Bvs&Ht-vvJO1))GP`NeSD-fOJp-zN`iR@*TwG z`G$MzAK`QRa03JMD8b)~j9Re2nuzM@ZIB=njABZy2ZW8x^eN+eC%#L+cWNSMlj+kb zw)R=ACa3fq(!?i3I1dO`p)1Cl#c!fb#~OD|)MNIIzwk7qch?ybSKD})jOJ-Cte=xd z3k;TQJs1AXt^dJMmGO$B!|s=|yC_fEK|Q}-DDoS(bjmx%^zj4!XDk0&k>M_b((IR*YD|9|^g|X?>n4UD> zp-r&Cp?{q$6I8WuaMF+|AXhZi^#4vNzM&NK$I#fz+!r(ZEzI7{`bp`HhOohDabglW zcw>#MoV`-su|&FL9b@Qo(5dr)x=zCKQCx;IHpE}hx5l1UpZdh%9yFE^;%Y@Jb_6TMwJAXbE&`#04BnJXsEdtbQFVe?y+iO$F331y& z=*;r+5}d}7EtBAk$=wNc{ui^ngnikoVqV(Vp<6D7o{e<%q+OC~Bs{fIuP;m;34PFW zyIm{{I99`+%*0r%eAX;hG=I4FG9|#x`RK9zI}7d(q*5KFo|qn}L4cKBa>c|@nJoq~y{KuF~XJr}CS56l=#2l|TIB!R|- zfpr|rYs2-sJ0gPMEWOD#6p`O%RFspfJ3yU&tk#H6P8)_~y)uTZO7s01Q+CDL;U22hA z>9CDgG`5m}i&lvY41Nu7F#x0eqAd-AS3S3jJC-CZi?Pty4pFw$)j=tQ# z`Aol%l=l2qGT+bv80g$=8W_scs6&#&8vz)C_NbdSP$2&w(qsFM$FVU(>Nn~_v6q$( zF6yjY+rL1e6t-Z%@L-d`$m4`qa0XJ4uu8qucJd=zU8l7C2x?`brgZA)a3v*0r1x2? z`K%?`lddh#?K`ge{tj(uvP4R)9-a+0_}|VJEoZ1#EmeL=6|0r?UEPU8oD-m`TN%6@ww!yprI(=*0nsn7eNJpRK{N z9eDvfN*62ax-rN4J<%}wGiC3!jpKIGjv!t3!aC=J+9I>ZaO{_*?RACo6evq%;AI6Z z7cw@Ysur5@jam;cQ<;HWjk>}0n($!wvX!{m^^+J5#Upyt8*Z#jVx#y#F^G=1hfKfF zIUAFo>QWL2ad8L6pN|DZ;;=bzE(0M{kn3cG(dB_l$}J{h;HAkv3_-z_=#(zflkzx{ zhQa8LVLRNvK8;Z&RbdBmLR^1^jC!_)FYEZy*KBWL6OKXKaY-@a)OPDS*Y~(2lpUDZ zyK@U=kSXL0Gkdu)MH?b^fZ0@WvneFJ^?XtR$eH(# zad6=vl7Pe+)?9-)X*-$3YgvE{)}PR*sYlD}zl9tUoaFC%E-o)*{hr{eJ|aDa*cYKM zz|F+)5YT&d9R^51wmi1KGMLH4UGop!q)ohf7b-v8 zaOHHbGn}83nHO>Wb8dteX z>dMAzL>B+xA=SbS$k*ljj?ZAAO7O!nN+B6Db zYH(o~RQyga1J|*A!Y~8iVB`&3NXSgDOmRWbrjBw4#giavTW=+vu64R|Wy|E~Id_|D zaWCF3wgS2blEweqw zTc-#66=oKUv-ZbCcSQ$QovX~nZxG~=JHml?2gx+GfX$f@jr{m&cjSnt%uzz5_-~JH zPqv0m+S{*=?oXdM_v4A|)TQg%_~nttJp1O;7I{v~M7ckBOMNQufwjkOs=;OFlP4~f zu`$F!8Ny=i5(WU~BoP=pKT7J=LL>TOf4 zb7XKLdQ2ENi{qtPJn^MF_w90Z+H+&&KbjmEpE@^@GeiQgwq{xlOp#6}Z*1c5UiENwmsa=b^v)BFGFel)e_m5~gWURI3(v zF{dJYRr5)l4s9RgyF=`hDXT(ij%X%`BF`2VUsjV&?a!+i2$hdYSl>eY!s5*ZjLE?h zcOR@1(G-+1?j$leM4}o!nK)JOQr&m6k3=G6_0yIkM4I_isSQ{Rkd1EQ=s@tgU()24JHs&QV;H=AQb9IyD zhu;1$mOoDk(wY*Szq)b1>6M=Gb!moDWo`>_D}tqUSRI7eHXZZE1E`{eq}oMAAANF- znQ9F;nqj|sQSJMeb$a|SU$+=W38w+Vth#~qNV6a@`04%C_dUQFOk$xy%Kev#X!=O^ zQH9#$bIr>RIYbGpCmS^!QfDciXROS#c)%bzd~T4xCLof1`hhWC&>r!7PqaB#%Gd zQ8PZ7ro-HnY&F$q017`MeD%Atsd~_9J^r`?ym4m4fQb|kI>XC$Z(?rP9>qUv*Ua!O zd2z_m!tv|`zwiVrx|(bN);{_-{tSCp1?pzvAXx2fcD_0r=r)!DEv!BA)I#d@HS-XQ zCI!N|#SG;E3BSRE#Kw$+KqR>yQK~Y>^zJf7F1$1L2#wMOxlZ8M7|?O|xtb6?!i1eO zQkOK+@;8eARw;#iu#PmKAB zxjUrCTpw#%d>p-Lm8(qAwP3J!50=z>gDE|hjJ<1*s~C0UCilv|jowLaNfZXBSpM_O zew5)+R`;&(c-F{ncJ+Qajd==r9xiWwqwM^My$cNe`?zypuSrYeR89Y3+}4FZk$k!m z@)xG+ROhdY`COH`QyZjZH{IXM2JhUUZwjwv+oY^2B`cw8l)*y3Z&&X0o!}qx<)B7{ zz>hhBM_+S~Lf@EXpHmj*_ELD((7S)%T!rS-QJ{Wy{zn z(!t6%!cRZBW=%;RTYde&1u z9$!GL0!Saga7R+0wp&ffWBWXdXivpWUlz!|6Fw^WBfEt~Z?ba?C3k24$X04jRf;)m8lgBZtx;)g)Ap)@ampt-0Q1*wHD+m6O&hzQzL1N5$>(`KS)--uN#L!& z`tf~*+`ZD1sTXs5yXkbTVe3Nar?RfC!;7_U>6Y;6hk5s#r{}UvMQCU6ze4|Z_w^gJ zga-Y)YQSgQ*0&j?4Z&PC%n0h_fTRlG8>RM(Hzn?(-Db3vUfi>Lu3 z3P}25&Z0KtMSF~(4O8o+@g~{Vj>(TbXf1LB5*@)8~0xj%~moFkK@HYs>$G?%bE4E^zLv21UbF~}8?5LQ_-E^9sN^Smt zmStLnsH$6AVJ~=Qvc2PYT0P;XYr+Fwvmz@9U4Q_8pxJiNUl{>HyLwh}V~Co(C+zi` z9Ph*5vkiD(<>SsE?IwYCHUz-V4RajQ`0}BR%R)`{ew3wPuAvvq^_TM%@ zhU{abk`m)WOvq64Ut(HoZaxuy^$t0IiX?F|Cl#Xy0mtV<^M|ARQ}CA^?s1>u z-9gMC$DCj*6`29dybAyhVEj=)wB*xN5=VDV8ro1#vSF^A(s!oaZL6196uYs=Inqq) z+0{c;N{q3AdHM%Eyd~~goL=c`Igg3hLXjtGUY@dZjX%mbb;DiRN0L6{v*kMW6*Jju zwG}IDtF&yPf3wRv@7y$5r(sWgu1%Z&5a@G}vyo$z_O$kdr2vz*^l1aBr9P+!WuM8u zPIeU4f8$4DBrKo$#261oiaL<<3Knt=Dsr<=)@^Ga@Ydd*ySZRWM&ybTDE)0r$JRn! z*ds5R$5OkIMT;-ht5oTQzvrcFJnC=pkId7~3rXMDdriXlWq@3vc|Lc!2tLb8Q%bhq zit2~Q*7g-`57cI>@KZk}Fgw&^GhlIdG@JY5Y906i*OYu%%mUvnmLLuto9H`FY6%$v z*I};3_IVs=oL_qdho=z{UbygAw(AS(V3NbI4U1McD<^JbR-@%$IzTy7`f<8eE{m3A zoW(nNOGP_D3+*ymP-m(mHil_qbzV=|4E9vv&1lYFWA|7vGQuMV9+;J#R*(;AQ6`bc z<6l(9aP0i*rR}H(!s&=Xpu21O4b?hM-_)rVQH@G-I9*F1==pbjuCEerXZz9dG5UdQ zXRW-_jlbGr4nRUhuDR&Ir4A(;n|;o(YqxtGT;K4_Bx}q99QEhI+w+0oHvX`0eS81AZAPM;CiwH#R4Y|r@LyeX z9Kzyo^!xMW4N@6Oet!_y8z{-&{>3~F1}kWiQK|6x%>1~G@QQ*HJu@a@DZfHPKvjEe z)j2Q0wf%R`a%{LZ`C6y9z>leMMPz z`Gvy<2TQ0APZDxyj7UhzG(vL9q(a3cXh6bfib%loz_YNyz_84D^XANu*3qnsD18?$ zcr8!(e@0bT?MTrDVT^a|+CmU~cQzHZ={NaR|A;xyJ7yMj^$dBV*nav%!047o1bedKfL|!DU^(iQph;bw!mRZcXDn>4N^8acw-(5mAra%Y+Dc^ z{i5(yBng&0OX!^?_c8!h_p7FFu7Em+_Dim|HBc%7HL#dmrdlh}ny6Se8~2wmA-o-v z-GU(*1ID@sCXAI37!|AB3o25TRs;xzql4qbFwR2JjJMj7RD%IqE+}#5e1!h`^-J@q z1m?TdX$(BRe=E%#7%Wggk}xMf{NZY%49W6J!@5MjNzY6)rhq>`;$Sj8v4&LYXjlD_ z3`Vtcv68vJybFf5G&;0XW?J#`ZzP)d#{l>a8y`TUpS|)`@9R6wC0kV`vPFNsB_(6b zRhFi>Z;(60kxoURwM=2Xc1Wisd2?(VWF8|6&KWTGPhQehh~a zy=FMoA!8fNi_dRO7g7+-;7HY5oMJXFXb6Yk6EdLX8p*e5aWkZ*2jys0A$=v)y@ zpbhvQLipjAa%u!)ps^8*rrmh$Fi6Kv`$*~LWzD8eL`A9)IAMmu%-q(do@&{^xXm>& zcG{A7HC8phNH}S}J-g=>adk6SUnO=4&QRxS&@~x&1hN520%HjLcUeR0W`!_lxI6{N zEipUddR5xP@-i3RakbuE!NB>Pf6gc!%_)HF&@Dso_O7Fu2@HCt8$i`~Y^vn7y8ph4*VPSJn~3CyQbh`l*V!x~;8c>I&5rRV)@s z7Ry2?Uh)OIVyn2jqWxHq9HwB~JL?Kqh9y)U!T~o8p++=V2E-m|@PNb+)6{NENU3G< z9LZ>4t6oqV6X}goYqZ|&*}3I>{WLB30*-Z#oSp3SQ!4deNE$f25^UvH4DL6GeqQyY zLYn)Cg))}Re)ZBsJjHM8PUt~Uw51v0j zwIc<#`5J%>E5~Tthkp+onUt%qDmHlq)q%oDQv!oT>l^-bEX~%WvH;s&iH#fjsvZA) zXoWb$$s_e{Aec-WAiU+%UdNfd*iMf711XaAL34XtS93^ko14#thOSAyMKJ<2 z0$thG(Xrf-s)a=;S{*xS;Q2x19k{pPYVIeX*ZSk&0!~pP4V=ZWAZUcZtMBGvX|zCW ze%>x{G9#@1h(x2UW{pw(sNp+FKrw2%S@PQ8;C&ih#cpUGlH48Jb!kU6>2F?b%W#Ed z*y`5U>u+oAqH3;xbFB)g(uzj8;#73Ci6+M!t_GIth$0$XTecQ-#J`PMA}vd*AIkB- zwa>3^KOZlLNsJ*|E}li|SPhK?Z=#^xd+<$74?W)BLaUDN$^8WAhrNR8>w^h2Vjd3= zU(F99cB+x|O)}jvBUt;iIr5;dZ<`1F8zw=5=00VGqekYyGHPc8`cHs+T{(X$WWK=E zW)bf>b@2ZVA2!P}xms-vp1G8Sy-AG1u+VNvb4+6PpSxIeLw^fA9k7BEfum!%g}D&# zN;POct1!qnUTu!M+B&wC!i7ctJN1D}&1~qYoi}gf{t;GL-RqbtQLE6k<*MgWW)2+V z&C&V!O)@4HmM`v{RkN|UV!bu$&9)}p1*dcynh~TRXHgKn&%gHGgY<=;OX-fZltuac zVI?5%;T$_6ojERW@o=fwJ5{8qF%s6c#mZ^k@n;ggvVXHFOz$0oBc0mF$<|}UWMz%p zu*CB|%5h-j!5|4TyI?UOcTcUHWp7+;DSd7?28k4vPx$_F^C``b;-M)iR33{#S6J59 zg9s99g=yt_uM%mQ6iFUAwh{H&I}F=;{B|w)ZxgvRSIBuf`qAj7`QM0%hMKM|iV*oUbrj9Fe-kY+l;B zC^|Q>vJA6w)1khuVaZje&aMYA5@kh3pdCw8Qe0h}QZ>QxQ&){1af2yRHcD6BWQ=*Z zMocT_$u0^x0Mq>Vi3Nb-bYDH{BMF42|AJS&!bXJU-fKVJBlT?F)~_WXK(eSX+&aIt zv8AlZqZ7Z&=>O_uE@&JX)oQtCWv!d8v~I;ejf%AT)eDo1ir84gv=KB&k$GYt71k;# z-^Q!oldjUl$V03?!7)XB>hUjUgN@R{SB094d-PzG;9=5K=@O^k>-AuYgofp{%+@lM zPB5@)Yp~x09T4U@U8H-$iTC!6jf6&TCXgPtJk97*jebi&JN^^5_7KTI-FN%I+rM~~ z#{x<_cw`ex23J2`RLuW^jsXxrutiE@SV+HD4?aKl-l%z>5hPbL*eB>~&ZHq$&I z!K6)Zm{U0r8;`15lzMe@1#g@+_*nnisopg{iW2E~vd$n|$P0T^YF6LmQH6n*7cL=) zdjEyDJHHrIRmzTfoB-@49REt15`bPvnTnS{h*NhS?@Rm>~so!NR@CQ>NVd`e=S zc{Y&~g$NNd{u~(mXidIwOU_k-LNf%hIR??L_j;63zh9Fp04D?6cOq13*&>+E7tR+r zE3#BlDW7tvm15ur7W4xBqCWe`&Pa*h>YOsLmS@l%Imb=g=_6MJVD?IB!|(&(%&`*) znESzH^nkfj&8B2LQ@LjNS~~uFeZRW@Tqc`o5*r+HU?wvkwuIdhcA8^@?pKsDCs7xh zKAlHq@7m1r>KS1l9c~owb4bSbKFrZ^{AhV$CmamK&Z>-ZNn$9iL>=*D+@n!BWkoz< z@DnPpG3`P4JJR&psw)w&^SQ%=dA+4`3Oqjrit5d<*rTN)1yi~SLEPr1k?mp)fcD| zuFWT(cyU|C!T}Vdz^;sVn3#+upMrde&Ab)}E}kTu#=!?7KpaP<^s8#W+yQrh_Ivs= zuednR5J)yG*TW|-$*?p&U&R&t)8CIvgMY0o$ibFAi^%6U|t|m?@!y!FDbG= zWqKi`EFdDjV|-`g3Ej#N@yut;!^!p?!~jCSANg;f|1}VR|24?}HE91eSpPM+|LsEa z-!pok4*&qn)QZ5&1n3e70BUMwW&$jw4*&q0n%d>2|IGZ`#ND%0sCiLUGDHClGY$rR zbuvYDxSK_$AE9wE0N>9>03ZYe1Y$S{v&+T(=LUPbY}Khr;B$EHecciTL+Jk*7ecPZ z2LP!0exG0W_Fh+9SAYHazN+c{`u?u@y6)}#`s(@Wy{^6f?(GBqXUG2YYyf~64jUUA z?&kmi2Oi=FFazPUmWE@^10nd4@(u|RA&c^xMUWc<1;G7~%MKZt0hj^fh0-AZ8Tq40 zPE5=P9w?2C=?4@yi;WHL$7}=uDuQM~kxqIDl$9n60WWz3FJX?AgDWsU!@?ZrVPW?0 zW5mJ+$^!sq0RSTaGYG-#Tzr0^)FN_DMfuNF002A#0Pgo=f2isKAOt_VpT-OTi~;&* z!pI^~tjlu#)x_DVHYy^fytADX9O~e1I^oP|5!G4IDz5zQSAfIA@m4G~;iSl5Vm~la zWfn6FxQUm}nCwos>dp)T}z|CI-k8#53`E#_Wmh`cN{cWZTr*y_C(4Jk=uQ zr`|b{xS?i~Jr1?tB8`dH(r*4%hJA9BA?*IiTGg)HFZkn4N9i!@5R4x-8^6>%vGP#=odChE z;AV1=h+w^+KOH~d(44u-C|mu7qx}9eanhB7`&*wH+=xk-YGhIG3b=NUd_73?nmG#y z9q0`}<^|T{Qis8fGN$0Sg^$M`Z#}WH@JK9J{o3S%?fbo^ojNh%q$C1{s;sPx8XN)+ ziWH=*f+-B9EU%}gtdA)lEbosbj}$B~ri==TsSnC0goG+2AB?K34<;NOtQ;%?Dldep zge0sltfYL2jv9E&J0dZycXxXr4teE$ctC8CJnmQHZ5BBQtnL5TP{yjc=C-&Ikz=)R z<$hWhb0KANFU5E)`as>C(q49tO{SbNDcK(8!Yk98+^Vm3MkmuRcUkZrEsiJl|Omu+%GHt z={Vdmwf`)P(Zhn2cKgUW>z9|RB_4Q8T@i4ZC%s9a5Xq3)54g~0m?!e-WdN1^1QQh> zj3(S=3Hs*p#H`f)Cc@G?Tno6Jh?WEDKkMe~_)_{-0Xn8#*;8F0v= z(#!EmOUtZD#`B|rSp&)Zk;PCDA)!kA7R@sB(naD=EWmS0&vNpc!N>7R%K!%0aM%px zam*gMWm9qIXMi`t= z6naFmLJQU3GHDHbWuW5JSyO>I@OK5Qd@-$*3!PRR`-#Uq8JhRXd3YS5BIR3r%;*c+trRbp$u zMM#XohSfIDpICc zr`JGVw3Tbg>$Mf9h(#rclSrmmXOvwerE6?7Clsk#rHF9Vo1Kl5B+y=oqDm{L!?~oh zpcz=AlF$%pM7OZ0$6TORPzRiiV-pQoDG+QpFG)LCg^iO$3r8##M6jrgB~z(LuxM4| z&?gKJh&8JnT9774w_F5C8YNVvHH#EkmRqG=j2RTvE98?zG|&h%47Z?_jnx-NYDLv! zFC`E~h`KDXPMlYoBv^LBVVA3$tW{(rTPahydj=yWlPVvU{H{zy0#X}B0v49XLQ{r9 zQj&}Kw5>n;svZ7*zWb9~YV7SR_o;d5!8@FBQ@{I-haY<9d+@EBMgFChgTNL!ynE~B zrGt-gxcB`hbpO?zcc=B!VDED$ck8>iW+ip1x%v41_2au{d8KeJ*P`2EBrTahs$sYt z%SL6o9t=xX3o31QA*ibrDa3SR%wWWOR5dkSgE{#`V#w9`ODov`Ja;_r44zf8Gl=@2 z0=Dg8*N}1_osoRLmX4^+5ra00O1_bK%pbU}6J1RWm30bdG+)Ar!bW?MD%X zkR~ud=aXAYC6K1=aLtZxS&nY}Dl`5yY-UbNF7L`9j)KQE-TkTKi$Z@P3qUZ~1fqatk@>nUf00;v;4N#b*nPUp&rODsCJ(_l zFR;3DuxV9iL@I8?dSDN%tO|Y-zpBDG!TP>2<$d(%mCIGz@~Hn9{%kv6!W#v$mA*;W zg{$6YCxNpRA1|Y8<& za#M>nqFO)2(d{It{#V?+B(OCbBb2kpWX09b8g)2VBF$UW=N4J86@Ie{U0TxcV0d?Y z{J;ty!-*#{{pQM)Ky;H5g^YYY!pEpA{qj+zrDDy3#%%TFOH$3qyUfo2`fKo4Dpz3= zLjJQb#A+H}?~y7;_0F%r(0O@Ne@xBz*Brl$r{1>eyEE3B*zo z{v-v%k=$s?y{$`5(W0uYod#@doP~J%oA)vd!qpA-^ zGRb4-aw2Y(Rl2iPDvwKjYjg4&+&^+z$C$-OOHJ7%xtzZ-?@@a$t+w6tso-7z-Zz$|0cu9?+d=XA~%SU=j3vUx&IP$u!=L(2Dw-K zlTBhu&se`COTDEic;#{=n!xI39hHvcwue8_CQ+qbDRX_Tm(&CTYHwxI zXr8IZu}Oi-v4@EsFYlItNI#fx2zC4UZKt)26Ova2`TVlO>#73l)ZyDlRoC{~8T;5n zn`h}NlGtJa{cCr1cv=eaY%&!S z+ndYfGgtZwSF5A_7wr3Mx@wJy(T=*Mdn!|{cDL)FKRh8A+To4HW2r<&2lG%q=FR=C62)ceNP*)7V)B#SwM;er9kV2G}pMH(!d2ku7g47u0Cd+Y}3|r}C^Ox7vHS6wQxdVL^V`G)PqRZJnRr zI-DKt8FgbYAL}r*ul`cyhPjH^*wF zGSuF;2czk{ZmWydR&6RSYxH54UL7_QoRGdXA2*sy3TALvzrj>IhNQNB!jVtsp_SF~ zV_3$KCr*{&0Tx%J6Q5fhXSzuG&C!XmxTriA)`#Q1LYx&SwuoI;W#|YN-8j>?!(&os zC#GL|yPIdbE3UIj2_8807)8nVo9jxH`s~HannJmg((KoAovG2c(Yp)D0Nk#zOWqGU zhh}uV7V-$jL3)v_^A;}Y46Zb{C*#13@vAJOV7n6~DAB-kMxh$DgjAD6t>o=sNM=u$ zC5d<+qMG79L>ZR>hSD?9eAw4>dx_MY zhee0(T*DGbRc72h`&T;w!C^pC$!DwO(~)ZUrZ;(g7Ig@N{NHa;3Qyx#7s1+vIfeA3 zUjq@zv3j3UT4MrCD;h$y3E30H_GJjs{yI+HI`eG+U(>~{_|b9sW!Dc_k@ouLVb(8~ zn9pfAX0j(=GPXIog*8m;8efeq$0w{rc|>XW{@^8z&yLEDO}oAma4b-$H0jmH!;i^c zu0C&ws7t^kRM|rM;^`Uj9v>UFN1xX>(hH9cu#f?;>ziE@a)Ss2ei%O-U0u4h3hMdf zmor7rtzSKM)xS#|co6iPHeQJyF_NV zc*@FZTD5#?<>cVNpv|><@dw-C##Ecng)f1lad-Zzk0ZUAY$dG-Be%`uK&4K)LQD1P zXiJW(;Gv-};R72Bqd~J`M%mmU=eU)grIo%PMGEvQ1O-`rasVd+!z@s;*|6U3xy9jW z^P}sJPv6%A15wOiHDi5LPzk66bI3@P1Xp6`!Eb}Vt;~k{gNE( z@OjZAH#1)x^QL4Ct9Y-i|RRuuS4aj2r_y$FoWRo zWhCgQ&T`G)ZS3o%#Y(#woVrOp6-{#v|G>wyB#R!84S`E3D>jC6rY$xT zRUjj)yV`9E8Uq1@MPmrz%5{ht&Y&~Muo?E4>t zb4{9ZLmBWB5nwCxI4f`_b}!*>f;eGGarWVQh?1_rC;D-PsJ)`rs26=Mv?K4~JinKf zS2m%uKWJ@_x0~fnw|_A0rJ6Q4gXC59J0`XvwKt~^j#K$fu~i7Wh$Rql7%#Dzu)jxL zqY`~bX6!{*|f+ zNXe9!zn!#NdXTg_*N$wvdQUW_3)qyM^R(|@gY&@;iuNM;@Q$nJj!$D7tq0lW`I*KX zxJj}|Va4glqZBme;og{Hv~RLFSD6k5>z{En4w|_a)KK6*TvBH=NZ>3^M~VbGcvS_A z8~4Amyj%hAK9nSdJE7;Z3~CiM7_U~9WPfq^S6am|wm4j_LHkhpXr#X5L&< z{_?78^F!r~2dm{t)ZN`wB2~wll~=-Y&lv^ozi zw7!WPJe+D*1MN*Gxx}A6)NuU^QiUgQ>Q~Y_K{!`!Md(tPz=BU@6daUlrNs8$qLmjP zqGKwh9T8Ln@2VaQI8d`qT`EeyWSwfwnN)B2-+bR|SlwWy%6}!g=$J7TZi=8+@sNeM z4hl&vl^&o>^PUYo!DCs}RGrlWIbY3F>e@S^=Kv+B=iOa(V`WkbigKF;~J z@UqX-#qzs>m&x?QX_PM{fxaPC_w<;c!fr5*3zSYTrmj6iaHkv{yb3V1(DtG%t|`b4 zLhC~yh@g+uim7X*??6TA0vKDwu(lSFPvRM-se1rbtpT0cj2-k<_s3PgD61P|>iS|x zDDzApaMW>e(G*SZdE!Y37i+8YVy;mCMAQ}}tco}ig?jiZq3C;xc@N%TuYDvQwlPbJ ztdx~WwQi}C^QRc+)j=Hzj_0vLR|_MQ%TiWLQ^)=N9HZ^V{;ohc;)Jq3skl75ga2kx z){JX#Sdo6bX3kRZv4sEeAg{pEO}YPxW!HJRNeNEQ zJj{(Yy=$%)9gS8!nry_h7Zd3pZJQn-x2#b^IK15UM~doWNsD*|22pc)$ocT4%q9DS z3L_P(%ryt}l?iFfHXTDxKF;Uki;Et3vpP?H{-PHIgV>i+kfe92#qy@ezY{{ob|1wA z9@<~EwfcODp&l96U62%0|0nJ1&kEL+tk3^sf4+9ZiwhJ5uWkh8XE|)Xp11!~+7@bk zFdQfoN-6PZt;!X?$o-M?o%F8bOWWpB$^*~Acvx<<4AtJ%o`bT!yT0GSxh-on|2Z8E z(Mp0U-m?j*mTV-jd}>GVEzhLQaGa7PKY#K=L`Hdf9a-daYIHmA@OO%dRxXCMFS33I zjAYZ+gYh}3%9ie)nJKlx(H_P5B@Zg(JLMcE{(3Rx+qu&F3Sax1MrN^T4 zv1N|BxIy{ZztT&09XKr(4et?nk=efBu!V|6~2&6Yz3)jYsB!)3LU#e6js? zH=*b3{>&&Lf#92=9b~b=@e?~Tmw1pA8Gj|T5tKqN$AOr%6xzPDMT!=(hZOnt>XZtD zA*mMvT>01lW^d*4l-)L4r;IR-G4usz%h<;iur_5wfUK&>p|BoGb_tHr{2!JdMx}GW zJU?)Y>jn*EuT00owv=T)ma*_9n{%bL8m>Wq+G(59D%wmaPxDuE&%Imr>sJ~|mL4N5 z7L3R?w$;MYv)EBJoHse)G%)LpC2!VVpB(1d5~z*&(yk+Rhq|F9YNdZj4kcX_Ktdz2_3xbB(AJtj4t)xjb_PV`(=P-Q95ih;_ zEcK^mJ<{)y_h3tLpJ#vaG=uuSWq;-R$bH?#^x#FPvHWA)dBI#3#{yJ0J_)PkC&A0jJ5HsnYgIUSOmNvd8m|^$whsgl^Oe)}sLFhs6 zk-tF9BizmIM;D!coo&`El{;A%2Rf}xRaRz*bKc?4CjB>PHS3e=SNa^RyLu6B8vmo@SSw{UZh^ zrcD7vExJ%b6PYdnKls;#xpk5ty43c-YQ~T{ukgLd$yX+Z%6DtU$ zW+$ZzZkK((J&duo?sp$woH_V2Y~al@fCP{v6bj^XS)&HQwom6@ND@TI(Qi%%Rd^jx zwP;~h`3|9&MbV$+8h8|fXtd~qY=yw@eKLpgj)rF&*d(pI9nmQ2Xn=O{bBzVxG13&T zQMsXGrVs#nHvL3{S&Cg_sa)$c6-{?5mQS=@gRm}g)RQ9D5a~3>jgWiBL`l97AMH>I zM3rpKx%1gQi<7^ga}I4=(s!O~QfW3rvBcFwmvK9auzU1 zP^kOBeV1!s(VL~C%9EFGnP>BUG+&9|h2Ny3=_+e9xe3RxCj&$~qD6srT#!tiY)WKq zUHi17E={(eztDFxAKs#p^L@8G-~MEKT$Hr#dnC#E#|$fw?GDg{nwFlImkWZbyh!J6 zJ->V+`d3jxWm*2h-;sQOhMEjV-L$R{Ob9O-X?P=#wcEmN(P%b1Fx{K z1XNp;X3!q2gN(1%7|+)x>C}z@1Xzvtm+?6@XIo98Ju|s;H@DOSZju;APk}h;Gh|m;S zO^;GWZiI~9t#E;rC{c0y=JwciBSP&{5k3zkCrj*G*$D~eZJ2nI1I+_lmCtisyBQ%i z8Cg7{fRu;!CX15t zzVanRV8#{@laT!WvEKZlTEr_C$m8nxBZVTp*XjKp`1ZPSjX8LLkv~$g!@ak|15qC$ z?Tju_3xd&1fp?t7R!pSj+sH}7iwmV`s;)nsak*}=_?Gztc^e|8SEYOwEIXJpreI++QsO$w^8*`wLk_&bwLp!x)fLVtVrk zf_8a?WOjBYgr2@BFr~_%1|BL@TiXE*Aj>S7i87s^iSVRoO^g_kjO-}jxNP`TSTYh! z33<~>H>0I==)3B}{~CuZ&THR`syNeVKyallW;6(x_#-PT(ZMa2+|^6=5Fw z1u=CFRc)Y$RsqLg*oL(j}Gn|3o4caDeck7a^~n^QuGdJiueu$A%1B%c*=k2To$xF_&rMv z1R2B-;?olv&I$9&P-6~fH!~CJ)_8Z))5?QV;n2(#6oQk5KYGQ+MK|Pfuc3Xpd3nstINuy`X22HSg12z8-9lv=Tw0f?gw_8qr;wQO+;|4rRFW_L#7Z z{1PKKH%oK)pmHELb8_u4PLjm3N6{3o_0=dh?{#-~Syza2xF<91AX_-HIgAMol9$`xLu`!Qw6umrB z%R0jaGFrv7w7ACN-Jed`=xDllq5KL7q<&izmKoUoqzKmKsf$@6N+( zPL+q!sxq2b1aGq_a7dVkzME@^LsM|EHRg0pw5b}Dk4yAi>b;b>oc(kU+a z1LwP|P{hI6g6qb2S12W0pm{UDlZB8|+J(Z052Vk0!=w%>DTRNI%O?pvs8INq2$7L+ zdWA)8Zgfil=tDt+Eapy(1s}0-zC2Ngd8>u%^WIPih!@crQ)cS1nCY5I4;^Kw3aX1U z*Hiyw;Yp@%Lc{&(c>so*c*769ICMe7}2 z$QJK*J#8zP)+OmtJYN) zV$M&v;7>ENW;Cz}`Dm+|fq&Z@n7=l#PM(vtw$xLP#NDN^h$w?8gZG*~J-y~FxT{cX z;eL?Z4Oo0Gx3dka-2cQC7{9oCEZQXcwXosPXE(YrA-9h8euyl<0mFu2@h9=`#Qc<_ zWPI9fbZ5E+yDWzyu^;}DFJAaxWAZ_TPox|s@24cJ@CZ@xU_tM$y7Kk$GJQmY2u+%@ zsIsKEdonF1?slF7omH%JI3emN>Ekr)*`V-!d0@~?L+f`tuN^+Lj1RyVEU8(F67NmE za-^YX$%IwLzC&3#+)Y7C#u@2q$8~4dy<4B*z6d#_)V{xl_;|u0enycyfu^Va^?ITL z8|N=@={OiQxj?iNwfup1@`7FUPH!@7pP^o9nm>|4sqrXI-s2#D7n*n3T zITRIq{M8XM;(voVOIs1huu-0KpiLrI+ zi`1xa&{j|yMv_mrpoWLaW%}AnEBpBF=c)Q`;5tZ)eR~?aIk5A~(Dxzfm5zdk#n4H6 z1?P~k80aFvhlCkkiN~1}L8V|6ss;Wh6e;Go#h3UECIuGAKF|?484E2&`DFzptSb*CcMTnGLA2rChF!gb zRqAiAre8xU=TJI}Mm%EE4<3WHv!!EEb>w7Y>i-Ni3Gk%ZeZgX}Gxx=CcSnCqLoFOz zSsEP0u6(6@45P-j&C-Eu=j5bio!#hZ{>g-EkY+@LPfaEv!6PXzl3R;vikvF&m4;TB$42*2~Er6IxycUM;tJFGUaRS#k!c1V+50=58kMpbGKJu8HdO9?_LxPUXQuS z?ws7j>5T(7xHLaQlU8C0{`gIhS=7J8Ys6k28jqg8%;kls)!w>WLeIu4ydcP=rKOprX2%5B2@VRO6&qzMO-()#b^7LzGxSxfOz5HaUz$4d~vU~9j zi%;bF!TfP|pU9J^gLasr&Vas#rsJPY(A3kom6r^b6Poy@jx=QUa=|a|9JV*P2N!i2< zBO))(C#@&!aRTY`?$xKZHio&OF3JQocJb}!e?nev-#UVa%l}UI2O!&#>~TVfLkEOC zzwdjYt=w{VP#@g79bE@#AVcCJ>XG7uYOT&A0*)fP7JjFE6~S}H+@7y*-TNaZenhft z+5fF|QN?+lZEngIc<@(G9@&+~RkW>nAvZWU>(QWA6p55x{m0Zx2lm{lq4x6J^&d9r zTpusAabG3M&t8>&HMQ}bsdYf7wgJW$GE2p#lp`I;x91jL%Xj`i9Us#gs3Q12*OfIq zslQ(_@Aq1A6PVU{d|~t4s27>b{(YB%DmNO@`ou^^cHNi*C1KG!n77|83?~}JTPHKI zU{s`?bc3)QW6R{}lAJrFlJ`SXyKoQzIQHW$5}K5QO#a!#-BL zXFQU^o=D_jAIyR}aKCJ4E2c(EjQ?lg!s}78bixgy6|04|N%Y}Ciz+V!&Ak^-ufj)m zFNOLKSZwS03jxhF(+%x*D_jaiRLE=Bj7S6UHji#fS~tZt1Z(t$#E7o&jPIy~hYKb; zr{@eGSb6rPq5*008h77dzoi=VY z*(x^R(qV(KV!N{p#09E9rB3yV2`gWEzfyTVO(b5h9R~lF2~3F^6plY4#c}Py(t*$R zP2Rpf=T>{JFy~ddnLD2CK?)9@`_W_bC{085y%f*f7jr=buXivCA%9jZjGvC$Kl)#f z3*4gUf%_4)@-Z-={~}kD01SL|3vu&<6DNgR@!mTqk=;jRdnR+CFrIm@W=Np^d~6#) zd81%K!UI5kj%2GC8d?_z!@o>T1w z1TMSqR-fJg3s1P-Y5djSQzPx94QQa-?2=@cyjDTmg-^DY)Qe8b#YVa32VgSZk#j-2 z2j_5Yl8&-wA9@8y`mxelVuM~(8{tj@%yF({p+6-sDP(uRBIX@Kdc|x)xP-SSE1tZ3 zUIcXQ0FlJt)vSxe25&_d9@5tyXEnp}Ai!f{i~r%i_xxc?CT8d599oi+V9#PNx>I;U zL4iPG9pb%BYtU>>;K)y27@=f~z>h77+lm~ZN*Jc;Wq9(AFErwX3c#U!tY=S3c`)kr z2^9{2YP3;E+DG@UO5cdODT(nbSPum(%RCf$9Xs*%BYu-V+JGIYr-w`m6Ab@IyGzgN z?Jb!V)Q>_6H+sp9u@iQiSGFu+>vPmpZ+lNrpUL;{_&%5qM8*oYfb0PxdT`_Y`ZZ<{ zpGV*8L)poq?fGvtZX!nf%p|?fx>gm9A-x6pF)GdK{Xj)TcqmC@A*7^W+Ch*kxPHu? z=I8fqi+emB4yXGb-wqCTl3qTNd@39#0)*XZ;vb%-a?QE~zZE+5B%@{Ws>-ShR|gve zh*N$?l+Ch}lB^RZ?2DkQV;p&>E*`8Q+jOzt0D~(hJc0*3J;FgI!9Uq$=Qgh2(Pg*a zg3jug{m;-q;7x-WPT+*(9r1QEqsG`MZ<&U&Wk#9KSh`tu+4nX3rcx_x+={41R4Qo2 z2qhp*Mk9Niq3SKtTuo(f!-GHc-LkQ)n#E4r_`g{o3d2Z-E?lI8HZm*-VdE{(`;%0B z;Qz{@4;J?)2LP}CD}(+|;M?x+pT|Fefv-IVS8ZNNJe5|wSnIzbng3#U{)5xJQ8hr^ zKHL24@)QmcWe#rco*617CHQ&x(IAwd1qY=#_#WCg85uwv07!@(qy%r>LrV*$UXW1m z(YhxVPFjo-K_tzmG#!NzZ?<{k2j6F5ZT-K_(eO%(!5* z5+3Yu=P4;l&sh17$!TzXg0!qKIpEJa$xZbJ z)ipJ5B2f$|O?U`S%&{)lYDl#+7Wo22TOpO);+Wtdyv!KM9~BrxS~4+SE+L4>lyM|M zd3dhDumm98CrfNJ8-lct78jz4ZBF;~lD(}vJ0)p)83x$N)<=v~Ou3U;W;N`5+Gscf z@kXq;k(_1@x!4}^Wq1zqX??8eDYIJNSco|ktessu@mP}kBj}mcqm^g1s1>V97f0o- z;tUXfD`n!3EvBf2Nqt38P}^e1vy?}|#cmH~gzhrh5ixu+Yg%PNH>xH28WUVw)1b9d zq(&hZm)Ryk<<8rV+aGd(Yi{>7y+g+a{k(YsB#Q&*G0J2cYz7Vr2cqvMvL}K7LAT&y zjyNQrMT3)Oy*Jh1+;Mt$rIt&jbQLMlKSM=-9VYK3&tw_Z2!g_=vf*OuC%A+!4v*E`3QQUDr7{+5mwiFi*4n zC_oQ(%gp0WOGHyhQ$B<+OY4*xN-%&OR0?r@-P|`iRtyYdbo&w^@H1LUVWm}L90q12 z?9<>GSTtJB-K*PdGIcY`ZRhQjC9$*rXe+0L1dmRSc-o=5oKA~NA#~rEk<3l1u0AH~ z1A?JYQc6pqj*!g6$OUq3FYi5fe~!Q7qFeJK#C?FvJoMamdl@N$Qp$e(m-7?s_{cz| zm8598bBrsMcadp;3+5-cgF$EI!Az?BSZ)B#dfPJiiqg7@nPW^hwqnpJhoXLV(DScP}Wyyy1?2OMbk%*FK_S(0e$CW^(}Ijn@W zAc?rAj#kCRpWe$vd+da;%0srePCMF#h%D=YR%%wt54>*b;z)+_4%&nu> z)@zn!Pi)JY5A|!;?A2b6jU~`tFMv!-K}D za=I@Jwj&SpNwM}6{@)R=EDB`VuL)|QNGIrNg^J6?1}O7&DWilU}h z_E>f>CYxqaB6Lp{At8;Ei52qf{=j$ENRX-Z^o_!r`X>RNu959L)fW`uxI#(w+f%a1-PXM2n@(J5$|m(ig#8V7Qg8*htP!i;*8an6_r5nC3(-6Hov;Dn{u7UvI zZ9zow2}f);IO-j@2-jSIUD6hF=X_@v)q#N`H4Hs5&_}ZERv7ecmRaEcO_*WP>WHv?xgNP;w;-(Wa_y zlI*k$;<>qJS(4&$@jP|maF=*;Xbq^T+)TqmB<9i6c4;(0Q^_}h2dY22>{@K1qd7g@4y4t zfmwC{oiq_t?tyt6DqFAQ-{4FcNt7V*U}6kTF$Md3$%t(0(PEh_PB@A%>lyADU@8oN z9$bLJBQ1h^51St&2HbPMxfX950I34;UU|%Jy9Az$9>oKf)gGP%=3t8;6CH*^N1gX+ zUWwN&sX+&vVi$*DX~9((H6j5(jsgPU9)Gj`yYRlIjHS0s*EYp1W&Lp-k37UR-Nmg@ zsw|jpr`u3lZEeuu^B0}ja`KBz-unj!%eu{1@4M~pM8!DyLmc*9>1dkLRe^&M(})E3 zBmRgLOJpHy$pjQ6Fu;OB4tRbg5v=fE9Hf?ZOjS{hUQty=h3e;tU^IV@H_i4s=$7hU zfS?Ju&yTB<`QrG;IjXLo~VFt2a!LGo_0k!m@m9WYmoEQdSNpgqu1`cR_TG` zsK3MeYzMo3R?Y*KrleGk!eS6Jo{5{Dx?VLts5h{6UX`{U&1{upXNHln+EwP^u%-hQ z>D6!)cUJ()l{p;GX z##R4oYSSRhlmLL%Vh{iV0Kx;r>bId#Ksus4Z{c%x7B_k*qqQSy1qOtIb)sH*7Qv;t!LX-aEP$ImU z$3RQQTa<^V7tH59!(+NrUZUUIfW|t6s;vL=O$3Lk_Cf06^_$Ch|e!?H!1lo_8 zZ!`ysO$!pbT(SCtog71O!#aK}*V!aqLnHgdu5!e{Xq!mBZZ08Swi|I_R5 zw_aU7%87U`AdihM@jTUI@>!RS5plT)KllYD4gu82q>A-EQOLyHKZhzMnXMqSEw9TJ zE(;Brd%~=OJEQeJ5((W3sJg-@=`Tc?r%BP1IKXwGUHx`R@R!3j2b|jolUA5Nr~4#gx3dcR{B-BXE;Ew-6KG;MoHei?7Wa^hOa8!9Bk|A#cjmH zyg`M4KATgZL=FYS?R1lolL@am`8}QAc6^q@7tB%x01)4XQ&73(bEtZjltxALJ|L1i zPA@*ERw*4X@TK|oNV85wAH~1B`$T!x^YAA%J8`*PKKNm&wdheAbmYqk2aR?UTTMDh|3p*J6wQ0ZR zqF|wtR;hWJ3V{b4-&z}9g%<=UI*hs|#tmlTJNbAXkTjS@<`>38MJ4bJ zUg;!l1iAsEtW;o%{^1rzeiLCIQ;GI?RpM4PSI^QP?n<=Y!{bMcab%6bC;v7cg5pjy zn0RK=uHv6+u3a+SR#ZN&@J>+^x13I~)1zC=DrJqSnYWTKo^V(6{Bv~c1vAKtewD9Z zKA6ji7_T9ZebMH9(yo#{0cDGPKQ&CVpuVTykixvRqvfcB_cx-zWz^7j7`n+#AU>6} zflII Date: Wed, 8 Jan 2014 13:28:18 -0500 Subject: [PATCH 162/238] Bump mpyq version. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0f2fc7a7..c9dee97d 100644 --- a/setup.py +++ b/setup.py @@ -46,7 +46,7 @@ ] }, - install_requires=['mpyq>=0.2.3', 'argparse', 'ordereddict', 'unittest2'] if float(sys.version[:3]) < 2.7 else ['mpyq>=0.2.3'], + install_requires=['mpyq>=0.2.4', 'argparse', 'ordereddict', 'unittest2'] if float(sys.version[:3]) < 2.7 else ['mpyq>=0.2.4'], packages=setuptools.find_packages(), include_package_data=True, zip_safe=True From 04f06a1fd7ce5c588c3ac264a623b2a99f039f1c Mon Sep 17 00:00:00 2001 From: David Joerg Date: Sun, 19 Jan 2014 17:52:25 -0500 Subject: [PATCH 163/238] workaround for objects that appear in selections but not in tracker events somehow --- sc2reader/engine/plugins/context.py | 8 +++++++- .../2.0.11.26825/bad_unit_ids_1.SC2Replay | Bin 0 -> 35148 bytes .../2.0.9.26147/bad_unit_ids_2.SC2Replay | Bin 0 -> 44982 bytes test_replays/test_all.py | 5 +++++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay create mode 100644 test_replays/2.0.9.26147/bad_unit_ids_2.SC2Replay diff --git a/sc2reader/engine/plugins/context.py b/sc2reader/engine/plugins/context.py index d1be8c13..f7ea9862 100644 --- a/sc2reader/engine/plugins/context.py +++ b/sc2reader/engine/plugins/context.py @@ -85,8 +85,14 @@ def handleSelectionEvent(self, event, replay): # If we have tracker events, the unit must already exist and must already # have the correct unit type. + elif unit_id in replay.objects: + unit = replay.objects[unit_id] + + # Except when it doesn't. else: - unit = replay.objects[unit_id] + unit = replay.datapack.create_unit(unit_id, unit_type, event.frame) + replay.objects[unit_id] = unit + # Selection events hold flags on units (like hallucination) unit.apply_flags(intra_subgroup_flags) diff --git a/test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay b/test_replays/2.0.11.26825/bad_unit_ids_1.SC2Replay new file mode 100644 index 0000000000000000000000000000000000000000..f2ea19f4f8d1850aad636de119b120cb500e34ef GIT binary patch literal 35148 zcmeEsWl&vRv*rN~a?pc2!QDA%kb}ERf(CbYcbDMq?(VL^f(3VXOM(UhVe;O&-`ra> zRr7ypzTQ8&y7#lY_v)%%y=w1AQAL#)01E&BfB=BVUj>g0fMr&9HF6erHZpf5mz5=V zHgmK!@*?KofQ3f|fM8)kKp+T!0K!88B^ARVgYI(SfFK|Os3`^p3E^*mf6Kos@b3!z zKT`ok6;-0Szi+D$1^~bT-~qnD0Dx~O06_lNhxWg%;vdXEVi)v3HU59<|JXnNy8emt z-$m*_jkkX}p#XqvyfDLiQQdRbTBss}x#Rn^C!k^Nt%{!CsD8A~izofRp#Rc})*eX( z=GW&93F`GWo+~yyO7yu9+2LOwsZe(KPCFfvo<^l_k^v}@+5dcu<1cG3ZK$E|!VSupcD$WkB z4lXVT|J?oq2Maod1%l`iK!QjhATkJm3L1w&2LZq!AQlh?1o$T=r>?rZsFJ+8zMzXE zo3Oc?vzLSU|MdJHDZ;O7VS%tnI%dum|0_NK2nvNk_?zlK62Shi1hD@kfQ5x65Vf(g zb+9LwvNdvb0m1?h;9&uju?e?G!;Am^ z_kSV9NTLgFjk3*HsES8F+j7Z_l2#`4yx87ZRu3N3OIODb5x_or+