{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE RecordWildCards #-}
module Codec.QRCode.Code.Data
( qrSize
, QRInternal
, calcVersionAndErrorLevel
, appendEndAndPadding
, appendErrorCorrection
) where
import Codec.QRCode.Base
import qualified Data.Vector.Unboxed as UV
import Codec.QRCode.Code.ReedSolomonEncoder
import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB
import Codec.QRCode.Data.ErrorLevel
import Codec.QRCode.Data.Mask
import Codec.QRCode.Data.QRCodeOptions
import Codec.QRCode.Data.QRIntermediate.Internal
import Codec.QRCode.Data.QRSegment.Internal
import Codec.QRCode.Data.Result
import Codec.QRCode.Data.Version
qrSize :: Version -> Int
{-# INLINE qrSize #-}
qrSize :: Version -> Int
qrSize Version
ver = Int
17 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Version -> Int
unVersion Version
ver Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
type QRInternal t = (Version, ErrorLevel, t, Maybe Mask)
calcVersionAndErrorLevel :: QRCodeOptions -> QRSegment -> Result QRIntermediate
calcVersionAndErrorLevel :: QRCodeOptions -> QRSegment -> Result QRIntermediate
calcVersionAndErrorLevel QRCodeOptions{Bool
Int
Maybe Mask
ErrorLevel
qroMask :: QRCodeOptions -> Maybe Mask
qroBoostErrorLevel :: QRCodeOptions -> Bool
qroErrorLevel :: QRCodeOptions -> ErrorLevel
qroMaxVersion :: QRCodeOptions -> Int
qroMinVersion :: QRCodeOptions -> Int
qroMask :: Maybe Mask
qroBoostErrorLevel :: Bool
qroErrorLevel :: ErrorLevel
qroMaxVersion :: Int
qroMinVersion :: Int
..} QRSegment
input =
(VersionRange -> Result QRIntermediate)
-> [VersionRange] -> Result QRIntermediate
forall a b. (a -> Result b) -> [a] -> Result b
firstSuccess VersionRange -> Result QRIntermediate
checkSizeVR [Item [VersionRange]
forall a. Bounded a => a
minBound .. Item [VersionRange]
forall a. Bounded a => a
maxBound]
where
checkSizeVR :: VersionRange -> Result QRIntermediate
checkSizeVR :: VersionRange -> Result QRIntermediate
checkSizeVR VersionRange
vr = do
let
versions :: [Version]
versions = VersionRange -> Int -> Int -> [Version]
versionsInRangeLimitedBy VersionRange
vr Int
qroMinVersion Int
qroMaxVersion
Bool -> Result ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> Bool
not ([Version] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Version]
versions))
ByteStreamBuilder
stream <- QRSegment -> VersionRange -> Result ByteStreamBuilder
unQRSegment QRSegment
input VersionRange
vr
Bool -> Result ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> Bool
not (ByteStreamBuilder -> Bool
BSB.null ByteStreamBuilder
stream))
(Version -> Result QRIntermediate)
-> [Version] -> Result QRIntermediate
forall a b. (a -> Result b) -> [a] -> Result b
firstSuccess (ByteStreamBuilder -> Version -> Result QRIntermediate
checkSize ByteStreamBuilder
stream) [Version]
versions
checkSize :: BSB.ByteStreamBuilder -> Version -> Result QRIntermediate
checkSize :: ByteStreamBuilder -> Version -> Result QRIntermediate
checkSize ByteStreamBuilder
bs Version
v = do
let
bsl :: Int
bsl = ByteStreamBuilder -> Int
BSB.length ByteStreamBuilder
bs
ErrorLevel
el <- (ErrorLevel -> Bool) -> [ErrorLevel] -> Result ErrorLevel
forall a. (a -> Bool) -> [a] -> Result a
firstMatch (\ErrorLevel
e -> Int
bsl Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Version -> ErrorLevel -> Int
numDataCodeWords Version
v ErrorLevel
e) [ErrorLevel]
errorLevels
QRIntermediate -> Result QRIntermediate
forall (f :: * -> *) a. Applicative f => a -> f a
pure (QRIntermediate -> Result QRIntermediate)
-> QRIntermediate -> Result QRIntermediate
forall a b. (a -> b) -> a -> b
$
Version
-> ErrorLevel
-> Int
-> ByteStreamBuilder
-> Maybe Mask
-> QRIntermediate
QRIntermediate Version
v ErrorLevel
el Int
bsl ByteStreamBuilder
bs Maybe Mask
qroMask
errorLevels :: [ErrorLevel]
errorLevels :: [ErrorLevel]
errorLevels
| Bool
qroBoostErrorLevel = [Item [ErrorLevel]
ErrorLevel
H, Item [ErrorLevel]
ErrorLevel
Q .. Item [ErrorLevel]
ErrorLevel
qroErrorLevel]
| Bool
otherwise = [Item [ErrorLevel]
ErrorLevel
qroErrorLevel]
firstSuccess :: (a -> Result b) -> [a] -> Result b
firstSuccess :: (a -> Result b) -> [a] -> Result b
firstSuccess a -> Result b
fn = (a -> Result b -> Result b) -> Result b -> [a] -> Result b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Result b -> Result b -> Result b
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>) (Result b -> Result b -> Result b)
-> (a -> Result b) -> a -> Result b -> Result b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Result b
fn) Result b
forall (f :: * -> *) a. Alternative f => f a
empty
firstMatch :: (a -> Bool) -> [a] -> Result a
firstMatch :: (a -> Bool) -> [a] -> Result a
firstMatch a -> Bool
fn = (a -> Result a) -> [a] -> Result a
forall a b. (a -> Result b) -> [a] -> Result b
firstSuccess (\a
e -> Result a -> Result a -> Bool -> Result a
forall a. a -> a -> Bool -> a
bool Result a
forall (f :: * -> *) a. Alternative f => f a
empty (a -> Result a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
e) (a -> Bool
fn a
e))
appendEndAndPadding :: QRIntermediate -> QRInternal BSB.ByteStreamBuilder
appendEndAndPadding :: QRIntermediate -> QRInternal ByteStreamBuilder
appendEndAndPadding (QRIntermediate Version
v ErrorLevel
e Int
bsl ByteStreamBuilder
bs Maybe Mask
mmask) =
let
capacity :: Int
capacity = Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Version -> ErrorLevel -> Int
numDataCodeWords Version
v ErrorLevel
e
endLen :: Int
endLen = Int
4 Int -> Int -> Int
forall a. Ord a => a -> a -> a
`min` (Int
capacity Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
bsl)
pad0Len :: Int
pad0Len = Int -> Int
forall a. Num a => a -> a
negate (Int
bsl Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
endLen) Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod` Int
8
padEC11Len :: Int
padEC11Len = Int
capacity Int -> Int -> Int
forall a. Num a => a -> a -> a
- (Int
bsl Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
endLen Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
pad0Len)
in
(Version
v, ErrorLevel
e, ByteStreamBuilder
bs ByteStreamBuilder -> ByteStreamBuilder -> ByteStreamBuilder
forall a. Semigroup a => a -> a -> a
<> Int -> Int -> ByteStreamBuilder
BSB.encodeBits (Int
endLen Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
pad0Len) Int
0 ByteStreamBuilder -> ByteStreamBuilder -> ByteStreamBuilder
forall a. Semigroup a => a -> a -> a
<> [Word8] -> ByteStreamBuilder
BSB.fromList (Int -> [Word8] -> [Word8]
forall a. Int -> [a] -> [a]
take (Int
padEC11Len Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
8) ([Word8] -> [Word8]
forall a. [a] -> [a]
cycle [Item [Word8]
0xec, Item [Word8]
0x11])), Maybe Mask
mmask)
appendErrorCorrection :: QRInternal BSB.ByteStreamBuilder -> QRInternal [Word8]
appendErrorCorrection :: QRInternal ByteStreamBuilder -> QRInternal [Word8]
appendErrorCorrection (Version
v, ErrorLevel
e, ByteStreamBuilder
bs, Maybe Mask
mmask) =
let
numBlocks :: Int
numBlocks = Version -> ErrorLevel -> Int
numErrorCorrectionBlocks Version
v ErrorLevel
e
blockEccLen :: Int
blockEccLen = Version -> ErrorLevel -> Int
eccCodeWordsPerBlock Version
v ErrorLevel
e
rawCodeWords :: Int
rawCodeWords = Version -> Int
numRawDataModules Version
v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
8
numShortBlocks :: Int
numShortBlocks = Int
numBlocks Int -> Int -> Int
forall a. Num a => a -> a -> a
- (Int
rawCodeWords Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod` Int
numBlocks)
shortBlockLen :: Int
shortBlockLen = Int
rawCodeWords Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
numBlocks
generatorPolynomial :: RsGeneratorPolynomial
generatorPolynomial = Int -> RsGeneratorPolynomial
rsGeneratorPolynomial Int
blockEccLen
dataBlockLens :: [Int]
dataBlockLens = [Int
shortBlockLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
blockEccLen Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int -> Bool -> Int
forall a. a -> a -> Bool -> a
bool Int
0 Int
1 (Int
x Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
numShortBlocks) | Int
x <- [Item [Int]
0 .. Int
numBlocks Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1]]
dataBlocks :: [[Word8]]
dataBlocks = ([Word8], [[Word8]]) -> [[Word8]]
forall a b. (a, b) -> b
snd (([Word8], [[Word8]]) -> [[Word8]])
-> ([Word8], [[Word8]]) -> [[Word8]]
forall a b. (a -> b) -> a -> b
$ ([Word8] -> Int -> ([Word8], [Word8]))
-> [Word8] -> [Int] -> ([Word8], [[Word8]])
forall (t :: * -> *) a b c.
Traversable t =>
(a -> b -> (a, c)) -> a -> t b -> (a, t c)
mapAccumL (\[Word8]
da Int
len -> ([Word8], [Word8]) -> ([Word8], [Word8])
forall a b. (a, b) -> (b, a)
swap (Int -> [Word8] -> ([Word8], [Word8])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
len [Word8]
da)) (ByteStreamBuilder -> [Word8]
BSB.toList ByteStreamBuilder
bs) [Int]
dataBlockLens
eccBlocks :: [[Word8]]
eccBlocks = ([Word8] -> [Word8]) -> [[Word8]] -> [[Word8]]
forall a b. (a -> b) -> [a] -> [b]
map (RsGeneratorPolynomial -> [Word8] -> [Word8]
rsEncode RsGeneratorPolynomial
generatorPolynomial) [[Word8]]
dataBlocks
interleaved :: [[Word8]]
interleaved = [[Word8]] -> [[Word8]]
forall a. [[a]] -> [[a]]
transpose [[Word8]]
dataBlocks [[Word8]] -> [[Word8]] -> [[Word8]]
forall a. [a] -> [a] -> [a]
++ [[Word8]] -> [[Word8]]
forall a. [[a]] -> [[a]]
transpose [[Word8]]
eccBlocks
in
(Version
v, ErrorLevel
e, [[Word8]] -> [Word8]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Word8]]
interleaved, Maybe Mask
mmask)
numDataCodeWords :: Version -> ErrorLevel -> Int
{-# INLINABLE numDataCodeWords #-}
numDataCodeWords :: Version -> ErrorLevel -> Int
numDataCodeWords Version
v ErrorLevel
e =
Version -> Int
numRawDataModules Version
v Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
8
Int -> Int -> Int
forall a. Num a => a -> a -> a
- Version -> ErrorLevel -> Int
eccCodeWordsPerBlock Version
v ErrorLevel
e
Int -> Int -> Int
forall a. Num a => a -> a -> a
* Version -> ErrorLevel -> Int
numErrorCorrectionBlocks Version
v ErrorLevel
e
numRawDataModules :: Version -> Int
numRawDataModules :: Version -> Int
numRawDataModules Version
ver =
let
size :: Int
size = Version -> Int
qrSize Version
ver
v2 :: Int
v2
| Version -> Int
unVersion Version
ver Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
2 = Int
0
| Bool
otherwise =
let
numAlign :: Int
numAlign = Version -> Int
unVersion Version
ver Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
7 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
2
in
- (Int
numAlign Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
numAlign Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
25
Int -> Int -> Int
forall a. Num a => a -> a -> a
- (Int
numAlign Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
2) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
20
v7 :: Int
v7
| Version -> Int
unVersion Version
ver Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
7 = Int
0
| Bool
otherwise = - Int
18 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
in
Int
size Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
size
Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
3
Int -> Int -> Int
forall a. Num a => a -> a -> a
- (Int
15 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
Int -> Int -> Int
forall a. Num a => a -> a -> a
- (Int
size Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
16) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2
Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
v2
Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
v7
eccCodeWordsPerBlock :: Version -> ErrorLevel -> Int
{-# INLINE eccCodeWordsPerBlock #-}
eccCodeWordsPerBlock :: Version -> ErrorLevel -> Int
eccCodeWordsPerBlock Version
v ErrorLevel
e = Vector Int
eccCodeWordsPerBlockData Vector Int -> Int -> Int
forall a. Unbox a => Vector a -> Int -> a
UV.! (ErrorLevel -> Int
forall a. Enum a => a -> Int
fromEnum ErrorLevel
e Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Version -> Int
unVersion Version
v Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
eccCodeWordsPerBlockData :: UV.Vector Int
{-# NOINLINE eccCodeWordsPerBlockData #-}
eccCodeWordsPerBlockData :: Vector Int
eccCodeWordsPerBlockData =
[
Item (Vector Int)
7, Item (Vector Int)
10, Item (Vector Int)
15, Item (Vector Int)
20, Item (Vector Int)
26, Item (Vector Int)
18, Item (Vector Int)
20, Item (Vector Int)
24, Item (Vector Int)
30, Item (Vector Int)
18, Item (Vector Int)
20, Item (Vector Int)
24, Item (Vector Int)
26, Item (Vector Int)
30, Item (Vector Int)
22, Item (Vector Int)
24, Item (Vector Int)
28, Item (Vector Int)
30, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
26, Item (Vector Int)
28, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30,
Item (Vector Int)
10, Item (Vector Int)
16, Item (Vector Int)
26, Item (Vector Int)
18, Item (Vector Int)
24, Item (Vector Int)
16, Item (Vector Int)
18, Item (Vector Int)
22, Item (Vector Int)
22, Item (Vector Int)
26, Item (Vector Int)
30, Item (Vector Int)
22, Item (Vector Int)
22, Item (Vector Int)
24, Item (Vector Int)
24, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
26, Item (Vector Int)
26, Item (Vector Int)
26, Item (Vector Int)
26, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
28,
Item (Vector Int)
13, Item (Vector Int)
22, Item (Vector Int)
18, Item (Vector Int)
26, Item (Vector Int)
18, Item (Vector Int)
24, Item (Vector Int)
18, Item (Vector Int)
22, Item (Vector Int)
20, Item (Vector Int)
24, Item (Vector Int)
28, Item (Vector Int)
26, Item (Vector Int)
24, Item (Vector Int)
20, Item (Vector Int)
30, Item (Vector Int)
24, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
26, Item (Vector Int)
30, Item (Vector Int)
28, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
28, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30,
Item (Vector Int)
17, Item (Vector Int)
28, Item (Vector Int)
22, Item (Vector Int)
16, Item (Vector Int)
22, Item (Vector Int)
28, Item (Vector Int)
26, Item (Vector Int)
26, Item (Vector Int)
24, Item (Vector Int)
28, Item (Vector Int)
24, Item (Vector Int)
28, Item (Vector Int)
22, Item (Vector Int)
24, Item (Vector Int)
24, Item (Vector Int)
30, Item (Vector Int)
28, Item (Vector Int)
28, Item (Vector Int)
26, Item (Vector Int)
28, Item (Vector Int)
30, Item (Vector Int)
24, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30, Item (Vector Int)
30
]
numErrorCorrectionBlocks :: Version -> ErrorLevel -> Int
{-# INLINE numErrorCorrectionBlocks #-}
numErrorCorrectionBlocks :: Version -> ErrorLevel -> Int
numErrorCorrectionBlocks Version
v ErrorLevel
e = Vector Int
numErrorCorrectionBlocksData Vector Int -> Int -> Int
forall a. Unbox a => Vector a -> Int -> a
UV.! (ErrorLevel -> Int
forall a. Enum a => a -> Int
fromEnum ErrorLevel
e Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Version -> Int
unVersion Version
v Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
numErrorCorrectionBlocksData :: UV.Vector Int
{-# NOINLINE numErrorCorrectionBlocksData #-}
numErrorCorrectionBlocksData :: Vector Int
numErrorCorrectionBlocksData =
[
Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
2, Item (Vector Int)
2, Item (Vector Int)
2, Item (Vector Int)
2, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
6, Item (Vector Int)
6, Item (Vector Int)
6, Item (Vector Int)
6, Item (Vector Int)
7, Item (Vector Int)
8, Item (Vector Int)
8, Item (Vector Int)
9, Item (Vector Int)
9, Item (Vector Int)
10, Item (Vector Int)
12, Item (Vector Int)
12, Item (Vector Int)
12, Item (Vector Int)
13, Item (Vector Int)
14, Item (Vector Int)
15, Item (Vector Int)
16, Item (Vector Int)
17, Item (Vector Int)
18, Item (Vector Int)
19, Item (Vector Int)
19, Item (Vector Int)
20, Item (Vector Int)
21, Item (Vector Int)
22, Item (Vector Int)
24, Item (Vector Int)
25,
Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
2, Item (Vector Int)
2, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
5, Item (Vector Int)
5, Item (Vector Int)
5, Item (Vector Int)
8, Item (Vector Int)
9, Item (Vector Int)
9, Item (Vector Int)
10, Item (Vector Int)
10, Item (Vector Int)
11, Item (Vector Int)
13, Item (Vector Int)
14, Item (Vector Int)
16, Item (Vector Int)
17, Item (Vector Int)
17, Item (Vector Int)
18, Item (Vector Int)
20, Item (Vector Int)
21, Item (Vector Int)
23, Item (Vector Int)
25, Item (Vector Int)
26, Item (Vector Int)
28, Item (Vector Int)
29, Item (Vector Int)
31, Item (Vector Int)
33, Item (Vector Int)
35, Item (Vector Int)
37, Item (Vector Int)
38, Item (Vector Int)
40, Item (Vector Int)
43, Item (Vector Int)
45, Item (Vector Int)
47, Item (Vector Int)
49,
Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
2, Item (Vector Int)
2, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
6, Item (Vector Int)
6, Item (Vector Int)
8, Item (Vector Int)
8, Item (Vector Int)
8, Item (Vector Int)
10, Item (Vector Int)
12, Item (Vector Int)
16, Item (Vector Int)
12, Item (Vector Int)
17, Item (Vector Int)
16, Item (Vector Int)
18, Item (Vector Int)
21, Item (Vector Int)
20, Item (Vector Int)
23, Item (Vector Int)
23, Item (Vector Int)
25, Item (Vector Int)
27, Item (Vector Int)
29, Item (Vector Int)
34, Item (Vector Int)
34, Item (Vector Int)
35, Item (Vector Int)
38, Item (Vector Int)
40, Item (Vector Int)
43, Item (Vector Int)
45, Item (Vector Int)
48, Item (Vector Int)
51, Item (Vector Int)
53, Item (Vector Int)
56, Item (Vector Int)
59, Item (Vector Int)
62, Item (Vector Int)
65, Item (Vector Int)
68,
Item (Vector Int)
1, Item (Vector Int)
1, Item (Vector Int)
2, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
4, Item (Vector Int)
5, Item (Vector Int)
6, Item (Vector Int)
8, Item (Vector Int)
8, Item (Vector Int)
11, Item (Vector Int)
11, Item (Vector Int)
16, Item (Vector Int)
16, Item (Vector Int)
18, Item (Vector Int)
16, Item (Vector Int)
19, Item (Vector Int)
21, Item (Vector Int)
25, Item (Vector Int)
25, Item (Vector Int)
25, Item (Vector Int)
34, Item (Vector Int)
30, Item (Vector Int)
32, Item (Vector Int)
35, Item (Vector Int)
37, Item (Vector Int)
40, Item (Vector Int)
42, Item (Vector Int)
45, Item (Vector Int)
48, Item (Vector Int)
51, Item (Vector Int)
54, Item (Vector Int)
57, Item (Vector Int)
60, Item (Vector Int)
63, Item (Vector Int)
66, Item (Vector Int)
70, Item (Vector Int)
74, Item (Vector Int)
77, Item (Vector Int)
81
]