a=V1ahexaint63'intV0Iia=V1achraint63'intV2Aa=aint63'intV2a+aint63'intV0c55Ea=V1achraint63'intV3Aa=aint63'intV3a+aint63'intV0c48Ea<aint63'intV0c10FAia<aint63'intV4c256Aa<=c0aint63'intV4Ia=aint63'intV4a+aint63'intV0c55FAain_boundsa+aint63'intV0c55a<aint63'intV5c256Aa<=c0aint63'intV5Ia=aint63'intV5a+aint63'intV0c48FAain_boundsa+aint63'intV0c48a<aint63'intV0c10Ia<aint63'intV0c16Aa<=c0aint63'intV0F
VC for hex
a=aint63'intV2axehV0Iia=aint63'intV2a-aint63'intV3c55Aa=aint63'intV3acodeV0Ea=aint63'intV2a-aint63'intV4c48Aa=aint63'intV4acodeV0Ea<aint63'intV1c58Aa<=c48aint63'intV1FAiain_boundsa-aint63'intV5c55Ia=aint63'intV5acodeV0Fain_boundsa-aint63'intV6c48Ia=aint63'intV6acodeV0Fa<aint63'intV1c58Aa<=c48aint63'intV1Ia=aint63'intV1acodeV0FIavalid_hex_charV0F
VC for xeh
aencodingas1as2
aencodingas3as2
aeq_stringas1as3
asserted formula
a=as1as3
empty_shape
a=V0V2IaencodingV2V1AaencodingV0V1F
a=aint63'intaoalengthas
a>=alengthasc0
a=astrarc""
a<=c0alengthasAa<=c0c0
loop invariant init
a=alengthastrara*c2c0
a<=c0aj
a<ajc0
a=aastrara+a*c2ajc1ahexamodacodeaasajc16Aa=aastrara*c2ajahexadivacodeaasajc16
a=aastrara+a*c2V3c1ahexamodacodeaasV3c16Aa=aastrara*c2V3ahexadivacodeaasV3c16Ia<V3c0Aa<=c0V3F
a<aja*c2c0
avalid_hex_charaastraraj
a<=c0aint63'intai
a<=aint63'intaialengthas
a=alengthastrar1a*c2aint63'intai
a=aastrar1a+a*c2V3c1ahexamodacodeaasV3c16Aa=aastrar1a*c2V3ahexadivacodeaasV3c16Ia<V3aint63'intaiAa<=c0V3F
avalid_hex_charaastrar1V4Ia<V4a*c2aint63'intaiAa<=c0V4F
a=aint63'intao1alengthas
a<aint63'intaiaint63'intao1
a<aint63'intaialengthasAa<=c0aint63'intai
precondition
a=aint63'intavacodeagetasaint63'intai
Na=c16c0
division by zero
ain_boundsadivaint63'intavc16
integer overflow
a=aint63'intao2adivaint63'intavc16
a<aint63'intao2c16Aa<=c0aint63'intao2
a=astrar2aconcatastrar1acontentsahexaint63'intao2
ain_boundsamodaint63'intavc16
a=aint63'intao3amodaint63'intavc16
a<aint63'intao3c16Aa<=c0aint63'intao3
a=astrar3aconcatastrar2acontentsahexaint63'intao3
ain_boundsa+aint63'intaic1
a=aint63'intai1a+aint63'intaic1
a<a-alengthasaint63'intai1a-alengthasaint63'intaiAa<=c0a-alengthasaint63'intai
loop variant decrease
a<=aint63'intai1alengthasAa<=c0aint63'intai1
loop invariant preservation
a=alengthastrar3a*c2aint63'intai1
a<ajaint63'intai1
a=aastrar3a+a*c2ajc1ahexamodacodeaasajc16Aa=aastrar3a*c2ajahexadivacodeaasajc16
a=aastrar3a+a*c2V5c1ahexamodacodeaasV5c16Aa=aastrar3a*c2V5ahexadivacodeaasV5c16Ia<V5aint63'intai1Aa<=c0V5F
a<aja*c2aint63'intai1
avalid_hex_charaastrar3aj
Na<aint63'intaiaint63'intao1
a=alengthastrar1a*c2alengthas
VC for encode
a<=c0ai1
a<ai1alengthas
a=aasai1achra+a*axehaastrar1a*c2ai1c16axehaastrar1a+a*c2ai1c1
a=aasV5achra+a*axehaastrar1a*c2V5c16axehaastrar1a+a*c2V5c1Ia<V5alengthasAa<=c0V5F
avalid_hexastrar1
avalid_hexastrar1Aa=aasV5achra+a*axehaastrar1a*c2V5c16axehaastrar1a+a*c2V5c1Ia<V5alengthasAa<=c0V5FAa=alengthastrar1a*c2alengthas
aencodingasastrar1
postcondition
iaencodingV3astrV6avalid_hex_charaastrV13V16Ia<V16a*c2aint63'intV15Aa<=c0V16FAa=aastrV13a+a*c2V17c1ahexamodacodeaV3V17c16Aa=aastrV13a*c2V17ahexadivacodeaV3V17c16Ia<V17aint63'intV15Aa<=c0V17FAa=alengthastrV13a*c2aint63'intV15Aa<=aint63'intV15alengthV3Aa<=c0aint63'intV15Aa<a-alengthV3aint63'intV15a-alengthV3aint63'intV7Aa<=c0a-alengthV3aint63'intV7Ia=V15V14FIa=aint63'intV14a+aint63'intV7c1FAain_boundsa+aint63'intV7c1Ia=astrV13aconcatastrV11acontentsahexaint63'intV12FAa<aint63'intV12c16Aa<=c0aint63'intV12Ia=aint63'intV12amodaint63'intV9c16FAain_boundsamodaint63'intV9c16ANa=c16c0Ia=astrV11aconcatastrV6acontentsahexaint63'intV10FAa<aint63'intV10c16Aa<=c0aint63'intV10Ia=aint63'intV10adivaint63'intV9c16FAain_boundsadivaint63'intV9c16ANa=c16c0Ia=aint63'intV9acodeagetV3aint63'intV7FAa<aint63'intV7alengthV3Aa<=c0aint63'intV7a<aint63'intV7aint63'intV8Ia>=alengthV3c0Aa=aint63'intV8alengthV3FIavalid_hex_charaastrV6V18Ia<V18a*c2aint63'intV7Aa<=c0V18FAa=aastrV6a+a*c2V19c1ahexamodacodeaV3V19c16Aa=aastrV6a*c2V19ahexadivacodea
avalid_hexas
Na=c2c0
ain_boundsadivaint63'intaoc2
a=aint63'intao1adivaint63'intaoc2
a=amodc0c2c0
a=alengthastraradivc0c2
a<ajadivc0c2
a=aastrarajachra+a*axehaasa*c2ajc16axehaasa+a*c2ajc1
a=amodaint63'intaic2c0
a=alengthastrar1adivaint63'intaic2
a=aastrar1V3achra+a*axehaasa*c2V3c16axehaasa+a*c2V3c1Ia<V3adivaint63'intaic2Aa<=c0V3F
a=aint63'intao2alengthas
a<aint63'intaiaint63'intao2
avalid_hex_charagetasaint63'intai
a=aint63'intav_iaxehagetasaint63'intai
a=aint63'intao3a+aint63'intaic1
a<aint63'intao3alengthasAa<=c0aint63'intao3
avalid_hex_charagetasaint63'intao3
a=aint63'intav_iiaxehagetasaint63'intao3
ain_boundsa*aint63'intav_ic16
a=aint63'intao4a*aint63'intav_ic16
ain_boundsa+aint63'intao4aint63'intav_ii
a=aint63'intao5a+aint63'intao4aint63'intav_ii
a<aint63'intao5c256Aa<=c0aint63'intao5
a=astrar2aconcatastrar1acontentsachraint63'intao5
ain_boundsa+aint63'intaic2
a=aint63'intai1a+aint63'intaic2
a=amodaint63'intai1c2c0
a=alengthastrar2adivaint63'intai1c2
a<ajadivaint63'intai1c2
a=aastrar2ajachra+a*axehaasa*c2ajc16axehaasa+a*c2ajc1
Na<aint63'intaiaint63'intao2
aencodingastrar1as
iaencodingastrV7V3a=aastrV17V20achra+a*axehaV3a*c2V20c16axehaV3a+a*c2V20c1Ia<V20adivaint63'intV19c2Aa<=c0V20FAa=alengthastrV17adivaint63'intV19c2Aa<=aint63'intV19alengthV3Aa<=c0aint63'intV19Aa=amodaint63'intV19c2c0Aa<a-alengthV3aint63'intV19a-alengthV3aint63'intV8Aa<=c0a-alengthV3aint63'intV8Ia=V19V18FIa=aint63'intV18a+aint63'intV8c2FAain_boundsa+aint63'intV8c2Ia=astrV17aconcatastrV7acontentsachraint63'intV16FAa<aint63'intV16c256Aa<=c0aint63'intV16Ia=aint63'intV16a+aint63'intV15aint63'intV14FAain_boundsa+aint63'intV15aint63'intV14Ia=aint63'intV15a*aint63'intV11c16FAain_boundsa*aint63'intV11c16Ia=aint63'intV14axehV13FAavalid_hex_charV13LagetV3aint63'intV12Aa<aint63'intV12alengthV3Aa<=c0aint63'intV12Ia=aint63'intV12a+aint63'intV8c1FAain_boundsa+aint63'intV8c1Ia=aint63'intV11axehV10FAavalid_hex_charV10LagetV3aint63'intV8Aa<aint63'intV8alengthV3Aa<=c0aint63'intV8a<aint63'intV8aint63'intV9Ia>=alengthV3c0Aa=aint63'intV9alengthV3FIa=aastrV7V21achra+a*axehaV3a*c2V21c16axehaV3a+a*c2V21c1Ia<V21adivaint63'intV8c2Aa<=c0V
VC for decode
aencodingasas1
avalid_hexas1
aencodingas2as1
a=asas2
assertion
a=V3V5IaencodingV5V4FAavalid_hexV4IaencodingV3V4FF
VC for decode_encode

