{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os, sys, json, argparse, pickle\n", "import sumolib, traci\n", "from tqdm import tqdm\n", "from datetime import datetime\n", "path_root = os.path.dirname(os.path.dirname(os.path.abspath('.')))\n", "path_scr = os.path.join(path_root, 'scripts')\n", "sys.path.append(path_scr)\n", "from generate_signals import SignalGenerator" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2024-07-29 09:36:32\n", "1722213392\n", "2024-07-29 09:36:32\n" ] } ], "source": [ "time_str = '2024-07-29 9:36:32'\n", "time_dt = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')\n", "print(time_dt)\n", "time_unix = int(time_dt.timestamp())\n", "print(time_unix)\n", "print(datetime.fromtimestamp(time_unix))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "self = SignalGenerator(config_name='test_0731',\n", " file_net='new_sungnam_network_internal_target_0721.net.xml',\n", " month=7,\n", " day=31,\n", " hour=9,\n", " minute=5)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1-1. 네트워크가 로드되었습니다.\n" ] } ], "source": [ "self.load_networks()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1-2. 테이블들이 로드되었습니다.\n" ] } ], "source": [ "self.load_tables()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1722383967\n", "1722385038\n", "1722384300\n", "1722351600\n", "1722438000\n" ] } ], "source": [ "print(self.history.end_unix.min())\n", "print(self.history.end_unix.max())\n", "print(self.present_time)\n", "print(self.midnight)\n", "print(self.next_day)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# dura_As = [f'dura_A{i}' for i in range(1,9)]\n", "# dura_Bs = [f'dura_B{i}' for i in range(1,9)]\n", "# for i, row in self.plan.iterrows():\n", "# is_zero_A = (row[dura_As]==0).all()\n", "# is_zero_B = (row[dura_Bs]==0).all()\n", "# assert not (is_zero_A & is_zero_B)\n", "# if is_zero_B:\n", "# for j in range(1, 9):\n", "# self.plan.at[i, f'dura_B{j}'] = row[f'dura_A{j}']\n", "# if is_zero_A:\n", "# for j in range(1, 9):\n", "# self.plan.at[i, f'dura_A{j}'] = row[f'dura_B{j}']" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1-5. 필요한 보조 객체들이 모두 준비되었습니다.\n" ] } ], "source": [ "self.prepare_auxiliaries()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2. 신호이력 테이블을 변환합니다.\n" ] } ], "source": [ "self.process_history()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "phases = pd.read_csv(os.path.join(self.path_tables, 'TL_IF_SIGL.csv'))\n", "phases = phases.drop(columns=['FRST_REG_DT', 'RINGA_FLOW', 'RINGB_FLOW'])\n", "phases = phases.rename(columns={\n", " 'PHASE_DT':'start_unix','CRSRD_ID':'inter_no',\n", " 'RINGA_PHASE':'phas_A', 'RINGB_PHASE':'phas_B',\n", " 'MAP_MODE':'STOS_NO'\n", " })\n", "isp2move_A = self.isp2move['A']\n", "isp2move_B = self.isp2move['B']\n", "phases['move_A'] = phases.apply(\n", " lambda row: int(isp2move_A.get((row.inter_no, row.STOS_NO, row.phas_A), -1)), axis=1)\n", "phases['move_B'] = phases.apply(\n", " lambda row: int(isp2move_B.get((row.inter_no, row.STOS_NO, row.phas_B), -1)), axis=1)\n", "phases['start_unix'] = phases['start_unix'].apply(lambda x:int(datetime.strptime(x, '%Y-%m-%d %H:%M:%S').timestamp()))\n", "phases = phases[phases.inter_no.isin(self.inter_nos)].reset_index(drop=True)\n", "phases = phases.drop(columns='STOS_NO')\n", "\n", "# - 아래 절차를 5초마다 반복\n", "fsecs = list(range(self.present_time - self.sim_timespan, self.present_time + 1, 5))\n", "for fsec in range(self.present_time - self.sim_timespan, self.present_time + 1, 5): # fsec : unix time by Five SECond\n", " # 1. 상태 테이블 조회해서 전체 데이터중 필요데이터(교차로번호, A링 현시번호, A링 이동류번호, B링 현시번호, B링 이동류번호)만 수집 : A\n", " moves = [group.iloc[-1:] for _, group in phases[phases.start_unix <= fsec].groupby('inter_no')]\n", " if not moves:\n", " move = pd.DataFrame({'start_unix':[], 'inter_no':[], 'phas_A':[], 'phas_B':[], 'move_A':[], 'move_B':[]})\n", " pass\n", " else:\n", " move = pd.concat(moves)\n", " move = move.drop(columns='start_unix')\n", " # move = pd.read_csv(os.path.join(self.path_tables, 'move', f'move_{fsec}.csv'))\n", " # 2. 이력 테이블 조회해서 교차로별로 유닉스시간 최대인 데이터(교차로번호, 종료유닉스타임)만 수집 : B\n", " recent_histories = [group.iloc[-1:] for _, group in self.history[self.history['end_unix'] < fsec].groupby('inter_no')] # 교차로별로 유닉스시간이 최대인 행들\n", "\n", " if not recent_histories:\n", " rhistory = pd.DataFrame({'inter_no':[], 'end_unix':[]}) # recent history\n", " else:\n", " rhistory = pd.concat(recent_histories)\n", " recent_unix = rhistory[['inter_no', 'end_unix']]\n", " # 3. 상태 테이블 조회정보(A)와 이력 테이블 조회정보(B) 조인(키값 : 교차로번호) : C\n", " move = pd.merge(move, recent_unix, how='left', on='inter_no')\n", " # move['end_unix'] = move['end_unix'].fillna(0).astype(int)\n", " # 4. C데이터 프레임에 신규 컬럼(시작 유닉스타임) 생성 후 종료유닉스 타임 값 입력, 종료 유닉스 타임 컬럼 제거\n", " move = move.rename(columns = {'end_unix':'start_unix'})\n", " # 5. 이동류 이력정보 READ\n", " # - CSV 파일로 서버에 저장된 이동류정보를 읽어옴(파일이 없는 경우에는 데이터가 없는 프레임 D 생성)\n", " try:\n", " movement # movement가 존재할 경우 그걸 그대로 씀.\n", " except NameError: # movement가 존재하지 않는 경우 생성\n", " movement = pd.DataFrame()\n", " # 6. 이동류 이력정보 데이터테이블(D)에 C데이터 add\n", " movement = pd.concat([movement, move])\n", " # 7. D데이터 프레임에서 중복데이터 제거(교차로번호, 시작 유닉스타임, A링 현시번호, B링 현시번호 같은 행은 제거)\n", " movement = movement.drop_duplicates(['inter_no','phas_A','phas_B','start_unix'])\n", " # # 8. D데이터 보관 시간 기준시간을 시작 유닉스 타임의 최대값 - self.subtractor // 2을 값으로 산출하고, 보관 시간 기준시간보다 작은 시작 유닉스 타임을 가진 행은 모두 제거(1시간 데이터만 보관)\n", " movement = movement[movement.start_unix > fsec - self.subtractor // 2]\n", "movement['start_unix'] = movement['start_unix'].astype(int)\n", "self.movement = movement.reset_index(drop=True)\n", "display(self.movement.head())" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "self.update_movement()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# 4-1\n", "self.merge_dfs()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# 4-2\n", "self.assign_signals()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# 4-3\n", "self.attach_children()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | inter_no | \n", "node_id | \n", "start_unix | \n", "phas_A | \n", "phas_B | \n", "move_A | \n", "move_B | \n", "duration | \n", "state_A | \n", "state_B | \n", "
---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "457 | \n", "106234 | \n", "1722383873 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "45 | \n", "gGGGrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgGGGrgrrr | \n", "
1 | \n", "457 | \n", "106234 | \n", "1722383873 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "20 | \n", "grrrrgrrrrgrrrGgrrr | \n", "grrrGgrrrrgrrrrgrrr | \n", "
2 | \n", "457 | \n", "106234 | \n", "1722383873 | \n", "3 | \n", "3 | \n", "17 | \n", "17 | \n", "40 | \n", "grrrrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgrrrrgrrr | \n", "
3 | \n", "457 | \n", "106234 | \n", "1722383873 | \n", "4 | \n", "4 | \n", "8 | \n", "3 | \n", "35 | \n", "grrrrgGGrrgrrrrgrrr | \n", "grrrrgrrGGgrrrrgrrr | \n", "
4 | \n", "457 | \n", "106234 | \n", "1722383873 | \n", "5 | \n", "5 | \n", "7 | \n", "4 | \n", "40 | \n", "grrrrgrrrrgrrrrgrrG | \n", "grrrrgrrrrgrrrrgGGr | \n", "
5 | \n", "456 | \n", "106231 | \n", "1722383877 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
6 | \n", "456 | \n", "106231 | \n", "1722383877 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
7 | \n", "456 | \n", "106231 | \n", "1722383877 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
8 | \n", "456 | \n", "106231 | \n", "1722383877 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
9 | \n", "455 | \n", "109901 | \n", "1722383886 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
10 | \n", "442 | \n", "106332 | \n", "1722383898 | \n", "1 | \n", "1 | \n", "6 | \n", "1 | \n", "31 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrGGrrrgrrgrrrrrrrrgrrrr | \n", "
11 | \n", "442 | \n", "106332 | \n", "1722383898 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "27 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
12 | \n", "442 | \n", "106332 | \n", "1722383898 | \n", "3 | \n", "3 | \n", "5 | \n", "2 | \n", "32 | \n", "grrrrrrrrrgrrgrrrrrrGGgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
13 | \n", "442 | \n", "106332 | \n", "1722383898 | \n", "4 | \n", "4 | \n", "7 | \n", "4 | \n", "49 | \n", "grrrrrrrrrgrrgrrrrrrrrgrrrG | \n", "grrrrrrrrrgrrgrrrrrrrrgGGGr | \n", "
14 | \n", "442 | \n", "106332 | \n", "1722383898 | \n", "5 | \n", "5 | \n", "8 | \n", "3 | \n", "45 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
15 | \n", "442 | \n", "106332 | \n", "1722383898 | \n", "6 | \n", "6 | \n", "8 | \n", "3 | \n", "16 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
16 | \n", "443 | \n", "108769 | \n", "1722383902 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "125 | \n", "gGGGGGrrrrrrgrr | \n", "grrrrrGGGGGrgrr | \n", "
17 | \n", "443 | \n", "108769 | \n", "1722383902 | \n", "2 | \n", "2 | \n", "5 | \n", "2 | \n", "25 | \n", "grrrrrrrrrrGgrr | \n", "grrrrrGGGGGrgrr | \n", "
18 | \n", "443 | \n", "108769 | \n", "1722383902 | \n", "3 | \n", "3 | \n", "7 | \n", "18 | \n", "50 | \n", "grrrrrrrrrrrgGG | \n", "grrrrrrrrrrrgrr | \n", "
19 | \n", "456 | \n", "106231 | \n", "1722383967 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
20 | \n", "456 | \n", "106231 | \n", "1722383967 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
21 | \n", "456 | \n", "106231 | \n", "1722383967 | \n", "3 | \n", "3 | \n", "7 | \n", "-1 | \n", "12 | \n", "gGgrrrrr | \n", "grgrrrrr | \n", "
22 | \n", "456 | \n", "106231 | \n", "1722383967 | \n", "4 | \n", "4 | \n", "17 | \n", "-1 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
23 | \n", "456 | \n", "106231 | \n", "1722383968 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
24 | \n", "456 | \n", "106231 | \n", "1722383968 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
25 | \n", "456 | \n", "106231 | \n", "1722383968 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
26 | \n", "456 | \n", "106231 | \n", "1722383968 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
27 | \n", "455 | \n", "109901 | \n", "1722383975 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
28 | \n", "455 | \n", "109901 | \n", "1722383976 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
29 | \n", "455 | \n", "109901 | \n", "1722383976 | \n", "2 | \n", "2 | \n", "-1 | \n", "-1 | \n", "27 | \n", "rrrr | \n", "rrrr | \n", "
30 | \n", "437 | \n", "109986 | \n", "1722384007 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "77 | \n", "gGGGGrgrrgrrrrrgrr | \n", "grrrrrgrrgGGGGrgrr | \n", "
31 | \n", "437 | \n", "109986 | \n", "1722384007 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "28 | \n", "grrrrrgrrgrrrrGgrr | \n", "grrrrGgrrgrrrrrgrr | \n", "
32 | \n", "437 | \n", "109986 | \n", "1722384007 | \n", "3 | \n", "3 | \n", "8 | \n", "3 | \n", "46 | \n", "grrrrrgGrgrrrrrgrr | \n", "grrrrrgrGgrrrrrgrr | \n", "
33 | \n", "437 | \n", "109986 | \n", "1722384007 | \n", "4 | \n", "4 | \n", "7 | \n", "4 | \n", "49 | \n", "grrrrrgrrgrrrrrgrG | \n", "grrrrrgrrgrrrrrgGr | \n", "
34 | \n", "436 | \n", "109836 | \n", "1722384036 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "50 | \n", "grrrrgrrgrGgrr | \n", "grrrrgrrgGrgrr | \n", "
35 | \n", "436 | \n", "109836 | \n", "1722384036 | \n", "2 | \n", "2 | \n", "8 | \n", "3 | \n", "85 | \n", "grrrrgGrgrrgrr | \n", "grrrrgrGgrrgrr | \n", "
36 | \n", "436 | \n", "109836 | \n", "1722384036 | \n", "3 | \n", "3 | \n", "7 | \n", "4 | \n", "35 | \n", "grrrrgrrgrrgrG | \n", "grrrrgrrgrrgGr | \n", "
37 | \n", "436 | \n", "109836 | \n", "1722384036 | \n", "4 | \n", "4 | \n", "6 | \n", "1 | \n", "30 | \n", "gGGGrgrrgrrgrr | \n", "grrrGgrrgrrgrr | \n", "
38 | \n", "457 | \n", "106234 | \n", "1722384052 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "45 | \n", "gGGGrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgGGGrgrrr | \n", "
39 | \n", "457 | \n", "106234 | \n", "1722384052 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "20 | \n", "grrrrgrrrrgrrrGgrrr | \n", "grrrGgrrrrgrrrrgrrr | \n", "
40 | \n", "457 | \n", "106234 | \n", "1722384052 | \n", "3 | \n", "3 | \n", "17 | \n", "17 | \n", "40 | \n", "grrrrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgrrrrgrrr | \n", "
41 | \n", "457 | \n", "106234 | \n", "1722384052 | \n", "4 | \n", "4 | \n", "8 | \n", "3 | \n", "40 | \n", "grrrrgGGrrgrrrrgrrr | \n", "grrrrgrrGGgrrrrgrrr | \n", "
42 | \n", "457 | \n", "106234 | \n", "1722384052 | \n", "5 | \n", "5 | \n", "7 | \n", "4 | \n", "35 | \n", "grrrrgrrrrgrrrrgrrG | \n", "grrrrgrrrrgrrrrgGGr | \n", "
43 | \n", "456 | \n", "106231 | \n", "1722384057 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
44 | \n", "456 | \n", "106231 | \n", "1722384057 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
45 | \n", "456 | \n", "106231 | \n", "1722384057 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
46 | \n", "456 | \n", "106231 | \n", "1722384057 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
47 | \n", "456 | \n", "106231 | \n", "1722384058 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
48 | \n", "456 | \n", "106231 | \n", "1722384058 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
49 | \n", "456 | \n", "106231 | \n", "1722384058 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
50 | \n", "456 | \n", "106231 | \n", "1722384058 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
51 | \n", "455 | \n", "109901 | \n", "1722384066 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
52 | \n", "455 | \n", "109901 | \n", "1722384067 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
53 | \n", "442 | \n", "106332 | \n", "1722384097 | \n", "1 | \n", "1 | \n", "6 | \n", "1 | \n", "35 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrGGrrrgrrgrrrrrrrrgrrrr | \n", "
54 | \n", "442 | \n", "106332 | \n", "1722384097 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "27 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
55 | \n", "442 | \n", "106332 | \n", "1722384097 | \n", "3 | \n", "3 | \n", "5 | \n", "2 | \n", "30 | \n", "grrrrrrrrrgrrgrrrrrrGGgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
56 | \n", "442 | \n", "106332 | \n", "1722384097 | \n", "4 | \n", "4 | \n", "7 | \n", "4 | \n", "47 | \n", "grrrrrrrrrgrrgrrrrrrrrgrrrG | \n", "grrrrrrrrrgrrgrrrrrrrrgGGGr | \n", "
57 | \n", "442 | \n", "106332 | \n", "1722384097 | \n", "5 | \n", "5 | \n", "8 | \n", "3 | \n", "45 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
58 | \n", "442 | \n", "106332 | \n", "1722384097 | \n", "6 | \n", "6 | \n", "8 | \n", "3 | \n", "16 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
59 | \n", "443 | \n", "108769 | \n", "1722384102 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "125 | \n", "gGGGGGrrrrrrgrr | \n", "grrrrrGGGGGrgrr | \n", "
60 | \n", "443 | \n", "108769 | \n", "1722384102 | \n", "2 | \n", "2 | \n", "5 | \n", "2 | \n", "25 | \n", "grrrrrrrrrrGgrr | \n", "grrrrrGGGGGrgrr | \n", "
61 | \n", "443 | \n", "108769 | \n", "1722384102 | \n", "3 | \n", "3 | \n", "7 | \n", "18 | \n", "50 | \n", "grrrrrrrrrrrgGG | \n", "grrrrrrrrrrrgrr | \n", "
62 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
63 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
64 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
65 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
66 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
67 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
68 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
69 | \n", "456 | \n", "106231 | \n", "1722384147 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
70 | \n", "455 | \n", "109901 | \n", "1722384155 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
71 | \n", "455 | \n", "109901 | \n", "1722384156 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
72 | \n", "457 | \n", "106234 | \n", "1722384232 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "45 | \n", "gGGGrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgGGGrgrrr | \n", "
73 | \n", "457 | \n", "106234 | \n", "1722384232 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "20 | \n", "grrrrgrrrrgrrrGgrrr | \n", "grrrGgrrrrgrrrrgrrr | \n", "
74 | \n", "457 | \n", "106234 | \n", "1722384232 | \n", "3 | \n", "3 | \n", "17 | \n", "17 | \n", "40 | \n", "grrrrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgrrrrgrrr | \n", "
75 | \n", "436 | \n", "109836 | \n", "1722384236 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "50 | \n", "grrrrgrrgrGgrr | \n", "grrrrgrrgGrgrr | \n", "
76 | \n", "436 | \n", "109836 | \n", "1722384236 | \n", "2 | \n", "2 | \n", "8 | \n", "3 | \n", "85 | \n", "grrrrgGrgrrgrr | \n", "grrrrgrGgrrgrr | \n", "
77 | \n", "456 | \n", "106231 | \n", "1722384237 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
78 | \n", "456 | \n", "106231 | \n", "1722384237 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
79 | \n", "456 | \n", "106231 | \n", "1722384237 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
80 | \n", "456 | \n", "106231 | \n", "1722384237 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
81 | \n", "455 | \n", "109901 | \n", "1722384246 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
82 | \n", "442 | \n", "106332 | \n", "1722384297 | \n", "1 | \n", "1 | \n", "6 | \n", "1 | \n", "35 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrGGrrrgrrgrrrrrrrrgrrrr | \n", "
83 | \n", "443 | \n", "108769 | \n", "1722384302 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "125 | \n", "gGGGGGrrrrrrgrr | \n", "grrrrrGGGGGrgrr | \n", "
84 | \n", "443 | \n", "108769 | \n", "1722384302 | \n", "2 | \n", "2 | \n", "5 | \n", "2 | \n", "25 | \n", "grrrrrrrrrrGgrr | \n", "grrrrrGGGGGrgrr | \n", "
85 | \n", "443 | \n", "108769 | \n", "1722384302 | \n", "3 | \n", "3 | \n", "7 | \n", "18 | \n", "50 | \n", "grrrrrrrrrrrgGG | \n", "grrrrrrrrrrrgrr | \n", "
86 | \n", "456 | \n", "106231 | \n", "1722384327 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
87 | \n", "456 | \n", "106231 | \n", "1722384327 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
88 | \n", "456 | \n", "106231 | \n", "1722384327 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
89 | \n", "456 | \n", "106231 | \n", "1722384327 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
90 | \n", "455 | \n", "109901 | \n", "1722384336 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
91 | \n", "457 | \n", "106234 | \n", "1722384412 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "45 | \n", "gGGGrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgGGGrgrrr | \n", "
92 | \n", "457 | \n", "106234 | \n", "1722384412 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "20 | \n", "grrrrgrrrrgrrrGgrrr | \n", "grrrGgrrrrgrrrrgrrr | \n", "
93 | \n", "457 | \n", "106234 | \n", "1722384412 | \n", "3 | \n", "3 | \n", "17 | \n", "17 | \n", "40 | \n", "grrrrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgrrrrgrrr | \n", "
94 | \n", "457 | \n", "106234 | \n", "1722384412 | \n", "4 | \n", "4 | \n", "8 | \n", "3 | \n", "40 | \n", "grrrrgGGrrgrrrrgrrr | \n", "grrrrgrrGGgrrrrgrrr | \n", "
95 | \n", "457 | \n", "106234 | \n", "1722384412 | \n", "5 | \n", "5 | \n", "7 | \n", "4 | \n", "35 | \n", "grrrrgrrrrgrrrrgrrG | \n", "grrrrgrrrrgrrrrgGGr | \n", "
96 | \n", "456 | \n", "106231 | \n", "1722384417 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
97 | \n", "456 | \n", "106231 | \n", "1722384417 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
98 | \n", "456 | \n", "106231 | \n", "1722384417 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
99 | \n", "456 | \n", "106231 | \n", "1722384417 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
100 | \n", "455 | \n", "109901 | \n", "1722384426 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
101 | \n", "436 | \n", "109836 | \n", "1722384436 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "50 | \n", "grrrrgrrgrGgrr | \n", "grrrrgrrgGrgrr | \n", "
102 | \n", "436 | \n", "109836 | \n", "1722384436 | \n", "2 | \n", "2 | \n", "8 | \n", "3 | \n", "85 | \n", "grrrrgGrgrrgrr | \n", "grrrrgrGgrrgrr | \n", "
103 | \n", "436 | \n", "109836 | \n", "1722384436 | \n", "3 | \n", "3 | \n", "7 | \n", "4 | \n", "35 | \n", "grrrrgrrgrrgrG | \n", "grrrrgrrgrrgGr | \n", "
104 | \n", "436 | \n", "109836 | \n", "1722384436 | \n", "4 | \n", "4 | \n", "6 | \n", "1 | \n", "30 | \n", "gGGGrgrrgrrgrr | \n", "grrrGgrrgrrgrr | \n", "
105 | \n", "442 | \n", "106332 | \n", "1722384497 | \n", "1 | \n", "1 | \n", "6 | \n", "1 | \n", "35 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrGGrrrgrrgrrrrrrrrgrrrr | \n", "
106 | \n", "442 | \n", "106332 | \n", "1722384497 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "27 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
107 | \n", "442 | \n", "106332 | \n", "1722384497 | \n", "3 | \n", "3 | \n", "5 | \n", "2 | \n", "30 | \n", "grrrrrrrrrgrrgrrrrrrGGgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
108 | \n", "442 | \n", "106332 | \n", "1722384497 | \n", "4 | \n", "4 | \n", "7 | \n", "4 | \n", "47 | \n", "grrrrrrrrrgrrgrrrrrrrrgrrrG | \n", "grrrrrrrrrgrrgrrrrrrrrgGGGr | \n", "
109 | \n", "442 | \n", "106332 | \n", "1722384497 | \n", "5 | \n", "5 | \n", "8 | \n", "3 | \n", "45 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
110 | \n", "442 | \n", "106332 | \n", "1722384497 | \n", "6 | \n", "6 | \n", "8 | \n", "3 | \n", "16 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
111 | \n", "443 | \n", "108769 | \n", "1722384502 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "125 | \n", "gGGGGGrrrrrrgrr | \n", "grrrrrGGGGGrgrr | \n", "
112 | \n", "443 | \n", "108769 | \n", "1722384502 | \n", "2 | \n", "2 | \n", "5 | \n", "2 | \n", "25 | \n", "grrrrrrrrrrGgrr | \n", "grrrrrGGGGGrgrr | \n", "
113 | \n", "443 | \n", "108769 | \n", "1722384502 | \n", "3 | \n", "3 | \n", "7 | \n", "18 | \n", "50 | \n", "grrrrrrrrrrrgGG | \n", "grrrrrrrrrrrgrr | \n", "
114 | \n", "456 | \n", "106231 | \n", "1722384507 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
115 | \n", "456 | \n", "106231 | \n", "1722384507 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
116 | \n", "456 | \n", "106231 | \n", "1722384507 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
117 | \n", "456 | \n", "106231 | \n", "1722384507 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
118 | \n", "455 | \n", "109901 | \n", "1722384516 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
119 | \n", "457 | \n", "106234 | \n", "1722384592 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "45 | \n", "gGGGrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgGGGrgrrr | \n", "
120 | \n", "457 | \n", "106234 | \n", "1722384592 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "20 | \n", "grrrrgrrrrgrrrGgrrr | \n", "grrrGgrrrrgrrrrgrrr | \n", "
121 | \n", "457 | \n", "106234 | \n", "1722384592 | \n", "3 | \n", "3 | \n", "17 | \n", "17 | \n", "40 | \n", "grrrrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgrrrrgrrr | \n", "
122 | \n", "457 | \n", "106234 | \n", "1722384592 | \n", "4 | \n", "4 | \n", "8 | \n", "3 | \n", "40 | \n", "grrrrgGGrrgrrrrgrrr | \n", "grrrrgrrGGgrrrrgrrr | \n", "
123 | \n", "457 | \n", "106234 | \n", "1722384592 | \n", "5 | \n", "5 | \n", "7 | \n", "4 | \n", "35 | \n", "grrrrgrrrrgrrrrgrrG | \n", "grrrrgrrrrgrrrrgGGr | \n", "
124 | \n", "456 | \n", "106231 | \n", "1722384597 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
125 | \n", "456 | \n", "106231 | \n", "1722384597 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
126 | \n", "456 | \n", "106231 | \n", "1722384597 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
127 | \n", "456 | \n", "106231 | \n", "1722384597 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
128 | \n", "455 | \n", "109901 | \n", "1722384606 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
129 | \n", "436 | \n", "109836 | \n", "1722384636 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "50 | \n", "grrrrgrrgrGgrr | \n", "grrrrgrrgGrgrr | \n", "
130 | \n", "436 | \n", "109836 | \n", "1722384636 | \n", "2 | \n", "2 | \n", "8 | \n", "3 | \n", "85 | \n", "grrrrgGrgrrgrr | \n", "grrrrgrGgrrgrr | \n", "
131 | \n", "436 | \n", "109836 | \n", "1722384636 | \n", "3 | \n", "3 | \n", "7 | \n", "4 | \n", "35 | \n", "grrrrgrrgrrgrG | \n", "grrrrgrrgrrgGr | \n", "
132 | \n", "436 | \n", "109836 | \n", "1722384636 | \n", "4 | \n", "4 | \n", "6 | \n", "1 | \n", "30 | \n", "gGGGrgrrgrrgrr | \n", "grrrGgrrgrrgrr | \n", "
133 | \n", "456 | \n", "106231 | \n", "1722384687 | \n", "1 | \n", "1 | \n", "5 | \n", "2 | \n", "15 | \n", "grgrrrrG | \n", "grgrrGGr | \n", "
134 | \n", "456 | \n", "106231 | \n", "1722384687 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "28 | \n", "grgGGrrr | \n", "grgrrGGr | \n", "
135 | \n", "456 | \n", "106231 | \n", "1722384687 | \n", "3 | \n", "3 | \n", "7 | \n", "7 | \n", "12 | \n", "gGgrrrrr | \n", "gGgrrrrr | \n", "
136 | \n", "456 | \n", "106231 | \n", "1722384687 | \n", "4 | \n", "4 | \n", "17 | \n", "17 | \n", "35 | \n", "grgrrrrr | \n", "grgrrrrr | \n", "
137 | \n", "455 | \n", "109901 | \n", "1722384696 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "63 | \n", "GGrr | \n", "rrGG | \n", "
138 | \n", "442 | \n", "106332 | \n", "1722384697 | \n", "1 | \n", "1 | \n", "6 | \n", "1 | \n", "35 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrGGrrrgrrgrrrrrrrrgrrrr | \n", "
139 | \n", "442 | \n", "106332 | \n", "1722384697 | \n", "2 | \n", "2 | \n", "6 | \n", "2 | \n", "27 | \n", "gGGGrrrrrrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
140 | \n", "442 | \n", "106332 | \n", "1722384697 | \n", "3 | \n", "3 | \n", "5 | \n", "2 | \n", "30 | \n", "grrrrrrrrrgrrgrrrrrrGGgrrrr | \n", "grrrrrrrrrgrrgrGGGGGrrgrrrr | \n", "
141 | \n", "442 | \n", "106332 | \n", "1722384697 | \n", "4 | \n", "4 | \n", "7 | \n", "4 | \n", "47 | \n", "grrrrrrrrrgrrgrrrrrrrrgrrrG | \n", "grrrrrrrrrgrrgrrrrrrrrgGGGr | \n", "
142 | \n", "442 | \n", "106332 | \n", "1722384697 | \n", "5 | \n", "5 | \n", "8 | \n", "3 | \n", "45 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
143 | \n", "442 | \n", "106332 | \n", "1722384697 | \n", "6 | \n", "6 | \n", "8 | \n", "3 | \n", "16 | \n", "grrrrrrGGrgrrgrrrrrrrrgrrrr | \n", "grrrrrrrrGgrrgrrrrrrrrgrrrr | \n", "
144 | \n", "457 | \n", "106234 | \n", "1722384700 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "27 | \n", "gGGGrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgGGGrgrrr | \n", "
145 | \n", "457 | \n", "106234 | \n", "1722384700 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "12 | \n", "grrrrgrrrrgrrrGgrrr | \n", "grrrGgrrrrgrrrrgrrr | \n", "
146 | \n", "457 | \n", "106234 | \n", "1722384700 | \n", "3 | \n", "3 | \n", "17 | \n", "17 | \n", "24 | \n", "grrrrgrrrrgrrrrgrrr | \n", "grrrrgrrrrgrrrrgrrr | \n", "
147 | \n", "457 | \n", "106234 | \n", "1722384700 | \n", "4 | \n", "4 | \n", "8 | \n", "3 | \n", "24 | \n", "grrrrgGGrrgrrrrgrrr | \n", "grrrrgrrGGgrrrrgrrr | \n", "
148 | \n", "457 | \n", "106234 | \n", "1722384700 | \n", "5 | \n", "5 | \n", "7 | \n", "4 | \n", "21 | \n", "grrrrgrrrrgrrrrgrrG | \n", "grrrrgrrrrgrrrrgGGr | \n", "
149 | \n", "443 | \n", "108769 | \n", "1722384700 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "124 | \n", "gGGGGGrrrrrrgrr | \n", "grrrrrGGGGGrgrr | \n", "
150 | \n", "443 | \n", "108769 | \n", "1722384700 | \n", "2 | \n", "2 | \n", "5 | \n", "2 | \n", "25 | \n", "grrrrrrrrrrGgrr | \n", "grrrrrGGGGGrgrr | \n", "
151 | \n", "443 | \n", "108769 | \n", "1722384700 | \n", "3 | \n", "3 | \n", "7 | \n", "18 | \n", "49 | \n", "grrrrrrrrrrrgGG | \n", "grrrrrrrrrrrgrr | \n", "
152 | \n", "437 | \n", "109986 | \n", "1722384700 | \n", "1 | \n", "1 | \n", "6 | \n", "2 | \n", "71 | \n", "gGGGGrgrrgrrrrrgrr | \n", "grrrrrgrrgGGGGrgrr | \n", "
153 | \n", "437 | \n", "109986 | \n", "1722384700 | \n", "2 | \n", "2 | \n", "5 | \n", "1 | \n", "28 | \n", "grrrrrgrrgrrrrGgrr | \n", "grrrrGgrrgrrrrrgrr | \n", "
154 | \n", "437 | \n", "109986 | \n", "1722384700 | \n", "3 | \n", "3 | \n", "8 | \n", "3 | \n", "58 | \n", "grrrrrgGrgrrrrrgrr | \n", "grrrrrgrGgrrrrrgrr | \n", "
155 | \n", "437 | \n", "109986 | \n", "1722384700 | \n", "4 | \n", "4 | \n", "7 | \n", "4 | \n", "43 | \n", "grrrrrgrrgrrrrrgrG | \n", "grrrrrgrrgrrrrrgGr | \n", "