Monstrofil Posted November 10, 2022 Share Posted November 10, 2022 Признавайтесь, кто уже собрал список message id в пакетах? Что там вообще бывает? У меня пока 2,5 не считая пакета в котором клиенту приходят ip и порт на который нужно переключиться. А в base entity create всё хорошо кроме последнего байта 0x0f, который непонятно что означает. @dataclass class CounterMessage(BaseMessage): counter: int @classmethod def from_data(cls, data: BytesIO): counter, = struct.unpack('B', data.read(1)) return cls( counter=counter ) @dataclass class MethodCallMessage(BaseMessage): _METHOD_ID_OFFSET = 0x44 method_id: int definitions = get_definitions(version='0_11_10') entity_def = definitions.get_entity_def_by_name('Account') methods = dict(enumerate(entity_def.client().get_exposed_index_map())) entity = Entity( id_=1, spec=entity_def) @classmethod def from_data(cls, data: BytesIO): method_id = struct.unpack('B', data.read(1))[0] - cls._METHOD_ID_OFFSET logging.info('Decoding message id as = %s', hex(method_id)) method = cls.methods[method_id] logging.info('Method is = %s', method) # variable size message payload_size = method.get_size_in_bytes() - method._variable_header_size if method.get_size_in_bytes() > 0xFFFF: payload_size, = struct.unpack('B', data.read(1)) logging.info('payload_size = %s', payload_size) payload = BytesIO(data.read(payload_size)) logging.info('payload is = %s', payload.getvalue()) try: args, kwargs = method.create_from_stream(payload) except Exception as e: logging.warning('Unpack error %s', e) logging.info('method = %s args = %s kwargs = %s', method, args, kwargs) return cls( method_id=method_id ) @dataclass class BaseEntityCreateMessage(BaseMessage): unknown_header: int entity_id: int deninition_id: int unknown_uint8: int definitions = get_definitions(version='0_11_10') @classmethod def from_data(cls, data: BytesIO): unknown_header, = struct.unpack('H', data.read(2)) entity_id, = struct.unpack('I', data.read(4)) deninition_id, = struct.unpack('H', data.read(2)) unknown_uint8, = struct.unpack('B', data.read(1)) entity_def = cls.definitions.get_entity_def_by_index(deninition_id) entity = Entity( id_=entity_id, spec=entity_def) for index, prop in enumerate(entity.base_properties): logging.warning('setting base property %s', prop) entity.set_base_property(index, data) logging.info('New base entity created %s: %s', entity, entity.properties) return cls( unknown_header=unknown_header, entity_id=entity_id, deninition_id=deninition_id, unknown_uint8=unknown_uint8, ) _MESSAGE_ID_TO_TYPE = { 0x13: CounterMessage, 0x5: BaseEntityCreateMessage, 0x1a: MethodCallMessage, 0x3e: UnknownFixedLengthMessage(message_len=8), 0x02: UnknownFixedLengthMessage(message_len=21) } E.g. 2022-11-10 20:11:12,120 WARNING Packet from_data Receiving message with id=0x2 2022-11-10 20:11:12,120 WARNING Packet from_data Receiving message with id=0x5 2022-11-10 20:11:12,121 WARNING Packet from_data setting base property name (<String>) 2022-11-10 20:11:12,121 WARNING Packet from_data setting base property spaID (<Int64>) 2022-11-10 20:11:12,122 WARNING Packet from_data setting base property attrs (<UInt64>) 2022-11-10 20:11:12,122 WARNING Packet from_data setting base property isClientOnline (<UInt8>) 2022-11-10 20:11:12,123 INFO Packet from_data New base entity created Account<939598900>: {'client': {}, 'cell': {}, 'base': {'name': 'Monstrofil', 'spaID': 509114719, 'attrs': 4176, 'isClientOnline': 0}} 2022-11-10 20:11:13,474 WARNING Packet from_data Receiving message with id=0x13 2022-11-10 20:11:13,474 WARNING Packet from_data Receiving message with id=0x1a 2022-11-10 20:11:13,475 INFO Packet from_data Decoding message id as = 0x58 2022-11-10 20:11:13,475 INFO Packet from_data Method is = onUpdateParentalControlRestrictionStatus ([status: <UInt32>, message: <String>, expirationTime: <UInt32>]) 2022-11-10 20:11:13,475 INFO Packet from_data payload_size = 9 2022-11-10 20:11:13,475 INFO Packet from_data payload is = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00' 2022-11-10 20:11:13,476 INFO Packet from_data method = onUpdateParentalControlRestrictionStatus ([status: <UInt32>, message: <String>, expirationTime: <UInt32>]) args = [] kwargs = {'status': 0, 'message': '', 'expirationTime': 0} @ Quote Link to comment Short link Share on other sites More sharing options...
cofe_cofe_cofe1 Posted November 11, 2022 Share Posted November 11, 2022 @Dragon armorМожет немного не в тему, но надеюсь здесь подскажут ответ. В снайперском режиме, после выстрела клиент отрисовывает начальную траекторию движения снаряда, следовательно ему известно в какую точку полетит снаряд и можно подкорректировать это дело на стороне клиента ? Или сам сервер присылает значение разброса сразу после события нажатия на кнопку ? @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 11, 2022 Share Posted November 11, 2022 Только что, cofe_cofe_cofe1 сказал: @Dragon armorМожет немного не в тему, но надеюсь здесь подскажут ответ. В снайперском режиме, после выстрела клиент отрисовывает начальную траекторию движения снаряда, следовательно ему известно в какую точку полетит снаряд и можно подкорректировать это дело на стороне клиента ? Или сам сервер присылает значение разброса сразу после события нажатия на кнопку ? Сервер присылает инфу клиенту игры, что куда полетело и куда прилетело на сервере. Клиент только рисует. Ничего подкорректировать нельзя. @ Quote Link to comment Short link Share on other sites More sharing options...
cofe_cofe_cofe1 Posted November 11, 2022 Share Posted November 11, 2022 @StranikS_ScanЗвучит безнадёжно(( Спасибо за ответ! @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted November 11, 2022 Author Share Posted November 11, 2022 (edited) 07.11.2022 в 13:03, Monstrofil сказал: FLAG_IS_RELIABLE на первой странице это опечатка, или действительно поменяли идентификатор Флаги не менялись. Были лишь добавлены новые. Видимо, опечатка (хотя не смотрел). 07.11.2022 в 18:43, Monstrofil сказал: upd: целый день с этим провозился и только сейчас заметил что размер blob по какой-то причине дописан в конец payload, сразу после uint8. Да. Исходники BigWorld рекомендую посмотреть. Как и по следующему вопросу. 07.11.2022 в 18:43, Monstrofil сказал: Разбирался сегодня с выравниванием под blowfish. Потому что шифрование и логика сетевого протокола не менялась кардинально с тех времён. 3 часа назад, cofe_cofe_cofe1 сказал: после выстрела клиент отрисовывает начальную траекторию движения снаряда, Добавлю предыдущий ответ. Клиент отрисовать может заранее, чтобы меньше видно было лаг ответа. Поэтому возникают такие темы и видео, где чётко видно трассер, влетающий в борт, но сбивается гусеница. Это не заговор, а предсказание клиента. Иначе без этого всё воспринималось бы как ватность в управлении и отзывчивости игры. А на сервере всё может быть совсем иначе. Клиент на это никак повлиять не может. 23 часа назад, Monstrofil сказал: кроме последнего байта 0x0f FF FF FF 0F? Packet number. Edited November 11, 2022 by Dragon armor @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 11, 2022 Share Posted November 11, 2022 Только что, Dragon armor сказал: Добавлю предыдущий ответ. Клиент отрисовать может заранее, чтобы меньше видно было лаг ответа. Поэтому возникают такие темы и видео, где чётко видно трассер, влетающий в борт, но сбивается гусеница. Это не заговор, а предсказание клиента. Иначе без этого всё воспринималось бы как ватность в управлении и отзывчивости игры. А на сервере всё может быть совсем иначе. Клиент на это никак повлиять не может. Я бы не называл это предсказаниями, так как экстраполяционной математики или математики предсказаний на клиенте нет. Это что-то вроде инерционности, но она на уровне физики, а не игровых событий. Например на клиенте продублирован с сервера код для расчета движения, поворотов танка, орудия и башни, физики гусениц, сведения прицела и перезарядки орудия. Клиент отрисовывает именно по этом коду, но раз в 0,1 сек приходят правильные "корректирующие" данные, которыми и заменяются посчитанные. Причина описанной же выше ситуации с попаданием и уроном обусловлена рассинхронизированным с логикой событий отсылом и/или получением инфы с сервера игры и рассинхронизированной с логикой событий отрисовкой на клиенте. Сервер обсчитал траекториию, точку попадания нашел, посчитал пробитие в точке и применил урон к противнику. Клиенту он отсылает вектор выстрела, закодированную геометрически точку попадания на коллижене и урон противнику, однако дойти они могут не в такой последовательности. Кроме того, если полет снаряда по времени больше 1 тика сервера (0,1 сек), то данные о попадании придут с другим тиком. Но даже если дошли все данные за один тик и в правильной последовательности, то клиент игры отрисовывывает события параллельно и потому видимые результаты, исходя из трудоемкости отрисовки и времени отрисовки, могут быть рассинхронизированы во времени. Например, отрисовать отлетающий урон проще и быстрее чем траекторию полета снаряда, отсюда игрок может заметить, как от врага отлетает урон еще до того как трассер в него влетел. На производительном ПК это конечно мало заметно. Но могут быть хорошо видны несовпадения по времени, вызванные проблемами с передачей данных. Все это давно известно как рассинхроны WOT и при текущей архитектуре игры аля "аватар" они часты и бывают хорошо видны. @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted November 11, 2022 Share Posted November 11, 2022 Да. Исходники BigWorld рекомендую посмотреть. Как и по следующему вопросу. Я в них посматриваю, но там черт ногу сломит и нет самого важного - актуальных message id по которым можно было бы выстраивать дальнейший парсинг пакетов. Максимум можно подсмотреть часто используемые структуры данных. 2 часа назад, Dragon armor сказал: FF FF FF 0F? Packet number. Нет, тот который перед footer, сразу после BASE свойств переданных для создания entity. Попадается 0x0f у Account и 0x01 у Login. # Account: props = [name (<String>), spaID (<Int64>), attrs (<UInt64>), isClientOnline (<UInt8>)] # entity create ??????? entity_id xml id ?? name spaID attrs isClientOnline ???? footer # entity_create = b'X\x04\x13\x9a \x05 $\x00 0\xfa\t0 \x03\x00 \x00 \nMonstrofil _yX\x1e\x00\x00\x00\x00 P\x10\x00\x00\x00\x00\x00\x00 \x00 \x0f \x03\x00\x00\x00 \x01\x00\x00\x00 \xef\xbe\xad\xde' # entity_create = b'X\x04\x133 \x05 $\x00 c\xe1\x108 \x03\x00 \x00 \nMonstrofil _yX\x1e\x00\x00\x00\x00 P\x10\x00\x00\x00\x00\x00\x00 \x00 \x0f \x02\x00\x00\x00 \x01\x00\x00\x00 \xef\xbe\xad\xde' # Login: props = [] # entity_create = b'X\x04\x135 \x05 \x08\x00 \x06\x00\x0f0 \x06\x00 \x00 \x01 \x02\x00\x00\x00 \x01\x00\x00\x00 \xef\xbe\xad\xde' Пакеты в примере выше очищены от выравнивания для blowfish ^^ Кстати, сегодня столкнулся с ещё одним "нюансом" - если exposed method_id для ClientEntityMethodCall меньше 0xa1, то его номер просто записывается сразу после id сообщения. А если превышает, то в id сообщения записывается 0x1a, потом размер сообщения, а потом смещение которое нужно прибавить к 0x1a. _MAGIC_OFFSET_MSG_ID = 0xa1 method_id = struct.unpack('B', data.read(1))[0] if method_id == cls._MAGIC_OFFSET_MSG_ID: payload_size, = struct.unpack('B', data.read(1)) method_id = cls._MAGIC_OFFSET_MSG_ID + struct.unpack('B', data.read(1))[0] - cls._METHOD_ID_OFFSET logging.info('Decoding message id as = %s', hex(method_id)) method = cls.methods[method_id] logging.info('Method is = %s', method) else: method_id -= cls._METHOD_ID_OFFSET logging.info('Decoding message id as = %s', hex(method_id)) method = cls.methods[method_id] logging.info('Method is = %s', method) # variable size message payload_size = method.get_size_in_bytes() - method._variable_header_size if method.get_size_in_bytes() > 0xFFFF: payload_size, = struct.unpack('B', data.read(1)) Только после таких плясок с бубном начали корректно парситься пакеты с большими id. В реплеях, кстати, таких танцев с бубном не нужно =/ INFO:root:method = receiveShotKills ([unknown: <Array> [<FixedDict> {'ownerID': <Int32>, 'hitType': <UInt8>, 'kills': <Array> [<FixedDict> {'pos': <Vector3>, 'shotID': <UInt16>}, ...]}, ...]]) args = [[{'ownerID': 771744, 'hitType': 96, 'kills': [{'pos': (-106.69949340820312, 0.10629188269376755, -25.293855667114258), 'shotID': 88}]}]] kwargs = {} INFO:root:method = onGameRoomStateChanged ([playersData: <Blob>, botsData: <Blob>, observersData: <Blob>]) args = [] kwargs = {'playersData': b'\x80\x02]q\x01]q\x02(K\tK\x02\x86q\x03K\x0bJ\xacc\x010\x86q\x04ea.', 'botsData': b'\x80\x02]q\x01]q\x02(K\nJ\xe9Q\x07\x10\x86q\x03K\x0c\x89\x86q\x04ea.', 'observersData': b'\x80\x02]q\x01.'} И вот таких нюансов в исходниках BW я тоже не находил. Либо они скрыты в слоях абстракций которые там навертели, либо это было добавлено позже. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
DrWeb7_1 Posted November 11, 2022 Share Posted November 11, 2022 (edited) Внезапный вопрос в зал. В каком патче после введения новой кастомизации в 0.9.21 игра научилась запоминать конфигурацию стилей, если переключаться с готового стиля на свой стиль и наоборот, без необходимости пересобирать его вручную? Начиная с 1.9.1, существует секция CustomizationInvData.OUTFITS_POOL, в которую складываются камуфляжи (и, видимо, выбранный стиль), чтобы потом сразу переключиться на нужный пресет нажатием одной кнопки. Меня память подводит или в игре уже до этого была подобная функция? Edited November 11, 2022 by DrWeb7_1 @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted November 11, 2022 Share Posted November 11, 2022 А, ну понятно зачем такой изврат с магической константой, которую я описывал выше. _MAGIC_OFFSET_MSG_ID = 0xa1 Начиная с индекса 0xA2 в том же пакете 0x1A уже данные о property приходят, а не вызовы методов. Соответственно таким образом расширяли диапазон количества доступных методов. @Dragon armorа где ты накопал эти все константы? 0x44 для методов, 0xA2 для property? Мне кажется, или в исходниках BW их нет? @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted November 11, 2022 Author Share Posted November 11, 2022 31 минуту назад, Monstrofil сказал: а где ты накопал эти все константы? 0x44 для методов, 0xA2 для property? Из исполняемого файла. Актуальны для определённой версии. И они считаются от количества методов и свойств. Это не константа. На момент того комментария не было мне это известно, поэтому и писал их константами. 1 час назад, Monstrofil сказал: Попадается 0x0f у Account и 0x01 у Login. Приведи полный пример пакета с флагами и счётчиками без blowfish данных. 1 час назад, Monstrofil сказал: если exposed method_id для ClientEntityMethodCall меньше 0xa1, то его номер просто записывается сразу после id сообщения. А если превышает, то в id сообщения записывается 0x1a, потом размер сообщения, а потом смещение которое нужно прибавить к 0x1a. В исходниках BigWorld есть этот момент. Там всё есть, что нужно. Точнее, основная база. Корабли были позже, поэтому там были изменения какие-то, утверждать не буду, но не одинаково. Но часть неизменна. Размер сообщения указывается только для тех сообщений, размер которых изменяется. Если константа, то не ставится. У тебя парсер def-файлов есть? Ты смотрел в исполняемом файле, как он происходит? В корабликах свои особенности могут быть. 2 часа назад, Monstrofil сказал: но там черт ногу сломит Есть такое. Ты из исполняемого файла достал базовые методы? Хз как их правильно назвать, те, что создают энтити и прочие. @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted November 13, 2022 Share Posted November 13, 2022 11.11.2022 в 23:46, Dragon armor сказал: Приведи полный пример пакета с флагами и счётчиками без blowfish данных. Я их как раз в прошлом сообщении и привел, https://koreanrandom.com/forum/?app=core&module=system&controller=content&do=find&content_class=forums_Topic&content_id=45855&content_commentid=529521 Вот пример в hex, если так будет понятнее: # 5804133305240063e110380300000a4d6f6e7374726f66696c5f79581e000000005010000000000000000f0200000001000000efbeadde01 # header tickSync entity create ??? entity id xml id ?? str len str = Monstorfil spaId (int64) attrs isClientOnline ?? # 5804 1333 05 2400 63e11038 0300 00 0a 4d6f6e7374726f66696c 5f79581e00000000 5010000000000000 00 0f 02000000 01000000 efbeadde 01 Цитата В исходниках BigWorld есть этот момент. Там всё есть, что нужно. Не нахожу :( Цитата Размер сообщения указывается только для тех сообщений, размер которых изменяется. Это я уже понял и написал. Цитата У тебя парсер def-файлов есть? Есть, давно, парсить def, находить method id, списки свойств entity - всё это я уже умею. Цитата Ты из исполняемого файла достал базовые методы? Частично. Я нашел место в клиенте где они описаны, но пока не заморочился настолько что бы достать их id. Сейчас они у меня просто выписаны в черновик в том порядке в котором они объявлены в коде, но этот порядок, похоже, не соответствует message id. С этим разбираться буду немного позже. # 0x6: createCellPlayer, # 0x7: spaceData, # 0x8: enterAoI, # 0x9: enterAoIOnVehicle, # 0x10: leaveAoI, # 0x11: createEntity, # 0x12: updateEntity, # 0x13: voiceData # 0x14: restoreClient # 0x15: switchBaseApp # 0x0a: resourceHeader # 0x0b: resourceFragment # 0x0c: loggedOff Есть ещё более актуальный вопрос, почему иногда три первых байта сообщения (не пакета!) переносятся в конец сообщения? Пока что заметил такое поведение только в пакетах с FLAG_IS_PARTIAL. Вот пример где INT64 (arenaID) таким образом разделило. Opts - тот же метод, но уже в реплее, там эти три байта в правильном месте. state_received = '1a' \ 'a1ffe93500' \ '00' \ # must be 1b7c6f639cbd0e00 '639cbd0e00' \ '022880027d7101284b005d7102284e4e4e4e4e4e4e4e4e654b015d7103284e4e4e4e4e4e4e4e4e65752effd6140080025d7101285d7102284b004adfba301e8671034b01888671044b024ad8410f008671054b036343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71064b004b00868171078671084b044b008671094b054b0086710a4b06580000000086710b4b075d710c2849343239333034343031360a5d710d284b004b004b004b00656586710e4b085d710f2849343239333930353332380a49343231353232393336300a658671104b094b008671114b0a898671124b0b4ae2e408308671134b0c888671144b0d898671154b0e888671164b0f898671174b10888671184b11888671194b128986711a4b138986711b4b148986711c4b158986711d4b164b0086711e4b174d561386711f4b18550d4a617669657247616c6c65676f71208671214b1963506c617965724d6f64654465660a506c617965724d6f64650a7122298171237d712428550e706c617965724d6f64655479706571254b00550e6f627365727665645465616d496471264b0075628671274b1a4b008671284b1b4b008671294b1c4b0086712a4b1d55024555712b86712c4b1e7d712d28550a616972446566656e7365712e550c415f416972446566656e7365712f55096162696c6974696573713055104162696c697469657344656661756c7471315509617274696c6c6572797132550b415f417274696c6c6572797133550a64697665426f6d6265727134551544697665426f6d6265725479706544656661756c7471355504617462617136550b4154424144656661756c747137550c61697273686970506c616e657138551741697273686970506c616e655479706544656661756c7471395503776373713a551a576561706f6e436f6e74726f6c53797374656d44656661756c74713b550d666c69676874436f6e74726f6c713c5514466c69676874436f6e74726f6c44656661756c74713d550a736b6970426f6d626572713e5515536b6970426f6d6265725479706544656661756c74713f550d746f727065646f426f6d62657271405518546f727065646f426f6d6265725479706544656661756c747141550b61697241726d616d656e747142551241697241726d616d656e7444656661756c747143550763616d657261737144550743616d6572617371455510756e646572776174657243616d65726171465510556e646572776174657243616d6572617147550a616972537570706f727471485511616972537570706f727444656661756c7471495506726164617273714a550d52616461727344656661756c74714b550d696d70756c73654c6173657273714c5514496d70756c73654c617365727344656661756c74714d5506656e67696e65714e5508415f456e67696e65714f550468756c6c71505506415f48756c6c71515509746f727065646f657371525510546f727065646f657344656661756c747153550573636f75747154551053636f75745479706544656661756c74715555086169506172616d73715655084149506172616d737157550577617665737158551457617665417274696c6c65727944656661756c747159550766696e64657273715a5509415f46696e64657273715b550670696e676572715c551050696e67657247756e44656661756c74715d550766696768746572715e5512466967687465725479706544656661756c74715f550c6368617267654c6173657273716055134368617267654c617365727344656661756c74716155087370656369616c737162550f5370656369616c7344656661756c747163550b66697265436f6e74726f6c7164550e41315f46697265436f6e74726f6c716555096469726563746f72737166550b415f4469726563746f727371675509617869734c6173657271685510417869734c6173657244656661756c747169550e617578696c69617279506c616e65716a5519417578696c69617279506c616e655479706544656661756c74716b550c646570746843686172676573716c5516446570746843686172676547756e7344656661756c74716d7586716e4b1f55940100000030b7eeff220000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b06f1dff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000b0ef4fffb0efaffeb0ef0ffe000000001e000000716f8671704b204ad9410f008671714b2149343239333833343534340a8671724b2249343239333833343534340a8671734b234b008671744b2489867175655d7176284b004a5f79581e8671774b01888671784b024ada410f008671794b03680786717a4b044b0086717b4b054b0086717c4b06580000000086717d4b075d717e2849343239333034343031360a5d717f284b004b004b004b0065658671804b085d71812849343239333930353332380a49343239333837323536300a658671824b094b008671834b0a898671844b0b4a83a60a308671854b0c888671864b0d888671874b0e888671884b0f898671894b108986718a4b118886718b4b128986718c4b138986718d4b148986718e4b158986718f4b164b008671904b174d94118671914b18550a4d6f6e7374726f66696c71928671934b196822298171947d71952868254b0068264b0075628671964b1a4b008671974b1b4b008671984b1c4b008671994b1d55024555719a86719b4b1e7d719c28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586719d4b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000719e86719f4b204adb410f008671a04b2149343239333833343534340a8671a14b2249343239333833343534340a8671a24b234b008671a34b24898671a4655d71a5284b004a8cb1c8238671a64b01888671a74b024adc410f008671a84b0368078671a94b044b008671aa4b054b008671ab4b0658000000008671ac4b075d71ad284b005d71ae284b004b004b004b0065658671af4b085d71b02849343239333930353332380a49343239333837323536300a658671b14b094b008671b24b0a898671b34b0b4a042d0d308671b44b0c888671b54b0d898671b64b0e888671b74b0f898671b84b10888671b94b11888671ba4b12898671bb4b13898671bc4b14898671bd4b15898671be4b164b008671bf4b174d1e148671c04b18550d3332343432346466726631323371c18671c24b196822298171c37d71c42868254b0068264b0075628671c54b1a4b008671c64b1b4b008671c74b1c4b008671c84b1d5502455571c98671ca4b1e7d71cb28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686655104469726563746f727344656661756c7471cc68686869686a686b686c686d758671cd4b1f559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071ce8671cf4b204add410f008671d04b2149343235363038353731320a8671d14b2249343235363038353731320a8671d24b234b008671d34b24898671d4655d71d5284b004a0a63fc228671d64b01888671d74b024ade410f008671d84b0368078671d94b044ab3b3b3008671da4b054a930fd01d8671db4b065805000000412d4e2d4571dc8671dd4b075d71de2849343239333034333530340a5d71df284b004b004b004b0065658671e04b085d71e12849343237383137363638380a49343233383239383033320a658671e24b094b008671e34b0a898671e44b0b4a4b1d06388671e54b0c888671e64b0d898671e74b0e888671e84b0f898671e94b10888671ea4b11888671eb4b12898671ec4b13898671ed4b14898671ee4b15898671ef4b164b008671f04b174d7e1d8671f14b185509546f6d6173696e353771f28671f34b196822298171f47d71f52868254b0068264b0075628671f64b1a4b008671f74b1b4b008671f84b1c4b008671f94b1d5502455571fa8671fb4b1e7d71fc28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686668cc68686869686a686b686c686d758671fd4b1f55900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071fe8671ff4b204adf410f008672000100004b2149343138383937363433320a8672010100004b2249343138383937363433320a8672020100004b234b008672030100004b2489867204010000655d7205010000284b004ab8e390238672060100004b01888672070100004b024ae0410f008672080100004b03680649343239323830303433320a4b008681720901000086720a0100004b044b0086720b0100004b054b0086720c0100004b06580000000086720d0100004b075d720e0100002849343239333034343230380a5d720f010000284b004b004b004b0065658672100100004b085d72110100002849343237383137363638380a49343239303732363833320a658672120100004b094b008672130100004b0a898672140100004b0b4ab20709308672150100004b0c888672160100004b0d898672170100004b0e888672180100004b0f898672190100004b108886721a0100004b118886721b0100004b128986721c0100004b138986721d0100004b148986721e0100004b158986721f0100004b164b008672200100004b174d56138672210100004b18550a53616e79694b6161614872220100008672230100004b196822298172240100007d72250100002868254b0068264b0075628672260100004b1a4b008672270100004b1b4b008672280100004b1c4b008672290100004b1d55024555722a01000086722b0100004b1e7d722c01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e550d456e67696e6544656661756c74722d0100006850685168526853685468556856685768586859685a550e46696e6465727344656661756c74722e010000685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586722f0100004b1f559401000000f0b7eeff220000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b0efdeff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072300100008672310100004b204ae1410f008672320100004b2149343239333833343733360a8672330100004b2249343239333833343733360a8672340100004b234b008672350100004b2489867236010000655d7237010000284b004af1c1c8238672380100004b01888672390100004b024ae2410f0086723a0100004b03680786723b0100004b044b0086723c0100004b054b0086723d0100004b06580000000086723e0100004b075d723f010000284b005d7240010000284b004b004b004b0065658672410100004b085d72420100002849343239333930353332380a49343239333837323536300a658672430100004b094b008672440100004b0a898672450100004b0b4a13830c308672460100004b0c888672470100004b0d898672480100004b0e888672490100004b0f8986724a0100004b108886724b0100004b118886724c0100004b128986724d0100004b138986724e0100004b148986724f0100004b15898672500100004b164b008672510100004b174d94118672520100004b18550b4f736b61725f6c696d616b72530100008672540100004b196822298172550100007d72560100002868254b0068264b0075628672570100004b1a4b008672580100004b1b4b008672590100004b1c4b0086725a0100004b1d55024555725b01000086725c0100004b1e7d725d01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586725e0100004b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725f0100008672600100004b204ae3410f008672610100004b2149343239333833343534340a8672620100004b2249343239333833343534340a8672630100004b234b008672640100004b248986726501000065652effce200080025d7101285d7102284b004a8024f4ef8671034b01888671044b026343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71054b004b00868171068671074b034b008671084b044b008671094b05580000000086710a4b065d710b284b005d710c284b004b004b00656586710d4b075d710e2849343239333930353332380a49343239333837323536300a6586710f4b084b008671104b09898671114b0a4a80db0b108671124b0b898671134b0c888671144b0d888671154b0e898671164b0f898671174b104b008671184b114d1e148671194b1255083a5772696768743a711a86711b4b1355024555711c86711d4b147d711e28550a616972446566656e7365711f550c415f416972446566656e7365712055096162696c6974696573712155104162696c697469657344656661756c7471225509617274696c6c6572797123550b415f417274696c6c6572797124550a64697665426f6d6265727125551544697665426f6d6265725479706544656661756c7471265504617462617127550b4154424144656661756c747128550c61697273686970506c616e657129551741697273686970506c616e655479706544656661756c74712a5503776373712b551a576561706f6e436f6e74726f6c53797374656d44656661756c74712c550d666c69676874436f6e74726f6c712d5514466c69676874436f6e74726f6c44656661756c74712e550a736b6970426f6d626572712f5515536b6970426f6d6265725479706544656661756c747130550d746f727065646f426f6d62657271315518546f727065646f426f6d6265725479706544656661756c747132550b61697241726d616d656e747133551241697241726d616d656e7444656661756c747134550763616d657261737135550743616d6572617371365510756e646572776174657243616d65726171375510556e646572776174657243616d6572617138550a616972537570706f727471395511616972537570706f727444656661756c74713a5506726164617273713b550d52616461727344656661756c74713c550d696d70756c73654c6173657273713d5514496d70756c73654c617365727344656661756c74713e5506656e67696e65713f5508415f456e67696e657140550468756c6c71415506415f48756c6c71425509746f727065646f657371435510546f727065646f657344656661756c747144550573636f75747145551053636f75745479706544656661756c74714655086169506172616d73714755084149506172616d737148550577617665737149551457617665417274696c6c65727944656661756c74714a550766696e64657273714b5509415f46696e64657273714c550670696e676572714d551050696e67657247756e44656661756c74714e550766696768746572714f5512466967687465725479706544656661756c747150550c6368617267654c6173657273715155134368617267654c617365727344656661756c74715255087370656369616c737153550f5370656369616c7344656661756c747154550b66697265436f6e74726f6c7155550e41315f46697265436f6e74726f6c715655096469726563746f7273715755104469726563746f727344656661756c7471585509617869734c6173657271595510417869734c6173657244656661756c74715a550e617578696c69617279506c616e65715b5519417578696c69617279506c616e655479706544656661756c74715c550c646570746843686172676573715d5516446570746843686172676547756e7344656661756c74715e7586715f4b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071608671614b164ae4410f008671624b1749343235363038353731320a8671634b1849343235363038353731320a8671644b194b018671654b1a89867166655d7167284b004a7f24f4ef8671684b01888671694b02680686716a4b034b0086716b4b044b0086716c4b05580000000086716d4b065d716e284b005d716f284b004b004b0065658671704b075d71712849343239333930353332380a49343239333837323536300a658671724b084b008671734b09898671744b0a4a81db0b108671754b0b898671764b0c888671774b0d888671784b0e898671794b0f8986717a4b104b0086717b4b114d321986717c4b12550c3a4275636b6d61737465723a717d86717e4b1355024555717f8671804b147d718128681f6820682168226823550c41315f417274696c6c657279718268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b550e46696e6465727344656661756c747183684d684e684f68506851685268536854685568566857550b415f4469726563746f727371846859685a685b685c685d685e758671854b15559001000000d0b7aef9210000000e000000d02fecffd0afefff00000000d0afe6ffd0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071868671874b164ae5410f008671884b1749343138383937373130340a8671894b1849343138383937373130340a86718a4b194b0186718b4b1a8986718c655d718d284b004a7e24f4ef86718e4b018886718f4b0268068671904b034b008671914b044b008671924b0558000000008671934b065d7194284b005d7195284b004b004b0065658671964b075d71972849343239333930353332380a49343239333837323536300a658671984b084b008671994b098986719a4b0a4a82db0b1086719b4b0b8986719c4b0c8886719d4b0d8886719e4b0e8986719f4b0f898671a04b104b008671a14b114d56138671a24b12550a3a496e67656e6f686c3a71a38671a44b135502455571a58671a64b147d71a728681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f550d456e67696e6544656661756c7471a8684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671a94b15559001000000f0b7eeff210000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071aa8671ab4b164ae6410f008671ac4b1749343239333833343733360a8671ad4b1849343239333833343733360a8671ae4b194b018671af4b1a898671b0655d71b1284b004a7d24f4ef8671b24b01888671b34b0268068671b44b034b008671b54b044b008671b64b0558000000008671b74b065d71b8284b005d71b9284b004b004b0065658671ba4b075d71bb2849343239333930353332380a49343239333837323536300a658671bc4b084b008671bd4b09898671be4b0a4a83db0b108671bf4b0b898671c04b0c888671c14b0d888671c24b0e898671c34b0f898671c44b104b008671c54b114d7e1d8671c64b1255083a47616c6c65723a71c78671c84b135502455571c98671ca4b147d71cb28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758671cc4b1555900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071cd8671ce4b164ae7410f008671cf4b1749343138383937363433320a8671d04b1849343138383937363433320a8671d14b194b018671d24b1a898671d3655d71d4284b004a7c24f4ef8671d54b01888671d64b0268068671d74b034b008671d84b044b008671d94b0558000000008671da4b065d71db284b005d71dc284b004b004b0065658671dd4b075d71de2849343239333930353332380a49343239333837323536300a658671df4b084b008671e04b09898671e14b0a4a84db0b108671e24b0b898671e34b0c888671e44b0d888671e54b0e898671e64b0f898671e74b104b008671e84b114d94118671e94b1255093a537475726465653a71ea8671eb4b135502455571ec8671ed4b147d71ee28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671ef4b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071f08671f14b164ae8410f008671f24b1749343239333833343534340a8671f34b1849343239333833343534340a8671f44b194b018671f54b1a898671f6655d71f7284b004a7b24f4ef8671f84b01888671f94b0268068671fa4b034b008671fb4b044b008671fc4b0558000000008671fd4b065d71fe284b005d71ff284b004b004b0065658672000100004b075d72010100002849343239333930353332380a49343239333837323536300a658672020100004b084b008672030100004b09898672040100004b0a4a85db0b108672050100004b0b898672060100004b0c888672070100004b0d888672080100004b0e898672090100004b0f8986720a0100004b104b0086720b0100004b114d941186720c0100004b1255083a426f757665743a720d01000086720e0100004b1355024555720f0100008672100100004b147d721101000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758672120100004b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072130100008672140100004b164ae9410f008672150100004b1749343239333833343534340a8672160100004b1849343239333833343534340a8672170100004b194b018672180100004b1a89867219010000655d721a010000284b004a7a24f4ef86721b0100004b018886721c0100004b02680686721d0100004b034b0086721e0100004b044b0086721f0100004b0558000000008672200100004b065d7221010000284b005d7222010000284b004b004b0065658672230100004b075d72240100002849343239333930353332380a49343239333837323536300a658672250100004b084b008672260100004b09898672270100004b0a4a86db0b108672280100004b0b898672290100004b0c8886722a0100004b0d8886722b0100004b0e8986722c0100004b0f8986722d0100004b104b0086722e0100004b114de81c86722f0100004b1255083a48616c67616e3a72300100008672310100004b135502455572320100008672330100004b147d723401000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672350100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072360100008672370100004b164aea410f008672380100004b1749343138383937363937360a8672390100004b1849343138383937363937360a86723a0100004b194b0186723b0100004b1a8986723c010000655d723d010000284b004a7924f4ef86723e0100004b018886723f0100004b0268068672400100004b034b008672410100004b044b008672420100004b0558000000008672430100004b065d7244010000284b005d7245010000284b004b004b0065658672460100004b075d72470100002849343239333930353332380a49343239333837323536300a658672480100004b084b008672490100004b098986724a0100004b0a4a87db0b1086724b0100004b0b8986724c0100004b0c8886724d0100004b0d8886724e0100004b0e8986724f0100004b0f898672500100004b104b008672510100004b114de81c8672520100004b1255093a436f75726265743a72530100008672540100004b135502455572550100008672560100004b147d725701000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672580100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725901000086725a0100004b164aeb410f0086725b0100004b1749343138383937363937360a86725c0100004b1849343138383937363937360a86725d0100004b194b0186725e0100004b1a8986725f010000655d7260010000284b004a7824f4ef8672610100004b01888672620100004b0268068672630100004b034b008672640100004b044b008672650100004b0558000000008672660100004b065d7267010000284b005d7268010000284b004b004b0065658672690100004b075d726a0100002849343239333930353332380a49343239333837323536300a6586726b0100004b084b0086726c0100004b098986726d0100004b0a4a88db0b1086726e0100004b0b8986726f0100004b0c888672700100004b0d888672710100004b0e898672720100004b0f898672730100004b104b008672740100004b114d1e148672750100004b12550c3a546567657474686f66663a72760100008672770100004b135502455572780100008672790100004b147d727a01000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586727b0100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000727c01000086727d0100004b164aec410f0086727e0100004b1749343235363038353731320a86727f0100004b1849343235363038353731320a8672800100004b194b018672810100004b1a89867282010000655d7283010000284b004a8324f4ef8672840100004b01888672850100004b0268068672860100004b034b008672870100004b044b008672880100004b0558000000008672890100004b065d728a010000284b005d728b010000284b004b004b00656586728c0100004b075d728d0100002849343239333930353332380a49343239333837323536300a6586728e0100004b084b0086728f0100004b09898672900100004b0a4a7ddb0b108672910100004b0b898672920100004b0c888672930100004b0d888672940100004b0e898672950100004b0f898672960100004b104b008672970100004b114de81c8672980100004b1255083a42756368616e3a729901000086729a0100004b1355024555729b01000086729c0100004b147d729d01000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586729e0100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000729f0100008672a00100004b164aed410f008672a10100004b1749343138383937363937360a8672a20100004b1849343138383937363937360a8672a30100004b194b008672a40100004b1a898672a5010000655d72a6010000284b004a8224f4ef8672a70100004b01888672a80100004b0268068672a90100004b034b008672aa0100004b044b008672ab0100004b0558000000008672ac0100004b065d72ad010000284b005d72ae010000284b004b004b0065658672af0100004b075d72b00100002849343239333930353332380a49343239333837323536300a658672b10100004b084b008672b20100004b09898672b30100004b0a4a7edb0b108672b40100004b0b898672b50100004b0c888672b60100004b0d888672b70100004b0e898672b80100004b0f898672b90100004b104b008672ba0100004b114de81c8672bb0100004b1255073a4d6f6f72653a72bc0100008672bd0100004b135502455572be0100008672bf0100004b147d72c001000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672c10100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072c20100008672c30100004b164aee410f008672c40100004b1749343138383937363937360a8672c50100004b1849343138383937363937360a8672c60100004b194b008672c70100004b1a898672c8010000655d72c9010000284b004a8124f4ef8672ca0100004b01888672cb0100004b0268068672cc0100004b034b008672cd0100004b044b008672ce0100004b0558000000008672cf0100004b065d72d0010000284b005d72d1010000284b004b004b0065658672d20100004b075d72d30100002849343239333930353332380a49343239333837323536300a658672d40100004b084b008672d50100004b09898672d60100004b0a4a7fdb0b108672d70100004b0b898672d80100004b0c888672d90100004b0d888672da0100004b0e898672db0100004b0f898672dc0100004b104b008672dd0100004b114d1e148672de0100004b12550a3a4e616b68696d6f763a72df0100008672e00100004b135502455572e10100008672e20100004b147d72e301000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672e40100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072e50100008672e60100004b164aef410f008672e70100004b1749343235363038353731320a8672e80100004b1849343235363038353731320a8672e90100004b194b008672ea0100004b1a898672eb01000065652e' \ '04' \ '80025d2e' \ '04' \ '80025d2e' \ # why this part is in the end? '241b7c6f' opts = [ 4149129054747675, # 1b7c6f639cbd0e00 2, '80027d7101284b005d7102284e4e4e4e4e4e4e4e4e654b015d7103284e4e4e4e4e4e4e4e4e65752e', '80025d7101285d7102284b004adfba301e8671034b01888671044b024ad8410f008671054b036343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71064b004b00868171078671084b044b008671094b054b0086710a4b06580000000086710b4b075d710c2849343239333034343031360a5d710d284b004b004b004b00656586710e4b085d710f2849343239333930353332380a49343231353232393336300a658671104b094b008671114b0a898671124b0b4ae2e408308671134b0c888671144b0d898671154b0e888671164b0f898671174b10888671184b11888671194b128986711a4b138986711b4b148986711c4b158986711d4b164b0086711e4b174d561386711f4b18550d4a617669657247616c6c65676f71208671214b1963506c617965724d6f64654465660a506c617965724d6f64650a7122298171237d712428550e706c617965724d6f64655479706571254b00550e6f627365727665645465616d496471264b0075628671274b1a4b008671284b1b4b008671294b1c4b0086712a4b1d55024555712b86712c4b1e7d712d28550a616972446566656e7365712e550c415f416972446566656e7365712f55096162696c6974696573713055104162696c697469657344656661756c7471315509617274696c6c6572797132550b415f417274696c6c6572797133550a64697665426f6d6265727134551544697665426f6d6265725479706544656661756c7471355504617462617136550b4154424144656661756c747137550c61697273686970506c616e657138551741697273686970506c616e655479706544656661756c7471395503776373713a551a576561706f6e436f6e74726f6c53797374656d44656661756c74713b550d666c69676874436f6e74726f6c713c5514466c69676874436f6e74726f6c44656661756c74713d550a736b6970426f6d626572713e5515536b6970426f6d6265725479706544656661756c74713f550d746f727065646f426f6d62657271405518546f727065646f426f6d6265725479706544656661756c747141550b61697241726d616d656e747142551241697241726d616d656e7444656661756c747143550763616d657261737144550743616d6572617371455510756e646572776174657243616d65726171465510556e646572776174657243616d6572617147550a616972537570706f727471485511616972537570706f727444656661756c7471495506726164617273714a550d52616461727344656661756c74714b550d696d70756c73654c6173657273714c5514496d70756c73654c617365727344656661756c74714d5506656e67696e65714e5508415f456e67696e65714f550468756c6c71505506415f48756c6c71515509746f727065646f657371525510546f727065646f657344656661756c747153550573636f75747154551053636f75745479706544656661756c74715555086169506172616d73715655084149506172616d737157550577617665737158551457617665417274696c6c65727944656661756c747159550766696e64657273715a5509415f46696e64657273715b550670696e676572715c551050696e67657247756e44656661756c74715d550766696768746572715e5512466967687465725479706544656661756c74715f550c6368617267654c6173657273716055134368617267654c617365727344656661756c74716155087370656369616c737162550f5370656369616c7344656661756c747163550b66697265436f6e74726f6c7164550e41315f46697265436f6e74726f6c716555096469726563746f72737166550b415f4469726563746f727371675509617869734c6173657271685510417869734c6173657244656661756c747169550e617578696c69617279506c616e65716a5519417578696c69617279506c616e655479706544656661756c74716b550c646570746843686172676573716c5516446570746843686172676547756e7344656661756c74716d7586716e4b1f55940100000030b7eeff220000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b06f1dff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000b0ef4fffb0efaffeb0ef0ffe000000001e000000716f8671704b204ad9410f008671714b2149343239333833343534340a8671724b2249343239333833343534340a8671734b234b008671744b2489867175655d7176284b004a5f79581e8671774b01888671784b024ada410f008671794b03680786717a4b044b0086717b4b054b0086717c4b06580000000086717d4b075d717e2849343239333034343031360a5d717f284b004b004b004b0065658671804b085d71812849343239333930353332380a49343239333837323536300a658671824b094b008671834b0a898671844b0b4a83a60a308671854b0c888671864b0d888671874b0e888671884b0f898671894b108986718a4b118886718b4b128986718c4b138986718d4b148986718e4b158986718f4b164b008671904b174d94118671914b18550a4d6f6e7374726f66696c71928671934b196822298171947d71952868254b0068264b0075628671964b1a4b008671974b1b4b008671984b1c4b008671994b1d55024555719a86719b4b1e7d719c28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586719d4b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000719e86719f4b204adb410f008671a04b2149343239333833343534340a8671a14b2249343239333833343534340a8671a24b234b008671a34b24898671a4655d71a5284b004a8cb1c8238671a64b01888671a74b024adc410f008671a84b0368078671a94b044b008671aa4b054b008671ab4b0658000000008671ac4b075d71ad284b005d71ae284b004b004b004b0065658671af4b085d71b02849343239333930353332380a49343239333837323536300a658671b14b094b008671b24b0a898671b34b0b4a042d0d308671b44b0c888671b54b0d898671b64b0e888671b74b0f898671b84b10888671b94b11888671ba4b12898671bb4b13898671bc4b14898671bd4b15898671be4b164b008671bf4b174d1e148671c04b18550d3332343432346466726631323371c18671c24b196822298171c37d71c42868254b0068264b0075628671c54b1a4b008671c64b1b4b008671c74b1c4b008671c84b1d5502455571c98671ca4b1e7d71cb28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686655104469726563746f727344656661756c7471cc68686869686a686b686c686d758671cd4b1f559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071ce8671cf4b204add410f008671d04b2149343235363038353731320a8671d14b2249343235363038353731320a8671d24b234b008671d34b24898671d4655d71d5284b004a0a63fc228671d64b01888671d74b024ade410f008671d84b0368078671d94b044ab3b3b3008671da4b054a930fd01d8671db4b065805000000412d4e2d4571dc8671dd4b075d71de2849343239333034333530340a5d71df284b004b004b004b0065658671e04b085d71e12849343237383137363638380a49343233383239383033320a658671e24b094b008671e34b0a898671e44b0b4a4b1d06388671e54b0c888671e64b0d898671e74b0e888671e84b0f898671e94b10888671ea4b11888671eb4b12898671ec4b13898671ed4b14898671ee4b15898671ef4b164b008671f04b174d7e1d8671f14b185509546f6d6173696e353771f28671f34b196822298171f47d71f52868254b0068264b0075628671f64b1a4b008671f74b1b4b008671f84b1c4b008671f94b1d5502455571fa8671fb4b1e7d71fc28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686668cc68686869686a686b686c686d758671fd4b1f55900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071fe8671ff4b204adf410f008672000100004b2149343138383937363433320a8672010100004b2249343138383937363433320a8672020100004b234b008672030100004b2489867204010000655d7205010000284b004ab8e390238672060100004b01888672070100004b024ae0410f008672080100004b03680649343239323830303433320a4b008681720901000086720a0100004b044b0086720b0100004b054b0086720c0100004b06580000000086720d0100004b075d720e0100002849343239333034343230380a5d720f010000284b004b004b004b0065658672100100004b085d72110100002849343237383137363638380a49343239303732363833320a658672120100004b094b008672130100004b0a898672140100004b0b4ab20709308672150100004b0c888672160100004b0d898672170100004b0e888672180100004b0f898672190100004b108886721a0100004b118886721b0100004b128986721c0100004b138986721d0100004b148986721e0100004b158986721f0100004b164b008672200100004b174d56138672210100004b18550a53616e79694b6161614872220100008672230100004b196822298172240100007d72250100002868254b0068264b0075628672260100004b1a4b008672270100004b1b4b008672280100004b1c4b008672290100004b1d55024555722a01000086722b0100004b1e7d722c01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e550d456e67696e6544656661756c74722d0100006850685168526853685468556856685768586859685a550e46696e6465727344656661756c74722e010000685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586722f0100004b1f559401000000f0b7eeff220000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b0efdeff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072300100008672310100004b204ae1410f008672320100004b2149343239333833343733360a8672330100004b2249343239333833343733360a8672340100004b234b008672350100004b2489867236010000655d7237010000284b004af1c1c8238672380100004b01888672390100004b024ae2410f0086723a0100004b03680786723b0100004b044b0086723c0100004b054b0086723d0100004b06580000000086723e0100004b075d723f010000284b005d7240010000284b004b004b004b0065658672410100004b085d72420100002849343239333930353332380a49343239333837323536300a658672430100004b094b008672440100004b0a898672450100004b0b4a13830c308672460100004b0c888672470100004b0d898672480100004b0e888672490100004b0f8986724a0100004b108886724b0100004b118886724c0100004b128986724d0100004b138986724e0100004b148986724f0100004b15898672500100004b164b008672510100004b174d94118672520100004b18550b4f736b61725f6c696d616b72530100008672540100004b196822298172550100007d72560100002868254b0068264b0075628672570100004b1a4b008672580100004b1b4b008672590100004b1c4b0086725a0100004b1d55024555725b01000086725c0100004b1e7d725d01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586725e0100004b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725f0100008672600100004b204ae3410f008672610100004b2149343239333833343534340a8672620100004b2249343239333833343534340a8672630100004b234b008672640100004b248986726501000065652e', '80025d7101285d7102284b004a8024f4ef8671034b01888671044b026343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71054b004b00868171068671074b034b008671084b044b008671094b05580000000086710a4b065d710b284b005d710c284b004b004b00656586710d4b075d710e2849343239333930353332380a49343239333837323536300a6586710f4b084b008671104b09898671114b0a4a80db0b108671124b0b898671134b0c888671144b0d888671154b0e898671164b0f898671174b104b008671184b114d1e148671194b1255083a5772696768743a711a86711b4b1355024555711c86711d4b147d711e28550a616972446566656e7365711f550c415f416972446566656e7365712055096162696c6974696573712155104162696c697469657344656661756c7471225509617274696c6c6572797123550b415f417274696c6c6572797124550a64697665426f6d6265727125551544697665426f6d6265725479706544656661756c7471265504617462617127550b4154424144656661756c747128550c61697273686970506c616e657129551741697273686970506c616e655479706544656661756c74712a5503776373712b551a576561706f6e436f6e74726f6c53797374656d44656661756c74712c550d666c69676874436f6e74726f6c712d5514466c69676874436f6e74726f6c44656661756c74712e550a736b6970426f6d626572712f5515536b6970426f6d6265725479706544656661756c747130550d746f727065646f426f6d62657271315518546f727065646f426f6d6265725479706544656661756c747132550b61697241726d616d656e747133551241697241726d616d656e7444656661756c747134550763616d657261737135550743616d6572617371365510756e646572776174657243616d65726171375510556e646572776174657243616d6572617138550a616972537570706f727471395511616972537570706f727444656661756c74713a5506726164617273713b550d52616461727344656661756c74713c550d696d70756c73654c6173657273713d5514496d70756c73654c617365727344656661756c74713e5506656e67696e65713f5508415f456e67696e657140550468756c6c71415506415f48756c6c71425509746f727065646f657371435510546f727065646f657344656661756c747144550573636f75747145551053636f75745479706544656661756c74714655086169506172616d73714755084149506172616d737148550577617665737149551457617665417274696c6c65727944656661756c74714a550766696e64657273714b5509415f46696e64657273714c550670696e676572714d551050696e67657247756e44656661756c74714e550766696768746572714f5512466967687465725479706544656661756c747150550c6368617267654c6173657273715155134368617267654c617365727344656661756c74715255087370656369616c737153550f5370656369616c7344656661756c747154550b66697265436f6e74726f6c7155550e41315f46697265436f6e74726f6c715655096469726563746f7273715755104469726563746f727344656661756c7471585509617869734c6173657271595510417869734c6173657244656661756c74715a550e617578696c69617279506c616e65715b5519417578696c69617279506c616e655479706544656661756c74715c550c646570746843686172676573715d5516446570746843686172676547756e7344656661756c74715e7586715f4b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071608671614b164ae4410f008671624b1749343235363038353731320a8671634b1849343235363038353731320a8671644b194b018671654b1a89867166655d7167284b004a7f24f4ef8671684b01888671694b02680686716a4b034b0086716b4b044b0086716c4b05580000000086716d4b065d716e284b005d716f284b004b004b0065658671704b075d71712849343239333930353332380a49343239333837323536300a658671724b084b008671734b09898671744b0a4a81db0b108671754b0b898671764b0c888671774b0d888671784b0e898671794b0f8986717a4b104b0086717b4b114d321986717c4b12550c3a4275636b6d61737465723a717d86717e4b1355024555717f8671804b147d718128681f6820682168226823550c41315f417274696c6c657279718268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b550e46696e6465727344656661756c747183684d684e684f68506851685268536854685568566857550b415f4469726563746f727371846859685a685b685c685d685e758671854b15559001000000d0b7aef9210000000e000000d02fecffd0afefff00000000d0afe6ffd0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071868671874b164ae5410f008671884b1749343138383937373130340a8671894b1849343138383937373130340a86718a4b194b0186718b4b1a8986718c655d718d284b004a7e24f4ef86718e4b018886718f4b0268068671904b034b008671914b044b008671924b0558000000008671934b065d7194284b005d7195284b004b004b0065658671964b075d71972849343239333930353332380a49343239333837323536300a658671984b084b008671994b098986719a4b0a4a82db0b1086719b4b0b8986719c4b0c8886719d4b0d8886719e4b0e8986719f4b0f898671a04b104b008671a14b114d56138671a24b12550a3a496e67656e6f686c3a71a38671a44b135502455571a58671a64b147d71a728681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f550d456e67696e6544656661756c7471a8684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671a94b15559001000000f0b7eeff210000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071aa8671ab4b164ae6410f008671ac4b1749343239333833343733360a8671ad4b1849343239333833343733360a8671ae4b194b018671af4b1a898671b0655d71b1284b004a7d24f4ef8671b24b01888671b34b0268068671b44b034b008671b54b044b008671b64b0558000000008671b74b065d71b8284b005d71b9284b004b004b0065658671ba4b075d71bb2849343239333930353332380a49343239333837323536300a658671bc4b084b008671bd4b09898671be4b0a4a83db0b108671bf4b0b898671c04b0c888671c14b0d888671c24b0e898671c34b0f898671c44b104b008671c54b114d7e1d8671c64b1255083a47616c6c65723a71c78671c84b135502455571c98671ca4b147d71cb28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758671cc4b1555900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071cd8671ce4b164ae7410f008671cf4b1749343138383937363433320a8671d04b1849343138383937363433320a8671d14b194b018671d24b1a898671d3655d71d4284b004a7c24f4ef8671d54b01888671d64b0268068671d74b034b008671d84b044b008671d94b0558000000008671da4b065d71db284b005d71dc284b004b004b0065658671dd4b075d71de2849343239333930353332380a49343239333837323536300a658671df4b084b008671e04b09898671e14b0a4a84db0b108671e24b0b898671e34b0c888671e44b0d888671e54b0e898671e64b0f898671e74b104b008671e84b114d94118671e94b1255093a537475726465653a71ea8671eb4b135502455571ec8671ed4b147d71ee28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671ef4b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071f08671f14b164ae8410f008671f24b1749343239333833343534340a8671f34b1849343239333833343534340a8671f44b194b018671f54b1a898671f6655d71f7284b004a7b24f4ef8671f84b01888671f94b0268068671fa4b034b008671fb4b044b008671fc4b0558000000008671fd4b065d71fe284b005d71ff284b004b004b0065658672000100004b075d72010100002849343239333930353332380a49343239333837323536300a658672020100004b084b008672030100004b09898672040100004b0a4a85db0b108672050100004b0b898672060100004b0c888672070100004b0d888672080100004b0e898672090100004b0f8986720a0100004b104b0086720b0100004b114d941186720c0100004b1255083a426f757665743a720d01000086720e0100004b1355024555720f0100008672100100004b147d721101000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758672120100004b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072130100008672140100004b164ae9410f008672150100004b1749343239333833343534340a8672160100004b1849343239333833343534340a8672170100004b194b018672180100004b1a89867219010000655d721a010000284b004a7a24f4ef86721b0100004b018886721c0100004b02680686721d0100004b034b0086721e0100004b044b0086721f0100004b0558000000008672200100004b065d7221010000284b005d7222010000284b004b004b0065658672230100004b075d72240100002849343239333930353332380a49343239333837323536300a658672250100004b084b008672260100004b09898672270100004b0a4a86db0b108672280100004b0b898672290100004b0c8886722a0100004b0d8886722b0100004b0e8986722c0100004b0f8986722d0100004b104b0086722e0100004b114de81c86722f0100004b1255083a48616c67616e3a72300100008672310100004b135502455572320100008672330100004b147d723401000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672350100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072360100008672370100004b164aea410f008672380100004b1749343138383937363937360a8672390100004b1849343138383937363937360a86723a0100004b194b0186723b0100004b1a8986723c010000655d723d010000284b004a7924f4ef86723e0100004b018886723f0100004b0268068672400100004b034b008672410100004b044b008672420100004b0558000000008672430100004b065d7244010000284b005d7245010000284b004b004b0065658672460100004b075d72470100002849343239333930353332380a49343239333837323536300a658672480100004b084b008672490100004b098986724a0100004b0a4a87db0b1086724b0100004b0b8986724c0100004b0c8886724d0100004b0d8886724e0100004b0e8986724f0100004b0f898672500100004b104b008672510100004b114de81c8672520100004b1255093a436f75726265743a72530100008672540100004b135502455572550100008672560100004b147d725701000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672580100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725901000086725a0100004b164aeb410f0086725b0100004b1749343138383937363937360a86725c0100004b1849343138383937363937360a86725d0100004b194b0186725e0100004b1a8986725f010000655d7260010000284b004a7824f4ef8672610100004b01888672620100004b0268068672630100004b034b008672640100004b044b008672650100004b0558000000008672660100004b065d7267010000284b005d7268010000284b004b004b0065658672690100004b075d726a0100002849343239333930353332380a49343239333837323536300a6586726b0100004b084b0086726c0100004b098986726d0100004b0a4a88db0b1086726e0100004b0b8986726f0100004b0c888672700100004b0d888672710100004b0e898672720100004b0f898672730100004b104b008672740100004b114d1e148672750100004b12550c3a546567657474686f66663a72760100008672770100004b135502455572780100008672790100004b147d727a01000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586727b0100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000727c01000086727d0100004b164aec410f0086727e0100004b1749343235363038353731320a86727f0100004b1849343235363038353731320a8672800100004b194b018672810100004b1a89867282010000655d7283010000284b004a8324f4ef8672840100004b01888672850100004b0268068672860100004b034b008672870100004b044b008672880100004b0558000000008672890100004b065d728a010000284b005d728b010000284b004b004b00656586728c0100004b075d728d0100002849343239333930353332380a49343239333837323536300a6586728e0100004b084b0086728f0100004b09898672900100004b0a4a7ddb0b108672910100004b0b898672920100004b0c888672930100004b0d888672940100004b0e898672950100004b0f898672960100004b104b008672970100004b114de81c8672980100004b1255083a42756368616e3a729901000086729a0100004b1355024555729b01000086729c0100004b147d729d01000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586729e0100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000729f0100008672a00100004b164aed410f008672a10100004b1749343138383937363937360a8672a20100004b1849343138383937363937360a8672a30100004b194b008672a40100004b1a898672a5010000655d72a6010000284b004a8224f4ef8672a70100004b01888672a80100004b0268068672a90100004b034b008672aa0100004b044b008672ab0100004b0558000000008672ac0100004b065d72ad010000284b005d72ae010000284b004b004b0065658672af0100004b075d72b00100002849343239333930353332380a49343239333837323536300a658672b10100004b084b008672b20100004b09898672b30100004b0a4a7edb0b108672b40100004b0b898672b50100004b0c888672b60100004b0d888672b70100004b0e898672b80100004b0f898672b90100004b104b008672ba0100004b114de81c8672bb0100004b1255073a4d6f6f72653a72bc0100008672bd0100004b135502455572be0100008672bf0100004b147d72c001000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672c10100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072c20100008672c30100004b164aee410f008672c40100004b1749343138383937363937360a8672c50100004b1849343138383937363937360a8672c60100004b194b008672c70100004b1a898672c8010000655d72c9010000284b004a8124f4ef8672ca0100004b01888672cb0100004b0268068672cc0100004b034b008672cd0100004b044b008672ce0100004b0558000000008672cf0100004b065d72d0010000284b005d72d1010000284b004b004b0065658672d20100004b075d72d30100002849343239333930353332380a49343239333837323536300a658672d40100004b084b008672d50100004b09898672d60100004b0a4a7fdb0b108672d70100004b0b898672d80100004b0c888672d90100004b0d888672da0100004b0e898672db0100004b0f898672dc0100004b104b008672dd0100004b114d1e148672de0100004b12550a3a4e616b68696d6f763a72df0100008672e00100004b135502455572e10100008672e20100004b147d72e301000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672e40100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072e50100008672e60100004b164aef410f008672e70100004b1749343235363038353731320a8672e80100004b1849343235363038353731320a8672e90100004b194b008672ea0100004b1a898672eb01000065652e', '80025d2e', '80025d2e'] @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted November 13, 2022 Author Share Posted November 13, 2022 2 часа назад, Monstrofil сказал: Вот пример в hex, если так будет понятнее: Да, так понятнее. 2 часа назад, Monstrofil сказал: header tickSync entity create ??? Внезапно, размер пакета. 2 часа назад, Monstrofil сказал: xml id ?? Ленишься в дизасемблере сидеть. Строка. Её длина равна нулю, поэтому дальше данных нет. А дальше начинаются свойства. У тебя def-файл есть же. Прикрепи или скопируй сюда от логина, он должен быть самым коротким. Тогда будет понятно назначение 0x0f. 2 часа назад, Monstrofil сказал: Не нахожу :( Сам уже не помню где. Это в определении длины пакета. Либо при создании. Там действительно трудно ориентироваться, пока не знаешь, что именно искать. 2 часа назад, Monstrofil сказал: но пока не заморочился настолько что бы достать их id. Брекпойнт ставишь и в лог выводишь все параметры. Там есть единая функция создания у них. Порядок вызовов покажет их идентификатор. Либо перед выходом из той функции, что ещё лучше, потому что результат функции будет id (вроде бы, уже мог и забыть). 2 часа назад, Monstrofil сказал: почему иногда три первых байта сообщения (не пакета!) переносятся в конец сообщения? Спорный, на мой взгляд, способ уместить данные. Ты разобрался уже, что количество байт, в котором указывается размер сообщения, может быть от 1 до 4? То есть, это размер размера сообщения. Когда размер больше, чем может быть указано в, кхм, размере, создатели BigWorld сделали так, как ты описал. Где-то тоже было в исходниках, но даже примерно найти не могу, куда копать. 8 минут назад, Dragon armor сказал: но даже примерно найти не могу, куда копать Посмотри тут InterfaceElement::specialExpandLength. @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted November 13, 2022 Share Posted November 13, 2022 Только что, Dragon armor сказал: Ты разобрался уже, что количество байт, в котором указывается размер сообщения, может быть от 1 до 4? То есть, это размер размера сообщения. (Я тоже так делаю, когда что-то нативно храню ) @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted November 13, 2022 Author Share Posted November 13, 2022 @StranikS_Scan Тоже экономишь три байта на размер? @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted November 13, 2022 Share Posted November 13, 2022 1 час назад, Dragon armor сказал: Внезапно, размер пакета. Да, причем двухбайтный, похоже, определено это в VARIABLE_MESSAGE, как в старых исходниках, это я уже нашел. https://github.com/Monstrofil/bigworld-2.0/blob/5969290b3f1710910c7cecdad6a34b2016fad9e7/lib/connection/client_interface.hpp#L81 Цитата Строка. Её длина равна нулю, поэтому дальше данных нет. Строка это внезапно. У меня пока даже нет идей что это может быть за строка, видимо опять в исходники BW лезть. Это точно не часть свойств, т.к. свойства начинаются с name и расположены дальше. 1 час назад, Dragon armor сказал: Прикрепи или скопируй сюда от логина, он должен быть самым коротким. Тогда будет понятно назначение 0x0f. У логина там все то же самое, но пустой набор свойств и в конце 0x01. Это не размер свойств и не их количество. Когда-нибудь догадаюсь, но не сегодня =( @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted November 13, 2022 Author Share Posted November 13, 2022 (edited) 41 минуту назад, Monstrofil сказал: У меня пока даже нет идей что это может быть за строка, видимо опять в исходники BW лезть Там, насколько помню, этого нет. Появилось позже и это общее между танками и кораблями, либо похоже. Ни разу эта строка мне не попадалась и что там может быть - не знаю. 41 минуту назад, Monstrofil сказал: У логина там все то же самое, но пустой набор свойств и в конце 0x01 Тоже покажи этот пакет. Там как минимум одно свойство есть. И в танках нет единицы в конце Login. А ты привёл пример энтити Account? Ну покажи def-файл его. 0x0F - это что-то в свойствах. Оно точно входит в это сообщение, судя по указанному размеру в самом сообщении. Edited November 13, 2022 by Dragon armor @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted November 14, 2022 Share Posted November 14, 2022 11 часов назад, Dragon armor сказал: Тоже покажи этот пакет. Там как минимум одно свойство есть. И в танках нет единицы в конце Login. А ты привёл пример энтити Account? Ну покажи def-файл его. 0x0F - это что-то в свойствах. Оно точно входит в это сообщение, судя по указанному размеру в самом сообщении. Login: # header message_1 base entity create size entity id xml id ?? ?? footer # 5804 13 8f 05 0800 e9e01330 0600 00 01 02000000 01000000 efbeadde 05 Вот вообще все свойства которые есть у entity Login, включая те что в интерфейсах: [_EntityHelperAPI__lastGeneratedRequestID (<UInt32>), lastGeneratedTransactionNumber (<UInt16>)] <_EntityHelperAPI__lastGeneratedRequestID> <Type> UINT32 </Type> <Flags> BASE </Flags> <Persistent> False </Persistent> </_EntityHelperAPI__lastGeneratedRequestID> <lastGeneratedTransactionNumber> <Type> UINT16 </Type> <Flags> BASE </Flags> <Default> 0 </Default> </lastGeneratedTransactionNumber> @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted November 14, 2022 Author Share Posted November 14, 2022 @Monstrofil Если сравнивать с танками, то для свойств остаётся один байт, тот, что 0х01. Потому что предпоследний байт - строка нулевой длины. Если смотреть на свойства, то единственное, что подходит - lastGeneratedTransactionNumber. Тогда строки не будет. Но если посмотреть на флаги свойств, то тут только BASE, а если бы были свойства для клиента, то было бы BASE_AND_CLIENT как в танках. <Properties> <accountDBID_s> <Type> STRING </Type> <Flags> BASE_AND_CLIENT </Flags> <Persistent> true </Persistent> <DatabaseLength> 96 </DatabaseLength> <Identifier> true </Identifier> </accountDBID_s> <loginPriority> <Type> UINT32 </Type> <Flags> BASE </Flags> </loginPriority> </Properties> Клиенту здесь передаётся только accountDBID_s. Тебе надо в исполняемый файл лезть и искать место, где идёт создание энтити. И уже по месту смотреть, что именно с данными происходит. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted November 14, 2022 Share Posted November 14, 2022 1 час назад, Dragon armor сказал: lastGeneratedTransactionNumber Не подходит, там BASE и размер UINT32. 1 час назад, Dragon armor сказал: Тебе надо в исполняемый файл лезть и искать место, где идёт создание энтити. И уже по месту смотреть, что именно с данными происходит. Понял, значит вопрос пока откладывается, для моих целей он пока не критичный. @ Quote Link to comment Short link Share on other sites More sharing options...
m3ybach Posted November 15, 2022 Share Posted November 15, 2022 Вижу тут очень интересную тему по ББ. Но интересно, возможно ли такое реализовать в мобильной версии игры? По идее там даже будет проще это сделать @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.