1d869a583a3d1c37175bf1bf5989d980 1H0
8f21b8642a509738103c05e4f69f9153 3H2
8354b1612f919e5fb837a61e3667c2ff 9H10
f65bc76bb48ef5a9ec0b81a9fe17aa48 9H8H5H4
fdd175f3139e9978347f0211de669582 7H6H5H4
5aaacc5b88cd41152186f8346323f3bf 9H8H6H5H4
66d041338e9a069f837c5fd129d68c06 58H67H10
bd521eba88d7b370066530c2134af178 15H14H13H12H11H10
f0c9cb2ca51cac7e5dbfc80b49c70eec 15H16H14H13H12H11H10
705f86fcc619bb8e88bcd00f09b69d67 15H19H18H17H16H14H13H12H11H10
56bd236de7cdf060b90e39dc01173056 15H22H21H17H20H16H14H13H12H11H10
d27d0e0fe13c2de45d74a996c8363c59 31H30H29H12H28H27H26H25H24H23H13H12H11H10
397ea6424d2ff67f71b192d11c1e38b0 34H33H32H29H12H28H27H26H25H24H23H13H12H11H10
81509a56a5c9bdc51d5901c3d77923da 36H35H33H32H29H12H28H27H26H25H24H23H13H12H11H10
6b5fe4eb1066fb392efd9ba60917f19e 31H38H37H32H29H12H28H27H26H25H24H23H13H12H11H10
da7a83d803b685faa286dbbb4e5db7bc 34H33H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
e23aed09c6372a2e60861e71e72f2447 36H40H33H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
e23aed09c6372a2e60861e71e72f2447 36H40H33H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
e23aed09c6372a2e60861e71e72f2447 36H40H33H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
5b6ecc4f19af9943cb75b0c06ca092eb 31H42H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
93748c6a7561cd990ab19cb784878241 36H44H43H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
f15a33eb275ab7891ac69ef868f9e06c 47H46H45H43H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
8154723804614292e8b1d978cdb980f2 49H48H45H43H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
b33359d853098558379c0c578095483d 49H50H48H45H43H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
6db3f7ffaab56336c4fcaecd71730b10 49H52H51H17H50H48H45H43H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
75edb4ec0a22fa1e83a5b7efbfb84e1f 49H55H54H17H53H50H48H45H43H41H39H37H32H29H12H28H27H26H25H24H23H13H12H11H10
b20c9c4a7a5f81a134c9f5adfd9eecb6 66H65H56H12H28H27H26H25H24H23H13H12H11H10
3f1d604e0569640f2a97b8888ba5e3ca 58H64H56H12H28H27H26H25H24H23H13H12H11H10
d2f9fe4cd1543a8716b482ae098748bb 58H57H56H12H28H27H26H25H24H23H13H12H11H10
2a592148482f47787b3fb40ce7f89553 58H61H60H59H57H56H12H28H27H26H25H24H23H13H12H11H10
93be6baed567e5f24d776b27403477e2 58H63H62H57H56H12H28H27H26H25H24H23H13H12H11H10
a4b00b3d942ab6c7bab53873947a444c 102H101H10
52918406f97900f642a72f23535fa0a2 34H69H12H11H68H10
5cca6d8e49a9920b344d6e35bd256ae2 36H70H69H12H11H68H10
8e4d1a3fa690c5b6bf7a26e539583c39 15H72H13H71H12H11H68H10
f9fe92501c9f7aec7111afe9afd1c686 15H14H72H13H71H12H11H68H10
77bf468462b1012b4f9190afa7d71156 15H73H14H72H13H71H12H11H68H10
f1748315b5cb0ad8f65cd40248d7f4e6 15H75H74H17H73H14H72H13H71H12H11H68H10
9da09e804cdece9df712a6e916e690de 31H30H80H12H79H78H77H24H23H76H13H71H12H11H68H10
0be07227f7fc876a2e9c74deb5d3169a 31H81H80H12H79H78H77H24H23H76H13H71H12H11H68H10
56bca26ab1a0f56b05e020a3f5e02dc8 36H44H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
2138a222558c1755a21e417c23e86454 31H84H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
c22e07d900f1545deb70edb5cfe5aacd 31H85H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
265aa01b066e5225c0242d5dc4c6cbc0 36H87H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
73a362b1418d6e3a54eddfbe026e42f9 36H89H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
d93aa43e6483b8eb74035374e0cc3fc6 31H91H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
42dd9ade2a309128d947ab4980219d17 36H93H92H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
0014c8d052215b951efcd9c4d4a59064 47H46H94H92H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
0781edc859658776ecb2636bda1ae9bb 49H95H94H92H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
c2f642c08b2448b26c7e4390b3cd0ef1 49H48H95H94H92H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
0a2109f788ae91d5bc730fe2f726db6f 49H96H48H95H94H92H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
9095e5245d1ac6fc3c4fcc98baa96259 49H98H97H17H96H48H95H94H92H90H88H86H83H82H80H12H79H78H77H24H23H76H13H71H12H11H68H10
7d58cf77c11145c5638eca19d010285f 66H100H99H12H79H78H77H24H23H76H13H71H12H11H68H10
6b925328b35a31854f1dc4e2d978c91b 109H108H10
cf81f43c506492ceac5921c4e94615ad 31H104H103H10
a1ff62a9b5d0551b352a23ca028c50c1 107H106H105H103H10
