blob: 6df072bd82496408b2adee17d5e79a68125b4b9f [file] [log] [blame]
Chip Boling67b674a2019-02-08 11:42:18 -06001#
2# Copyright 2017 the original author or authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16from unittest import TestCase, main
17
18from pyvoltha.adapters.extensions.omci.omci import *
19
20
21def hexify(buffer):
22 """Return a hexadecimal string encoding of input buffer"""
23 return ''.join('%02x' % ord(c) for c in buffer)
24
25
26def chunk(indexable, chunk_size):
27 for i in range(0, len(indexable), chunk_size):
28 yield indexable[i:i + chunk_size]
29
30
31def hex2raw(hex_string):
32 return ''.join(chr(int(byte, 16)) for byte in chunk(hex_string, 2))
33
34
35class TestOmciFundamentals(TestCase):
36
37 def test_bitpos_from_mask(self):
38
39 f = lambda x: bitpos_from_mask(x)
40 self.assertEqual(f(0), [])
41 self.assertEqual(f(1), [0])
42 self.assertEqual(f(3), [0, 1])
43 self.assertEqual(f(255), [0, 1, 2, 3, 4, 5, 6, 7])
44 self.assertEqual(f(0x800), [11])
45 self.assertEqual(f(0x811), [0, 4, 11])
46
47 f = lambda x: bitpos_from_mask(x, 16, -1)
48 self.assertEqual(f(0), [])
49 self.assertEqual(f(1), [16])
50 self.assertEqual(f(0x800), [5])
51 self.assertEqual(f(0x801), [5, 16])
52
53
54 def test_attribute_indeices_from_mask(self):
55
56 f = EntityClass.attribute_indices_from_mask
57 self.assertEqual(f(0), [])
58 self.assertEqual(f(0x800), [5])
59 self.assertEqual(f(0xf000), [1, 2, 3, 4])
60 self.assertEqual(f(0xf804), [1, 2, 3, 4, 5, 14])
61
62 def test_entity_attribute_serialization(self):
63
64 e = CircuitPack(vendor_id='F')
65 self.assertEqual(e.serialize(), 'F\x00\x00\x00')
66
67 e = CircuitPack(vendor_id='FOOX')
68 self.assertEqual(e.serialize(), 'FOOX')
69
70 e = CircuitPack(vendor_id='FOOX', number_of_ports=16)
71 self.assertEqual(e.serialize(), '\x10FOOX')
72
73 def test_entity_attribute_serialization_mask_based(self):
74
75 e = CircuitPack(
76 number_of_ports=4,
77 serial_number='BCMX31323334', # serial number is 4 ascii + 4 hex. 8 octets on the wire
78 version='a1c12fba91de',
79 vendor_id='BCM',
80 total_tcont_buffer_number=128
81 )
82
83 # Full object
84 self.assertEqual(e.serialize(),
85 '\x04BCMX1234a1c12fba91de\x00\x00BCM\x00\x80')
86
87 # Explicit mask with valid values
88 self.assertEqual(e.serialize(0x800), 'BCM\x00')
89 self.assertEqual(e.serialize(0x6800), '\x04BCMX1234BCM\x00')
90
91 # Referring to an unfilled field is regarded as error
92 self.assertRaises(OmciUninitializedFieldError, e.serialize, 0xc00)
93
94 def test_omci_mask_value_gen(self):
95 cls = CircuitPack
96 self.assertEqual(cls.mask_for('vendor_id'), 0x800)
97 self.assertEqual(
98 cls.mask_for('vendor_id', 'bridged_or_ip_ind'), 0x900)
99
100 reference_get_request_hex = (
101 '00 00 49 0a'
102 '00 06 01 01'
103 '08 00 00 00'
104 '00 00 00 00'
105 '00 00 00 00'
106 '00 00 00 00'
107 '00 00 00 00'
108 '00 00 00 00'
109 '00 00 00 00'
110 '00 00 00 00'
111 '00 00 00 28'.replace(' ', '')
112 )
113 reference_get_request_raw = hex2raw(reference_get_request_hex)
114
115 reference_get_response_hex = (
116 '00 00 29 0a'
117 '00 06 01 01'
118 '00 08 00 50'
119 '4d 43 53 00'
120 '00 00 00 00'
121 '00 00 00 00'
122 '00 00 00 00'
123 '00 00 00 00'
124 '00 00 00 00'
125 '00 00 00 00'
126 '00 00 00 28'.replace(' ', '')
127 )
128 reference_get_response_raw = hex2raw(reference_get_response_hex)
129
130 def test_omci_frame_serialization(self):
131
132 frame = OmciFrame(
133 transaction_id=0,
134 message_type=OmciGet.message_id,
135 omci_message=OmciGet(
136 entity_class=CircuitPack.class_id,
137 entity_id=0x101,
138 attributes_mask=CircuitPack.mask_for('vendor_id')
139 )
140 )
141 self.assertEqual(hexify(str(frame)), self.reference_get_request_hex)
142
143 def test_omci_frame_deserialization_no_data(self):
144 frame = OmciFrame(self.reference_get_request_raw)
145 self.assertEqual(frame.transaction_id, 0)
146 self.assertEqual(frame.message_type, 0x49)
147 self.assertEqual(frame.omci, 10)
148 self.assertEqual(frame.omci_message.entity_class, 0x6)
149 self.assertEqual(frame.omci_message.entity_id, 0x101)
150 self.assertEqual(frame.omci_message.attributes_mask, 0x800)
151 self.assertEqual(frame.omci_trailer, 0x28)
152
153 def test_omci_frame_deserialization_with_data(self):
154 frame = OmciFrame(self.reference_get_response_raw)
155 self.assertEqual(frame.transaction_id, 0)
156 self.assertEqual(frame.message_type, 0x29)
157 self.assertEqual(frame.omci, 10)
158 self.assertEqual(frame.omci_message.success_code, 0x0)
159 self.assertEqual(frame.omci_message.entity_class, 0x6)
160 self.assertEqual(frame.omci_message.entity_id, 0x101)
161 self.assertEqual(frame.omci_message.attributes_mask, 0x800)
162 self.assertEqual(frame.omci_trailer, 0x28)
163
164 def test_entity_attribute_deserialization(self):
165 pass
166
167
168class TestSelectMessageGeneration(TestCase):
169
170 def assertGeneratedFrameEquals(self, frame, ref):
171 assert isinstance(frame, Packet)
172 serialized_hexified_frame = hexify(str(frame)).upper()
173 ref = ref.upper()
174 if serialized_hexified_frame != ref:
175 self.fail('Mismatch:\nReference:\n{}\nGenerated (bad):\n{}'.format(
176 ref, serialized_hexified_frame
177 ))
178
179 def test_mib_reset_message_serialization(self):
180 ref = '00014F0A000200000000000000000000' \
181 '00000000000000000000000000000000' \
182 '000000000000000000000028'
183 frame = OmciFrame(
184 transaction_id=1,
185 message_type=OmciMibReset.message_id,
186 omci_message=OmciMibReset(
187 entity_class=OntData.class_id
188 )
189 )
190 self.assertGeneratedFrameEquals(frame, ref)
191
192 def test_create_gal_ethernet_profile(self):
193 ref = '0002440A011000010030000000000000' \
194 '00000000000000000000000000000000' \
195 '000000000000000000000028'
196 frame = OmciFrame(
197 transaction_id=2,
198 message_type=OmciCreate.message_id,
199 omci_message=OmciCreate(
200 entity_class=GalEthernetProfile.class_id,
201 entity_id=1,
202 data=dict(
203 max_gem_payload_size=48
204 )
205 )
206 )
207 self.assertGeneratedFrameEquals(frame, ref)
208
209 def test_set_tcont_1(self):
210 ref = '0003480A010680008000040000000000' \
211 '00000000000000000000000000000000' \
212 '000000000000000000000028'
213 data = dict(
214 alloc_id=0x400
215 )
216 frame = OmciFrame(
217 transaction_id=3,
218 message_type=OmciSet.message_id,
219 omci_message=OmciSet(
220 entity_class=Tcont.class_id,
221 entity_id=0x8000,
222 attributes_mask=Tcont.mask_for(*data.keys()),
223 data=data
224 )
225 )
226 self.assertGeneratedFrameEquals(frame, ref)
227
228 def test_set_tcont_2(self):
229 ref = '0004480A010680018000040100000000' \
230 '00000000000000000000000000000000' \
231 '000000000000000000000028'
232 data = dict(
233 alloc_id=0x401
234 )
235 frame = OmciFrame(
236 transaction_id=4,
237 message_type=OmciSet.message_id,
238 omci_message=OmciSet(
239 entity_class=Tcont.class_id,
240 entity_id=0x8001,
241 attributes_mask=Tcont.mask_for(*data.keys()),
242 data=data
243 )
244 )
245 self.assertGeneratedFrameEquals(frame, ref)
246
247 def test_create_8021p_mapper_service_profile(self):
248 ref = '0007440A00828000ffffffffffffffff' \
249 'ffffffffffffffffffff000000000000' \
250 '000000000000000000000028'
251 frame = OmciFrame(
252 transaction_id=7,
253 message_type=OmciCreate.message_id,
254 omci_message=OmciCreate(
255 entity_class=Ieee8021pMapperServiceProfile.class_id,
256 entity_id=0x8000,
257 data=dict(
258 tp_pointer=OmciNullPointer,
259 interwork_tp_pointer_for_p_bit_priority_0=OmciNullPointer,
260 )
261 )
262 )
263 self.assertGeneratedFrameEquals(frame, ref)
264
265 def test_create_mac_bridge_service_profile(self):
266 ref = '000B440A002D02010001008000140002' \
267 '000f0001000000000000000000000000' \
268 '000000000000000000000028'
269 frame = OmciFrame(
270 transaction_id=11,
271 message_type=OmciCreate.message_id,
272 omci_message=OmciCreate(
273 entity_class=MacBridgeServiceProfile.class_id,
274 entity_id=0x201,
275 data=dict(
276 spanning_tree_ind=False,
277 learning_ind=True,
278 priority=0x8000,
279 max_age=20 * 256,
280 hello_time=2 * 256,
281 forward_delay=15 * 256,
282 unknown_mac_address_discard=True
283 )
284 )
285 )
286 self.assertGeneratedFrameEquals(frame, ref)
287
288 def test_create_gem_port_network_ctp(self):
289 ref = '000C440A010C01000400800003010000' \
290 '00000000000000000000000000000000' \
291 '000000000000000000000028'
292 frame = OmciFrame(
293 transaction_id=12,
294 message_type=OmciCreate.message_id,
295 omci_message=OmciCreate(
296 entity_class=GemPortNetworkCtp.class_id,
297 entity_id=0x100,
298 data=dict(
299 port_id=0x400,
300 tcont_pointer=0x8000,
301 direction=3,
302 traffic_management_pointer_upstream=0x100
303 )
304 )
305 )
306 self.assertGeneratedFrameEquals(frame, ref)
307
308 def test_multicast_gem_interworking_tp(self):
309 ref = '0011440A011900060104000001000000' \
310 '00000000000000000000000000000000' \
311 '000000000000000000000028'
312 frame = OmciFrame(
313 transaction_id=17,
314 message_type=OmciCreate.message_id,
315 omci_message=OmciCreate(
316 entity_class=MulticastGemInterworkingTp.class_id,
317 entity_id=0x6,
318 data=dict(
319 gem_port_network_ctp_pointer=0x104,
320 interworking_option=0,
321 service_profile_pointer=0x1,
322 )
323 )
324 )
325 self.assertGeneratedFrameEquals(frame, ref)
326
327 def test_create_gem_inteworking_tp(self):
328 ref = '0012440A010A80010100058000000000' \
329 '01000000000000000000000000000000' \
330 '000000000000000000000028'
331 frame = OmciFrame(
332 transaction_id=18,
333 message_type=OmciCreate.message_id,
334 omci_message=OmciCreate(
335 entity_class=GemInterworkingTp.class_id,
336 entity_id=0x8001,
337 data=dict(
338 gem_port_network_ctp_pointer=0x100,
339 interworking_option=5,
340 service_profile_pointer=0x8000,
341 interworking_tp_pointer=0x0,
342 gal_profile_pointer=0x1
343 )
344 )
345 )
346 self.assertGeneratedFrameEquals(frame, ref)
347
348 def test_set_8021p_mapper_service_profile(self):
349 ref = '0016480A008280004000800100000000' \
350 '00000000000000000000000000000000' \
351 '000000000000000000000028'
352 data = dict(
353 interwork_tp_pointer_for_p_bit_priority_0=0x8001
354 )
355 frame = OmciFrame(
356 transaction_id=22,
357 message_type=OmciSet.message_id,
358 omci_message=OmciSet(
359 entity_class=Ieee8021pMapperServiceProfile.class_id,
360 entity_id=0x8000,
361 attributes_mask=Ieee8021pMapperServiceProfile.mask_for(
362 *data.keys()),
363 data=data
364 )
365 )
366 self.assertGeneratedFrameEquals(frame, ref)
367
368 def test_create_mac_bridge_port_configuration_data(self):
369 ref = '001A440A002F21010201020380000000' \
370 '00000000000000000000000000000000' \
371 '000000000000000000000028'
372 frame = OmciFrame(
373 transaction_id=26,
374 message_type=OmciCreate.message_id,
375 omci_message=OmciCreate(
376 entity_class=MacBridgePortConfigurationData.class_id,
377 entity_id=0x2101,
378 data=dict(
379 bridge_id_pointer=0x201,
380 port_num=2,
381 tp_type=3,
382 tp_pointer=0x8000
383 )
384 )
385 )
386 self.assertGeneratedFrameEquals(frame, ref)
387
388 def test_create_vlan_tagging_filter_data(self):
389 ref = '001F440A005421010400000000000000' \
390 '00000000000000000000000000000000' \
391 '100100000000000000000028'
392 vlan_filter_list = [0] * 12
393 vlan_filter_list[0] = 0x0400
394
395 frame = OmciFrame(
396 transaction_id=31,
397 message_type=OmciCreate.message_id,
398 omci_message=OmciCreate(
399 entity_class=VlanTaggingFilterData.class_id,
400 entity_id=0x2101,
401 data=dict(
402 vlan_filter_list=vlan_filter_list,
403 forward_operation=0x10,
404 number_of_entries=1
405 )
406 )
407 )
408 self.assertGeneratedFrameEquals(frame, ref)
409
410 def test_create_extended_vlan_tagging_operation_configuration_data(self):
411 ref = '0023440A00AB02020A04010000000000' \
412 '00000000000000000000000000000000' \
413 '000000000000000000000028'
414 frame = OmciFrame(
415 transaction_id=35,
416 message_type=OmciCreate.message_id,
417 omci_message=OmciCreate(
418 entity_class=
419 ExtendedVlanTaggingOperationConfigurationData.class_id,
420 entity_id=0x202,
421 data=dict(
422 association_type=10,
423 associated_me_pointer=0x401
424 )
425 )
426 )
427 self.assertGeneratedFrameEquals(frame, ref)
428
429 def test_set_extended_vlan_tagging_operation_configuration_data(self):
430 ref = '0024480A00AB02023800810081000000' \
431 '00000000000000000000000000000000' \
432 '000000000000000000000028'
433 data = dict(
434 input_tpid=0x8100,
435 output_tpid=0x8100,
436 downstream_mode=0, # inverse of upstream
437 )
438 frame = OmciFrame(
439 transaction_id=36,
440 message_type=OmciSet.message_id,
441 omci_message=OmciSet(
442 entity_class=\
443 ExtendedVlanTaggingOperationConfigurationData.class_id,
444 entity_id=0x202,
445 attributes_mask= \
446 ExtendedVlanTaggingOperationConfigurationData.mask_for(
447 *data.keys()),
448 data=data
449 )
450 )
451 self.assertGeneratedFrameEquals(frame, ref)
452
453 def test_set_extended_vlan_tagging_1(self):
454 ref = '0025480A00AB02020400f00000008200' \
455 '5000402f000000082004000000000000' \
456 '000000000000000000000028'
457 data = dict(
458 received_frame_vlan_tagging_operation_table=\
459 VlanTaggingOperation(
460 filter_outer_priority=15,
461 filter_inner_priority=8,
462 filter_inner_vid=1024,
463 filter_inner_tpid_de=5,
464 filter_ether_type=0,
465 treatment_tags_to_remove=1,
466 pad3=2,
467 treatment_outer_priority=15,
468 treatment_inner_priority=8,
469 treatment_inner_vid=1024,
470 treatment_inner_tpid_de=4
471 )
472 )
473 frame = OmciFrame(
474 transaction_id=37,
475 message_type=OmciSet.message_id,
476 omci_message=OmciSet(
477 entity_class=\
478 ExtendedVlanTaggingOperationConfigurationData.class_id,
479 entity_id=0x202,
480 attributes_mask= \
481 ExtendedVlanTaggingOperationConfigurationData.mask_for(
482 *data.keys()),
483 data=data
484 )
485 )
486 self.assertGeneratedFrameEquals(frame, ref)
487
488 def test_set_extended_vlan_tagging_2(self):
489 ref = '0026480A00AB02020400F00000008200' \
490 'd000402f00000008200c000000000000' \
491 '000000000000000000000028'
492 data = dict(
493 received_frame_vlan_tagging_operation_table=
494 VlanTaggingOperation(
495 filter_outer_priority=15,
496 filter_inner_priority=8,
497 filter_inner_vid=1025,
498 filter_inner_tpid_de=5,
499 filter_ether_type=0,
500 treatment_tags_to_remove=1,
501 pad3=2,
502 treatment_outer_priority=15,
503 treatment_inner_priority=8,
504 treatment_inner_vid=1025,
505 treatment_inner_tpid_de=4
506 )
507 )
508 frame = OmciFrame(
509 transaction_id=38,
510 message_type=OmciSet.message_id,
511 omci_message=OmciSet(
512 entity_class=
513 ExtendedVlanTaggingOperationConfigurationData.class_id,
514 entity_id=0x202,
515 attributes_mask=
516 ExtendedVlanTaggingOperationConfigurationData.mask_for(
517 *data.keys()),
518 data=data
519 )
520 )
521 self.assertGeneratedFrameEquals(frame, ref)
522
523 def test_create_mac_bridge_port_configuration_data2(self):
524 ref = '0029440A002F02010201010b04010000' \
525 '00000000000000000000000000000000' \
526 '000000000000000000000028'
527 frame = OmciFrame(
528 transaction_id=41,
529 message_type=OmciCreate.message_id,
530 omci_message=OmciCreate(
531 entity_class=MacBridgePortConfigurationData.class_id,
532 entity_id=0x201,
533 data=dict(
534 bridge_id_pointer=0x201,
535 encapsulation_methods=0,
536 port_num=1,
537 port_priority=0,
538 port_path_cost=0,
539 port_spanning_tree_in=0,
540 lan_fcs_ind=0,
541 tp_type=11,
542 tp_pointer=0x401,
543 mac_learning_depth=0
544 )
545 )
546 )
547 self.assertGeneratedFrameEquals(frame, ref)
548 frame2 = OmciFrame(hex2raw(ref))
549 self.assertEqual(frame2, frame)
550
551 def test_mib_upload(self):
552 ref = '00304D0A000200000000000000000000' \
553 '00000000000000000000000000000000' \
554 '000000000000000000000028'
555 frame = OmciFrame(
556 transaction_id=48,
557 message_type=OmciMibUpload.message_id,
558 omci_message=OmciMibUpload(
559 entity_class=OntData.class_id
560 )
561 )
562 self.assertGeneratedFrameEquals(frame, ref)
563
564 def test_parse_enh_security_avc(self):
565 refs = [
566 "0000110a014c0000008000202020202020202020202020202020202020202020"
567 "2020202020202020000000280be43cf4"
568 ]
569 for i, data in enumerate(refs):
570 frame = OmciFrame(hex2raw(data))
571 omci = frame.omci_message
572 # frame.show()
573
574 def test_parse_alarm_message(self):
575 refs = [
576 "0000100a00050101000000000000000000000000000000000000000000000000"
577 "0000000220000000000000280be43cf4"
578 ]
579 for i, data in enumerate(refs):
580 frame = OmciFrame(hex2raw(data))
581 omci = frame.omci_message
582 # frame.show()
583
584 def test_parse_results(self):
585 refs = [
586 "00001B0a014c0000008000202020202020202020202020202020202020202020"
587 "2020202020202020000000280be43cf4"
588 ]
589 for i, data in enumerate(refs):
590 frame = OmciFrame(hex2raw(data))
591 omci = frame.omci_message
592 # frame.show()
593
594 def test_parsing_mib_upload_next_responses(self):
595 refs = [
596 "00032e0a00020000000200008000000000000000000000000000000000000000"
597 "00000000000000000000002828ce00e2",
598 "00042e0a0002000000050101f0002f2f05202020202020202020202020202020"
599 "202020202000000000000028d4eb4bdf",
600 "00052e0a00020000000501010f80202020202020202020202020202020202020"
601 "2020000000000000000000282dbe4b44",
602 "00062e0a0002000000050104f000303001202020202020202020202020202020"
603 "202020202000000000000028ef1b035b",
604 "00072e0a00020000000501040f80202020202020202020202020202020202020"
605 "202000000000000000000028fec29135",
606 "00082e0a0002000000050180f000f8f801202020202020202020202020202020"
607 "202020202000000000000028fd4e0b07",
608 "00092e0a00020000000501800f80202020202020202020202020202020202020"
609 "2020000000000000000000283306b3c0",
610 "000a2e0a0002000000060101f0002f054252434d123456780000000000000000"
611 "00000000000c000000000028585c2083",
612 "000b2e0a00020000000601010f004252434d0000000000000000000000000000"
613 "0000000000000000000000284f0e82b9",
614 "000c2e0a000200000006010100f8202020202020202020202020202020202020"
615 "202000000000000000000028e68bdb63",
616 "000d2e0a00020000000601010004000000000000000000000000000000000000"
617 "00000000000000000000002857bc2730",
618 "000e2e0a0002000000060104f00030014252434d123456780000000000000000"
619 "00000000000c000000000028afe656f5",
620 "000f2e0a00020000000601040f004252434d0000000000000000000000000000"
621 "000000000000000000000028f8f6db74",
622 "00102e0a000200000006010400f8202020202020202020202020202020202020"
623 "202000000800000000000028064fc177",
624 "00112e0a00020000000601040004000000000000000000000000000000000000"
625 "0000000000000000000000285a5c0841",
626 "00122e0a0002000000060180f000f8014252434d123456780000000000000000"
627 "00000000000c0000000000286826eafe",
628 "00132e0a00020000000601800f004252434d0000000000000000000000000000"
629 "0000000000000000000000281c4b7033",
630 "00142e0a000200000006018000f8202020202020202020202020202020202020"
631 "202000084040000000000028ac144eb3",
632 "00152e0a00020000000601800004000000000000000000000000000000000000"
633 "0000000000000000000000280a81a9a7",
634 "00162e0a0002000000070000f0003530323247574f3236363230303301010100"
635 "0000000000000000000000287ea42d51",
636 "00172e0a0002000000070001f0003530323247574f3236363230303300000100"
637 "000000000000000000000028b17f567f",
638 "00182e0a0002000000830000c000202020202020202020202020202020202020"
639 "2020202020200000000000280e7eebaa",
640 "00192e0a00020000008300002000202020202020202020202020202000000000"
641 "000000000000000000000028a95c03b3",
642 "001a2e0a00020000008300001000000000000000000000000000000000000000"
643 "000000000000000000000028f30515a1",
644 "001b2e0a0002000000850000ffe0000000000000000000000000000000000000"
645 "000000000000000000000028764c18de",
646 "001c2e0a0002000000860001c00000001018aaaa000000000000000000000000"
647 "000000000000000000000028ea220ce0",
648 "001d2e0a00020000008600012000000000000000000000000000000000000000"
649 "000000000000000000000028fbdb571a",
650 "001e2e0a00020000008600011f80000000000000000000000000000000000000"
651 "000000000000000000000028c2682282",
652 "001f2e0a00020000008600010078000000000000000000000000000000000000"
653 "0000000000000000000000289c4809b1",
654 "00202e0a00020000008600010004000000000000000000000000000000000000"
655 "000000000000000000000028d174a7d6",
656 "00212e0a00020000008600010002000000000000000000000000000000000000"
657 "0000000000000000000000288f353976",
658 "00222e0a0002000001000000e0004252434d0000000000000000000000000000"
659 "4252434d123456780000002803bbceb6",
660 "00232e0a00020000010000001f80000000000000000000000000000000000000"
661 "0000000000000000000000281b9674db",
662 "00242e0a00020000010000000040000000000000000000000000000000000000"
663 "000000000000000000000028b1050b9b",
664 "00252e0a00020000010000000038000000000000000000000000000003000000"
665 "0000000000000000000000288266645e",
666 "00262e0a0002000001010000f80042564d344b3030425241303931352d303038"
667 "3300b3000001010000000028837d624f",
668 "00272e0a000200000101000007f8000000010020027c85630016000030000000"
669 "00000000000000000000002896c707e1",
670 "00282e0a0002000001068000e00000ff01010000000000000000000000000000"
671 "00000000000000000000002811acb324",
672 "00292e0a0002000001068001e00000ff01010000000000000000000000000000"
673 "00000000000000000000002823ad6aa9",
674 "002a2e0a0002000001068002e00000ff01010000000000000000000000000000"
675 "000000000000000000000028a290efd9",
676 "002b2e0a0002000001068003e00000ff01010000000000000000000000000000"
677 "000000000000000000000028af893357",
678 "002c2e0a0002000001068004e00000ff01010000000000000000000000000000"
679 "000000000000000000000028901141a3",
680 "002d2e0a0002000001068005e00000ff01010000000000000000000000000000"
681 "000000000000000000000028c4398bcc",
682 "002e2e0a0002000001068006e00000ff01010000000000000000000000000000"
683 "000000000000000000000028e60acd99",
684 "002f2e0a0002000001068007e00000ff01010000000000000000000000000000"
685 "0000000000000000000000284b5faf23",
686 "00302e0a0002000001078001ffff01000800300000050900000000ffff000000"
687 "008181000000000000000028bef89455",
688 "00312e0a0002000001080401f000000000000401000000000000000000000000"
689 "0000000000000000000000287dc5183d",
690 "00322e0a0002000001150401fff0000080008000000000040100000000010000"
691 "000000000000000000000028cc0a46a9",
692 "00332e0a0002000001150401000f0200020002000200ffff0900000000000000"
693 "0000000000000000000000288c42acdd",
694 "00342e0a0002000001150402fff0000080008000000000040100010000010000"
695 "000000000000000000000028de9f625a",
696 "00352e0a0002000001150402000f0200020002000200ffff0900000000000000"
697 "0000000000000000000000280587860b",
698 "00362e0a0002000001150403fff0000080008000000000040100020000010000"
699 "000000000000000000000028a49cc820",
700 "00372e0a0002000001150403000f0200020002000200ffff0900000000000000"
701 "000000000000000000000028b4e4a2b9",
702 "00382e0a0002000001150404fff0000080008000000000040100030000010000"
703 "0000000000000000000000288233147b",
704 "00392e0a0002000001150404000f0200020002000200ffff0900000000000000"
705 "00000000000000000000002881b706b0",
706 "003a2e0a0002000001150405fff0000080008000000000040100040000010000"
707 "000000000000000000000028be8efc9f",
708 "003b2e0a0002000001150405000f0200020002000200ffff0900000000000000"
709 "000000000000000000000028d944804b",
710 "003c2e0a0002000001150406fff0000080008000000000040100050000010000"
711 "000000000000000000000028725c3864",
712 "003d2e0a0002000001150406000f0200020002000200ffff0900000000000000"
713 "0000000000000000000000284e2d5cd2",
714 "003e2e0a0002000001150407fff0000080008000000000040100060000010000"
715 "000000000000000000000028464b03ba",
716 "003f2e0a0002000001150407000f0200020002000200ffff0900000000000000"
717 "0000000000000000000000287006cfd0",
718 "00402e0a0002000001150408fff0000080008000000000040100070000010000"
719 "000000000000000000000028cd88ebeb",
720 "00412e0a0002000001150408000f0200020002000200ffff0900000000000000"
721 "0000000000000000000000285a5905e2",
722 "00422e0a0002000001158000fff0000100010000000000800000000000010000"
723 "000000000000000000000028e61b19d1",
724 "00432e0a0002000001158000000f0200020002000200ffff0900000000000000"
725 "000000000000000000000028b0cc5937",
726 "00442e0a0002000001158001fff0000100010000000000800000010000010000"
727 "0000000000000000000000285386bbf2",
728 "00452e0a0002000001158001000f0200020002000200ffff0900000000000000"
729 "000000000000000000000028c06723ab",
730 "00462e0a0002000001158002fff0000100010000000000800000020000010000"
731 "000000000000000000000028ab49704a",
732 "00472e0a0002000001158002000f0200020002000200ffff0900000000000000"
733 "00000000000000000000002857432f25",
734 "00482e0a0002000001158003fff0000100010000000000800000030000010000"
735 "000000000000000000000028b383c057",
736 "00492e0a0002000001158003000f0200020002000200ffff0900000000000000"
737 "000000000000000000000028dca40d66",
738 "004a2e0a0002000001158004fff0000100010000000000800000040000010000"
739 "0000000000000000000000286b7ba0e2",
740 "004b2e0a0002000001158004000f0200020002000200ffff0900000000000000"
741 "000000000000000000000028fd442363",
742 "004c2e0a0002000001158005fff0000100010000000000800000050000010000"
743 "0000000000000000000000280ee9a0b8",
744 "004d2e0a0002000001158005000f0200020002000200ffff0900000000000000"
745 "000000000000000000000028bc1b9843",
746 "004e2e0a0002000001158006fff0000100010000000000800000060000010000"
747 "0000000000000000000000280c535114",
748 "004f2e0a0002000001158006000f0200020002000200ffff0900000000000000"
749 "00000000000000000000002887032f2b",
750 "00502e0a0002000001158007fff0000100010000000000800000070000010000"
751 "000000000000000000000028a77d7f61",
752 "00512e0a0002000001158007000f0200020002000200ffff0900000000000000"
753 "00000000000000000000002835e9f567",
754 "00522e0a0002000001158008fff0000100010000000000800100000000010000"
755 "000000000000000000000028ff4ca94b",
756 "00532e0a0002000001158008000f0200020002000200ffff0900000000000000"
757 "0000000000000000000000281e2f1e33",
758 "00542e0a0002000001158009fff0000100010000000000800100010000010000"
759 "0000000000000000000000283c473db0",
760 "00552e0a0002000001158009000f0200020002000200ffff0900000000000000"
761 "00000000000000000000002869f51dda",
762 "00562e0a000200000115800afff0000100010000000000800100020000010000"
763 "000000000000000000000028046b8feb",
764 "00572e0a000200000115800a000f0200020002000200ffff0900000000000000"
765 "00000000000000000000002868b1495e",
766 "00582e0a000200000115800bfff0000100010000000000800100030000010000"
767 "0000000000000000000000282b927566",
768 "00592e0a000200000115800b000f0200020002000200ffff0900000000000000"
769 "000000000000000000000028cd43de96",
770 "005a2e0a000200000115800cfff0000100010000000000800100040000010000"
771 "000000000000000000000028c49617dd",
772 "005b2e0a000200000115800c000f0200020002000200ffff0900000000000000"
773 "000000000000000000000028fbbb972a",
774 "005c2e0a000200000115800dfff0000100010000000000800100050000010000"
775 "00000000000000000000002893d4c2b5",
776 "005d2e0a000200000115800d000f0200020002000200ffff0900000000000000"
777 "000000000000000000000028dc9d97ca",
778 "005e2e0a000200000115800efff0000100010000000000800100060000010000"
779 "0000000000000000000000280e1ec245",
780 "005f2e0a000200000115800e000f0200020002000200ffff0900000000000000"
781 "000000000000000000000028be3d56f1",
782 "00602e0a000200000115800ffff0000100010000000000800100070000010000"
783 "0000000000000000000000280c046099",
784 "00612e0a000200000115800f000f0200020002000200ffff0900000000000000"
785 "000000000000000000000028d770e4ea",
786 "00622e0a0002000001158010fff0000100010000000000800200000000010000"
787 "0000000000000000000000281b449092",
788 "00632e0a0002000001158010000f0200020002000200ffff0900000000000000"
789 "0000000000000000000000282b7a8604",
790 "00642e0a0002000001158011fff0000100010000000000800200010000010000"
791 "000000000000000000000028ad498068",
792 "00652e0a0002000001158011000f0200020002000200ffff0900000000000000"
793 "000000000000000000000028a114b304",
794 "00662e0a0002000001158012fff0000100010000000000800200020000010000"
795 "000000000000000000000028c091715d",
796 "00672e0a0002000001158012000f0200020002000200ffff0900000000000000"
797 "000000000000000000000028d4ab49e7",
798 "00682e0a0002000001158013fff0000100010000000000800200030000010000"
799 "000000000000000000000028e39dd5dd",
800 "00692e0a0002000001158013000f0200020002000200ffff0900000000000000"
801 "0000000000000000000000288779ebf0",
802 "006a2e0a0002000001158014fff0000100010000000000800200040000010000"
803 "000000000000000000000028c47a741f",
804 "006b2e0a0002000001158014000f0200020002000200ffff0900000000000000"
805 "000000000000000000000028ce765fcd",
806 "006c2e0a0002000001158015fff0000100010000000000800200050000010000"
807 "0000000000000000000000288f732591",
808 "006d2e0a0002000001158015000f0200020002000200ffff0900000000000000"
809 "000000000000000000000028920b6f5e",
810 "006e2e0a0002000001158016fff0000100010000000000800200060000010000"
811 "000000000000000000000028f072e1c3",
812 "006f2e0a0002000001158016000f0200020002000200ffff0900000000000000"
813 "000000000000000000000028b47ea00f",
814 "00702e0a0002000001158017fff0000100010000000000800200070000010000"
815 "00000000000000000000002813461627",
816 "00712e0a0002000001158017000f0200020002000200ffff0900000000000000"
817 "00000000000000000000002809013378",
818 "00722e0a0002000001158018fff0000100010000000000800300000000010000"
819 "0000000000000000000000286168e200",
820 "00732e0a0002000001158018000f0200020002000200ffff0900000000000000"
821 "000000000000000000000028eccc81f7",
822 "00742e0a0002000001158019fff0000100010000000000800300010000010000"
823 "00000000000000000000002855fe8072",
824 "00752e0a0002000001158019000f0200020002000200ffff0900000000000000"
825 "000000000000000000000028c159c496",
826 "00762e0a000200000115801afff0000100010000000000800300020000010000"
827 "00000000000000000000002872652aca",
828 "00772e0a000200000115801a000f0200020002000200ffff0900000000000000"
829 "0000000000000000000000283ba1c255",
830 "00782e0a000200000115801bfff0000100010000000000800300030000010000"
831 "0000000000000000000000286b2ecb95",
832 "00792e0a000200000115801b000f0200020002000200ffff0900000000000000"
833 "000000000000000000000028441fbe05",
834 "007a2e0a000200000115801cfff0000100010000000000800300040000010000"
835 "000000000000000000000028f07ad5d8",
836 "007b2e0a000200000115801c000f0200020002000200ffff0900000000000000"
837 "000000000000000000000028237d6a28",
838 "007c2e0a000200000115801dfff0000100010000000000800300050000010000"
839 "000000000000000000000028e47dfdca",
840 "007d2e0a000200000115801d000f0200020002000200ffff0900000000000000"
841 "0000000000000000000000280ca941be",
842 "007e2e0a000200000115801efff0000100010000000000800300060000010000"
843 "0000000000000000000000283a1ef4d4",
844 "007f2e0a000200000115801e000f0200020002000200ffff0900000000000000"
845 "0000000000000000000000289c905cd5",
846 "00802e0a000200000115801ffff0000100010000000000800300070000010000"
847 "000000000000000000000028384ae4c6",
848 "00812e0a000200000115801f000f0200020002000200ffff0900000000000000"
849 "000000000000000000000028be87eb55",
850 "00822e0a0002000001158020fff0000100010000000000800400000000010000"
851 "000000000000000000000028f0412282",
852 "00832e0a0002000001158020000f0200020002000200ffff0900000000000000"
853 "000000000000000000000028842ada0c",
854 "00842e0a0002000001158021fff0000100010000000000800400010000010000"
855 "000000000000000000000028a6eed1bc",
856 "00852e0a0002000001158021000f0200020002000200ffff0900000000000000"
857 "0000000000000000000000280f3dd903",
858 "00862e0a0002000001158022fff0000100010000000000800400020000010000"
859 "000000000000000000000028474a0823",
860 "00872e0a0002000001158022000f0200020002000200ffff0900000000000000"
861 "000000000000000000000028e00456b3",
862 "00882e0a0002000001158023fff0000100010000000000800400030000010000"
863 "00000000000000000000002851cbe1a6",
864 "00892e0a0002000001158023000f0200020002000200ffff0900000000000000"
865 "00000000000000000000002869a99563",
866 "008a2e0a0002000001158024fff0000100010000000000800400040000010000"
867 "00000000000000000000002867705534",
868 "008b2e0a0002000001158024000f0200020002000200ffff0900000000000000"
869 "0000000000000000000000286f9570c0",
870 "008c2e0a0002000001158025fff0000100010000000000800400050000010000"
871 "000000000000000000000028450ef70e",
872 "008d2e0a0002000001158025000f0200020002000200ffff0900000000000000"
873 "00000000000000000000002847588afa",
874 "008e2e0a0002000001158026fff0000100010000000000800400060000010000"
875 "000000000000000000000028c8218600",
876 "008f2e0a0002000001158026000f0200020002000200ffff0900000000000000"
877 "000000000000000000000028391a6ba7",
878 "00902e0a0002000001158027fff0000100010000000000800400070000010000"
879 "000000000000000000000028afc0878b",
880 "00912e0a0002000001158027000f0200020002000200ffff0900000000000000"
881 "00000000000000000000002819130d66",
882 "00922e0a0002000001158028fff0000100010000000000800500000000010000"
883 "0000000000000000000000289afa4cf7",
884 "00932e0a0002000001158028000f0200020002000200ffff0900000000000000"
885 "00000000000000000000002873a4e20b",
886 "00942e0a0002000001158029fff0000100010000000000800500010000010000"
887 "000000000000000000000028633debd9",
888 "00952e0a0002000001158029000f0200020002000200ffff0900000000000000"
889 "0000000000000000000000280397eb28",
890 "00962e0a000200000115802afff0000100010000000000800500020000010000"
891 "0000000000000000000000280ed5ee7a",
892 "00972e0a000200000115802a000f0200020002000200ffff0900000000000000"
893 "000000000000000000000028f886ba59",
894 "00982e0a000200000115802bfff0000100010000000000800500030000010000"
895 "00000000000000000000002888ff79b1",
896 "00992e0a000200000115802b000f0200020002000200ffff0900000000000000"
897 "00000000000000000000002846baf278",
898 "009a2e0a000200000115802cfff0000100010000000000800500040000010000"
899 "0000000000000000000000281fd1e68f",
900 "009b2e0a000200000115802c000f0200020002000200ffff0900000000000000"
901 "000000000000000000000028d99760f9",
902 "009c2e0a000200000115802dfff0000100010000000000800500050000010000"
903 "000000000000000000000028557aaf84",
904 "009d2e0a000200000115802d000f0200020002000200ffff0900000000000000"
905 "000000000000000000000028064210fd",
906 "009e2e0a000200000115802efff0000100010000000000800500060000010000"
907 "0000000000000000000000285fd6c061",
908 "009f2e0a000200000115802e000f0200020002000200ffff0900000000000000"
909 "000000000000000000000028299efbb5",
910 "00a02e0a000200000115802ffff0000100010000000000800500070000010000"
911 "00000000000000000000002834f127c4",
912 "00a12e0a000200000115802f000f0200020002000200ffff0900000000000000"
913 "000000000000000000000028edd30591",
914 "00a22e0a0002000001158030fff0000100010000000000800600000000010000"
915 "000000000000000000000028183183f2",
916 "00a32e0a0002000001158030000f0200020002000200ffff0900000000000000"
917 "000000000000000000000028a27e71f6",
918 "00a42e0a0002000001158031fff0000100010000000000800600010000010000"
919 "000000000000000000000028bd64dfc0",
920 "00a52e0a0002000001158031000f0200020002000200ffff0900000000000000"
921 "00000000000000000000002839e2f37e",
922 "00a62e0a0002000001158032fff0000100010000000000800600020000010000"
923 "0000000000000000000000283e72282e",
924 "00a72e0a0002000001158032000f0200020002000200ffff0900000000000000"
925 "000000000000000000000028cef19baa",
926 "00a82e0a0002000001158033fff0000100010000000000800600030000010000"
927 "0000000000000000000000281c1caf44",
928 "00a92e0a0002000001158033000f0200020002000200ffff0900000000000000"
929 "00000000000000000000002814712e27",
930 "00aa2e0a0002000001158034fff0000100010000000000800600040000010000"
931 "000000000000000000000028f02a30a4",
932 "00ab2e0a0002000001158034000f0200020002000200ffff0900000000000000"
933 "000000000000000000000028068fcbf5",
934 "00ac2e0a0002000001158035fff0000100010000000000800600050000010000"
935 "000000000000000000000028436bd783",
936 "00ad2e0a0002000001158035000f0200020002000200ffff0900000000000000"
937 "0000000000000000000000288da3200f",
938 "00ae2e0a0002000001158036fff0000100010000000000800600060000010000"
939 "000000000000000000000028c26a02ca",
940 "00af2e0a0002000001158036000f0200020002000200ffff0900000000000000"
941 "000000000000000000000028147a41ee",
942 "00b02e0a0002000001158037fff0000100010000000000800600070000010000"
943 "0000000000000000000000287c2bbec0",
944 "00b12e0a0002000001158037000f0200020002000200ffff0900000000000000"
945 "0000000000000000000000284c86c11f",
946 "00b22e0a0002000001158038fff0000100010000000000800700000000010000"
947 "00000000000000000000002895b94e06",
948 "00b32e0a0002000001158038000f0200020002000200ffff0900000000000000"
949 "000000000000000000000028a2b34012",
950 "00b42e0a0002000001158039fff0000100010000000000800700010000010000"
951 "00000000000000000000002804b205a3",
952 "00b52e0a0002000001158039000f0200020002000200ffff0900000000000000"
953 "00000000000000000000002886856d76",
954 "00b62e0a000200000115803afff0000100010000000000800700020000010000"
955 "0000000000000000000000282a22752c",
956 "00b72e0a000200000115803a000f0200020002000200ffff0900000000000000"
957 "000000000000000000000028488e67db",
958 "00b82e0a000200000115803bfff0000100010000000000800700030000010000"
959 "000000000000000000000028a55f79ea",
960 "00b92e0a000200000115803b000f0200020002000200ffff0900000000000000"
961 "00000000000000000000002842d77ba7",
962 "00ba2e0a000200000115803cfff0000100010000000000800700040000010000"
963 "000000000000000000000028da65268a",
964 "00bb2e0a000200000115803c000f0200020002000200ffff0900000000000000"
965 "000000000000000000000028c58443ec",
966 "00bc2e0a000200000115803dfff0000100010000000000800700050000010000"
967 "000000000000000000000028997aca59",
968 "00bd2e0a000200000115803d000f0200020002000200ffff0900000000000000"
969 "000000000000000000000028a2670b7d",
970 "00be2e0a000200000115803efff0000100010000000000800700060000010000"
971 "00000000000000000000002813e904cb",
972 "00bf2e0a000200000115803e000f0200020002000200ffff0900000000000000"
973 "000000000000000000000028c387a9e5",
974 "00c02e0a000200000115803ffff0000100010000000000800700070000010000"
975 "000000000000000000000028d556a6b2",
976 "00c12e0a000200000115803f000f0200020002000200ffff0900000000000000"
977 "00000000000000000000002868d9961a",
978 "00c22e0a0002000001168000f000800000000200000000000000000000000000"
979 "000000000000000000000028b69b53c1",
980 "00c32e0a0002000001168001f000800000000200000000000000000000000000"
981 "000000000000000000000028537705d4",
982 "00c42e0a0002000001168002f000800000000200000000000000000000000000"
983 "000000000000000000000028db171b7b",
984 "00c52e0a0002000001168003f000800000000200000000000000000000000000"
985 "000000000000000000000028f9b3fa54",
986 "00c62e0a0002000001168004f000800000000200000000000000000000000000"
987 "000000000000000000000028cdacda4e",
988 "00c72e0a0002000001168005f000800000000200000000000000000000000000"
989 "00000000000000000000002837133b6e",
990 "00c82e0a0002000001168006f000800000000200000000000000000000000000"
991 "000000000000000000000028d6447905",
992 "00c92e0a0002000001168007f000800000000200000000000000000000000000"
993 "000000000000000000000028021a3910",
994 "00ca2e0a0002000001168008f000800100000200000000000000000000000000"
995 "00000000000000000000002835d3cf43",
996 "00cb2e0a0002000001168009f000800100000200000000000000000000000000"
997 "00000000000000000000002887ad76fc",
998 "00cc2e0a000200000116800af000800100000200000000000000000000000000"
999 "00000000000000000000002895e3d838",
1000 "00cd2e0a000200000116800bf000800100000200000000000000000000000000"
1001 "000000000000000000000028a07489ac",
1002 "00ce2e0a000200000116800cf000800100000200000000000000000000000000"
1003 "0000000000000000000000285d08821d",
1004 "00cf2e0a000200000116800df000800100000200000000000000000000000000"
1005 "000000000000000000000028302249a4",
1006 "00d02e0a000200000116800ef000800100000200000000000000000000000000"
1007 "0000000000000000000000283966d3bc",
1008 "00d12e0a000200000116800ff000800100000200000000000000000000000000"
1009 "0000000000000000000000289519cdb5",
1010 "00d22e0a0002000001168010f000800200000200000000000000000000000000"
1011 "0000000000000000000000281bc99b7b",
1012 "00d32e0a0002000001168011f000800200000200000000000000000000000000"
1013 "000000000000000000000028e483b1a0",
1014 "00d42e0a0002000001168012f000800200000200000000000000000000000000"
1015 "0000000000000000000000286885d8bd",
1016 "00d52e0a0002000001168013f000800200000200000000000000000000000000"
1017 "000000000000000000000028cbe7afd8",
1018 "00d62e0a0002000001168014f000800200000200000000000000000000000000"
1019 "00000000000000000000002809009846",
1020 "00d72e0a0002000001168015f000800200000200000000000000000000000000"
1021 "0000000000000000000000285bee86c4",
1022 "00d82e0a0002000001168016f000800200000200000000000000000000000000"
1023 "0000000000000000000000281f25725c",
1024 "00d92e0a0002000001168017f000800200000200000000000000000000000000"
1025 "00000000000000000000002872e94fe1",
1026 "00da2e0a0002000001168018f000800300000200000000000000000000000000"
1027 "000000000000000000000028e39d572f",
1028 "00db2e0a0002000001168019f000800300000200000000000000000000000000"
1029 "0000000000000000000000281c9dcadd",
1030 "00dc2e0a000200000116801af000800300000200000000000000000000000000"
1031 "0000000000000000000000287c5b8405",
1032 "00dd2e0a000200000116801bf000800300000200000000000000000000000000"
1033 "00000000000000000000002826334420",
1034 "00de2e0a000200000116801cf000800300000200000000000000000000000000"
1035 "00000000000000000000002871ee1536",
1036 "00df2e0a000200000116801df000800300000200000000000000000000000000"
1037 "0000000000000000000000289dfeeeb9",
1038 "00e02e0a000200000116801ef000800300000200000000000000000000000000"
1039 "000000000000000000000028954d55b3",
1040 "00e12e0a000200000116801ff000800300000200000000000000000000000000"
1041 "000000000000000000000028930c564e",
1042 "00e22e0a0002000001168020f000800400000200000000000000000000000000"
1043 "000000000000000000000028b9cec3bf",
1044 "00e32e0a0002000001168021f000800400000200000000000000000000000000"
1045 "0000000000000000000000284263f268",
1046 "00e42e0a0002000001168022f000800400000200000000000000000000000000"
1047 "000000000000000000000028913e5219",
1048 "00e52e0a0002000001168023f000800400000200000000000000000000000000"
1049 "000000000000000000000028efe86fe1",
1050 "00e62e0a0002000001168024f000800400000200000000000000000000000000"
1051 "000000000000000000000028deb045df",
1052 "00e72e0a0002000001168025f000800400000200000000000000000000000000"
1053 "000000000000000000000028255bcd32",
1054 "00e82e0a0002000001168026f000800400000200000000000000000000000000"
1055 "000000000000000000000028355392ad",
1056 "00e92e0a0002000001168027f000800400000200000000000000000000000000"
1057 "000000000000000000000028404a6aca",
1058 "00ea2e0a0002000001168028f000800500000200000000000000000000000000"
1059 "0000000000000000000000281de78f94",
1060 "00eb2e0a0002000001168029f000800500000200000000000000000000000000"
1061 "000000000000000000000028501a3aae",
1062 "00ec2e0a000200000116802af000800500000200000000000000000000000000"
1063 "0000000000000000000000282947d976",
1064 "00ed2e0a000200000116802bf000800500000200000000000000000000000000"
1065 "000000000000000000000028095cfe0d",
1066 "00ee2e0a000200000116802cf000800500000200000000000000000000000000"
1067 "000000000000000000000028bbcfc27a",
1068 "00ef2e0a000200000116802df000800500000200000000000000000000000000"
1069 "000000000000000000000028dbb27396",
1070 "00f02e0a000200000116802ef000800500000200000000000000000000000000"
1071 "000000000000000000000028dbe9b225",
1072 "00f12e0a000200000116802ff000800500000200000000000000000000000000"
1073 "000000000000000000000028840c0b08",
1074 "00f22e0a0002000001168030f000800600000200000000000000000000000000"
1075 "0000000000000000000000287683e4f8",
1076 "00f32e0a0002000001168031f000800600000200000000000000000000000000"
1077 "00000000000000000000002844d131d1",
1078 "00f42e0a0002000001168032f000800600000200000000000000000000000000"
1079 "0000000000000000000000284d2c2c6d",
1080 "00f52e0a0002000001168033f000800600000200000000000000000000000000"
1081 "000000000000000000000028e89a166c",
1082 "00f62e0a0002000001168034f000800600000200000000000000000000000000"
1083 "0000000000000000000000280f47db8c",
1084 "00f72e0a0002000001168035f000800600000200000000000000000000000000"
1085 "0000000000000000000000283ede8b3e",
1086 "00f82e0a0002000001168036f000800600000200000000000000000000000000"
1087 "000000000000000000000028580547db",
1088 "00f92e0a0002000001168037f000800600000200000000000000000000000000"
1089 "000000000000000000000028d72a270e",
1090 "00fa2e0a0002000001168038f000800700000200000000000000000000000000"
1091 "000000000000000000000028c25ce712",
1092 "00fb2e0a0002000001168039f000800700000200000000000000000000000000"
1093 "000000000000000000000028b908637e",
1094 "00fc2e0a000200000116803af000800700000200000000000000000000000000"
1095 "0000000000000000000000285b66e6fa",
1096 "00fd2e0a000200000116803bf000800700000200000000000000000000000000"
1097 "00000000000000000000002855c10393",
1098 "00fe2e0a000200000116803cf000800700000200000000000000000000000000"
1099 "0000000000000000000000283e94c57d",
1100 "00ff2e0a000200000116803df000800700000200000000000000000000000000"
1101 "0000000000000000000000284347e7f0",
1102 "01002e0a000200000116803ef000800700000200000000000000000000000000"
1103 "000000000000000000000028be66429d",
1104 "01012e0a000200000116803ff000800700000200000000000000000000000000"
1105 "0000000000000000000000284f7db145",
1106 "01022e0a0002000001490401c000000000000000000000000000000000000000"
1107 "000000000000000000000028470aa043",
1108 "01032e0a00020000014904012000000000000000000000000000000000000000"
1109 "000000000000000000000028a6bc6e48",
1110 "01042e0a00020000014904011800ffffffff0000000000000000000000000000"
1111 "000000000000000000000028f747c739",
1112 ]
1113 mask = "%5s %9s %20s %9s %s"
1114 print
1115 print mask % ("seq", "class_id", "class", "instance", "attributes")
1116 for i, data in enumerate(refs):
1117 frame = OmciFrame(hex2raw(data))
1118 omci = frame.omci_message
1119 # frame.show()
1120 print mask % (
1121 str(i),
1122 str(omci.object_entity_class),
1123 entity_id_to_class_map[omci.object_entity_class].__name__,
1124 '0x%x' % omci.object_entity_id,
1125 '\n '.join(
1126 '%s: %s' % (k, v) for k, v in omci.object_data.items())
1127 )
1128
1129 def test_onu_reboot(self):
1130 ref = '0016590a01000000000000000000000000000'\
1131 '0000000000000000000000000000000000000'\
1132 '00000000000028'
1133
1134 frame = OmciFrame(
1135 transaction_id=22,
1136 message_type=OmciReboot.message_id,
1137 omci_message=OmciReboot(
1138 entity_class=OntG.class_id,
1139 entity_id=0
1140 )
1141 )
1142 self.assertGeneratedFrameEquals(frame, ref)
1143
1144 def test_omci_entity_ids(self):
1145 from pyvoltha.adapters.extensions.omci.omci_entities import entity_classes
1146
1147 # For Entity Classes that have a Managed Entity ID with Set-By-Create
1148 # access, verify that the attribute name matches 'managed_entity_id'
1149 #
1150 # This is critical for the MIB Synchronizer state machine as it needs
1151 # to backfill Set-By-Create attributes when it sees a Create response
1152 # but it needs to ignore the 'managed_entity_id' attribute (by name).
1153
1154 for entity in entity_classes:
1155 mei_attr = entity.attributes[0]
1156 self.assertIsNotNone(mei_attr)
1157 self.assertTrue(AA.SBC not in mei_attr.access or
1158 mei_attr.field.name == 'managed_entity_id')
1159
1160
1161if __name__ == '__main__':
1162 main()