395 lines
20 KiB
Promela
395 lines
20 KiB
Promela
@<EmacsMode "-*- preserves -*-">
|
|
@<Documentation [
|
|
"Individual test cases may be any of the following record types:"
|
|
<TestCaseTypes {
|
|
Test: {fields: [binary annotatedValue] expectations: #{1 2 3 4 5 6 7 8}}
|
|
NondeterministicTest: {fields: [binary annotatedValue] expectations: #{1 2 3 4 5 6 7}}
|
|
ParseError: {fields: [text] expectations: #{20}}
|
|
ParseShort: {fields: [text] expectations: #{21}}
|
|
ParseEOF: {fields: [text] expectations: #{22}}
|
|
DecodeError: {fields: [bytes] expectations: #{30}}
|
|
DecodeShort: {fields: [bytes] expectations: #{31}}
|
|
DecodeEOF: {fields: [bytes] expectations: #{32}}
|
|
}>
|
|
"In each test, let stripped = strip(annotatedValue),"
|
|
" encodeBinary(·) produce canonical ordering and no annotations,"
|
|
" looseEncodeBinary(·) produce any ordering, but with annotations,"
|
|
" annotatedBinary(·) produce canonical ordering, but with annotations,"
|
|
" decodeBinary(·) include annotations,"
|
|
" encodeText(·) include annotations,"
|
|
" decodeText(·) include annotations,"
|
|
"and check the following numbered expectations according to the table above:"
|
|
<TestCaseExpectations {
|
|
1: "decodeBinary(encodeBinary(annotatedValue))) = stripped"
|
|
2: "strip(decodeBinary(binary)) = stripped"
|
|
3: "decodeBinary(binary) = annotatedValue"
|
|
4: "decodeBinary(annotatedBinary(annotatedValue)) = annotatedValue"
|
|
5: "decodeText(encodeText(stripped)) = stripped"
|
|
6: "decodeText(encodeText(annotatedValue)) = annotatedValue"
|
|
7: "annotatedBinary(annotatedValue) = binary"
|
|
8: "looseEncodeBinary(annotatedValue) = binary"
|
|
|
|
20: "decodeText(text) fails with a syntax error (NB. never with EOF)"
|
|
21: "decodeText(text) fails signalling premature EOF after partial parse (NB. never with a syntax error)"
|
|
22: "decodeText(text) fails signalling immediate EOF (NB. never with a syntax error)"
|
|
|
|
30: "decodeBinary(bytes) fails with a syntax error (NB. never with EOF)"
|
|
31: "decodeBinary(bytes) fails signalling premature EOF after partial parse (NB. never with a syntax error)"
|
|
32: "decodeBinary(bytes) fails signalling immediate EOF (NB. never with a syntax error)"
|
|
}>
|
|
"Implementations may vary in their treatment of the difference between expectations"
|
|
"21/22 and 31/32, depending on how they wish to treat end-of-stream conditions."
|
|
]>
|
|
<TestCases {
|
|
annotation1: <Test #x"85 B103616263 B00109" @"abc" 9>
|
|
annotation2: <Test #x"85 B103616263 85 B103646566 B5 B584 85 B10178 B584 84" @"abc" @"def" [[] @"x" []]>
|
|
annotation3: <Test #x"85 85 B00101 B00102 85 85 B00103 B00104 B00105" @@1 2 @@3 4 5>
|
|
annotation4: <NondeterministicTest
|
|
#x"B7 85 B302616b B30161 85 B3026176 B00101 85 B302626b B30162 85 B3026276 B00102 84"
|
|
{@ak a: @av 1 @bk b: @bv 2}>
|
|
annotation5: <Test #x"85 B3026172 B4 B30152 85 B3026166 B30166 84" @ar <R @af f>>
|
|
annotation6: <Test #x"B4 85 B3026172 B30152 85 B3026166 B30166 84" <@ar R @af f>>
|
|
annotation7:
|
|
# Stop reading symbols at @ -- this test has three separate annotations
|
|
<Test #x"85 B30161 85 B30162 85 B30163 B584" @a@b@c[]>
|
|
bytes2: <Test #x"B20568656c6c6f" #"hello">
|
|
bytes2a: <Test @"Internal whitespace is allowed, including commas!" #x"B2, 05, 68, 65, 6c, 6c, 6f" #"hello">
|
|
bytes3: <Test #x"B203414243" #"ABC">
|
|
bytes4: <Test #x"B203414243" #x"414243">
|
|
bytes5: <Test #x"B203414a4e" #x" 41 4A 4e ">
|
|
bytes6: @"Bytes must be 2-digits entire" <ParseError "#x\"414 243\"">
|
|
bytes7: <Test #"\xB2\x06corymb" #[Y29yeW1i]>
|
|
bytes8: <Test #"\xB2\x06corymb" #[Y29 yeW 1i]>
|
|
bytes9: <Test #"\xB2\x02Hi" #[SGk=]>
|
|
bytes10: <Test #"\xB2\x02Hi" #[SGk]>
|
|
bytes11: <Test #"\xB2\x02Hi" #[S G k]>
|
|
bytes12: @"Bytes syntax only supports \\x, not \\u" <ParseError "#\"\\u6c34\"">
|
|
bytes13: <Test #x"B2 11 61 62 63 6c 34 f0 5c 2f 22 08 0c 0a 0d 09 78 79 7a" #"abc\x6c\x34\xf0\\/\"\b\f\n\r\txyz">
|
|
delimiters0: <Test #x"B5808084" [#f #f]>
|
|
delimiters1: @"Note no space between the falses here" <Test #x"B5808084" [#f#f]>
|
|
delimiters2: <Test #x"B580B303666f6f84" [#f foo]>
|
|
delimiters3: @"No space between the #f and the foo" <ParseError "[#ffoo]">
|
|
delimiters4: @"Note no space after the #f" <Test #"\xB5\x80\x85\xB1\x0Ea line comment\x81\x84" [#f# a line comment
|
|
#t]>
|
|
delimiters5: @"Note no space after the #f" <Test #"\xB5\x80\x85\xB3\x03ann\x81\x84" [#f@ann #t]>
|
|
dict0: <Test #x"B784" {}>
|
|
dict1: <NondeterministicTest #x"b7 b10162 81 b30161 b00101 b5b00101b00102b0010384 b20163 b7 b30a66697273742d6e616d65 b109456c697a6162657468 84 b7 b3077375726e616d65 b109426c61636b77656c6c 84 84" { a: 1 "b": #t [1 2 3]: #"c" { first-name: "Elizabeth" }: { surname: "Blackwell" } }>
|
|
dict2: @"Missing close brace" <ParseShort "{ a: b, c: d ">
|
|
dict2a: @"Missing close brace" <ParseShort "{">
|
|
dict3: @"Duplicate key" <ParseError "{ a: 1, a: 2 }">
|
|
dict4: @"Unexpected close brace" <ParseError "}">
|
|
dict5: @"Missing value" <DecodeError #x"b7 b00101 b00102 b00103 84">
|
|
double0: <Test #x"87080000000000000000" 0.0>
|
|
double+0: <Test #x"87080000000000000000" +0.0>
|
|
double-0: <Test #x"87088000000000000000" -0.0>
|
|
double1: <Test #x"87083ff0000000000000" 1.0>
|
|
double2: <Test #x"8708fe3cb7b759bf0426" -1.202e300>
|
|
double3: <Test #x"8708123456789abcdef0" #xd"12 34 56 78 9a bc de f0">
|
|
double4: @"Fewer than 16 digits" <ParseError "#xd\"12345678\"">
|
|
double5: @"More than 16 digits" <ParseError "#xd\"123456789abcdef012\"">
|
|
double6: @"Invalid chars" <ParseError "#xd\"12zz56789abcdef0\"">
|
|
double7: @"Positive infinity" <Test #x"87087ff0000000000000" #xd"7ff0000000000000">
|
|
double8: @"Negative infinity" <Test #x"8708fff0000000000000" #xd"fff0000000000000">
|
|
double9: @"-qNaN" <Test #x"8708fff0000000000001" #xd"fff0000000000001">
|
|
double10: @"-qNaN" <Test #x"8708fff0000000000111" #xd"fff0000000000111">
|
|
double11: @"+qNaN" <Test #x"87087ff0000000000001" #xd"7ff0000000000001">
|
|
double12: @"+qNaN" <Test #x"87087ff0000000000111" #xd"7ff0000000000111">
|
|
double13: @"Bad spacing" <ParseError "#xd\"12345 6789abcdef0\"">
|
|
double14: @"-sNaN" <Test #x"8708fff8000000000001" #xd"fff8000000000001">
|
|
double15: @"-sNaN" <Test #x"8708fff8000000000111" #xd"fff8000000000111">
|
|
double16: @"+sNaN" <Test #x"87087ff8000000000001" #xd"7ff8000000000001">
|
|
double17: @"+sNaN" <Test #x"87087ff8000000000111" #xd"7ff8000000000111">
|
|
float0: <Test #x"870400000000" 0.0f>
|
|
float+0: <Test #x"870400000000" +0.0f>
|
|
float-0: <Test #x"870480000000" -0.0f>
|
|
float1: <Test #x"87043f800000" 1.0f>
|
|
float2: <Test #x"870412345678" #xf"12 34 56 78">
|
|
float3: @"Fewer than 8 digits" <ParseError "#xf\"123456\"">
|
|
float4: @"More than 8 digits" <ParseError "#xf\"123456789a\"">
|
|
float5: @"Invalid chars" <ParseError "#xf\"12zz5678\"">
|
|
float6: @"Positive infinity" <Test #x"87047f800000" #xf"7f800000">
|
|
float7: @"Negative infinity" <Test #x"8704ff800000" #xf"ff800000">
|
|
float8: @"+sNaN" <Test #x"87047f800001" #xf"7f800001">
|
|
float9: @"+sNaN" <Test #x"87047f800111" #xf"7f800111">
|
|
float10: @"-sNaN" <Test #x"8704ff800001" #xf"ff800001">
|
|
float11: @"-sNaN" <Test #x"8704ff800111" #xf"ff800111">
|
|
float12: @"Bad spacing" <ParseError "#xf\"12345 678\"">
|
|
float13: @"+qNaN" <Test #x"87047fc00001" #xf"7fc00001">
|
|
float14: @"+qNaN" <Test #x"87047fc00111" #xf"7fc00111">
|
|
float15: @"-qNaN" <Test #x"8704ffc00001" #xf"ffc00001">
|
|
float16: @"-qNaN" <Test #x"8704ffc00111" #xf"ffc00111">
|
|
int-98765432109876543210987654321098765432109: <Test #x"b012feddc125aed4226c770369269596ce3f0ad3" -98765432109876543210987654321098765432109>
|
|
int-12345678123456781234567812345678: <Test #x"b00eff642cf6684f11d1dad08c4a10b2" -12345678123456781234567812345678>
|
|
int-1234567812345678123456781234567: <Test #x"b00df06ae570d4b4fb62ae746dce79" -1234567812345678123456781234567>
|
|
int-257: <Test #x"b002feff" -257>
|
|
int-256: <Test #x"b002ff00" -256>
|
|
int-255: <Test #x"b002ff01" -255>
|
|
int-254: <Test #x"b002ff02" -254>
|
|
int-129: <Test #x"b002ff7f" -129>
|
|
int-128: <Test #x"b00180" -128>
|
|
int-127: <Test #x"b00181" -127>
|
|
int-4: <Test #x"b001fc" -4>
|
|
int-3: <Test #x"b001fd" -3>
|
|
int-2: <Test #x"b001fe" -2>
|
|
int-1: <Test #x"b001ff" -1>
|
|
int0: <Test #x"b000" 0>
|
|
int+0: <Test #x"b000" +0>
|
|
int-0: <Test #x"b000" -0>
|
|
int1: <Test #x"b00101" 1>
|
|
int12: <Test #x"b0010c" 12>
|
|
int13: <Test #x"b0010d" 13>
|
|
int127: <Test #x"b0017f" 127>
|
|
int+127: <Test #x"b0017f" +127>
|
|
int128: <Test #x"b0020080" 128>
|
|
int255: <Test #x"b00200ff" 255>
|
|
int256: <Test #x"b0020100" 256>
|
|
int32767: <Test #x"b0027fff" 32767>
|
|
int32768: <Test #x"b003008000" 32768>
|
|
int65535: <Test #x"b00300ffff" 65535>
|
|
int65536: <Test #x"b003010000" 65536>
|
|
int131072: <Test #x"b003020000" 131072>
|
|
int2500000000: <Test #x"b005009502f900" 2500000000>
|
|
int1234567812345678123456781234567: <Test #x"b00d0f951a8f2b4b049d518b923187" 1234567812345678123456781234567>
|
|
int12345678123456781234567812345678: <Test #x"b00e009bd30997b0ee2e252f73b5ef4e" 12345678123456781234567812345678>
|
|
int87112285931760246646623899502532662132736: <Test #x"b012010000000000000000000000000000000000" 87112285931760246646623899502532662132736>
|
|
int98765432109876543210987654321098765432109: <Test #x"b01201223eda512bdd9388fc96d96a6931c0f52d" 98765432109876543210987654321098765432109>
|
|
list0: <Test #x"b584" []>
|
|
list4: <Test #x"b5b00101b00102b00103b0010484" [1 2 3 4]>
|
|
list4a: <Test #x"b5b00101b00102b00103b0010484" [1, 2, 3, 4]>
|
|
list5: <Test #x"b5b001feb001ffb000b0010184" [-2 -1 0 1]>
|
|
list6: <Test #x"b5 b10568656c6c6f b3057468657265 b205776f726c64 b584 b684 81 80 84" ["hello" there #"world" [] #{} #t #f]>
|
|
list7: <Test #x"b5 b303616263 b3032e2e2e b303646566 84" [abc ... def]>
|
|
list8: @"Missing close bracket" <ParseShort "[">
|
|
list9: @"Unexpected close bracket" <ParseError "]">
|
|
list10: @"Missing end byte" <DecodeShort #x"b58080">
|
|
list11: <Test #x"b5b0010184" [01]>
|
|
list12: <Test #x"b5b0010c84" [12]>
|
|
noinput0: @"No input at all" <DecodeEOF #x"">
|
|
embed0: <Test #x"86b000" #!0>
|
|
embed1: <Test #x"8686b000" #!#!0>
|
|
embed2: <Test #x"b586b00086b10568656c6c6f84" [#!0 #!"hello"]>
|
|
record1: <Test #x"b4 b30763617074757265 b4 b30764697363617264 84 84" <capture <discard>>>
|
|
record2: <Test #x"b4 b3076f627365727665 b4 b305737065616b b4 b30764697363617264 84 b4 b30763617074757265 b4 b30764697363617264 84 84 84 84" <observe <speak <discard>, <capture <discard>>>>>
|
|
record3: <Test #x"b4 b5 b3067469746c6564 b306706572736f6e b00102 b3057468696e67 b00101 84 b00165 b109426c61636b77656c6c b4 b30464617465 b002071d b00102 b00103 84 b1024472 84" <[titled person 2 thing 1] 101 "Blackwell" <date 1821 2 3> "Dr">>
|
|
record4: <Test #x"b4 b30764697363617264 84" <discard>>
|
|
record5: <Test #x"b4b00107b58484" <7[]>>
|
|
record6: <Test #x"b4b30764697363617264b308737572707269736584" <discard surprise>>
|
|
record7: <Test #x"b4b10761537472696e67b00103b0010484" <"aString" 3 4>>
|
|
record8: <Test #x"b4b4b3076469736361726484b00103b0010484" <<discard> 3 4>>
|
|
record9: @"Missing record label" <ParseError "<>">
|
|
record10: @"Missing close-angle-bracket" <ParseShort "<">
|
|
record11: @"Unexpected close-angle-bracket" <ParseError ">">
|
|
set0: <Test #x"b684" #{}>
|
|
set1: <NondeterministicTest #x"b6b00101b00102b0010384" #{1 2 3}>
|
|
set2: @"Missing close brace" <ParseShort "#{ 1 2 3 ">
|
|
set2a: @"Missing close brace" <ParseShort "#{">
|
|
set3: @"Duplicate value" <ParseError "#{a a}">
|
|
string0: <Test #x"b100" "">
|
|
string3: <Test #x"b10568656c6c6f" "hello">
|
|
string4: <Test #x"b1 14 616263e6b0b4e6b0b45c2f22080c0a0d0978797a" "abc\u6c34\u6C34\\/\"\b\f\n\r\txyz">
|
|
string5: <Test #x"b104f09d849e" "\uD834\uDD1E">
|
|
string6: @"Short unicode escape" <ParseError "\"\\u6c\"">
|
|
string7: @"Short unicode escape" <ParseError "\"\\u6c3\"">
|
|
surrogatepair0str: @"Unmatched high surrogate" <ParseError "\"blah\\uD834\"">
|
|
surrogatepair1str: @"Unmatched low surrogate" <ParseError "\"\\uDD1Eblah\"">
|
|
surrogatepair2str: @"Unmatched high surrogate" <ParseError "\"blah\\uD834blah\"">
|
|
surrogatepair3str: @"Unmatched low surrogate" <ParseError "\"blah\\uDD1Eblah\"">
|
|
surrogatepair4str: @"Swapped surrogates" <ParseError "\"blah\\uDD1E\\uD834blah\"">
|
|
surrogatepair5str: @"Two high surrogates" <ParseError "\"blah\\uD834\\uD834blah\"">
|
|
surrogatepair6str: @"Two low surrogates" <ParseError "\"blah\\uDD1E\\uDD1Eblah\"">
|
|
surrogatepair0sym: @"Unmatched high surrogate" <ParseError "|blah\\uD834|">
|
|
surrogatepair1sym: @"Unmatched low surrogate" <ParseError "|\\uDD1Eblah|">
|
|
surrogatepair2sym: @"Unmatched high surrogate" <ParseError "|blah\\uD834blah|">
|
|
surrogatepair3sym: @"Unmatched low surrogate" <ParseError "|blah\\uDD1Eblah|">
|
|
surrogatepair4sym: @"Swapped surrogates" <ParseError "|blah\\uDD1E\\uD834blah|">
|
|
surrogatepair5sym: @"Two high surrogates" <ParseError "|blah\\uD834\\uD834blah|">
|
|
surrogatepair6sym: @"Two low surrogates" <ParseError "|blah\\uDD1E\\uDD1Eblah|">
|
|
symbol0: <Test #x"b300" ||>
|
|
symbol2: <Test #x"b30568656c6c6f" hello>
|
|
symbol3: <Test #x"b305312d322d33" 1-2-3>
|
|
symbol4: <Test #x"b305612d622d63" a-b-c>
|
|
symbol5: <Test #x"b305612b622b63" a+b+c>
|
|
symbol6: <Test #x"b3012b" +>
|
|
symbol7: <Test #x"b3032b2b2b" +++>
|
|
symbol8: <Test #x"b3012d" ->
|
|
symbol9: <Test #x"b3032d2d2d" --->
|
|
symbol10: <Test #x"b3022d61" -a>
|
|
symbol11: <Test #x"b3042d2d2d61" ---a>
|
|
symbol12: <Test #x"b3042d2d2d31" ---1>
|
|
symbol13: <Test #x"b3042b312e78" +1.x>
|
|
symbol14: <Test #x"b304f09d849e" |\uD834\uDD1E|>
|
|
tag0: @"Unexpected end tag" <DecodeError #x"84">
|
|
tag1: @"Invalid tag" <DecodeError #x"10">
|
|
tag2: @"Invalid tag" <DecodeError #x"61b10110">
|
|
whitespace0: @"Leading spaces have to eventually yield something" <ParseShort " ">
|
|
whitespace1: @"No input at all" <ParseEOF "">
|
|
|
|
longlist14: <Test #x"b5808080808080808080808080808084"
|
|
[#f #f #f #f #f
|
|
#f #f #f #f #f
|
|
#f #f #f #f]>
|
|
longlist15: <Test #x"b580808080808080808080808080808084"
|
|
[#f #f #f #f #f
|
|
#f #f #f #f #f
|
|
#f #f #f #f #f]>
|
|
longlist100:
|
|
<Test #x"b5
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
84"
|
|
[#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f]>
|
|
longlist200:
|
|
<Test #x"b5
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
80808080808080808080
|
|
84"
|
|
[#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f
|
|
#f #f #f #f #f #f #f #f #f #f]>
|
|
|
|
rfc8259-example1: <NondeterministicTest
|
|
#x"B7
|
|
B1 05 496d616765
|
|
B7
|
|
B1 03 494473
|
|
B5
|
|
B0 01 74
|
|
B0 02 03 AF
|
|
B0 02 00 EA
|
|
B0 03 00 97 89
|
|
84
|
|
B1 05 5469746c65
|
|
B1 14 566965772066726f6d203135746820466c6f6f72
|
|
B1 05 5769647468
|
|
B0 02 03 20
|
|
B1 06 486569676874
|
|
B0 02 02 58
|
|
B1 08 416e696d61746564
|
|
B3 05 66616c7365
|
|
B1 09 5468756d626e61696c
|
|
B7
|
|
B1 03 55726c
|
|
B1 26 687474703a2f2f7777772e6578616d706c652e636f6d2f696d6167652f343831393839393433
|
|
B1 05 5769647468
|
|
B0 01 64
|
|
B1 06 486569676874
|
|
B0 01 7D
|
|
84
|
|
84
|
|
84"
|
|
{
|
|
"Image": {
|
|
"Width": 800,
|
|
"Height": 600,
|
|
"Title": "View from 15th Floor",
|
|
"Thumbnail": {
|
|
"Url": "http://www.example.com/image/481989943",
|
|
"Height": 125,
|
|
"Width": 100
|
|
},
|
|
"Animated" : false,
|
|
"IDs": [116, 943, 234, 38793]
|
|
}
|
|
}>
|
|
|
|
rfc8259-example2: <NondeterministicTest
|
|
#x"b5
|
|
b7
|
|
b1 03 5a6970 b1 05 3934313037
|
|
b1 04 43697479 b1 0d 53414e204652414e434953434f
|
|
b1 05 5374617465 b1 02 4341
|
|
b1 07 41646472657373 b1 00
|
|
b1 07 436f756e747279 b1 02 5553
|
|
b1 08 4c61746974756465 8708 4042e226809d4952
|
|
b1 09 4c6f6e676974756465 8708 c05e99566cf41f21
|
|
b1 09 707265636973696f6e b1 03 7a6970
|
|
84
|
|
b7
|
|
b1 03 5a6970 b1 05 3934303835
|
|
b1 04 43697479 b1 09 53554e4e5956414c45
|
|
b1 05 5374617465 b1 02 4341
|
|
b1 07 41646472657373 b1 00
|
|
b1 07 436f756e747279 b1 02 5553
|
|
b1 08 4c61746974756465 8708 4042af9d66adb403
|
|
b1 09 4c6f6e676974756465 8708 c05e81aa4fca42af
|
|
b1 09 707265636973696f6e b1 03 7a6970
|
|
84
|
|
84"
|
|
[
|
|
{
|
|
"precision": "zip",
|
|
"Latitude": 37.7668,
|
|
"Longitude": -122.3959,
|
|
"Address": "",
|
|
"City": "SAN FRANCISCO",
|
|
"State": "CA",
|
|
"Zip": "94107",
|
|
"Country": "US"
|
|
},
|
|
{
|
|
"precision": "zip",
|
|
"Latitude": 37.371991,
|
|
"Longitude": -122.026020,
|
|
"Address": "",
|
|
"City": "SUNNYVALE",
|
|
"State": "CA",
|
|
"Zip": "94085",
|
|
"Country": "US"
|
|
}
|
|
]>
|
|
|
|
}
|
|
>
|