From 9cd3c9caf5cab26969874450d9116ff9e3b78cea Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:01:11 +0000 Subject: [PATCH 01/14] [2] add main.py --- BoriskovaDV/docs/data/2-nd-exercise/main.py | 105 ++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/main.py diff --git a/BoriskovaDV/docs/data/2-nd-exercise/main.py b/BoriskovaDV/docs/data/2-nd-exercise/main.py new file mode 100644 index 0000000..58f1b3a --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/main.py @@ -0,0 +1,105 @@ +import sys +import os + +class GridPoint: + def __init__(self, x, y): + self.x = x + self.y = y + self.blocked = False + self.is_start = False + self.is_exit = False + + def can_step(self): + return not self.blocked + +class Labyrinth: + def __init__(self, w, h): + self.w = w + self.h = h + self.grid = [[GridPoint(x, y) for x in range(w)] for y in range(h)] + self.start_point = None + self.exit_point = None + + def get_point(self, x, y): + if 0 <= x < self.w and 0 <= y < self.h: + return self.grid[y][x] + return None + + def set_point(self, x, y, typ): + p = self.get_point(x, y) + if not p: + return + if typ == 'wall': + p.blocked = True + elif typ == 'start': + if self.start_point: + self.start_point.is_start = False + p.is_start = True + p.blocked = False + self.start_point = p + elif typ == 'exit': + if self.exit_point: + self.exit_point.is_exit = False + p.is_exit = True + p.blocked = False + self.exit_point = p + elif typ == 'path': + p.blocked = False + +class MazeLoader: + def load(self, filename): + raise NotImplementedError + +class TextMazeLoader(MazeLoader): + def load(self, filename): + with open(filename, 'r') as f: + lines = [line.rstrip('\n') for line in f] + h = len(lines) + w = max(len(line) for line in lines) if h > 0 else 0 + start_cnt = 0 + exit_cnt = 0 + lab = Labyrinth(w, h) + + for y, line in enumerate(lines): + for x, ch in enumerate(line): + if ch == '#': + lab.set_point(x, y, 'wall') + elif ch == 'S': + lab.set_point(x, y, 'start') + start_cnt += 1 + elif ch == 'E': + lab.set_point(x, y, 'exit') + exit_cnt += 1 + else: + lab.set_point(x, y, 'path') + if start_cnt != 1 or exit_cnt != 1: + raise ValueError(f"Need exactly one S and one E. Found S={start_cnt}, E={exit_cnt}") + return lab + +class TextView: + def display(self, lab): + os.system('cls' if os.name == 'nt' else 'clear') + print("=" * (lab.w * 2 + 4)) + print(" LABYRINTH") + print("=" * (lab.w * 2 + 4)) + for y in range(lab.h): + print(" ", end='') + for x in range(lab.w): + p = lab.get_point(x, y) + if p == lab.start_point: + print('S', end=' ') + elif p == lab.exit_point: + print('E', end=' ') + elif p.blocked: + print('#', end=' ') + else: + print('.', end=' ') + print() + print("=" * (lab.w * 2 + 4)) + print(" S - start E - exit # - wall . - path") + +if __name__ == "__main__": + loader = TextMazeLoader() + lab = loader.load("maze/maze1.txt") + view = TextView() + view.display(lab) \ No newline at end of file -- 2.43.0 From 43ca559493f3b86f2d00b11371253d034019e72c Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:07:50 +0000 Subject: [PATCH 02/14] [2] add pathfinding algorithms --- BoriskovaDV/docs/data/2-nd-exercise/main.py | 104 +++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/BoriskovaDV/docs/data/2-nd-exercise/main.py b/BoriskovaDV/docs/data/2-nd-exercise/main.py index 58f1b3a..ed50568 100644 --- a/BoriskovaDV/docs/data/2-nd-exercise/main.py +++ b/BoriskovaDV/docs/data/2-nd-exercise/main.py @@ -1,5 +1,7 @@ import sys import os +from collections import deque +import heapq class GridPoint: def __init__(self, x, y): @@ -46,6 +48,16 @@ class Labyrinth: elif typ == 'path': p.blocked = False + def neighbors(self, p): + dirs = [(0, -1), (0, 1), (-1, 0), (1, 0)] + res = [] + for dx, dy in dirs: + nx, ny = p.x + dx, p.y + dy + nb = self.get_point(nx, ny) + if nb and nb.can_step(): + res.append(nb) + return res + class MazeLoader: def load(self, filename): raise NotImplementedError @@ -76,6 +88,92 @@ class TextMazeLoader(MazeLoader): raise ValueError(f"Need exactly one S and one E. Found S={start_cnt}, E={exit_cnt}") return lab +class SearchAlgorithm: + def find_way(self, lab, start, goal): + raise NotImplementedError + + def _build_path(self, prev, start, goal): + path = [] + cur = goal + while cur: + path.append(cur) + cur = prev.get(cur) + path.reverse() + return path + + def get_visited(self): + return getattr(self, '_visited', 0) + +class BreadthFirst(SearchAlgorithm): + def find_way(self, lab, start, goal): + q = deque([start]) + prev = {start: None} + seen = {start} + while q: + cur = q.popleft() + if cur == goal: + self._visited = len(seen) + return self._build_path(prev, start, goal) + for nb in lab.neighbors(cur): + if nb not in seen: + seen.add(nb) + prev[nb] = cur + q.append(nb) + self._visited = len(seen) + return [] + +class DepthFirst(SearchAlgorithm): + def find_way(self, lab, start, goal): + stack = [start] + prev = {start: None} + seen = {start} + while stack: + cur = stack.pop() + if cur == goal: + self._visited = len(seen) + return self._build_path(prev, start, goal) + for nb in lab.neighbors(cur): + if nb not in seen: + seen.add(nb) + prev[nb] = cur + stack.append(nb) + self._visited = len(seen) + return [] + +class AStar(SearchAlgorithm): + def _dist(self, a, b): + return abs(a.x - b.x) + abs(a.y - b.y) + + def find_way(self, lab, start, goal): + heap = [] + cnt = 0 + start_f = self._dist(start, goal) + heapq.heappush(heap, (start_f, cnt, start)) + cnt += 1 + prev = {} + g = {start: 0} + f = {start: start_f} + seen = set() + while heap: + cur_f, _, cur = heapq.heappop(heap) + seen.add(cur) + if cur == goal: + self._visited = len(seen) + return self._build_path(prev, start, goal) + if cur_f > f.get(cur, float('inf')): + continue + for nb in lab.neighbors(cur): + new_g = g[cur] + 1 + if new_g < g.get(nb, float('inf')): + prev[nb] = cur + g[nb] = new_g + new_f = new_g + self._dist(nb, goal) + f[nb] = new_f + heapq.heappush(heap, (new_f, cnt, nb)) + cnt += 1 + self._visited = len(seen) + return [] + class TextView: def display(self, lab): os.system('cls' if os.name == 'nt' else 'clear') @@ -102,4 +200,8 @@ if __name__ == "__main__": loader = TextMazeLoader() lab = loader.load("maze/maze1.txt") view = TextView() - view.display(lab) \ No newline at end of file + view.display(lab) + print("\nTesting BFS...") + bfs = BreadthFirst() + path = bfs.find_way(lab, lab.start_point, lab.exit_point) + print(f"BFS path length: {len(path)} visited: {bfs.get_visited()}") \ No newline at end of file -- 2.43.0 From 3dc7e19f49775b277df489ce76bb6341d8df7ff8 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:09:48 +0000 Subject: [PATCH 03/14] [2] implement maze solver with statistics collection --- BoriskovaDV/docs/data/2-nd-exercise/main.py | 42 +++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/BoriskovaDV/docs/data/2-nd-exercise/main.py b/BoriskovaDV/docs/data/2-nd-exercise/main.py index ed50568..d081b64 100644 --- a/BoriskovaDV/docs/data/2-nd-exercise/main.py +++ b/BoriskovaDV/docs/data/2-nd-exercise/main.py @@ -2,6 +2,7 @@ import sys import os from collections import deque import heapq +import time class GridPoint: def __init__(self, x, y): @@ -174,6 +175,40 @@ class AStar(SearchAlgorithm): self._visited = len(seen) return [] +class LabyrinthSolver: + def __init__(self, lab): + self.lab = lab + self.algorithm = None + + def set_algorithm(self, algo): + self.algorithm = algo + + def solve(self): + if not self.algorithm: + return None + t0 = time.perf_counter() + path = self.algorithm.find_way(self.lab, self.lab.start_point, self.lab.exit_point) + t1 = time.perf_counter() + ms = (t1 - t0) * 1000 + return ms, self.algorithm.get_visited(), len(path) + +def run_experiment(maze_file, algo, runs=5): + loader = TextMazeLoader() + lab = loader.load(maze_file) + total_ms = 0 + total_visited = 0 + total_len = 0 + for _ in range(runs): + solver = LabyrinthSolver(lab) + solver.set_algorithm(algo) + stats = solver.solve() + if stats: + ms, vis, plen = stats + total_ms += ms + total_visited += vis + total_len += plen + return total_ms / runs, total_visited / runs, total_len / runs + class TextView: def display(self, lab): os.system('cls' if os.name == 'nt' else 'clear') @@ -197,11 +232,12 @@ class TextView: print(" S - start E - exit # - wall . - path") if __name__ == "__main__": + # quick demo loader = TextMazeLoader() lab = loader.load("maze/maze1.txt") view = TextView() view.display(lab) - print("\nTesting BFS...") + print("\nRunning experiment on maze1.txt with BFS...") bfs = BreadthFirst() - path = bfs.find_way(lab, lab.start_point, lab.exit_point) - print(f"BFS path length: {len(path)} visited: {bfs.get_visited()}") \ No newline at end of file + avg_t, avg_v, avg_l = run_experiment("maze/maze1.txt", bfs, runs=3) + print(f"BFS: time={avg_t:.3f}ms visited={avg_v:.0f} length={avg_l:.0f}") \ No newline at end of file -- 2.43.0 From fab92c67348441811c83ea8632f6d2787e85a04a Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:12:05 +0000 Subject: [PATCH 04/14] [2] add interactive player controls and undo feature --- BoriskovaDV/docs/data/2-nd-exercise/main.py | 156 ++++++++++++++++---- 1 file changed, 127 insertions(+), 29 deletions(-) diff --git a/BoriskovaDV/docs/data/2-nd-exercise/main.py b/BoriskovaDV/docs/data/2-nd-exercise/main.py index d081b64..f3cabfd 100644 --- a/BoriskovaDV/docs/data/2-nd-exercise/main.py +++ b/BoriskovaDV/docs/data/2-nd-exercise/main.py @@ -192,6 +192,86 @@ class LabyrinthSolver: ms = (t1 - t0) * 1000 return ms, self.algorithm.get_visited(), len(path) +class Player: + def __init__(self, start, lab): + self.current = start + self.last = None + self.lab = lab + + def move(self, cell): + if cell and cell.can_step(): + self.last = self.current + self.current = cell + return True + return False + + def undo(self): + if self.last: + self.current, self.last = self.last, None + return True + return False + +class Command: + def do(self): + raise NotImplementedError + def revert(self): + raise NotImplementedError + +class MoveCommand(Command): + def __init__(self, player, dx, dy, lab): + self.player = player + self.dx = dx + self.dy = dy + self.lab = lab + self.done = False + + def do(self): + nx = self.player.current.x + self.dx + ny = self.player.current.y + self.dy + target = self.lab.get_point(nx, ny) + if target and target.can_step(): + self.player.move(target) + self.done = True + return True + return False + + def revert(self): + if self.done: + self.player.undo() + self.done = False + return True + return False + +class InteractiveView: + def __init__(self, lab, player): + self.lab = lab + self.player = player + + def render(self): + os.system('cls' if os.name == 'nt' else 'clear') + print("=" * (self.lab.w * 2 + 4)) + print(" LABYRINTH (P = player)") + print("=" * (self.lab.w * 2 + 4)) + for y in range(self.lab.h): + print(" ", end='') + for x in range(self.lab.w): + p = self.lab.get_point(x, y) + if self.player.current == p: + print('P', end=' ') + elif p == self.lab.start_point: + print('S', end=' ') + elif p == self.lab.exit_point: + print('E', end=' ') + elif p.blocked: + print('#', end=' ') + else: + print('.', end=' ') + print() + print("=" * (self.lab.w * 2 + 4)) + print(f" Position: ({self.player.current.x},{self.player.current.y})") + print(" Controls: h(left) j(down) k(up) l(right) u=undo q=quit") + print(" Auto-search: b=BFS d=DFS a=A*") + def run_experiment(maze_file, algo, runs=5): loader = TextMazeLoader() lab = loader.load(maze_file) @@ -209,35 +289,53 @@ def run_experiment(maze_file, algo, runs=5): total_len += plen return total_ms / runs, total_visited / runs, total_len / runs -class TextView: - def display(self, lab): - os.system('cls' if os.name == 'nt' else 'clear') - print("=" * (lab.w * 2 + 4)) - print(" LABYRINTH") - print("=" * (lab.w * 2 + 4)) - for y in range(lab.h): - print(" ", end='') - for x in range(lab.w): - p = lab.get_point(x, y) - if p == lab.start_point: - print('S', end=' ') - elif p == lab.exit_point: - print('E', end=' ') - elif p.blocked: - print('#', end=' ') - else: - print('.', end=' ') - print() - print("=" * (lab.w * 2 + 4)) - print(" S - start E - exit # - wall . - path") - if __name__ == "__main__": - # quick demo loader = TextMazeLoader() lab = loader.load("maze/maze1.txt") - view = TextView() - view.display(lab) - print("\nRunning experiment on maze1.txt with BFS...") - bfs = BreadthFirst() - avg_t, avg_v, avg_l = run_experiment("maze/maze1.txt", bfs, runs=3) - print(f"BFS: time={avg_t:.3f}ms visited={avg_v:.0f} length={avg_l:.0f}") \ No newline at end of file + player = Player(lab.start_point, lab) + view = InteractiveView(lab, player) + view.render() + + solver = LabyrinthSolver(lab) + history = [] + + while True: + key = input("\n > ").lower() + if key == 'q': + print("Goodbye!") + break + elif key == 'b': + solver.set_algorithm(BreadthFirst()) + ms, vis, plen = solver.solve() + print(f"BFS: {ms:.3f}ms, visited={vis}, length={plen}") + elif key == 'd': + solver.set_algorithm(DepthFirst()) + ms, vis, plen = solver.solve() + print(f"DFS: {ms:.3f}ms, visited={vis}, length={plen}") + elif key == 'a': + solver.set_algorithm(AStar()) + ms, vis, plen = solver.solve() + print(f"A*: {ms:.3f}ms, visited={vis}, length={plen}") + elif key in ('h','j','k','l'): + moves = {'h': (-1,0), 'l': (1,0), 'k': (0,-1), 'j': (0,1)} + dx, dy = moves[key] + cmd = MoveCommand(player, dx, dy, lab) + if cmd.do(): + history.append(cmd) + view.render() + if player.current == lab.exit_point: + print("\n*** YOU REACHED THE EXIT! ***") + print(f"Total moves: {len(history)}") + break + else: + print("Can't go there - wall!") + elif key == 'u': + if history: + cmd = history.pop() + cmd.revert() + view.render() + print("Undo last move") + else: + print("Nothing to undo") + else: + print("Unknown command") \ No newline at end of file -- 2.43.0 From e053d90c29d7f29acc458cc99bb4abe5533ce377 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:13:40 +0000 Subject: [PATCH 05/14] [2] generate performance plots from experimental data --- BoriskovaDV/docs/data/2-nd-exercise/main.py | 97 +++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/BoriskovaDV/docs/data/2-nd-exercise/main.py b/BoriskovaDV/docs/data/2-nd-exercise/main.py index f3cabfd..2baa9c2 100644 --- a/BoriskovaDV/docs/data/2-nd-exercise/main.py +++ b/BoriskovaDV/docs/data/2-nd-exercise/main.py @@ -3,6 +3,9 @@ import os from collections import deque import heapq import time +import csv +import matplotlib.pyplot as plt +import numpy as np class GridPoint: def __init__(self, x, y): @@ -289,7 +292,101 @@ def run_experiment(maze_file, algo, runs=5): total_len += plen return total_ms / runs, total_visited / runs, total_len / runs +def generate_plots(results): + mazes = list(set([r['maze'] for r in results])) + strategies = ['BFS', 'DFS', 'AStar'] + + fig, axes = plt.subplots(1, 3, figsize=(15, 5)) + x = np.arange(len(mazes)) + width = 0.25 + + for i, strat in enumerate(strategies): + times = [] + for maze in mazes: + val = next((r['time_ms'] for r in results if r['maze'] == maze and r['strategy'] == strat), 0) + times.append(val) + axes[0].bar(x + i*width, times, width, label=strat) + axes[0].set_xlabel('Maze') + axes[0].set_ylabel('Time (ms)') + axes[0].set_title('Execution Time') + axes[0].set_xticks(x + width) + axes[0].set_xticklabels(mazes, rotation=45, ha='right') + axes[0].legend() + axes[0].grid(True, alpha=0.3) + + for i, strat in enumerate(strategies): + visited = [] + for maze in mazes: + val = next((r['visited_cells'] for r in results if r['maze'] == maze and r['strategy'] == strat), 0) + visited.append(val) + axes[1].bar(x + i*width, visited, width, label=strat) + axes[1].set_xlabel('Maze') + axes[1].set_ylabel('Visited Cells') + axes[1].set_title('Visited Cells') + axes[1].set_xticks(x + width) + axes[1].set_xticklabels(mazes, rotation=45, ha='right') + axes[1].legend() + axes[1].grid(True, alpha=0.3) + + for i, strat in enumerate(strategies): + lengths = [] + for maze in mazes: + val = next((r['path_length'] for r in results if r['maze'] == maze and r['strategy'] == strat), 0) + lengths.append(val) + axes[2].bar(x + i*width, lengths, width, label=strat) + axes[2].set_xlabel('Maze') + axes[2].set_ylabel('Path Length') + axes[2].set_title('Path Length') + axes[2].set_xticks(x + width) + axes[2].set_xticklabels(mazes, rotation=45, ha='right') + axes[2].legend() + axes[2].grid(True, alpha=0.3) + + plt.tight_layout() + plt.savefig('performance_comparison.png', dpi=150, bbox_inches='tight') + plt.show() + if __name__ == "__main__": + if len(sys.argv) > 1 and sys.argv[1] == 'experiment': + print("Running experiments on all mazes...") + maze_files = [ + ("maze/maze1.txt", "Small 10x6"), + ("maze/maze10x10.txt", "Medium 10x10"), + ("maze/maze20x20.txt", "Large 20x20"), + ("maze/maze_empty.txt", "Empty 15x15"), + ("maze/maze_no_exit.txt", "No exit 10x10") + ] + algorithms = [ + ("BFS", BreadthFirst()), + ("DFS", DepthFirst()), + ("AStar", AStar()) + ] + results = [] + for fname, label in maze_files: + print(f"Testing {label}...") + for aname, algo in algorithms: + try: + avg_t, avg_v, avg_l = run_experiment(fname, algo, runs=3) + results.append({ + 'maze': label, + 'strategy': aname, + 'time_ms': avg_t, + 'visited_cells': avg_v, + 'path_length': avg_l + }) + print(f" {aname}: time={avg_t:.3f}ms visited={avg_v:.0f} length={avg_l:.0f}") + except Exception as e: + print(f" {aname}: ERROR {e}") + # save csv + with open('experiment_results.csv', 'w', newline='', encoding='utf-8') as f: + writer = csv.DictWriter(f, fieldnames=['maze', 'strategy', 'time_ms', 'visited_cells', 'path_length']) + writer.writeheader() + writer.writerows(results) + generate_plots(results) + print("Done. Results saved to experiment_results.csv and performance_comparison.png") + sys.exit(0) + + # else interactive mode loader = TextMazeLoader() lab = loader.load("maze/maze1.txt") player = Player(lab.start_point, lab) -- 2.43.0 From 476ca1451e30270f63bee63f6a61dd2b92f14e55 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:14:09 +0000 Subject: [PATCH 06/14] [2] add maze1.txt --- BoriskovaDV/docs/data/2-nd-exercise/maze/maze1.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/maze/maze1.txt diff --git a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze1.txt b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze1.txt new file mode 100644 index 0000000..89b0bf7 --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze1.txt @@ -0,0 +1,7 @@ +########## +#S # +# ####### # +# # # # +# # ### # # +# # E # +########## \ No newline at end of file -- 2.43.0 From 7cb73be269cb87f40f870bb57b681b472a3e364a Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:14:39 +0000 Subject: [PATCH 07/14] [2] add maze10x10.txt --- BoriskovaDV/docs/data/2-nd-exercise/maze/maze10x10.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/maze/maze10x10.txt diff --git a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze10x10.txt b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze10x10.txt new file mode 100644 index 0000000..c8e24ac --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze10x10.txt @@ -0,0 +1,10 @@ +########## +#S # +# # #### # +# # # +# #### # # +# # # +# #### # # +# # # +# # +########E# \ No newline at end of file -- 2.43.0 From 9e04d5930e19aed8f5b6d97238732b3cb9c1108f Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:15:05 +0000 Subject: [PATCH 08/14] [2] add maze20x20.txt --- .../data/2-nd-exercise/maze/maze20x20.txt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/maze/maze20x20.txt diff --git a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze20x20.txt b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze20x20.txt new file mode 100644 index 0000000..648e1df --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze20x20.txt @@ -0,0 +1,21 @@ +#################### +#S # +# ############### # +# # # # +# # ######### # # # +# # # # # # # +# # # ##### # # # # +# # # # # # # # # +# # # # # # # # # # +# # # # # # # # # +# # # ##### # # # # +# # # # # # # +# # ######### # # # +# # # # +# ############### # +# # +# ############### # +# # # # +# # ########### # # +# E# +#################### \ No newline at end of file -- 2.43.0 From 71b3fecbcf25e3e7ae7dbe7f8393fcdbcc25fa21 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:15:41 +0000 Subject: [PATCH 09/14] [2] add maze_empty.txt --- .../docs/data/2-nd-exercise/maze/maze_empty.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/maze/maze_empty.txt diff --git a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_empty.txt b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_empty.txt new file mode 100644 index 0000000..70f6e29 --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_empty.txt @@ -0,0 +1,15 @@ +############### +#S # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# E # +############### \ No newline at end of file -- 2.43.0 From f776455086bbb62453b65f9c1bce76a48f3ab497 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:16:07 +0000 Subject: [PATCH 10/14] [2] add maze_no_exit.txt --- BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt diff --git a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt new file mode 100644 index 0000000..b79067d --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt @@ -0,0 +1,6 @@ +########## +#S # +# # # +# # #### # +# # # +########## \ No newline at end of file -- 2.43.0 From 66a16fb3a17d57ae9104081cd515e28b501d6838 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:18:19 +0000 Subject: [PATCH 11/14] [2] feet: add blocked exit in no exit maze --- BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt index b79067d..1568be0 100644 --- a/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt +++ b/BoriskovaDV/docs/data/2-nd-exercise/maze/maze_no_exit.txt @@ -3,4 +3,5 @@ # # # # # #### # # # # -########## \ No newline at end of file +########## +E######### \ No newline at end of file -- 2.43.0 From f1b42d1c24a4c2eb2a71e8b62e06dc8c6395bd43 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:20:26 +0000 Subject: [PATCH 12/14] Upload files to "BoriskovaDV/docs/data/2-nd-exercise" --- .../data/2-nd-exercise/experiment_results.csv | 16 ++++++++++++++++ .../2-nd-exercise/performance_comparison.png | Bin 0 -> 86446 bytes 2 files changed, 16 insertions(+) create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/experiment_results.csv create mode 100644 BoriskovaDV/docs/data/2-nd-exercise/performance_comparison.png diff --git a/BoriskovaDV/docs/data/2-nd-exercise/experiment_results.csv b/BoriskovaDV/docs/data/2-nd-exercise/experiment_results.csv new file mode 100644 index 0000000..03f0486 --- /dev/null +++ b/BoriskovaDV/docs/data/2-nd-exercise/experiment_results.csv @@ -0,0 +1,16 @@ +maze,strategy,time_ms,visited_cells,path_length +Small 10x6,BFS,0.05722500009142095,25.0,16.0 +Small 10x6,DFS,0.05680966667872175,24.0,16.0 +Small 10x6,AStar,0.04801966664066034,23.0,16.0 +Medium 10x10,BFS,0.04772166676048073,47.0,16.0 +Medium 10x10,DFS,0.034641333362136116,44.0,30.0 +Medium 10x10,AStar,0.0983669999641279,47.0,16.0 +Large 20x20,BFS,0.09949400002066493,100.0,36.0 +Large 20x20,DFS,0.07004933331700158,75.0,68.0 +Large 20x20,AStar,0.16450733316257052,85.0,36.0 +Empty 15x15,BFS,0.13264433331035738,133.0,17.0 +Empty 15x15,DFS,0.11371733338213137,161.0,89.0 +Empty 15x15,AStar,0.1543506666621397,65.0,17.0 +No exit 10x10,BFS,0.04392100011803753,25.0,0.0 +No exit 10x10,DFS,0.05871466661725814,25.0,0.0 +No exit 10x10,AStar,0.046440666665148456,25.0,0.0 diff --git a/BoriskovaDV/docs/data/2-nd-exercise/performance_comparison.png b/BoriskovaDV/docs/data/2-nd-exercise/performance_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..67f9189fa09b261a61d45ea35cc7ab265eabae41 GIT binary patch literal 86446 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 z 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 aEuZyPnzk^$UM%x_CykqCd49~I?f(b=D~v4w literal 0 HcmV?d00001 -- 2.43.0 From 4382efbe09013398096c6d0055ee08329d81fff5 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:21:03 +0000 Subject: [PATCH 13/14] Upload files to "BoriskovaDV/docs" --- .../performance_comparison-2-nd-exercise.png | Bin 0 -> 86446 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 BoriskovaDV/docs/performance_comparison-2-nd-exercise.png diff --git a/BoriskovaDV/docs/performance_comparison-2-nd-exercise.png b/BoriskovaDV/docs/performance_comparison-2-nd-exercise.png new file mode 100644 index 0000000000000000000000000000000000000000..67f9189fa09b261a61d45ea35cc7ab265eabae41 GIT binary patch literal 86446 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 z IPL5^q+1)pQ%d}hF4BXn-e>Aq2tc#8N7bGM%-z_$fL8n$Q9$0t61{c@S>&#b9~ z>e9mzx<^NPhisk=+cE2#A}2Ofp+8nI;&9PgUJNbmSdhFy*rBP1F8MKzoXMS^f7Y|7 zBlk_6b1|dkS4_7nW~NrP@zr4`OfhIN!D{)KIf=8-Y1C*=^xf!yaAN9^16>&-2A@9XP zjguGSDzN0)-G)tj>2uX>FB1nf(7BG`oEJv3IDy0M2cUnMi-s+E873|k>ijElhS5lH zkL}8fGA9cPy*qo|Im=Tm^X7Bf-FBGF_buEeVd*a6d4qo6eNQf9G7s?Yu$|6U0g zZKH>0YRtN3-IpJY4sK+SeEk76CNFcKnn~cq+($=pKdM$^gq+%upc+ZkA*z#&=E>@h zd}er!N_Cl2l3wB&evv@pQ<*eN0vX|jRUy1X|XG`uvayGjh zL%%FS${Ti8+)FQ`0A^RWsT7(f#)+}RIrCFnw&n*d<_BR!5S|{XfZ^J!QkcFsAdkip zG1b{OS86<7HN{w0`Zo)=<*%-m9)YyyoEZ^Leta&aC3FbdtyK3=U*7)bPITXhXFQwZ zE|tyGw#FlOo(D>YzO9)*6=R^>&}_KWzGTGfK9Xp(3d3IbE?OrD;|HqkWVCd{R%WmF4#gSra|_N^h*iS#8b6TE9^;AB&1=+2CmvUJdhg(XjJ zzE#%Xwbx*gC2?$g52Hr)2qdK42HjWBPDOxC??$@Y#J)>ZdGK3Ra;bb)W0DCucpD}J z4TR`THKgGL>YH!`X##>~l5?Ki7%)PgA}fyj=yo-q%`|+q)?!H1C{8w)bdHa6u?#SH7pccKS#QT6dq zBDW2hwzjlA)v@FC(TO@&VziBw(sQ6FVa%%iYfsvZgGEgRlle&V(DO%SD?aZI zUzmJ?RRWhOCh!I?GL%#7)!nI~f%DvDski0(V5#I!rLm>F^#$YsZ13l!PWd#Lt)=k@ zN)f~AaSE{LG$=#G8=WEF?i)F}Y|R{rvl`P@;bfNr;~Coh*K9D4D!K((KawQhuciOZ zd@t=l+d<@4kCZ7Ap*?5LL3D(rbH<%n{tB;$;K+`Hj0rJfu_Z^55Z7fB1Dq0}tq6}2 zvFPHhLfUh~!?`wF8T`$KStjo?I_A}`OUz&v6Emlb@HBmev`{6%6uHZ=9X=%_A`F|- zVH?zDs8s?fL{uGiXXTnT$)c!mhMuQ`tNEmmI^BtQHP?vSrK!_sgJmWI;Y+hBz!AcW ztYK!!Nr-Vi5;1V{YTgq*Qn&hfDe?90yb@be_%R83H4cw{<+>?wad68zuicu%RHCv~ z5cP_B-rZOXXnObX7tLt3l!=^=C5y+lOxa2?EyuBs_+G`@7qVltP4pE!HE2u~%wgsT zZVSS7M-F0|FBp(ItNR)*9Gb4|K+vy#&w0@?z7V0;9=5L}e5xZkyK>0;CA}q^5LI&@ zmz7do^bDR?B9B^oTMcTaxg~*4K9ctzvOY#zj|}S~I}E;Y090rnt4EeJkf(N$-!^I1 zte;da906H*EBibW|fF-dK0y_@}Wx=gzF9(Gz*racub0|OFd(y_^Dt&1hC2!dL z!d=Wwc%zoJ+hzi0=7u=hP${v`qCDfiA~^n}W3l3+=xkBnq*vt(p4ZV`zG@py(Ft!ZJtGZ(AKWWtH@*g}^dP zjCk5rcKGDOqmNAZTv_!8_51b-dwJ#=H*_eFkVaM9n5R7m?@F|MAo1w{{li12@^R~) z_@~73hm~?zgafgU=pY37q&gowo)jej63#6?tJ{`-X?d z>*;8KRg;oQjYD}m!rW|W9+amG?k8#b zn(VfBU+O&P^)t8dI~w2ngMwcnQX6ySCokxd`vk{`!YR#g;1@}X-@L-&ObilQ*cNmB z%8dqfi|4J$&=Uh7j9FC~qvR9{zhf}{o zV_YsM5ay?lPBb*5OX7os)rjnF_x?QzvI)F*kWq(n{$W|E*Tkzk)*yui>dacOn$*!G zbKZ@2pB}#j#B%Y(Q30C({v)aJc8QdRYs_e+<^r5ZjhzSg==^Uw>!`t=m~ zZC=KI{bFdS>%RWk;X_;wKLT8szxl)$3zv3!6yJQz;e(&dxzg5mWcK~@In__KIud6+ z?Qrt#s%w14J_^56>$~0an}%$>5H`5W(MN@I$v7?s+va21!~5=pnJ^l-TF%z>Z=^Rq zN)tyP1mI21^LIJzf=vB9`!?;@*e;;YuI$9syKgMn3y@N}_FdfO{d%2wH~@yp>p&4* z*#KsB(qL|KvB_(OFWNK#^vZ~(`UEGuPNFHkZeDZM_Gs(jGlw+K-e54wg57M-A?&;?(71L zRyec+rBUy|u&zVqpg`LBx9B%KLJgANXib<98b$ChItnkJ&E>31f28C(v&n%XD-V)2 zS`A*KoI)1LDc(|e+NP}oZN||eT2!s+!6!SZ);ATIY?gp+G|LtmQQ$YRYD)3n_H^#r z_!;!UyGPH~j`dhr+W)~l=eEO8-LA#XSQ04(f=KrXpme^gzWaRHRS)-S9O>dt;7fCP zbdU65)CWTY`n(TKt}ml7;$4@pHOv7V98;}_vqtd!RLXUa%=m7cT-kY5=JbiOb$cG7 zQcDwrm?3@p_FdM>pwx&zm{(uh(u0xoZK2&e-op~-vv;U-uGGU`#l z68-P?JU)c1@}zVUzmuChGv&}?hPr8BDy)TJKYaF%?KYs<^Z0r}m|Q?#SvEyvXV}X- z^FRM1X z<>zlSl2%M}d0+|q5u5^(yAhNf72y=h1@5c3+HNky*4@vuvh|v^!alsS(W&y=f=>A4b4W`wTO6V#t^A_*RE0J7cZ+=N3f(Ln6ruqAwr;a z#_V1g0uSk-VTV2D!3tKF_kAW3Z`gTh3df%?5cp)RXXao;0Y!NaXMn04XM^J8T{4R} zSZ%dxEs-GPv7|$s9TmIL{)$#=?@1gUG->7WMyezc{DHRjJ5vBkD-BhmpYP05NI7fQ zUXom>4GsLIcMKBqa+y z@1{pbZ?}cvqz0+eyNV{!ePym;6w=lTf2+A)gDhr<&lyG!X+34iikT z(U7>=gu8k3eXz}*))5}pOGp_8I-ib2b?@B^hhshWo5!=#5Hz##TQvaj!ofJ|QWayz%4CY`++5MHn zPJ-pj;ZBki$Z?imUot~D8&hq2U& zpk*|^4JRCq!LpSaxh8vvWR6Q{eJStbTqD6RInXw9j`uV$-~(|qrQkK19xp~F4>e@k ztN!1RdGnrhj?!b!>_j|oFmPaer!{kkn{wPiN-240o0HjIyTS8`>@xJ!rf`j0PwFn{yobpyLxrpna_LZh51GG;#zEz*Nl(UF#^_`&WQl^HB}!Ghvc z8s4v8Ki^i?Wioum&Q)stIMn|3wENLI=ZqSV8-i4`!_9q6O^o#D+ zbZAxmV@v{o^4!8Z{b{sZaJx^fcZHx2LBYCn;e|F@9zhEqyDVnaYH)jQ)#m(8W*E(Z z$xpB2;w}zfQaU-0)NI!MzxP9=TineQW=n7ZHC z-!b2etr8Y6bNhE572|A93{^mIE%};fbqD6P5 zGm+wah_|1?`Lb!NZJ$0z{B4^qkxv)`RE=R%=O4qPyU#Qi&n)wVMJv^WJ=7$5sgzD}V$4&_0h(X+BBmTjjrv2#gW zV_VVW%ssTVXt7Hxk_>Se%*r%`48Z$L#O=;0@jKowvwE6a>I1Hy zv@3Y3P78~IACcjF&$w=pBgo!V{G&quUcIe^20*p2)n$w~@oXQ3pn#Mk6Tei_0i!2^ zV6Wh7=_mw(qDp*bk`cfcx%z>7(le@#qEU$tkl|j=C?%@o6g$bRa8BUr8;nb;%z=MMM|={@BU!TA_O^F(ZH`b_c}z5f9NMJ)WsADU%I1*2#8 zV-6ZgR3aXQG7rDGh|*g^B4X>g3I^Zg$!FK(5*Iv9egXqj+T^$^$D<1hHwu(4*3S`?q`J8!kSFa_(&r4}#X?3J8k^eAR ztH>K-g@EaZcQ5{hAa2gA#x#1c_bH{79of{Wa#$xkz}5Z;nxyqRp$sEo*IP25Vb^oX z8N6@(ntXU04Um0;C(Xpn<5MqIm*kK+2wxUI%V|-$vE64-H?kTiZs=LGOb|N4E``#|^_@)bYky?9XR zS+)r`5*kEX?Rb5O_e;q?b>9*YO}zM(v)G4KKn}h`;Ai)xWqsR$=MDw;$*n4J!Gx|Z zquT3oGW+0YTH;9OLDDdS`%dCaAFme=mPedY2=ZAK`C@7eWI?yLo^K9wIG$rn~(Ahiz8p~N=`K0H2X&FI2c`a>FMe6CoF!M@3kK! zO4iuABUt5?GI6>kfG#!W^m+-SO30Cl70J}1UKD)$>~a2K9`kf^>!J$U)<zs$H}N(n{c*Yf1NI`e%%fY@#K!D*a#Mgu5TZ; z#GaJ&{KK)=AD|~pZEeZ7Gb6KH^7)hPJsem`6Wr0ZtHxDpo{7)0-Dl2OZ=)TYZ%BeS zQqYhg?aEF|bMczm7JonAk3$b+woke?CB4l!k4?kPL!ZZ9_t^CKaq)dS4qvxdJ^!8n zA}XEniP%DvE(IoB>tuEf*NRHZ51Fe6oY`GcYu z#>Z0p@77s&&ONy>FK^KH-9R9-rfPM zu!YO{H9P`Ko7xQvx$lnLK}|4O6nKpDNIZ9gC`#n@Sgit4U*2ikjf};$wMdSZdx=9@ zed>!sB)MiSkj?lic+H!@C$qPnJFU06tjN+GtRL~d`rD!Q{Fymf6U9L{I!<0|%XnE0 zUW8xLpG8h@?K}0Y;b}BaEFu|F5;`ozbz)_!u_IMx@xYyHwl&_6n=rg){+3z#%K-7d zhJd1??zI#|j|Y-mXeH(p<)Yg4fdCae*+iB%uueGL8zo%$u(inL(@ys*oE?vYYe4Und$NF ztJm~?adx$FoZrtwPcn>z3*w8<_L!b#&Be`oE~|AKAt+&wRtoJSD}_g1ENALHH69B) zyS#p#nbz*xZK2o7YJyC5nEW%z-9_mk<;$9PfX3r=h{k2hmNgS5DWA1p$Q09$jmJVw z=FS`vF$hnU__0_dsATNdor3dvi)7Kq2&XZ)h){xE7|ulXq(1V$-*R*8^`ktbQ7!ts zx|Zn0KTa$s*0T&2M6#mB5x-iAEAdbiSr}vP!DppMCy!PbMC`twtVhSUCSO69m8doD z_;`9d3h9u?VH|Qd2Fw7}q#dx6(q`%?OU2=C21$T zNc<*h%!VcarX|ZBa4jvoyu6gy!Wlnt?)Ad4a6WY-{V!QbP<4(oz?~1-k9D>V(x0Ux zZc?h5Mebt3H6G(2k+{sAn4=*IhUeqduD%<`Eii3cRPYV7SGuz=+!w<#FnE=ePEwq3 zG28N92nB=m*lB!2u0QiWI_7#N!9ny1wgWruvMGV;ry|{$BQ|Qq*cBf&Z=x~4XPY6) z#wS}Yic0S4>`=w2uWRNWAB9;m0f&Z@IRM?s$Q5HPnK;rdp$x1VG>CRZ=XD1RaoRp*^Q_1m}00I{GgcC_4iy|3|&)R<%D4z2|w+ zrscrG;jS$)=*=)3oc=F4)p%Df*%4|1eR>@m( zKat}Q&rDDQyob##Cw@`e>&0xMhOHFJe{ek)&WWjIPl{OAWQL0Z11ZoRa%AR^C@5bb((a_n$^Lb-p67_U*%el4tGUWj&LA_edE9ducRN41 z71Kv8O-svGK0mxXsA}B9dDjQDC@wBeseX3!fN>|{r+x4uV)gBVUe0;XdN;^e+`Q25 zU~uvq<9njSuBzWw5Z)PRh0SA+Xb^LuzdHmB%(<+P?F8=L(d zwj5jD{J8xaIsS822M-I|5!t}jd4tP9Im)|atY}oXZrxK)GczZc5-3^fn?C>iM9CJo zmObG=`leR8ahLq|?isK@;|oLMlXC|XrJ!(pHLXGJsyvdGtk{u2Gr(-rv1}|1jY3$2 z6~$o_#nn;>7_GPd9#+~Ru8xi;J^^7F!QNR`NNDkW_;`R7Rh93gjTB!~rk4Osh@8X) zHW?e@x@76=2z}&@Tc}M z^pDMrZ`Rs6;r!akb#naMyf`_Qo3VIx7&jxL^k!gQrS^&Fx71s*>c1Pe`$k}+gLQkE zmBdRX3f6EHq0e`J>K^`y>vG4(CM;mFnPUG!$tRY=LWEPP1+&Hy6V;YIwjFl>(X%6+ z@@=JidB}xcg4rd1W!1`+r&vd#NfxMP78NM=0Yw8u4<}MfWh%FyNK#8OfI!(EE!>g8 z4~?h6f5yy?>Avy!%=7Wvx^7dOnVUxcZOiz#80h`$I*(@fsRUjWRO}tTkevNWl$V#9 zP0U$crq2ZiAaa5VEX{A@&Zi|rQtWD9DO}R&Qe%aoVT0IWqF2){7)4wRzExQVu)Yeu z?2#U}$LI?KFHWUBKM$~|V9Eh{4fE&E#}wf2EDy%^bPMa^`O%5A(C6hWLcaQ~UT98s z4Y%j{W7G4piqewZGOAci@Z|Ol(Zo3xJb~RrvZQ7p(cmyVf@#xB09f|3XLWhOE;pK( zR5oCoqoGq*k_@e%uE;t1<8t=YXxmlSa5xLzB>-;Bd+~eU*X@8hH&mz8!B<)Mg4$w3 zVP10H_Qe8%Zbxv<#}6M~(WEavuRMg*nGb6P+n|{-1+8oqEC1A3GEuF+ur^!{jOV^Br_zhcCoGvlbO_NjInl_+8e8@^v%I0+1-JYgNjZb9y|*Na5gGj`RfkHY>(8a@4< zud3a7G^FI9O6M&bHbkg9Lv%R`Dyw5D&O7&)v8cO4mBh@vHg!CXrZSr9)t9S%g)zU@ zGm)A|zRFp$Zb~W%&C=z|GafCX>!1XPeoOP-tsdS_83I;vVX%~{zkg-<_ox!a-)!D# zVGdss`SFR8)t!A~=O4a(=#L-s|KgSJ&hNh!_@z;9{r>mY3I6MEz(CAZKl;^I<_AB0 zn{{a0teD&=hc&m|(w#zc-a?o1buEMH`uk74S4z5m{deyk-y221>%U_?{-3?;{~uq# z)3ECDu@8zmFmvO4ul$m5`#WVUIvjpgc(Pn#PkwM%1sz{UDo}}4xxHeRVa-zdJ&T$( zPFN|)dHwZYxbeoDdIw!84h*)x^D?3&-(!=C%hE5`w)YKO<@Mh!mUlCtw%`9=^RJ~i z8DzSloHc(=(E&2TQ-E}^{y_`LD{38tf z_VCXI1qDX_L)vd2;`;Gf2jwZ8hl8NL3RGtOrr^Wf z`n-8FG0LGf1X|p@^RH#frUltk(uxLUkcry(53~v9iM)8Hl75=62~{eL`c;!E|Aluc zlpbU?32egm_CHoU7u-+O(pe5%cO0?~eA-rt#UNF*bJx+eLHBy9(>SS%GQ%p=?z9KO zyCds{^Xqo!R9F_GC6u~jja^nqqHtv8Yj(A3?YvR#Lrah%{VUs1-Yh~bpw8r5C#i7= z^1>)ZJLCxcJmcu#3vdL350d#gjl3fHs0d;I8vahs^9ae)GSh z>s{Y9JE*Pi{S$FTqaAv?!-QG5+e>D~I*+$q{XEP$Cp!ml5$=>J2l>s-j!%dK&`oRqlvE2^~EI^{VEU4xmI zfBg)=g4vxSKId<*Z|4ykGVl8P2hQ46T8pf1%Md8Y+S6H&qux?}UU!H_l(1y6xX$V4 zIr#X}KeYk9#w^>hE;+Yw)8D)fJIv3i;}>4M_FVhIPiKw0wqRyr$o1;BMPsHdJb3hz zThs2m7_cyG-iMX%$m%X4i~Q4!&iMPqqp^ z^TC*%sfoDjYjO&7=qcfA1T4V24=?H6PfWHc^Hb~To%!;<qy%EE9cq=IbW%F0#v zxTn#4>oEr5ncCHpV|?7tG6dApRK;rSAgCOcCe`ueTlkNq_SAH)c=rq7hs390=n{AS zep>r~O~E($(cO#wi`?3@cMxdZ5iz@@wKUxCzqO=_^Sa{pBT}2(*gB?6>dc%QoyN^^ zdEUE0?>l5+6Kr18EShHX!ui(I>mFkZo?btlG;-2@_l4m^3$OXMb9--FssQeDa13}g|;p~3y>>eE(XGy^OLx32d7AKKT*aquMDt1I}b_iQa_HgQJ8XagE!8-vJGXxAjcdvld z)JwY;M*&Va+Y9Z^+=p`I;lRmRx!tdF$40F-sGD&3ki?8J$sELQ;srP(ea(=UXZU@~ zuUOQikN)jL7;KJo?nEd{I_M|rGF?*n?nv+ejq$tfurO7sh@l@m8`!_)@3X>{L?t<>%576(7h@Tdipx`H@S zvxd!*G-(JJQD6ZAmfV_ZakzRlg)A+eB8Q#C2fnw!dgP`kel({P9t1INF2o?I=h=dX z03-uqPp2MtG@2&dRNA1&9^K}(qRVv1T5ZKI3|d>Sr{uK#Jo}wHx4S)LNYUn*9oV+V zumyPI@{#Jp;{#k9vw9mGsBpzA&Uc=9P%HwH`laJ;*)wed&pG1 zW7FaXjL52I;=U)Xtk%XLiz4VX-%g_hFzizTg@jV_t7z4-h6!`@@2X8*dvY550)vRg zs;x0siiIB=Dp@IYl7K_HG}Ema#_GP5?i<^wU;E*&7FpKm1TdtI6&k4zGtM z9bQdp^i+Hsam(j~mDy#)3jC)uKy?J&4Ot=ykW|6mt(!OMBfmq7IoVOeFj#cM!~>0o z?3zx%GbW89lNNQ4-mMZE7=4rW4$uWmut8_-YyV;X6bvlz^6yssmWsuY?{GM?4O_f$ z2kbYK1UAsdnW|txm1)&u8!&MnGl$*u@NPVaOuL%Fmrf)60cN=(i%9~9R;@62rWAh< zr*`V*2^p(U?yI{&DWhI4bLvMx;4>z2bBsHCzRDIYT&+P8H&_ZW2NyR7h@qZfpYi46 z2M^YA-U2uMz#B;}G%9Wg&$Zv0ZIC+o7-Dnve-b*}AfelScHZB?)QZ?z?-+x=Q<#0iu-?x@24aW%a zHohKj5tjq)fW&KpnUWN8 zcm=PFE829TXk$=r>-_weUMFHty1rYqpxL$u3z~S=THM2>q?Wj9$%o$iE+=ySj}Fxy z*C=gjzkb{QjZgf4e9QjZFHnjYaLJj@ukUW>4dJU_fj|56f|~yAj!Sx{XGU2+A~2)l zwx>tF6{w(JSrT2^RDAu3UEls=59@o;AG_wf$}^+aY9mB-O5fV|X0lsyY312;Qtv;I z0)GBqp`+4%H~-|_>?-)ejXTA<5WgCFbyu&6rN8bWLWhn9+yg zG7dN?5)!Gu=xE8>R;8Kv^`MdH_8n9t_J|^b(r7Zg&FxSRXs+qO@loT{S%(_#?Dere zJzw67vN?0$9nZjA`(;F=F<0n#n8G|1_R1Fg{ZbvIvY@;aEjI1OjjLo45Pth` zT3(ek6oGoTQxq2eijvZ!Fp3jgxuFz`^2(AP6wd(&4?} zi(%+HIPUePBzyhf{M>!!Owyt59x}waOx)BX(vL}cMkWV+X6oqUzn|XDU=SKPo0}Fo z1Yt@d{lTEg=RV+kw3V2IHa*$H`rM=4kpUNEnH~XQg6T?ODKjmU{DaS~sl!;3kzqwJ ziWmIyO+(xXt$OzAbx-_Q$$%gS-h&8qnaX7+Z$A3fr%~HLDX!wA=Sik$=^j`@C7Ob4 zBhcRu)`-DvmMHx8ynmMv8c$=48_fz_CHsSQn?I#l31~E0IkjeINVJ1A^F*_=fY1qG zGK$2smd`^{b94FWt9LM=xdc5oVdjQ(iUL`esA1B6I7zV-`z8&pqF_nsWZ#f?%e+TD z(A3lyb4T)5%NvnP?;_l4X1WLKU|AQ(v*gNCb~Mtn(pT^=)R*GnK<3>=0iw=$wYco8 zRk<3zjPsQ+^S-{#Hs$%#vZn^wN9B#LaJw-_HQN{v!W@9Iv(1>rdbP<`xxN9&q6dK} zTbg(TT*XlGNC2~q+Xuc@N*}lXUO%iaKMKrOmHWH*z0RMjk(yM~)+{_nJE>}zCu$M}({jpaa&!_Q(I&|uRk^4B?RENe(X5ah=bW|!Os2Ik&F=c^ zV;(p~1BYu)6%-Np=x%?f)#5SIv>sqaHdbd!N|$$M?W4VyzUSt}5b%PwzVq5xg+Ga3 z=dUuDoU==Bdxvk@C*`;Qmn87IVLz{TiC(NeQC{y7$WIzZtudnnESgt=o?=jV_fVlM zzek<|!>s!OHTLmLhnQh@Cp8FP{eG1y4NWQ6FZMLc_u}q@<3G5I^SsKTdBel0*;dDj z$DJ)m>e|lp7~iE zZji<5AD5K$@O^7k#L+DtopAZjIIB@KFb9t#+?ArE+(*rP{QPU?nFrPXI<}3*(ZFUZpH0fy)Ff}@$g@UwpWi*weEESGWH*NbqB5e3cl)0_ zx@F^0`d*J@iUpWr#|`HoXiXz+aw)={z{sdqzCqSOKc5Z-Qhob6FuxTk0La zvy#8Q?qOeB3fuyU*ByGzWze|epb+J==M@d{Y$1OsMpTz8hUd z9lc;w1vmTZIc2w}>~20ja;!NkKmV|}IV7>wihut3=aJ8tvonrmeu|cWJJPiMt2qq*|@4Uc$*}yN-pZ0n|!I0lE z4+3dvRv9SS+i$=9Huh2f)LbJ0C||8~~;&y~Xedx6aV*D$4G{2yNjU@re#ML~qqHgYHt zKjq}c?vR87QB-%xhZj#7mLD-zPQ?SX0qSPQoFj5gaQdHW!Y%7UPPc&fmWzj6(K#ou zMcJj9LV$UWoKQ(8jm|^Kgo_zQ8zifywKbP=UyRECiJluqD&W?#mz5tfDVGK*%f~75 zWzm=$C+81=b99^&@ZkJ&x&?XvavkI@X0sWWZg*1x@T_b*t*h{Hq%h#LdZyD!0fNqkhAz9Y4egVpVMxMRq4UJh7<*$att)ozUO zZ|kMB+QMf}Ru+F8sj|G8JIbE%YD~cjG0_2yHRBjulR8>v&G-?&Ne)9Bk0w0B{n{`dN_@eO zS-8b*j#3-JBF5UyjX$n^yD+JLURMy>b(Vrv6AK;B((UqV;V^2>5|jLIcAZ^Q%ccRh z1NeEeQ%$FDLfsN~72at4vwPDKFYWr_Z#4B2&zCJiww)Umb+YW!=wPRX4Hq6fw*TPK z$x(AX=*x}GKYF1sC>J~sBH0;pZnAaj)^;FY?Y1Ot@>!Q%vG()eTQi)Rg{J3p2;H3P zvwzCA9i+Mo*4!@5c>8t9n|EN-x^-(ZdL5c-lQkpQA%5(|%K-raeau+;Z24q%%}(P} zE5s+KoGqMNl-0J5CpY4Ci|)_n87rq;e42lnvG=Hp@3ffy_u{3_9mg*S^?QDS!88FB z4!8GtO*pi`y4~}GZJeB&8VUHpHu1@ae!N;c_R#S&T(R%T_qp9$$IrW;x`NM_wIHY8 zp*z*b<{rIJJ=HERdkXZyMV<1U*K)DbDu#}ZTf6_}61nb}<}Yj(UVZD~Ep_6P>Fqxa zA+74*N8697f6F%xe-Iy^FuzpkS4wrfx#vlHzxJJqw$yRDUwz~>#FF7}CRJPgwb$YK zr*5T}dfIp_IdIfz!j_q*Fx<>q_Npa!;Y1Vc-q%@HZnA#vhG8ye0`HVQ^ws_~dDcf- zyn5uk{ome9Pd}0kBViL32(=mSY&>u+j8_ZlT9wjGe45Q;)Q7kX&XToBGS&R}GktUB z{CeqQm~Kr68rCr}*8dcMT9B$GKuwpzhDyO$w%v=?6;M&#Bz0zG`@B)!<8i|iJ+cAYTVaWw-kou;$K zz1(OCQTT$};ejSeGt>kJN!gDC)AtsDHN?>4U@dS5WeFfdd*=r`bbrR$4JZvl6YNWa&|7rv zdYX5BmnF0oZgUWhwCdZ)fSuOnob{camwEn^TuP05GRZ{ zSvABeDg9|$=&l2Y=U{g2Cx=8K-s#)x*5OP^WY*V_R^v|Cf0&cEDCVsF8`hzPpVWD4 zY{kQ=hrXHX*(K}Nq0bkkJzcxT2IA9%5v)?pS%CeJSZg37a)*2tQ&D_LghFj4lEYRK z5~(?&NB1r*OKqtaHD7zlW*tbUm`U@cqyS=)5?8Pp3ykRT*9mWAWyP&ol-AZ~jZIfKH?Flp zNQ2UAt{!uCOP!}7+*Z$SZ%%lN(zP{!>bsmYJ1{ElMR%q=ZjPrWx30$jwuZzy!_w07 znoYl~%b1)`L$xcvhcmp@DyAo<&x5nO5<`lr;B{wuRO~$2IV18$`owx`O0f$X1nD zs~>;AW=&`3>&MTnUR$q4m#0}D>Z4J7wZ}qa%GfaXbJtkQ4=~;^KJUYapUQOU7B{J= zLS<_vyv#stQ4JMYP$RVXj^o$w4%m(YZD~SENbwG_jrEDxzHt#M-gP`wtzuel}7oLTZh6 zt1EO{Qm>&tYw7b{XVbo5cJy2}e%C*iagC=T4s(t@KDaJ(0r+fv6T^A7TC$8xu;cjS z6`|u1rFl%t@*?DN1a7cI1$WqIZ8`M2l4}slEltdQVSvL4{}#jct%v@x3#X3ZBFVrf z0hpeA*mZ3=bR~&s`uEZA+>dD|23H#HPi#fj8jNcB7h;qkz?AH9lZvSE;T}S zf={cjgPfrtdKe>Om<-4)(@S8v4>6l+LIqEc;F!bDF{pbVavL=QMaJ#&hQv8O$X%-AwX#T6%>UG`p99fW2R-(&U<5m!!2UpEoh}QtIv6@v3X8sDH8y0z-`;$)Iyreeu|%u(dY08Gw@jChKmKtZ zGV6Ew$el2mJp-jO_k$L0%uG4$)-{DBYs}V%ZJzgZCWr4u#8^c>QH?S&XzrevFIg?s z6dfV0w@y3!TioQ%x#M;+RJk2(mq|G-*S;m4qjmyYtOf{Q8=_(>vXSz+kxzapw*#f_ zGK!-IxM-z*Y?t-(mNoG$BA@(Z4!}+`+c&??k|z^yAwq5~R}?%ZPc!-P|SQVl;0nI_?w)By*LT~c=)BUwT|Z^m!inIAB5}X_9?x&@z*a|RzVc8Od{geL zTi2V%Jsij5rZ5_n@KuuQ4QBIC)iZYIjkPg}r$jYv*d4Myk~uVKNez$1OW6?71=6h9i^wNAeqog;R-D%E^Symys zFLC9=ry)5X*YR}WHhycwl{uV2or%k<7NyN+M^!0n@6&>qw}Us&!By-sW*0%z;%l=F zV%;KH{A%x6I=&iP6c9E3(}1XTnm5XLa70+9YU_Gki$5^xn9|+w$U%hNk#MaO8DqU& zy#Op}#I4~N;^wV4n{YMg!aDHsoG5NY^F|*; zhqk$spKlgii@i7ppi{m?$If|PnV3VR%v9kRc*1S8RKcV^C&!h{w@uIPAB)GuxJ;}= z*XGq8{`T7-3KtM+Os6Jpbn13T$428DH5%JJo4f?Op3Tgp7gL;lZ+iAT=o+g9{g;^` zGIdS7sn5?jtzElvhQEr(K|bqj8gibsEj`b)9Y?brxz+0ePY1VhZB7!~mh#UD`TM27 zi|ZIW(F#5`jg{h-r}oP7PZ>mPiefP2c8`3BfC27H*o@dXvuFfShvA7u;Ia zUJ;r;!cW)WF&cd2s@&N&bj6MHoA&M*;#@+|CJHzGCaz31mi^cx4;@z5|9(3_{pzhZB;#l=e zMhZU(h5dfS_PB!O$Y-W3(>xjrV-&Do2#{eR89d0fwV`~IDMmt;#6 zA4{S_XrZ!Y%ihcwOV(r=EeescZzXL?F%qJ|HMW#eS+cdrSZ7EpDrwp%N)o^4`N?&C z=ei%?`}gmC`(rLw>eKuETF&J-kMlUw2?@|Q|3NH!u-YT|Dzw!l)MgryC(HzL(aSHRkSX4!v#|7(q)C^`0*KU6#fw~ z%f!*WtEw`Bxo(Fl$+8TC(k5S#@4MVvIO2n3Z+kJQ{z(}IM4W*#u7sx*ojR;XAvety z3zsK)x!oqaKlsX_*vBU+1JCMe<@?#f+Dsz#@DXcC?mL9I_F>*9i%Za`($=hl#^ytw zIqyOCp{trn*}0?QDnHTU)f%a!6WrG%Ua7LrG8MP~2|tSo#kBrA{FG2km9-v!yw%w^ zNSBU>LcR})BU^|9MGqqSG!_qs`u~yR<=8AATJ0ocmY9(!&5^SHgMK1`ZM7~vmpcAF zti2}7auB*V1L~$P9dU@kp+=}?I!ZHX_P~bx<7p@z&h&X{&Tn$*5{(MCDZCTQ2nzG6 zwAA5#sA=W-RF7Yw*GeWMCyoodkHf6tbnRpCV}O*~2;Rs>Ie+=&%%`~YH#L2MV3HB7 z-?l*m7v@|+c(~8D>9w^~_s0|bv3_mR@{CJ;4ic=qGr8_Z*XskQpF3oyF}$0-U^77aE>`QW(`Pk4Mq?7R7exEpH zO0@l7#^kJN?}ZNioaAqqxJPhXB-ZB2% zmqiPqu#5+glo)5qQH$(@Fer#4Ug-taME5Qy;7>vd$5xbIiei>Ippos2fc(4#EibKJ z-hO>yr3fFk;RNNebVV7bE_?a;8A~25y(CHgJ;&}_9_E&G5Ty-gEJ9{uUp?g5y29o# z0$BHv2@xi6Q@@Z-{@%y4`)eS!Xo3|-eR*w!47h!DlST9D{W+O!LMQyW<$qDPmY&?hDXOGs#6scO1untBr;siRT zbNW`UwM{!C%4yVRlO&=cJJ59!H4i)t+g$(Bm(EgJ-Ixrb$jCp&dgy; zt8~ez{7A8PADy*Jf4!euI;;vZdJ-J~vX?>3NAcVdk+xyH+CkNE>dzsw8;kvLk62a`T6suhI77} zpFH>RNa5-&GWV5~^CwgrJL=E1y^hS%HPp2YX^f^8*ZjROkx@TFZ zXtysZTEGt?+JNw%ObTGlg|38m5?KZ0tt~dqC2tQ*sLd@JlVST2i-NTC*7-{&JR>*Y zTlCC1m!blBGV|eIIJW&K>2J~{ui7ts>onWyqYv-$Y0s#q_JgS@!W~et_6L16?Uq=_ zDv}x~qvX-kWc3<6w^U*~5*-$EQx}kN-(1>d_u}#%FS|i{=|2f7OWKDoTfWsUq&H!b z&|A461ZGRzBKO#SE>w3zi-Hg`nnLj~r<|<)_j7BOJPf>H3oU;)Q#N|*Zn{)O>az;+ zGXy2{?E|0msU#T-UihbBtyY!ua+lz$b>v08R|5420Uui+O}3kG2iDfsGWkj>QFMh1 z`uHQ^{sGLF!SijQlibfwomV+R+fSGnq#V*PDh*CV@G@SYx2~zFY4$*eC#74A0SNlf zzId#_eL=#u+RmIR!aQE}!LHD(k05sEy*;unlP?Uc_oy2MiP&XuF+RaO5wCs*i!DVd zz~i6db-dvh(+@7PLNRSSzX-~1{N-q>s1k}y*rZtX-LUd#%s$lr=VogPKQ9ly-tJ7o8GFnwce=vbJ+??OZ6d@v6S;32;YqxB~&XepUf8pc9IF2@V|c~&7+z3fWLna zzMbZ;)8xZ)Zm0}>Ko$Fa+OIp}e>NOANpfy{Au;jd8$BB2w*b%M9Ub!X$c(yu!*rMk znlRR)ECV1ByR?Th0;WRA7z);~{7PJ$20W0#0s~I@b!aNt^_Ar}sF-!7 zlYTsXg@TUdv5rQPQD`#h!I199#gavlOGZ8ZsfUhBMSM5Z2IF*Aa$_K z>qzashHbb1=lmC1PLn|NpXXn!sXpf)L8jSvk&0U>Eo;^GYw*LjQTSUywo;IeOyxeY z;bPY~%N3x7qv=ta36aniV%&>gw%~A2K(v&Fpfz9x5lpWhJzjphygv8w%%Dx0$y=%& zH}>4sc&z&N4>QIN+}=iQfWoXoMRBaTQHPa#n|rpjzP)4X)~+jC&Q_Uu^5=jY%jP|L zbRW}Vn}68U^VO<3-Pb>D-hAG&^AAn67O!``mYjOu!?-Z#kYZE29?4N*XTj4hLg+kf z(CmwPB{0E3BZsc23AB#rfMMGWD46qc@DHyS$Bqtgv0;SFGu7lbfFR`Hq&c zLDiMPtHWE>$yBTz)-A!t8mTzE`NfgWfbpY7si1zPs*--mt`#@0Nkj+0vcik+pOn_n zYIZE>);yT}yKM23xmR+hrd7 zMxN8ILx;v#MP43JTF2#`FA|`$LuQaiC5x{5#6f&a#r4ytPsfmZ=|Z=DRp`2exv}o_ zpS;Y=+d;HaFlV>T;g6bQFbVokDxh&DGp^$$G?q<|ydj{54SYL$l;!zdQ_pWHajvuV zD{gf->q>f_Wzrq3=Oe4Gd}T3qnag72U8!l)#LH1e!&*9Kt-m-38)pp@rA4b&fe=r} zQatJ}nwi|R$qX5`%um|XHg%ZrKG7-4M!gsmX8DBM4x z#petW=xn`CYHDsw)U-n)2??^J6X(wTbsy?x=pX1RjAMQ;{W_1X*i?QEkzDB}Zx`() zE*31WnpzyZpW|tE%a?n5PNZodg8QCfev_%fQXc9QpjlY3-M5Kl{@nEZ&&kSVxqdO# z$J>0`(kb<8rtNOCFg-8nu9k7zGM^6@q`3=Wo_v~}6bj?)SL;jCd&=B~PVXo$wF}T} z)+(%rO*55*8_gOw_9RH|2B#M%(#qq=x>`Rp_8CUo6JJ@uRG~?vy=8xID9Wv5fGSvH z8fxGmsb?P9ozu>lz>5)w748|o4}xRCTw}PS4|pv~}#>|58@7hAO;GFZzVqlV;-< zg4ov5#{P#vS31zGL$i>A>c*19gnq?mpJiz$Nmn>QKrp5?g-EOACOFW?G$ei_p18iX{3!Ua@&&%Ps$M?QM2%07DTn`8RLkmX6(48QZ7(mm4BB z^yK*1W<_XU$(k{9Mo;n0quoUIT?8V5wz?TEiyx*Et-72AZ|8kiF=x&k9-82h%kM(L zn^6*bU8g;8+HxLk%b^Tn=!@@MZ#q6K#LGtga8?%#XR?-YQ=>SHs;rb_YvqN}Y@{@* zy%pj9?imV=u#XcIH_`@>UmvDo)q(IQfV6HRrMNy&BY4BUw7`Y{u8sjDNNrd?otB|3 z_h@>`M@zE3nwFl8*SdL2moJ~p6E7tX4-a~>Sql%+m&e^79Nc%h+54Rz7^DS-zBi+Z zP|y6sp=cS?N(`j(V{_eO4g}K(5|Sr$qP{?ebsv{dyiN@n+Z|HVvUSf&?XOL@+qf~F z<6*K=|MVdG^Zh}rtSCR&f#zA`?L9&=0Ig~;$}*pwYu~l&-=}*% zbrAVY$dVHYnft&Brc|iU{oYS+nia6w7XlG$qU(g`>00G~EQ`wCwA@Wk$ECZyOCFc3 zl{?ER_DAQ*z^W_nFDCn7m%lHkrcV5f0PNqS>C;0<+O3u?`%Pw6fMYA9v%;XLufipF zQ}rYg)gNKp2!DY)Lv*X&pax&obq5gXT?_B>mgO(I*sRLNktKod7^+!$7S zZx)6Tb8jH0lAWGNP;_$2Awz^3dI2I$>uO$b>X>a2)tvrywbdbc$$n{~RZbsTFxKo% ztrpmH0I7c}k)DDCJ1%qVZ}UWNCiVXPAp9*I&hj%PIt2uNvI#YaI$cgH-kbHw&W6-5 z0{#v&f|_{k-MgRGuSxPHB4gL6oN;#y-g>1Bi%b=7hgILSBoNOZ>UowEd`ru?FD4I9 z=wm*u$t%mwm)4Y|4}QTg>5|+V3(KxmFE~R<6Fg7x&;>Jt)XDoAHBS@&MFD*?q zi%Jub0eLbg*rrU|qdYo^+M~hBl`F-OPa@w5zPw=8Wg-Q`wQnCaym4TRFGsU2<6*aX zcIZ~Y(+2@wdEZ?UAc~w6w|jzCbq>&c9Lzak1KVqA4v-+6Bfg^gSnuZ-X|QyIbzi^? zzzg7(bC9sAm~Wt?GXeZbU(j8SMhafij)>TW!Jzl3Qufx@|HH9{Tr7q1WdujccXk^^ z{5X3Tf)lYD-|8=cAzMOl;$ADBxjSXYyNv$Wik7N62>VbeAWyi^w&Nnm+B2+UtKSonz2<`4agINeBn|JkF zNEgUpP(D?#aR>L2NPjZjW~Be2Lud3u+!xZtJQPuBFLw7eg4&7f7Ior^1^{{d?QAS^|HNc78 z2_sg=_kn%Aeb1g|NdE3c__4#4(2pA&RsrJ9uv*M3nymY~gRB@K+X<)K>-sTxBC3%Di;YOD9kAg4cnvkbc@y5iwh4& zYKsLV5~hqkj%~kw;Tu=+6(K3Ut>fq1)b4HaXG65t53=6C2+v4*G*l9qj4su*6F>w6 z$9y7Ud(F0fiTxRnOie?hh4)?SmxlQ^Oj&6VWDUCAl$dib_-uFdoOW5aB$GZkbY*+a zmP2*d;$}uFQW>PK?+wmY;8sqVD#2oN|13h$%L}7XLTn@RD#8Zz%cmgd!vo*6H#$Kc zdC+uCU$_VR&YsmHuWJDbUiN}E@UhQ#wUq8}B5;gG6H>irTCv&ZV`?27(X-uS-I9Wo zbyy+kXmEM0T0kYniy4}7@Vh5Bvmr;WSmWw4XqbCtQKq-X$1zS(OqxD%Mg z1F>PBds$pFrY7qmOBYmVE)RuYJ_br8c&O`Y-M<^`DKjYkR*PI|M=M?GfEtM-qq^yL zYDMm|r!dUDt(7k3WJT2ebD58pL?$kYe97tBY2A{FPJz+7(el(cZj2;0*iAgX!jC%h z36wSa%?xi0GyXAgbvIL&J7t%jmA*jMxL*V{U`B)*8XA^dj~n$Mil72Yr`utfcE7M6PrLj@jAp5G z@xU1_X#cq71o{2rOmEWI2@~_a-bsGqD5`U7QMkZP|Iu zFTeEXntI~&6~l&gO!V2Y{o~evg9kl9^^dVx&0Dp)P5GRyK?MKSm4HK(|lt}z*@=O_|$H(4S!sU1}Ybaj%XD}`w_(v zU816*)HF4{iLVkfGd0O9Z_-y+c{Q1+0)s)*U~$Uvr&FPJbmRc*>0EtaKanz&I)t%uBdqZ`4YqMccN)pgL)Y8VQYX$&x?pCcaWpnb~%d<>()m zEaf#6iiV@6{H8f_Jop-rb%!`k;?rllDwgvJq=v+8y#caZKq1uBQXf2c799E24YqQ{ z(QjWS;O7f`jC1@cAMUlbns=TTAP=FDu))j3%g4g6Y4`Df>p79t->`8bG!9=D zfQfO3W#F(ikX8)?C6^+fNs73nT8k(qJZL|8;2yuDEjy8IP^I+8npzR7M350b`TggC zZa9{FM7t}%_0ss?arsFWM*{;-)V+wmup4I!K5hqrx;-sfpxX!N^|Jxfd3pA)a2sY- z^#m5(|Ld>)G3^<7od+%m!Xu?3_&Jd64j|ULC#flLf+0w=DcUPB_O7lmD*oS7wWVC- zX|vT8@juzSd_T3h-~AV80zt8Imy|K_({nE^JGaM8v`|$Ix$*7mJek>(a3v~f6I2c0 z$gya+4vV9$%ma_=0?akjYSOG(!JeL$mX@9=BYTcM-wVg8A~BVv^t#f;L07;9&dgz-txT9)bmbY6C_`n%EZi)BwP+TnHkZVBxdn_e6QHI zjx#7OhzA*M28B*aC9c)_(U%qkm$Oe9b;bO`Rk8Pp#vo1PCyZPX?;u8)ke162S`wXH znP8mFx6Zt}!FecJOl9U^POF)1m)!cG;|qc;wT>Nku|kWWw7Hc{UE%KZlH6>R?k-AE z#DbIN_3hcS0hEL!1g5(WckOReHu+3Oj$Z|qri+EghU+0K?x&<&bU*Sj=XU-^`)Vk~ zrxb$*wIhSxfLQU%@^U{?*!CbFt``_LHXH?>Rtz{jyWm^0FZ?aX!uPIl^Rk`*cIUF{LUt{;G&u@LdYUexr=5cECGpt@QBWxV8OjyCWW`emX zdiQS3A-Y9PpmI}r*85Su2Xe2CJE!x7!f*o=J)oxDg=!XExW*|87KIs&%~(awMUBDO z^AK;Ea9nVP6cFxLU*G?%^k87%4j{G;R=Rrg<2xjd9H~RV>8m+3TW!}av(>%+W^z<{ z=*^h{1->=JKVx-w$?T|V^#`e`k+p-2kc;XUvHDwGHJrR*xwganaxKq$Pdz`KO<&^2 zP_(Q%$t?Gn|K}_2@|B`ltHZswEnT)up{v`1?EQi9^$`7eO<6Ptqcvq3zR#*t9z00G zowepmUq~l?yA03X4wllW-=|}nU{qa2(*NDZkK=G$gP3zsYP#yqoY*=FKj4K_U&_jk z75UQN*@aZ9RYZp{w>KI#Xl6V#eCA+|0tc=VV>4po!L^;!cY9EPeFu)zP({K^u)J8u z`Lp$cJw}!UR_0qQ$oyJIxk8%{^5!5Fx;^+@NV>(JW5gm^F_w;7mC)SxmleQamvV>Y z3%u*a3)VTus{UQ7QwL5LoK-hRU78Q_4i z63s(gz~o@+UKbY+VBs!|eZHe*?8>KosWm>VHdT?7tA^yZkBP}_5!sf6j@TQJ?+YXbt^5U~HfDI=?! z$6PYsT#eeP0A|wG9u{@UF&P#RcwRj5{ro3So^-q1(sHe)(&idBtupDjduo~1|G=Ar zFD9QERN`EnsC8<@twT}vDT5_;r~Q#_qQHg_Zv!h`?BXlKaG=?ry zsnJScpfU(_nqP1nJc?TL+CP7JG*#w`aicKdc*G^w(`Luk5YJsM&1AgO+4%|2$`+hZ z8N|r-ei4IEyH%-K_$;tn@w6=M4;Zj6WCgH>j|Yuev0}yb>fpYG@Q@pk^2o@LKP;P7 zlx=B}J=Uc9=ncpWyae3m!rI{qmp1>-uaqD|l9tZ@ewl>kXSO%AIBn`-7b#v{`WqRPpPycwPJ(+<`oZ$kuf{rCwaq2*%HwofqAkqtexFa;Kb@~6A zVSy(&RafIWHm8aKLm!_uv@kFzTj=Lkwr@u>)o{pqGpugjzTF69PUgf#7kXDLW}XBV ztw;ai91 z64kcAq?WWtuYPD=z2ZG*gxrtp|D=Ah#`y>9Fi3Pu5#n>Mx>DoVKnUR7tx`p4#7Sad z-KlX2XTXZUnK#%{_c7$etR0R^C{dhVaBX;yHBd}50!+y%FbKIr->7O^?8Ci=6N2%s z_}s&HJ&2QBIz_dDr)b7cq(`2pO22XFvIR)+_X5Pi&ie_eC0Vx8mES|sKr+E9?RsD{ zFa@0JF*-h+N^zpY>=mCw{(bHK8N8FK*QfEy;C+OT`uw%_uv5j@QYDN|z7!R8Ij|P0 zi{t{B+F#UE)3rxI8FL12+}CwjOMdGe5}sXTkAIZarNsGanePQI5P_>t@WvacVB0n@ z^^Zm5+{r~#sc{-uY|FZVY~E%fw|`L3POL=oxyBv)>+81xl;3LIlDF4-^7N@N1}N%( z{%x>R_EALngg(N>Y6XVam}Y1na)no95^ZhN`={_xGa#k+i+Ds2Q0e>37BwWIJ^S@* zj+bn`p|d1NM6=;YrKHC?X|vqB`H38t`&dd%a>e!@9v=91r)uwEf|sf)1DNl4DM9+b zk>&qcu(hY0!@Ye)LmEsy5R%ZXC|A`X9i9waLbsuI^Q~w`*m7#@XZ?Zh)eH|G#~A zemQk?^In>6vLgpSIU+O+%W>ltV@*=--*3D+Z*0uR_P>scn_@d_RwwvE+h9$EW4u4% z_bwN1SkTvHs=bR~;*`%oY{1Kv76p6zJuKtjo*qf!Y8bD6ndmXS?Aehzribnf3F!=K z`TFhg$KCyNM_YhLx|^-PpZUP%n{kLoujCP1zM27vtg4>PuVrL?lp@(IBKBxrn1%Wu#)+=fguSPNIEVjm;IO$SbWJm`Aypo;rDG~ zAGi!G+2oaSnL-kADi5-0Q6Pns(3A~CZ1oRf0mi$>eA@b7Cru2YoK*7F(eQ=SFQD)W z1(BgbAwVNL3g)jCK+8j#3<(1GTbsC|$Z>{M3uQ7VJXwydJ{kW3x&)+rgsX-aS%Lgv zDm;KbBSvJV_WCW{+R7_+>3$yn{kwPmk^&;^GJpa>1)>?LR0sMn9Sx3yr>7KMew%Vg zp>XqSlHUz5 zm6e{ic7Vy_yDyP#10z7Kr=d#v^-Uw{YsOS6i}D{oKC;B8hLRbIc1HbhGjR_OY0w+wG6%&#iO8tCnSj81ut2$NM-3uBGz|Hvs z@j7BYR1rT}X^$m6s$CrT!(ut|xBs0RWOMdf-mXVec3j#mQ>pn$(7{OZ^Y1Y}>cttC zt}Z`b8+EO70eMlE_rsSa9GwPuJ>vbI-MbB6&u=$2Y;QO=BV*tK>BUQSThRB3shYU0&bKkY_3-;EHGlX_^i%P)wqo$+ILoCxx!}|Q_CB;IkC!T( zLcwY0*SDQrKF)N*yG6`L*$2Fp!s+Qtl(42E<*lO$DL5M^kmFM5lvxi9QZ`c89Rk>Ob(g5yN1Cq-3?mWck6j2Zy#jSI`~!&tTUhB*yX=I+=GonShrIqE z5Chy&IFSRF4@ziW96SCjK$=QcdbQ*FZ^gMcMh00oZ_(nFt81f}ArHI_S6#!RfuItw zwACKa(WlgSr~NmN0TP`8Z@h`?){AHQe77$#?Umxie(H&RpKDf`sAcnr*x31Orb^Y7 zoQuh+0VV~hFM)(DEd>J+4JeI4i?({M9v?aYcE9cuTVuxl>Pk+I36VQne&^BKg(<12 zY7s#)N(8z80SX1+J_^mf=`abP>X238j?`}&STUc9iz#$HRE%VjvchFmvOUI4;(InHm0Zj8 zha)LH((}(_ASK^h97y00>gm|bJ?k$4$suJt3Fto zTS?8Oho4!6=UOByMck^~J+KmYDdz3|{V6XJ)?a{Hkiw(_9RSMsbJc10?{^qD@WKc) ztN8g+U4fx736rrD=mm(0Pe`GgL|M{+{j=5A;4$7nsVgvi&@A+Eh9S^J6a;i#HL{t)*rGXyt}NN{C1yJSS34K1pf~MB*9xBN z^zC~OXz8TXsBcvo1`HsXhhmT`xqM&aP8bzu{HUMOr~rLX8Vv2WOMQNp|Hn}VE_v6F zGx{o+Bz!U?Bzb!&GfI))dPB;*qmwB<3+Lh0&07a%$Btvztk6*_NMR=PchXLZnPX4F zwP>%QQB<<{iNnP*cTmb8852Q5+6No^uP;o)cA*nNgL!!}53JT`(oE-X>&&0!t)p?v ztR_G35)AN~VavG;%hlgUeTkcRQ6lAGb+lqanZI2^+SW-M_v@yd3| zT7Xd~LQs%Pg8%DJV@&mD3K>21^jcf#%6Myy-$%vXjL#;gZd1<=%2!i+oSmpND_^CY zJ5}CCL0}}taSNMG;Zdu~#I*gXQE?i@XD>6W<{nj#lT>Uk!Cy3`ga@MXBP2KjQB$H+ zcMraoW6?F!+Q;i&ej6D5fn81Gr*U><$_FMTK_&vfBCtl*^1)pS!d@AQHy*3#}3TI z@HG=H*LJ=r`2N2yxZF!BNmlI~oXL zFzAni>F*#oI{QK$la@s0yXg^Om6_z6ny$TJ!-hrpwTw#3liJ|Hkjr3d(b7@W zSD3w(Tr2)5Z~$^%)A_CP8TcPp}+ju9M|%oi!YKn*2pmFAqe%&+ zLy$EH)UK*@3ZX(E5 z!;DKYnNN(~xPN%NIJPu(9qO{jpbBhYDo&+`<}1+7aVQ;D__!5U!i{@<|7TY8L5GVkzPiyqRS$!x zY^5Rhjpn;VpR_SZio7#)a_m6~ixy{cYbY?caZ$}8IxwX|I{Fgq)+B!c3*jp=SP>s% zvhnR&ZyJGj)664=501p+W#{LCrc!2Us6sng8|=MM1}9FPx-RL_8I>64W!WPuTg7zJ zpL>iY&xp*3zws554iGaI=H6iFp*ge&9eHUdqC9t!OQ5>7?)f|)7LdlKdq(9fLGKm{LZLRan zn(k(2LpEkaEmtMvBYhDRykcW}w+4f7Km1o98z*G=qaHjF~2BnW+|LmCiloKvoxc?%A|V*QPBK0yGajO!aH570f=RDc7jsUULL4@fF| zsL?ltH!*?#3%Bj%$zeUhGw(``T_U%Se#(M|0&x33^>-;~n8fvG$(#i>(4w)lw46{_ zs0Lx1KdD~d-|1M!x?kEP>aow)ui=yF+r!VmQlxTAMb<(2MgC5)7%B;{+B`S zG7)0Xx9}xBI5I_LN8uoylU26ek2>w_lF;W6FR;yN3}S$rpZ zC<|%oYQzBpzOR@v4sx*zefxTe{qi%*A=1(mM(oVxc1?p>Ew>21E~HTeNgC27u$MGf z4lNitT;Lymo8tVT|0Dg0)2B~Zy0mwAc=!xRSh7%wK7%eEDd?uI-e}>%+`~y`alet3 z{dsnd`gDt$li7LWylSGOhn}5#xh3P)Mne$jwP)%$GzIojz@RElDfAc&5=7lb!QmN% zf?I+eyt}OzFAl;H9K-m+(e9`OIa4ary129<%)0Z#bn_-rFZPiRvOE-hwFJw{c8R-j zND6HTwiuuO;Z$4cU?>f(&1`L%|0`+nO(=Ht1@iBlR0#@|RGGZbceQkW24*q1Q`O@l z!=8m>_V!6cD{dUVQ2H_x3jDN3`f@k$GcZg}fL77vBPTgu z0Ip%;m@i)e5xe#DsXDxv$Qb*%bGu@NPS$PjOVNor1&P?g&?`;X4q=8MSFIsQH}q)> zJ+#5y4XSH~Rp(x?iQCTc_$Aju61MAUY5~OnCrWahlB)9Wl>0yAIH7UbbkvEz(mYeW z3Q)rvbRQG&8tUK}BL9~(6aTS4s-w2HAFiw&HPRlET>~h-JQtgD3po3-ouFxP%ZD~J zHhA$IwspUVm!+jXbedL7GwaqvV{cM$@?;Y}WN9^*vlKmB^tvvX3;toyt!A-PL~^S7(QPEhD>{O;i-5^fEM zj@(E}8OfkRm7DZcAV;=m;cn6T*?p)>d`B#iYqiGZuW{I9nmYAX&${GrA65R=g6edt z%pZPMJLz2QQdd_a;0-SbWR0#wZpox8cFwk*)64Rpe|0fj+MG!V-ef^tiMJ^lTZN?! z=|rf~gj+HWC|ulAg2`M(yt*=4`hMI69a~DwOt|#@xC=t`^IeX+LPw_=FJVdA&kir| z?DDJ~<%1qd!v7fj{N=(ShK3baJ1eg=oX8dc2)9A78l)$GX*KYwN<;_nomngHuW|i- z)ujisV!mcRBYwr}3c*FCru<7Ut9LY@1}rkA~*FKY7%KEzef*$vEEeuq64 zM<6;Z(FHC}nV9@uK*P(TG?;#}_U*wU($&pz0}s>+h=fUIm*2vczdjgoyOVWS)2}bY zi>U$q5N79|d!_#P2JH#o>$o@x(jtW*WA%9ti1?~6)-(5=?Mk?Qe1CL3*LL;Cvs$44H>Ynm7ZSYT!@I)txKcY{tmU{QNr|a2D19eDs&s8&5P+Sf z!T_Rc5~sbil%9(D2IlmVk?*&0bCG0K!nE~nTz31sE~U^+BdQ6b zCQfWl%iWcD}H4BN+bF^Y?f(P>P`71cpyml~DB>E0cTSv6S zQxoAIF_h>jcleb92Z?xw^ALrh+n(yDrKBWc5Tw@%74inmZn;UO=||&RLn~eQItdq5 zn>QZ?_8~pvus1wIep)y9*}|~d17ly%r)~xdl34VwV3@=sL5jrTK@f<3RGjG!Ecd}HMzScObFlceCyuu zV{adn8=irw-|we?bs(5{N8+@I%OXsUcXUt-9j)KO>t@R@#h>Q7fw;Vc>MO~qG>oZK zRd4tGR*dvZEpc>m{g)H4h% zl%UeIGG9)|BB}@nM{cp;HF|o$V^nc0dH3uHXLBc_ zuyB(Ta(2Grue7vQ9JD)7-TlMD+9qxuaUBI?Ir?nwt03neZi)cG(3MXbb4O>RC>-X$ zkb#A`pB51vplL0tKG$L1GyiG|sSq@xd-Q%@1$Zq@Wp9C(C7)I?_I(^v9oA$kz~W5^ zoA8z?9*o*no}6bK;11&#WEGI@^PRr*y45p&cPK$Naj>1;L$e5@Ow!q{X!XrByg_FP z^azc33K*Kfm=rG((Gy83}j6>N;7{SWrVKP$?Tsi$kSaP-c3%n&AQ@@ zKeEKJkdm)b@nHN_M$GwH=eojlC`|8oToL7Xn^gbL-+xxM(v>PDoRRVP1$2;h(mC*w z@z7(yE3;SCb83`C2(uRnd$|L*A3jv2a3vvABpj4d(@ckGSi3>}W@4R$OGZU8McdS+ zF)na4&Zyk9s44PCBIdBNTB8kFAV;qxII_<4VvhDkT5x=|`YQ`Nbwt&)IvpkACaM;K z#AaoM?mP7;a73PEXPr-PPxwX8@uS1zHguj=Hm>BcpWYmH;zB#oz2BX4wohImw93jUU-9i^Fs@-Zcqc38;$6Hr%K#kw1Ld<77~T3`3EUNQ7?Oye&E== z{Qx-B2uKsi(iXOI^}f3un27&Nj=8G#_hI?Qj#=O+v{RNuM+RO4-y$cWo@2`@))?4o zI!n?*A`(`5&^>n~@d7-oE$f?3U7tmy@|Y22!s-T3;QBtO9G&^O&2H#K^9QlPXUjPFot9*BMpC27!zd>N9JDcj}k;AX<>r- zQbl~Ddbkp_lFBvvEG>|j2X$o&Ac(b&`D@FNgv6>v!oH>(r!a10gbew6Sybeen3#BY zx7q5v9+fbd!>PjJG(R2bYS{5HQg{F)L`0Q!DjmtUBRWVIgVOr|Dtgj;cMODvbO`p) zikz#aM6J-`m9C8ouWd!ZSjx=E~e=Cc(;B zdp^+h=wqO6DJ`Iy(Fr*%Uz{VX7l7ilR(D;Ml577g{^O`1O8tc{tMj`MhbJ=! zw_!vFx;g%J_iCwKSDJYjF1o)k!L^NmWxVvOf`VP7w@_5~g*;n3gs*~o;0zk7@D?Vy zp3Szh1acS2fYv0e4_-F6mF3|lF^8;MQteD#@M7@kgXjIGv{_uCdx*;)C*pTT2(tyB)FKalmQd$*n+3g`iLIL)d&mwEOe?d`;>}8#lgY+~6I# zXtwdzEst)hI+X2>l#v<@;I2=8oiUSFZV4em3QMf>PO>>^s}W`ssuNXhI{Xg7^aN3W zd<7HWxY2K}LfZT4fcrbvGaR@;h6JiaYN>mb3Xy6d_j)H^WV ziG*d*$-@7GttDQU`nMskqxX zNwB4*bK<3C$O!xTiU4b<;%GUa!~^(kX5^A_G>5lFuzAm^Q#xc5gJ5--^>n(c;S5f5 zX&)y}n1Yfqauvcs^XK00Y_!IlD^Bvc{@$me2bX+y0#`PsPT^X8`a@M!5@V^h0@av0 z2mRQAI*l}efx+#>Z78VK)*f@Hi(Tiw5M&!2ixr6OM(v(FZc)OPuhi+gm~R{kuj5@x zFTZ0HecWOOuFmT`RGyCODUFaGz`L&HhX8m1)rmKdeA;|sUrHNtGO(H$UiVht=bc#s zjG;NFULRgM<^Vr39(L*abo~BqD9S2Voc(7__pauw+Jx@Gxn*q zhGApvO&`=49cBDrnX7HgjZu+xYrcI2s=vj+%&pMs%90IutDLCXtqw+qXCfXz`-DO6 zL9vw7y(Ja}OW;&?OdMJJnFW-FLopK|1HKD;D&qSnt9;70j7-gz7O?dC9iOMHeI)?d zXf)7?&sq!}RG4a2)zY-ZMU*B%l`PNEDuS0|SB8P3a>E{$g{{b+d$!qU+U(#mN&7^? z`m-M!AKkw{{Eua4sdrruSs7~PW*8gg-Cr-MrMqu#zsJUzs;j~=9U3`ND9I#MoXayei(}Z;uB%+nEf2OTU?!2R^!7Wb|9Ts+b^bO zt5fHaZB^n=9e0|Sg{9{$?VvSgTrd&V z{wfqCe(kli3`F{gqWvTsS^4KrMOFPGpqKCn3dIxh-1n80>d-?dH0?ifM4!yvkbzdF zC`3Vto&^=Z9~_cEFfrfzGA;70U{(X{V9I+EE z3vj~jsUFTUuU8R}>OTe1A2z4wm2KlfBzqZ*y9keh7Y_tY>a3f84ke8{xw&-k-?_FY z+2>m}$iRLPw$4F3%dPbC^XLMnf@`VHXPbQ@+@lsxi!!N?Rpu;ocQImj`B_MlLslXZ zCaue1TfVx{bMJJLJmNt&i;lNG_Y^Hn(GH%26b%Q-I>`D7LP0B$vqT=t1_EH!no*xm z1?}g~rx7&U(QSW;B!j5`{`YF{{@QOc-R4}cV_Pr8-bYL2G(&g z-ZO2z=f_L)>D@$CR|mY~l=<@7DE|WocJU?YS_Pr+1eX95Uor=aW$~uPF{HTT*RCB( zcChe<1;s93Tpy;JwKjd2 zDb3#QdSKExC+-+gl5ph-q8j99J0TCUjXMENL`dFrtGK@X|Hj);@f}=kW^9Dd=>t(lsOW$XK-@cc!hUpIW-2 z;MI5At2WRbm;FB5=*@_AfA1tkF@w@HM9`cgKG3 z`=x6bv6~awYhnVfOYf?QId#2K$yAXc5P+AWK1tmAE&u7pQj&VAZ`M;Eoa@6}lvMI8 z-H7U@W;v!5ZZ;b*pcTIycQ#Xygpc;EQP=-hh zVuB0GMygzb@gVFFA$E&(U$ZVH31k5+#rGaZqaHYJ!ZN5NmK|>Ptgez(+T-V^iuqme zvbNphY&)M%)G4KJEh8^xv14r^?Z%TvOq>4e&`CnPc6xEC2^Zr(aST-luBCb$j!U8# z_&Nf(S0hSsPg^Ix!_9NMua=Hpg6x4PUAUG%xn)o{;lX0}f%gcAfF?+kfI1q{=|LVk z3V?AiGr;uUAho;Pp>I^_NNn@Kw%tr#-v6toCc8%$843Ht>aPJ9y6p(%WJh#%sD6xN zJ{b`qH4_$_)Wo-ok=l!X{a&w`;8s>^J`j=MiG!VLP1NFyl#nM>;c59_S@5N_2Ey+q zw)V=x7oT1f`qtWVTpPE{9k-=zo&G&K_6TcCT@%+%=JreaLJUKlYgM%-4SI=CrnokY z57HxlBVJ`(&zgQUcYY(5WI9_NVZb_dHa%_jk*gI zE+dr*L$NTVr1z~KbY5Ob;w$A_?#iZoUnY<@ z$T#TS9SVZoja(HcyczYN@Zh**bE8)rFU^g4n3?3k0QB2Q(=FGN z0D?wK$m=5Krhjum)Bf}S!w<`&|2QKhvuPsd_wrV#&P%Re=#!kV`c*?@0B%!$2Izo$ zayc2s)2~BU@?7Zugpc#EvTBL7zg&GOY|w_(sn3^WYjK|r!sNjSRru6kXhc(i6cFy* zY$(OqwIa1CD=}8p{G`Krh08vC;L7S9Ij~W-YSu=t`}URAC@={&^&*m{3C}aM0x2k- zrLyg>UepM$U5^$k*ZjwJRae}VRj2wrX^HQSJ$}sp8%X}eb;Yyb0tYuJUm_w75Z5Nq zVOmzIri@I5p3}qW4sDYw)0l7D5^~6I*|zy}T^7!L+_f@h$n$d{kMF0Z-UPFGM*vP@ z4$gWNTv%{MX6<$UR9h>(XE0V>GCsG{m^yRw;wrLKPBJk=W?lQf)th#nqsR84lb>1< z*7X_|h;TbUhYRsz2T19V424nZZtJJsu??~4Z(rIP0t}c$FcBTlKj+BsMJeT!)?}&OAQuq^ z%xHW2vtyH|So$XSmFR`?i+Yhn&U?3;mt`pHGdfSm3}?O~7hZVDJSEy8vlF<*{c2N} zFhB@I*EA8MZ!Pel{+l%me{n*6k`{)ghOej{-LJIxp4E#iZt11X`5r9sQ;SjV8#n%< z<3@Ib_>m@Xg$7C4Z<{K6KxKmC)tz9iCBbS!+R*j^#gXPAq|x3Pu~wqM96P1Vb4z}} zgkwRM=J|Sl@SZA9`5FG+6ZjQs9h=lMuxTegNemml9Z%NXf8p67FXyKTrG);et|Hxm zVVt|@{=DU}hyPe6_ic8Jy@ruf4oz$u6DfA|u?l)*P&)CvKq9;hUy&7Nl!_k|8U4Qp z{CIk+>;c@?L}2{}D)P)s^HOngD)(4^UOk}rqWP)ov|-lwa=_|S>awhSm^uCno7&xC zmcm8LC~g%+aws4ZbH5+>=QP&{N#r`Vvx0lN-m`RyY39hlHFH$IlATZ@Cr~tm5FzFt zq8O?2ID#mnRvBGArKdSc&orbo^%^H5W7Aj!r}m;rCsk0SWyZtrj&>+QafF3lLd@00 z)TK8w+O`9m~%N)HRxY zKOGzE*BwyEWafgFDmy1GmmY~)ceL%KE5k*Uh#37Q#BG}21_Jp>5>!LPCQRy#3hIi1 zfE=bCpDrR@l_J_fWH3m0z1jEI@iFLZc&09;F@nbQG&od3{Bz zi@C(se`UXh&gMn5oQH$t7%=a|dblu-U!lrlm^2vD)=)9<{iOQI?O#mOiFnEJv z$X$D*5zanuXLVfbLTA7=DqPcvSI6nvt+xhOIKaxMQKcdMG}yO6VZ1ou2BU}4L|I9p zAS4os_M17oJw3}Ts!Sv&*kL}+GM__&Pn9$BxJ~HWF^*2KB%TnutEo|++((fo1+r#= zmrj^J&oYrCaoO$$>JlRSHYL<#=I0MZWZ{&oE9hy?_i_tsoHc#sk{o-Z!nn0MBd@5% zX=m2e!2~-%(0mUXOh_R)TYN2vzSP0^twO>Q2(x}Od4l1O>H3n!8aZ=-DLrTpK~ri5 zJo2qrhU5q!IC#nVG?yI!NKXZ4JV{+#p>Q4YeDZ<*eNbo)YFuqYC*$2^A-fX}T ziXgGV#VJ(H-fab^oGb#B%a@OE3$k3R1Mwm9$c0v0)uvnKFCw$YI@X_}LXvvN`m-JQ z`2Ajk{3`q9IEaAIR4(`1|vqw@((wR7TJB0wg7DL)Vz zs>ftFYtYc;=h|lXtog%670njHnn}E9sM&BJGX;f8K@qSCmcBQ&PJQ9@dQL1idAw`w z@ndQ4&n>t%mk_fzfTatZuS1k;1wtYI=_A)(EK+s&{Y?w4T(-oF>@1yq^n6&+Kdw*f zLPy$N9G&B+ItjU42vrE+2NBa^k% zqh8#v{i`Unv}zNS@_fd0>?h(K?)IZRD8iEU59;aJjWezMpk zjBF*p>7Re%noN7uNBK?v_)l!2mx1yV{_&suPQ0u<-#`CkHPnf3_s@^x?*a4ZQuxP* zDgWxy3JdU$PgDNYahv-5e}0<$Jw^Y2f5^3XhyVWbe|gBgmWaJYaRC~JKp!uUE*H z%(=K|8*&|H4~a@sfV}z)AD+?TME#D8G%}S1sXrn%jbwcu>lZQML^LJoiVi4@6E}v2 z4YjemEqW<`%CPA_e<~DQLmo=7+#u_k1)GuKkCT>K;=L)?FEr^PuqMr{R`@Hy?~r_p zpa)&RPfl>;Jc!gEU8~LiC_hStwxBjw*gud+E$J;kiR&~3)NwJ!Se zOkjtB3v2|yC6AXLWI85-!CdDvm&pM9;m=?{2CFc^U~q1=Or;fdTLBJdBj&_1j03mP zA;Ay`RkVDGo9@x_(N7{5?2q?_3*|>@wUy^5f04b5@*F77besyOuj4k)M0=w~DpKa+4>OiS*Ic|-1qhAh0@43(FU z4xzJ@9~@-8#OUzdC6OtVj<{Q6;I*E~-UI6TFKL(*;aL38B#LSgkU?FD2^H7Ak-4DN_ZX-5iv)+Sune=XIvLOurSrLGd#l#|K&<$lGS&f17)0cxP{Qc&zsMZ;-eT~z~c*vc4r44m1CSrG+H3; zAvR}YTA69_*-xyNm-W9MIdiWL;a~aV==Wa-8C6b9y*~XYS18k^0s9rux@1k|#LL&$ z;KMNWzEk{RJxOiBj*)8ZnIuG|R@85VU@vsgmhmTYU?KJ<%Q!OBDaVF1=-0v;WjJwW zc4RmJ;n_#docybvtI$zp>*N3H4Yia;Bl9&%`4C9`MXVO5_MvFa)917rQ2mf&Pn_xc zu#S?;uIoq*FSh2W%5qTjD3}AA%n%)5i_=^oy}y4^TG}}M|1uTH`6Ugwm$e&T?dp6I zK7K$qp<#I0hpDZLP2gD<^F~H>JM4EaL!kDw1N?F z6B&shO}=yu&VT97A5oAi0D*WyCgidF#!*JA5@D@*>a4WOajpLAy~Z9trYStu7c;E9 zQ26q`>+;kNF~A7ACuE6ConP;)`UI`1;P@V`{h)t@0%1R%x0xgQwp5#gXv|HcmalA# zBvK&AeE66mu@!Q+kQRsMew&36Enws{Qr^`)O69mAACE&m$zh|G6zja06^zYH zJ^X<5HW zCjVTdvepa!7ni&}^+lr|%IEyYfBLtSv-tn`^MCQ6%46`K|NQ^d&Hv~5>JRPzm$AsZ aEuZyPnzk^$UM%x_CykqCd49~I?f(b=D~v4w literal 0 HcmV?d00001 -- 2.43.0 From 7e124d2f5082e433b2de1bca9812fc65366f3f22 Mon Sep 17 00:00:00 2001 From: BoriskovaDV Date: Sun, 24 May 2026 20:22:01 +0000 Subject: [PATCH 14/14] [2] add report for 2-nd lab --- BoriskovaDV/docs/report2.md | 92 +++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 BoriskovaDV/docs/report2.md diff --git a/BoriskovaDV/docs/report2.md b/BoriskovaDV/docs/report2.md new file mode 100644 index 0000000..b18c829 --- /dev/null +++ b/BoriskovaDV/docs/report2.md @@ -0,0 +1,92 @@ +# Отчёт по лабораторной работе: Алгоритмы поиска пути в лабиринте + +## 1. Цель работы + +Разработка программы для загрузки лабиринта из текстового файла, реализации трёх алгоритмов поиска пути (BFS, DFS, A\*) и проведения экспериментального сравнения их эффективности на лабиринтах различной сложности. + +## 2. Структура программы + +Программа написана на Python 3 и состоит из следующих основных классов: + +- `GridPoint` – представление клетки лабиринта (координаты, проходимость, флаги старта/выхода); +- `Labyrinth` – модель лабиринта (сетка клеток, методы получения соседей); +- `TextMazeLoader` – загрузка лабиринта из файла с символами `#` (стена), `S` (старт), `E` (выход); +- `SearchAlgorithm` (и наследники `BreadthFirst`, `DepthFirst`, `AStar`) – реализация алгоритмов поиска; +- `LabyrinthSolver` – класс-оркестратор, позволяющий сменить стратегию и измеряющий время выполнения; +- `Player`, `Command`, `MoveCommand`, `InteractiveView` – для интерактивного режима с отменой ходов; +- функции `run_experiment` и `generate_plots` – для многократных запусков и построения графиков. + +## 3. Описание алгоритмов + +### 3.1 BFS (поиск в ширину) +Использует очередь. Гарантирует нахождение кратчайшего пути (по числу шагов). Обходит клетки в порядке увеличения расстояния от старта. + +### 3.2 DFS (поиск в глубину) +Использует стек. Идёт «вглубь» по одному пути, не гарантирует кратчайший путь. Обычно быстрее по времени и памяти на больших лабиринтах. + +### 3.3 A* (звездочка) +Использует приоритетную очередь и эвристику (манхэттенское расстояние). Оценивает клетку по формуле `f = g + h`, где `g` – пройденное расстояние, `h` – эвристика. Находит оптимальный путь, если эвристика допустима. + +## 4. Методика эксперимента + +Для каждого лабиринта каждый алгоритм запускался 3 раза, результаты усреднялись. Измерялись: +- время выполнения (в миллисекундах); +- количество посещённых клеток; +- длина найденного пути. + +Тестовые лабиринты: + +| Название | Размер | Описание | +|----------|--------|-----------| +| Small 10x6 | 10×6 | Простой лабиринт с извилистым коридором | +| Medium 10x10 | 10×10 | Лабиринт среднего размера с несколькими тупиками | +| Large 20x20 | 20×20 | Большой запутанный лабиринт | +| Empty 15x15 | 15×15 | Пустой лабиринт без стен (прямая линия от S до E) | +| No exit 10x10 | 10×10 | Лабиринт без буквы E (путь отсутствует) | + +## 5. Результаты экспериментов + +| Лабиринт | Алгоритм | Время, мс | Посещено клеток | Длина пути | +|----------------|----------|-----------|-----------------|------------| +| Small 10x6 | BFS | 0.057 | 25 | 16 | +| Small 10x6 | DFS | 0.057 | 24 | 16 | +| Small 10x6 | A* | 0.048 | 23 | 16 | +| Medium 10x10 | BFS | 0.048 | 47 | 16 | +| Medium 10x10 | DFS | 0.035 | 44 | 30 | +| Medium 10x10 | A* | 0.098 | 47 | 16 | +| Large 20x20 | BFS | 0.099 | 100 | 36 | +| Large 20x20 | DFS | 0.070 | 75 | 68 | +| Large 20x20 | A* | 0.165 | 85 | 36 | +| Empty 15x15 | BFS | 0.133 | 133 | 17 | +| Empty 15x15 | DFS | 0.114 | 161 | 89 | +| Empty 15x15 | A* | 0.154 | 65 | 17 | +| No exit 10x10 | BFS | 0.044 | 25 | 0 | +| No exit 10x10 | DFS | 0.059 | 25 | 0 | +| No exit 10x10 | A* | 0.046 | 25 | 0 | + +## 6. Анализ результатов + +### 6.1. Нахождение кратчайшего пути +- **BFS** и **A*** нашли оптимальные пути во всех лабиринтах, где выход существовал (длина пути совпадает для них в каждом случае). +- **DFS** в лабиринтах Medium, Large и Empty дал существенно более длинные пути (30 против 16, 68 против 36, 89 против 17), что характерно для глубинного обхода без эвристики. + +### 6.2. Время выполнения +- На малых лабиринтах все алгоритмы работают сопоставимо (0.035–0.099 мс). +- На лабиринте Large 20×20 BFS выполнился за 0.099 мс, A* – 0.165 мс (медленнее из-за сложности поддержки очереди с приоритетом), DFS – быстрее всех (0.070 мс). +- В пустом лабиринте BFS и A* обошли почти все клетки (133 и 65 посещённых соответственно), но A* за счёт эвристики посетил вдвое меньше клеток, хотя время оказалось чуть выше, чем у BFS (0.154 против 0.133 мс). Это объясняется накладными расходами на вычисление эвристики и управление кучей. + +### 6.3. Количество посещённых клеток +- **A*** показал лучшую эффективность в пустом лабиринте (65 посещённых против 133 у BFS и 161 у DFS). В лабиринтах со стенами разница не столь заметна, но A* почти всегда посещал меньше клеток, чем BFS. +- **DFS** в среднем посещает меньше клеток, чем BFS, но при этом путь часто неоптимален. +- **BFS** вынужден обходить всю область равных расстояний, поэтому посещённых клеток обычно больше. + +### 6.4. Поведение при отсутствии выхода +Все алгоритмы корректно завершились, вернув пустой путь (длина 0). В лабиринте без выхода BFS, DFS и A* посетили 25 клеток – это все доступные клетки. + +## 7. Выводы + +1. **BFS** надёжен для поиска кратчайшего пути, но может быть медленнее на больших открытых пространствах из-за широкого обхода. +2. **DFS** – самый быстрый по времени и экономный по памяти, но не гарантирует оптимальность пути. Его применение оправдано, когда любой путь подходит. +3. **A*** демонстрирует лучший баланс: находит кратчайший путь и при этом посещает меньше клеток, чем BFS. Небольшое замедление на сложных лабиринтах компенсируется меньшим числом обработанных клеток. +4. Программа успешно справляется с лабиринтами разного размера и конфигурации, включая отсутствие выхода. +5. Интерактивный режим с отменой ходов (паттерн Command) и выбором алгоритма (паттерн Strategy) реализован и работает корректно. -- 2.43.0