From 8453c83240c48a448579afaeee71782bbac888f1 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 3 Nov 2015 12:02:21 -0500 Subject: [PATCH 001/170] Better documentation. --- README.md | 10 ++++++++++ .../java/me/lemire/integercompression/FastPFOR.java | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b29cd58..2c28848 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,16 @@ We found no library that implemented state-of-the-art integer coding techniques such as Binary Packing, NewPFD, OptPFD, Variable Byte, Simple 9 and so on in Java. We wrote one. +Thread safery +---- + +Some codecs are thread-safe while others are not. +For this reason, it is best to use one codec per thread. +The memory usage of a codec instance is small in any case. + +Nevertheless, if you want to reuse codec instances, +note that by convention, unless the documentation of a codec specify +that it is not thread-safe, then it can be assumed to be thread-safe. Authors ------- diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index 314c9f9..4f0591f 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -20,7 +20,7 @@ * * IntegerCODEC ic = new Composition(new FastPFOR(), new VariableByte()). *

- * For details, please see + * For details, please see: *

* Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second * through vectorization Software: Practice & Experience From 87e3f8f0540acca2d1dc3dbb9095642a44b2004a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 12:34:43 -0500 Subject: [PATCH 002/170] Preparing new release --- CHANGELOG | 3 + README.md | 13 +++- example.java | 15 ++++ .../integercompression/BinaryPacking.java | 22 +++--- .../integercompression/IntCompressor.java | 63 +++++++++++++++ .../differential/IntegratedBinaryPacking.java | 38 ++++----- .../differential/IntegratedIntCompressor.java | 64 +++++++++++++++ .../integercompression/IntCompressorTest.java | 77 +++++++++++++++++++ 8 files changed, 263 insertions(+), 32 deletions(-) create mode 100644 src/main/java/me/lemire/integercompression/IntCompressor.java create mode 100644 src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java create mode 100644 src/test/java/me/lemire/integercompression/IntCompressorTest.java diff --git a/CHANGELOG b/CHANGELOG index 75c5404..dd1a0f9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.1.4 (November 25th 2015) + - Added IntCompressor and IntegratedIntCompressor for users looking for a simpler API + 0.1.3 (June 19th 2015) - Fixed issue #29: Composition not working properly when output offset != 0 (Saúl Vargas) diff --git a/README.md b/README.md index 2c28848..c7949a7 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,16 @@ as well as in GMAP and GSNAP (http://research-pub.gene.com/gmap/). Usage ------ -See example.java. +Really simple usage: + +``` + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] data = ... ; // to be compressed + int[] compressed = iic.compress(data); // compressed array + int[] recov = iic.uncompress(compressed); // equals to data +``` + +For more examples, see example.java. Some CODECs ("integrated codecs") assume that the integers are in sorted orders and use differential coding (they compress deltas). @@ -59,7 +68,7 @@ the following code in your pom.xml file: me.lemire.integercompression JavaFastPFOR - 0.1.3 + [0.1,) diff --git a/example.java b/example.java index b8f039d..fbaa4af 100644 --- a/example.java +++ b/example.java @@ -4,12 +4,25 @@ public class example { public static void main(String[] args) { + superSimpleExample(); unsortedExample(); basicExample(); advancedExample(); headlessDemo(); } + public static void superSimpleExample() { + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] data = new int[2342351]; + for(int k = 0; k < data.length; ++k) + data[k] = k; + System.out.println("Compressing "+data.length+" integers using friendly interface"); + int[] compressed = iic.compress(data); + int[] recov = iic.uncompress(compressed); + System.out.println("compressed from "+data.length*4/1024+"KB to "+compressed.length*4/1024+"KB"); + if(!Arrays.equals(recov,data)) throw new RuntimeException("bug"); + } + public static void basicExample() { int[] data = new int[2342351]; System.out.println("Compressing "+data.length+" integers in one go"); @@ -221,3 +234,5 @@ public static void headlessDemo() { } } + + diff --git a/src/main/java/me/lemire/integercompression/BinaryPacking.java b/src/main/java/me/lemire/integercompression/BinaryPacking.java index 94b4534..8d5ff90 100644 --- a/src/main/java/me/lemire/integercompression/BinaryPacking.java +++ b/src/main/java/me/lemire/integercompression/BinaryPacking.java @@ -57,27 +57,27 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int tmpoutpos = outpos.get(); int s = inpos.get(); for (; s + BLOCK_SIZE * 4 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 4) { - final int mbits1 = Util.maxbits(in, s, 32); - final int mbits2 = Util.maxbits(in, s + 32, 32); - final int mbits3 = Util.maxbits(in, s + 2 * 32, 32); - final int mbits4 = Util.maxbits(in, s + 3 * 32, 32); + final int mbits1 = Util.maxbits(in, s, BLOCK_SIZE); + final int mbits2 = Util.maxbits(in, s + BLOCK_SIZE, BLOCK_SIZE); + final int mbits3 = Util.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits4 = Util.maxbits(in, s + 3 * BLOCK_SIZE, BLOCK_SIZE); out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8) | (mbits4); BitPacking.fastpackwithoutmask(in, s, out, tmpoutpos, mbits1); tmpoutpos += mbits1; - BitPacking.fastpackwithoutmask(in, s + 32, out, + BitPacking.fastpackwithoutmask(in, s + BLOCK_SIZE, out, tmpoutpos, mbits2); tmpoutpos += mbits2; - BitPacking.fastpackwithoutmask(in, s + 2 * 32, out, + BitPacking.fastpackwithoutmask(in, s + 2 * BLOCK_SIZE, out, tmpoutpos, mbits3); tmpoutpos += mbits3; - BitPacking.fastpackwithoutmask(in, s + 3 * 32, out, + BitPacking.fastpackwithoutmask(in, s + 3 * BLOCK_SIZE, out, tmpoutpos, mbits4); tmpoutpos += mbits4; } for (; s < inpos.get() + inlength; s += BLOCK_SIZE ) { - final int mbits = Util.maxbits(in, s, 32); + final int mbits = Util.maxbits(in, s, BLOCK_SIZE); out[tmpoutpos++] = mbits; BitPacking.fastpackwithoutmask(in, s, out, tmpoutpos, mbits); @@ -113,12 +113,12 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, BitPacking.fastunpack(in, tmpinpos, out, s, mbits1); tmpinpos += mbits1; BitPacking - .fastunpack(in, tmpinpos, out, s + 32, mbits2); + .fastunpack(in, tmpinpos, out, s + BLOCK_SIZE, mbits2); tmpinpos += mbits2; - BitPacking.fastunpack(in, tmpinpos, out, s + 2 * 32, + BitPacking.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, mbits3); tmpinpos += mbits3; - BitPacking.fastunpack(in, tmpinpos, out, s + 3 * 32, + BitPacking.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, mbits4); tmpinpos += mbits4; } diff --git a/src/main/java/me/lemire/integercompression/IntCompressor.java b/src/main/java/me/lemire/integercompression/IntCompressor.java new file mode 100644 index 0000000..5f174fd --- /dev/null +++ b/src/main/java/me/lemire/integercompression/IntCompressor.java @@ -0,0 +1,63 @@ +package me.lemire.integercompression; + +import java.util.Arrays; + +/** + * This is a convenience class that wraps a codec to provide + * a "friendly" API. + * + */ +public class IntCompressor { + + + SkippableIntegerCODEC codec; + /** + * Constructor wrapping a codec. + * + * @param c the underlying codec + */ + public IntCompressor(SkippableIntegerCODEC c) { + codec = c; + } + + /** + * Constructor with default codec. + */ + public IntCompressor() { + codec = new SkippableComposition(new BinaryPacking(), + new VariableByte()); + } + + /** + * Compress an array and returns the compressed result as a new array. + * + * @param input array to be compressed + * @return compressed array + */ + public int[] compress(int[] input) { + int [] compressed = new int[input.length+1024]; + compressed[0] = input.length; + IntWrapper outpos = new IntWrapper(1); + codec.headlessCompress(input, new IntWrapper(0), + input.length, compressed, outpos); + compressed = Arrays.copyOf(compressed,outpos.intValue()); + return compressed; + } + + /** + * Uncompress an array and returns the uncompressed result as a new array. + * + * @param compressed compressed array + * @return uncompressed array + */ + public int[] uncompress(int[] compressed) { + int[] decompressed = new int[compressed[0]]; + IntWrapper inpos = new IntWrapper(1); + codec.headlessUncompress(compressed, inpos, + compressed.length - inpos.intValue(), + decompressed, new IntWrapper(0), + decompressed.length); + return decompressed; + } + +} diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java index 6d281c7..0dd2a96 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java @@ -87,34 +87,33 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, initvalue.set(in[inpos.get()+inlength -1]); int s = inpos.get(); for (; s + BLOCK_SIZE * 4 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 4) { - final int mbits1 = Util.maxdiffbits(initoffset, in, s, 32); + final int mbits1 = Util.maxdiffbits(initoffset, in, s, BLOCK_SIZE); int initoffset2 = in[s + 31]; - final int mbits2 = Util.maxdiffbits(initoffset2, in, s + 32, 32); - int initoffset3 = in[s + 32 + 31]; + final int mbits2 = Util.maxdiffbits(initoffset2, in, s + BLOCK_SIZE, BLOCK_SIZE); + int initoffset3 = in[s + BLOCK_SIZE + 31]; final int mbits3 = Util - .maxdiffbits(initoffset3, in, s + 2 * 32, 32); - int initoffset4 = in[s + 2 * 32 + 31]; + .maxdiffbits(initoffset3, in, s + 2 * BLOCK_SIZE, BLOCK_SIZE); + int initoffset4 = in[s + 2 * BLOCK_SIZE + 31]; final int mbits4 = Util - .maxdiffbits(initoffset4, in, s + 3 * 32, 32); + .maxdiffbits(initoffset4, in, s + 3 * BLOCK_SIZE, BLOCK_SIZE); out[tmpoutpos++] = (mbits1 << 24) | (mbits2 << 16) | (mbits3 << 8) | (mbits4); IntegratedBitPacking.integratedpack(initoffset, in, s, out, tmpoutpos, mbits1); tmpoutpos += mbits1; - IntegratedBitPacking.integratedpack(initoffset2, in, s + 32, out, + IntegratedBitPacking.integratedpack(initoffset2, in, s + BLOCK_SIZE, out, tmpoutpos, mbits2); tmpoutpos += mbits2; - IntegratedBitPacking.integratedpack(initoffset3, in, s + 2 * 32, + IntegratedBitPacking.integratedpack(initoffset3, in, s + 2 * BLOCK_SIZE, out, tmpoutpos, mbits3); tmpoutpos += mbits3; - IntegratedBitPacking.integratedpack(initoffset4, in, s + 3 * 32, + IntegratedBitPacking.integratedpack(initoffset4, in, s + 3 * BLOCK_SIZE, out, tmpoutpos, mbits4); tmpoutpos += mbits4; - initoffset = in[s + 3 * 32 + 31]; + initoffset = in[s + 3 * BLOCK_SIZE + 31]; } for (; s < inpos.get() + inlength; s += BLOCK_SIZE ) { - - final int mbits = Util.maxdiffbits(initoffset, in, s, 32); + final int mbits = Util.maxdiffbits(initoffset, in, s, BLOCK_SIZE); out[tmpoutpos++] = mbits; IntegratedBitPacking.integratedpack(initoffset, in, s, out, tmpoutpos, mbits); @@ -128,7 +127,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, @Override public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num, IntWrapper initvalue) { - final int outlength = num; + final int outlength = Util.greatestMultiple(num, BLOCK_SIZE); int tmpinpos = inpos.get(); int initoffset = initvalue.get(); int s = outpos.get(); @@ -137,23 +136,24 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, final int mbits2 = (in[tmpinpos] >>> 16) & 0xFF; final int mbits3 = (in[tmpinpos] >>> 8) & 0xFF; final int mbits4 = (in[tmpinpos]) & 0xFF; + ++tmpinpos; IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos, out, s, mbits1); tmpinpos += mbits1; initoffset = out[s + 31]; IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos, - out, s + 32, mbits2); + out, s + BLOCK_SIZE, mbits2); tmpinpos += mbits2; - initoffset = out[s + 32 + 31]; + initoffset = out[s + BLOCK_SIZE + 31]; IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos, - out, s + 2 * 32, mbits3); + out, s + 2 * BLOCK_SIZE, mbits3); tmpinpos += mbits3; - initoffset = out[s + 2 * 32 + 31]; + initoffset = out[s + 2 * BLOCK_SIZE + 31]; IntegratedBitPacking.integratedunpack(initoffset, in, tmpinpos, - out, s + 3 * 32, mbits4); + out, s + 3 * BLOCK_SIZE, mbits4); tmpinpos += mbits4; - initoffset = out[s + 3 * 32 + 31]; + initoffset = out[s + 3 * BLOCK_SIZE + 31]; } for (; s < outpos.get() + outlength; s += BLOCK_SIZE) { final int mbits = in[tmpinpos]; diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java new file mode 100644 index 0000000..652c018 --- /dev/null +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java @@ -0,0 +1,64 @@ +package me.lemire.integercompression.differential; + +import java.util.Arrays; + +import me.lemire.integercompression.IntWrapper; + +/** + * This is a convenience class that wraps a codec to provide + * a "friendly" API. + * + */ +public class IntegratedIntCompressor { + SkippableIntegratedIntegerCODEC codec; + /** + * Constructor wrapping a codec. + * + * @param c the underlying codec + */ + public IntegratedIntCompressor(SkippableIntegratedIntegerCODEC c) { + codec = c; + } + + /** + * Constructor with default codec. + */ + public IntegratedIntCompressor() { + codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + } + + /** + * Compress an array and returns the compressed result as a new array. + * + * @param input array to be compressed + * @return compressed array + */ + public int[] compress(int[] input) { + int [] compressed = new int[input.length+1024]; + compressed[0] = input.length; + IntWrapper outpos = new IntWrapper(1); + IntWrapper initvalue = new IntWrapper(0); + codec.headlessCompress(input, new IntWrapper(0), + input.length, compressed, outpos, initvalue); + compressed = Arrays.copyOf(compressed,outpos.intValue()); + return compressed; + } + + /** + * Uncompress an array and returns the uncompressed result as a new array. + * + * @param compressed compressed array + * @return uncompressed array + */ + public int[] uncompress(int[] compressed) { + int[] decompressed = new int[compressed[0]]; + IntWrapper inpos = new IntWrapper(1); + codec.headlessUncompress(compressed, inpos, + compressed.length - inpos.intValue(), + decompressed, new IntWrapper(0), + decompressed.length, new IntWrapper(0)); + return decompressed; + } + +} diff --git a/src/test/java/me/lemire/integercompression/IntCompressorTest.java b/src/test/java/me/lemire/integercompression/IntCompressorTest.java new file mode 100644 index 0000000..34b8946 --- /dev/null +++ b/src/test/java/me/lemire/integercompression/IntCompressorTest.java @@ -0,0 +1,77 @@ +package me.lemire.integercompression; + +import java.util.Arrays; + +import org.junit.Assert; +import org.junit.Test; + +import me.lemire.integercompression.differential.IntegratedBinaryPacking; +import me.lemire.integercompression.differential.IntegratedIntCompressor; +import me.lemire.integercompression.differential.IntegratedVariableByte; +import me.lemire.integercompression.differential.SkippableIntegratedComposition; + +/** + * Testing IntCompressor objects. + */ +public class IntCompressorTest { + IntegratedIntCompressor[] iic = { + new IntegratedIntCompressor(new IntegratedVariableByte()), + new IntegratedIntCompressor( + new SkippableIntegratedComposition( + new IntegratedBinaryPacking(), + new IntegratedVariableByte())) }; + IntCompressor[] ic = { + new IntCompressor(new VariableByte()), + new IntCompressor(new SkippableComposition(new BinaryPacking(), + new VariableByte())) }; + + /** + * + */ + @Test + public void basicTest() { + for (int N = 1; N <= 10000; N *= 10) { + int[] orig = new int[N]; + for (int k = 0; k < N; k++) + orig[k] = 3 * k + 5; + for (IntCompressor i : ic) { + int[] comp = i.compress(orig); + int[] back = i.uncompress(comp); + Assert.assertArrayEquals(back, orig); + } + } + + } + /** + * + */ + @Test + public void superSimpleExample() { + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] data = new int[2342351]; + for(int k = 0; k < data.length; ++k) + data[k] = k; + System.out.println("Compressing "+data.length+" integers using friendly interface"); + int[] compressed = iic.compress(data); + int[] recov = iic.uncompress(compressed); + System.out.println("compressed from "+data.length*4/1024+"KB to "+compressed.length*4/1024+"KB"); + if(!Arrays.equals(recov,data)) throw new RuntimeException("bug"); + } + + /** + * + */ + @Test + public void basicIntegratedTest() { + for (int N = 1; N <= 10000; N *= 10) { + int[] orig = new int[N]; + for (int k = 0; k < N; k++) + orig[k] = 3 * k + 5; + for (IntegratedIntCompressor i : iic) { + int[] comp = i.compress(orig); + int[] back = i.uncompress(comp); + Assert.assertArrayEquals(back, orig); + } + } + } +} From e35f26dc754c64350c1dd9ff378e2721bbc01070 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 12:37:01 -0500 Subject: [PATCH 003/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c985d64..5679dd2 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.4-SNAPSHOT + 0.1.4 jar 1.5 From 5ed3c15666569c080d7f2e5a070c3bdc22f3882a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 12:37:05 -0500 Subject: [PATCH 004/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5679dd2..694a2cd 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.4 + 0.1.5-SNAPSHOT jar 1.5 From 7640d1f738313eb85ecbc44cf3ec08c80a7f39e9 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:42:19 -0500 Subject: [PATCH 005/170] Rolling back. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 694a2cd..5679dd2 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.5-SNAPSHOT + 0.1.4 jar 1.5 From 9f03767a56ad29685247518202d984f8e87127c8 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:43:15 -0500 Subject: [PATCH 006/170] Moving to snapshot --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5679dd2..c985d64 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.4 + 0.1.4-SNAPSHOT jar 1.5 From 87b422bd2b44dda978f16b322ea02ed2b8ac273a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:44:03 -0500 Subject: [PATCH 007/170] Going back to 0.1.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c985d64..694a2cd 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.4-SNAPSHOT + 0.1.5-SNAPSHOT jar 1.5 From 1c59411ccec7178f05a132c18485eca07361951c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:45:23 -0500 Subject: [PATCH 008/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 694a2cd..ad676fe 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.5-SNAPSHOT + 0.1.5 jar 1.5 From a2b1215eb086c76494a8b8da6e13c800cd9df32c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:45:26 -0500 Subject: [PATCH 009/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ad676fe..bd0eb6d 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.5 + 0.1.6-SNAPSHOT jar 1.5 From 9c48361422ad45adb5e21175947588e081a8b90f Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:54:20 -0500 Subject: [PATCH 010/170] Version 0.1.4 and 0.1.5 have been borked by sonatype timeouts. --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index dd1a0f9..660b5bf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,4 @@ -0.1.4 (November 25th 2015) +0.1.4, 0.1.5, 0.1.6 (November 25th 2015) - Added IntCompressor and IntegratedIntCompressor for users looking for a simpler API 0.1.3 (June 19th 2015) From a8b40cf63b838a0b2cd1dee624422a810cb8b4e8 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:56:13 -0500 Subject: [PATCH 011/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.6 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bd0eb6d..1fb6796 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.6-SNAPSHOT + 0.1.6 jar 1.5 From f324712062de23beea39c85a4cda44ce6a80d711 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Nov 2015 16:56:16 -0500 Subject: [PATCH 012/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1fb6796..13043b9 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.6 + 0.1.7-SNAPSHOT jar 1.5 From abf841074caec7cbe277581d66800681bad382d0 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 9 Dec 2015 13:38:57 -0500 Subject: [PATCH 013/170] Flushing out description. --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c7949a7..cde8ffe 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,17 @@ What does this do? It is a library to compress and uncompress arrays of integers very fast. The assumption is that most (but not all) values in -your array use less than 32 bits. These sort of arrays often come up +your array use much less than 32 bits, or that the gaps between +the integers use much less than 32 bits. These sort of arrays often come up when using differential coding in databases and information retrieval (e.g., in inverted indexes or column stores). -It can decompress integers at a rate of over 1.2 billions per second +Please note that random integers are not compressible, by this +library or by any other means. If you ever had the means of +systematically compressing random integers, you could compress +any data source to nothing, by recursive application of your technique. + +This library can decompress integers at a rate of over 1.2 billions per second (4.5 GB/s). It is significantly faster than generic codecs (such as Snappy, LZ4 and so on) when compressing arrays of integers. From cc01ef75ac60c8df19766d7fe2c2143c6f8a17b0 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 11 Dec 2015 10:17:12 -0500 Subject: [PATCH 014/170] Link to TurboPFor --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index cde8ffe..24758f4 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ Reference: http://sna-projects.com/kamikaze/ + Requirements ------------ @@ -198,6 +199,12 @@ http://lemire.me/fr/documents/thesis/IkhtearThesis.pdf He also posted his slides online: http://www.slideshare.net/ikhtearSharif/ikhtear-defense +Other recommended libraries +----------------------------- + +TurboPFor is a C library that offers lots of interesting optimizations and Java wrappers. Well worth checking! + +https://github.com/powturbo/TurboPFor Funding ----------- From df9a9f6e4a7865fc4838705f9cfdc41890310dc6 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Thu, 28 Jan 2016 10:21:21 -0500 Subject: [PATCH 015/170] Updating documentation link --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 24758f4..a01acbb 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ For more examples, see example.java. Some CODECs ("integrated codecs") assume that the integers are in sorted orders and use differential coding (they compress deltas). -They can be found in the package me.lemire.integercopression.differential. +They can be found in the package me.lemire.integercompression.differential. Most others do not. @@ -174,7 +174,7 @@ or: API Documentation ----------------- -http://lemire.me/docs/javafastpfor/ +http://www.javadoc.io/doc/me.lemire.integercompression/JavaFastPFOR/ Want to read more? ------------------ @@ -219,4 +219,4 @@ This work was supported by NSERC grant number 26143. [license img]:https://img.shields.io/badge/License-Apache%202-blue.svg [docs-badge]:https://img.shields.io/badge/API-docs-blue.svg?style=flat-square -[docs]:http://lemire.me/docs/javafastpfor/ +[docs]:http://www.javadoc.io/doc/me.lemire.integercompression/JavaFastPFOR/ From fea4fa962b1c516618804744908f2d18224bf0b6 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 29 Jan 2016 11:14:15 -0500 Subject: [PATCH 016/170] Trying to enable coverage tool. --- .travis.yml | 3 +++ pom.xml | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index a159cc4..b57c4bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,3 +8,6 @@ jdk: install: true script: mvn test + +after_success: + - mvn coveralls:report diff --git a/pom.xml b/pom.xml index 13043b9..9ebdbe5 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,11 @@ + + org.eluder.coveralls + coveralls-maven-plugin + 3.1.0 + JavaFastPFOR From 46926976dc66fe0c60e55ca53bc118d8e22f1a54 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 29 Jan 2016 11:25:58 -0500 Subject: [PATCH 017/170] Enabling coverage testing. --- .travis.yml | 2 +- pom.xml | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b57c4bc..94ea1da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ jdk: install: true -script: mvn test +script: mvn clean test jacoco:report after_success: - mvn coveralls:report diff --git a/pom.xml b/pom.xml index 9ebdbe5..c4afee9 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,19 @@ + + org.jacoco + jacoco-maven-plugin + 0.7.2.201409121644 + + + prepare-agent + + prepare-agent + + + + org.eluder.coveralls coveralls-maven-plugin From 808f0c857e18cbb5d6b8170f4ef20b834909db59 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 29 Jan 2016 11:33:02 -0500 Subject: [PATCH 018/170] Updating JDKs. --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 94ea1da..49ed971 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,7 @@ language: java jdk: - oraclejdk7 - - openjdk7 - - openjdk6 + - oraclejdk8 install: true From b1188d66ffe585323e7817d8daff78c324e9d53a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 29 Jan 2016 11:38:01 -0500 Subject: [PATCH 019/170] Adding coverage status badge. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a01acbb..78d5e89 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ JavaFastPFOR: A simple integer compression library in Java ========================================================== [![Build Status](https://travis-ci.org/lemire/JavaFastPFOR.png)](https://travis-ci.org/lemire/JavaFastPFOR) [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] +[![Coverage Status](https://coveralls.io/repos/github/lemire/JavaFastPFOR/badge.svg?branch=master)](https://coveralls.io/github/lemire/JavaFastPFOR?branch=master) License ------- From a95b459ed4b62b1824e72bc8bd5c2de2bbe959f0 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sat, 12 Mar 2016 18:12:46 -0500 Subject: [PATCH 020/170] Adding an example to answer https://github.com/lemire/JavaFastPFOR/issues/35 --- example.java | 171 +++++++--- .../integercompression/ExampleTest.java | 314 ++++++++++++++++++ 2 files changed, 433 insertions(+), 52 deletions(-) create mode 100644 src/test/java/me/lemire/integercompression/ExampleTest.java diff --git a/example.java b/example.java index fbaa4af..6f421ed 100644 --- a/example.java +++ b/example.java @@ -7,6 +7,7 @@ public static void main(String[] args) { superSimpleExample(); unsortedExample(); basicExample(); + basicExampleHeadless(); advancedExample(); headlessDemo(); } @@ -15,12 +16,12 @@ public static void superSimpleExample() { IntegratedIntCompressor iic = new IntegratedIntCompressor(); int[] data = new int[2342351]; for(int k = 0; k < data.length; ++k) - data[k] = k; + data[k] = k; System.out.println("Compressing "+data.length+" integers using friendly interface"); - int[] compressed = iic.compress(data); + int[] compressed = iic.compress(data); int[] recov = iic.uncompress(compressed); System.out.println("compressed from "+data.length*4/1024+"KB to "+compressed.length*4/1024+"KB"); - if(!Arrays.equals(recov,data)) throw new RuntimeException("bug"); + if(!Arrays.equals(recov,data)) throw new RuntimeException("bug"); } public static void basicExample() { @@ -29,7 +30,7 @@ public static void basicExample() { // data should be sorted for best //results for(int k = 0; k < data.length; ++k) - data[k] = k; + data[k] = k; // Very important: the data is in sorted order!!! If not, you // will get very poor compression with IntegratedBinaryPacking, // you should use another CODEC. @@ -38,9 +39,9 @@ public static void basicExample() { // will be done with binary packing, and leftovers will // be processed using variable byte IntegratedIntegerCODEC codec = new - IntegratedComposition( - new IntegratedBinaryPacking(), - new IntegratedVariableByte()); + IntegratedComposition( + new IntegratedBinaryPacking(), + new IntegratedVariableByte()); // output vector should be large enough... int [] compressed = new int[data.length+1024]; // compressed might not be large enough in some cases @@ -66,17 +67,85 @@ public static void basicExample() { * * now uncompressing * + * This assumes that we otherwise know how many integers + * have been compressed, or we can bound it (e.g., you know that + * will never need to decore more than 2000 integers). + * See basicExampleHeadless for a + * more general case where you can manually manage the compressed + * array size. */ int[] recovered = new int[data.length]; IntWrapper recoffset = new IntWrapper(0); codec.uncompress(compressed,new IntWrapper(0),compressed.length,recovered,recoffset); if(Arrays.equals(data,recovered)) - System.out.println("data is recovered without loss"); + System.out.println("data is recovered without loss"); else - throw new RuntimeException("bug"); // could use assert + throw new RuntimeException("bug"); // could use assert System.out.println(); } + + /** + * Like the basicExample, but we store the input array size manually. + */ + @Test + public void basicExampleHeadless() { + int[] data = new int[2342351]; + System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // Very important: the data is in sorted order!!! If not, you + // will get very poor compression with IntegratedBinaryPacking, + // you should use another CODEC. + + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte + SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + // output vector should be large enough... + int[] compressed = new int[data.length + 1024]; + // compressed might not be large enough in some cases + // if you get java.lang.ArrayIndexOutOfBoundsException, try + // allocating more memory + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(1); + compressed[0] = data.length; // we manually store how many integers we + codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + */ + int howmany = compressed[0];// we manually stored the number of + // compressed integers + int[] recovered = new int[howmany]; + IntWrapper recoffset = new IntWrapper(0); + codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0)); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + } + + /** * This is an example to show you can compress unsorted integers * as long as most are small. @@ -91,9 +160,9 @@ public static void unsortedExample() { for(int k = 0; k < N; k+=533) data[k] = 10000; int[] compressed = new int [N+1024];// could need more IntegerCODEC codec = new - Composition( - new FastPFOR(), - new VariableByte()); + Composition( + new FastPFOR(), + new VariableByte()); // compressing IntWrapper inputoffset = new IntWrapper(0); IntWrapper outputoffset = new IntWrapper(0); @@ -106,9 +175,9 @@ public static void unsortedExample() { IntWrapper recoffset = new IntWrapper(0); codec.uncompress(compressed,new IntWrapper(0),compressed.length,recovered,recoffset); if(Arrays.equals(data,recovered)) - System.out.println("data is recovered without loss"); + System.out.println("data is recovered without loss"); else - throw new RuntimeException("bug"); // could use assert + throw new RuntimeException("bug"); // could use assert System.out.println(); } @@ -128,16 +197,16 @@ public static void advancedExample() { // data should be sorted for best //results for(int k = 0; k < data.length; ++k) - data[k] = k; + data[k] = k; // next we compose a CODEC. Most of the processing // will be done with binary packing, and leftovers will // be processed using variable byte, using variable byte // only for the last chunk! IntegratedIntegerCODEC regularcodec = new - IntegratedBinaryPacking(); + IntegratedBinaryPacking(); IntegratedVariableByte ivb = new IntegratedVariableByte(); IntegratedIntegerCODEC lastcodec = new - IntegratedComposition(regularcodec,ivb); + IntegratedComposition(regularcodec,ivb); // output vector should be large enough... int [] compressed = new int[TotalSize+1024]; @@ -151,7 +220,7 @@ public static void advancedExample() { IntWrapper outputoffset = new IntWrapper(0); for(int k = 0; k < TotalSize / ChunkSize; ++k) regularcodec.compress(data,inputoffset,ChunkSize,compressed,outputoffset); - lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset); + lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset); // got it! // inputoffset should be at data.length but outputoffset tells // us where we are... @@ -191,48 +260,46 @@ public static void advancedExample() { } - /* - * Demo of the headless approach where we must supply the array length - */ - public static void headlessDemo() { - System.out.println("Compressing arrays with minimal header..."); - int[] uncompressed1 = {1,2,1,3,1}; - int[] uncompressed2 = {3,2,4,6,1}; + /* + * Demo of the headless approach where we must supply the array length + */ + public static void headlessDemo() { + System.out.println("Compressing arrays with minimal header..."); + int[] uncompressed1 = {1,2,1,3,1}; + int[] uncompressed2 = {3,2,4,6,1}; - int[] compressed = new int[uncompressed1.length+uncompressed2.length+1024]; + int[] compressed = new int[uncompressed1.length+uncompressed2.length+1024]; - SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); - // compressing - IntWrapper outPos = new IntWrapper(); + // compressing + IntWrapper outPos = new IntWrapper(); - IntWrapper previous = new IntWrapper(); + IntWrapper previous = new IntWrapper(); - codec.headlessCompress(uncompressed1,new IntWrapper(),uncompressed1.length,compressed,outPos); - int length1 = outPos.get() - previous.get(); - previous = new IntWrapper(outPos.get()); - codec.headlessCompress(uncompressed2,new IntWrapper(),uncompressed2.length,compressed,outPos); - int length2 = outPos.get() - previous.get(); + codec.headlessCompress(uncompressed1,new IntWrapper(),uncompressed1.length,compressed,outPos); + int length1 = outPos.get() - previous.get(); + previous = new IntWrapper(outPos.get()); + codec.headlessCompress(uncompressed2,new IntWrapper(),uncompressed2.length,compressed,outPos); + int length2 = outPos.get() - previous.get(); - compressed = Arrays.copyOf(compressed,length1 + length2); - System.out.println("compressed unsorted integers from "+uncompressed1.length*4+"B to "+length1*4+"B"); - System.out.println("compressed unsorted integers from "+uncompressed2.length*4+"B to "+length2*4+"B"); - System.out.println("Total compressed output "+compressed.length); + compressed = Arrays.copyOf(compressed,length1 + length2); + System.out.println("compressed unsorted integers from "+uncompressed1.length*4+"B to "+length1*4+"B"); + System.out.println("compressed unsorted integers from "+uncompressed2.length*4+"B to "+length2*4+"B"); + System.out.println("Total compressed output "+compressed.length); - int[] recovered1 = new int[uncompressed1.length]; - int[] recovered2 = new int[uncompressed1.length]; - IntWrapper inPos = new IntWrapper(); - System.out.println("Decoding first array starting at pos = "+inPos); - codec.headlessUncompress(compressed,inPos, compressed.length, recovered1, new IntWrapper(0), uncompressed1.length); - System.out.println("Decoding second array starting at pos = "+inPos); - codec.headlessUncompress(compressed,inPos, compressed.length, recovered2, new IntWrapper(0), uncompressed2.length); - if(!Arrays.equals(uncompressed1,recovered1)) throw new RuntimeException("First array does not match."); - if(!Arrays.equals(uncompressed2,recovered2)) throw new RuntimeException("Second array does not match."); - System.out.println("The arrays match, your code is probably ok."); + int[] recovered1 = new int[uncompressed1.length]; + int[] recovered2 = new int[uncompressed1.length]; + IntWrapper inPos = new IntWrapper(); + System.out.println("Decoding first array starting at pos = "+inPos); + codec.headlessUncompress(compressed,inPos, compressed.length, recovered1, new IntWrapper(0), uncompressed1.length); + System.out.println("Decoding second array starting at pos = "+inPos); + codec.headlessUncompress(compressed,inPos, compressed.length, recovered2, new IntWrapper(0), uncompressed2.length); + if(!Arrays.equals(uncompressed1,recovered1)) throw new RuntimeException("First array does not match."); + if(!Arrays.equals(uncompressed2,recovered2)) throw new RuntimeException("Second array does not match."); + System.out.println("The arrays match, your code is probably ok."); - } + } } - - diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java new file mode 100644 index 0000000..300983c --- /dev/null +++ b/src/test/java/me/lemire/integercompression/ExampleTest.java @@ -0,0 +1,314 @@ +package me.lemire.integercompression; + +import me.lemire.integercompression.differential.*; +import java.util.*; + +import org.junit.Test; + +/** + * + * + */ +public class ExampleTest { + /** + * + */ + @Test + + public void superSimpleExample() { + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] data = new int[2342351]; + for (int k = 0; k < data.length; ++k) + data[k] = k; + System.out.println("Compressing " + data.length + " integers using friendly interface"); + int[] compressed = iic.compress(data); + int[] recov = iic.uncompress(compressed); + System.out + .println("compressed from " + data.length * 4 / 1024 + "KB to " + compressed.length * 4 / 1024 + "KB"); + if (!Arrays.equals(recov, data)) + throw new RuntimeException("bug"); + } + + /** + * + */ + @Test + + public void basicExample() { + int[] data = new int[2342351]; + System.out.println("Compressing " + data.length + " integers in one go"); + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // Very important: the data is in sorted order!!! If not, you + // will get very poor compression with IntegratedBinaryPacking, + // you should use another CODEC. + + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte + IntegratedIntegerCODEC codec = new IntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + // output vector should be large enough... + int[] compressed = new int[data.length + 1024]; + // compressed might not be large enough in some cases + // if you get java.lang.ArrayIndexOutOfBoundsException, try + // allocating more memory + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + * This assumes that we otherwise know how many integers have been + * compressed. See basicExampleHeadless for a more general case. + */ + int[] recovered = new int[data.length]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + } + + /** + * Like the basicExample, but we store the input array size manually. + */ + @Test + public void basicExampleHeadless() { + int[] data = new int[2342351]; + System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // Very important: the data is in sorted order!!! If not, you + // will get very poor compression with IntegratedBinaryPacking, + // you should use another CODEC. + + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte + SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + // output vector should be large enough... + int[] compressed = new int[data.length + 1024]; + // compressed might not be large enough in some cases + // if you get java.lang.ArrayIndexOutOfBoundsException, try + // allocating more memory + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(1); + compressed[0] = data.length; // we manually store how many integers we + codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + */ + int howmany = compressed[0];// we manually stored the number of + // compressed integers + int[] recovered = new int[howmany]; + IntWrapper recoffset = new IntWrapper(0); + codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0)); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + } + + /** + * This is an example to show you can compress unsorted integers as long as + * most are small. + */ + @Test + public void unsortedExample() { + final int N = 1333333; + int[] data = new int[N]; + // initialize the data (most will be small + for (int k = 0; k < N; k += 1) + data[k] = 3; + // throw some larger values + for (int k = 0; k < N; k += 5) + data[k] = 100; + for (int k = 0; k < N; k += 533) + data[k] = 10000; + int[] compressed = new int[N + 1024];// could need more + IntegerCODEC codec = new Composition(new FastPFOR(), new VariableByte()); + // compressing + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + System.out.println("compressed unsorted integers from " + data.length * 4 / 1024 + "KB to " + + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + int[] recovered = new int[N]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + + } + + /** + * This is like the basic example, but we show how to process larger arrays + * in chunks. + * + * Some of this code was written by Pavel Klinov. + */ + @Test + public void advancedExample() { + int TotalSize = 2342351; // some arbitrary number + int ChunkSize = 16384; // size of each chunk, choose a multiple of 128 + System.out.println("Compressing " + TotalSize + " integers using chunks of " + ChunkSize + " integers (" + + ChunkSize * 4 / 1024 + "KB)"); + System.out.println("(It is often better for applications to work in chunks fitting in CPU cache.)"); + int[] data = new int[TotalSize]; + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte, using variable byte + // only for the last chunk! + IntegratedIntegerCODEC regularcodec = new IntegratedBinaryPacking(); + IntegratedVariableByte ivb = new IntegratedVariableByte(); + IntegratedIntegerCODEC lastcodec = new IntegratedComposition(regularcodec, ivb); + // output vector should be large enough... + int[] compressed = new int[TotalSize + 1024]; + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + for (int k = 0; k < TotalSize / ChunkSize; ++k) + regularcodec.compress(data, inputoffset, ChunkSize, compressed, outputoffset); + lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + * We are *not* assuming that the original array length is known, + * however we assume that the chunk size (ChunkSize) is known. + * + */ + int[] recovered = new int[ChunkSize]; + IntWrapper compoff = new IntWrapper(0); + IntWrapper recoffset; + int currentpos = 0; + + while (compoff.get() < compressed.length) { + recoffset = new IntWrapper(0); + regularcodec.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset); + + if (recoffset.get() < ChunkSize) {// last chunk detected + ivb.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset); + } + for (int i = 0; i < recoffset.get(); ++i) { + if (data[currentpos + i] != recovered[i]) + throw new RuntimeException("bug"); // could use assert + } + currentpos += recoffset.get(); + } + System.out.println("data is recovered without loss"); + System.out.println(); + + } + + /** + * Demo of the headless approach where we must supply the array length + */ + @Test + public void headlessDemo() { + System.out.println("Compressing arrays with minimal header..."); + int[] uncompressed1 = { 1, 2, 1, 3, 1 }; + int[] uncompressed2 = { 3, 2, 4, 6, 1 }; + + int[] compressed = new int[uncompressed1.length + uncompressed2.length + 1024]; + + SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + + // compressing + IntWrapper outPos = new IntWrapper(); + + IntWrapper previous = new IntWrapper(); + + codec.headlessCompress(uncompressed1, new IntWrapper(), uncompressed1.length, compressed, outPos); + int length1 = outPos.get() - previous.get(); + previous = new IntWrapper(outPos.get()); + codec.headlessCompress(uncompressed2, new IntWrapper(), uncompressed2.length, compressed, outPos); + int length2 = outPos.get() - previous.get(); + + compressed = Arrays.copyOf(compressed, length1 + length2); + System.out + .println("compressed unsorted integers from " + uncompressed1.length * 4 + "B to " + length1 * 4 + "B"); + System.out + .println("compressed unsorted integers from " + uncompressed2.length * 4 + "B to " + length2 * 4 + "B"); + System.out.println("Total compressed output " + compressed.length); + + int[] recovered1 = new int[uncompressed1.length]; + int[] recovered2 = new int[uncompressed1.length]; + IntWrapper inPos = new IntWrapper(); + System.out.println("Decoding first array starting at pos = " + inPos); + codec.headlessUncompress(compressed, inPos, compressed.length, recovered1, new IntWrapper(0), + uncompressed1.length); + System.out.println("Decoding second array starting at pos = " + inPos); + codec.headlessUncompress(compressed, inPos, compressed.length, recovered2, new IntWrapper(0), + uncompressed2.length); + if (!Arrays.equals(uncompressed1, recovered1)) + throw new RuntimeException("First array does not match."); + if (!Arrays.equals(uncompressed2, recovered2)) + throw new RuntimeException("Second array does not match."); + System.out.println("The arrays match, your code is probably ok."); + + } +} From ce4bde3f032cdf1f6eacd0f901f82750de231609 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sat, 12 Mar 2016 18:13:56 -0500 Subject: [PATCH 021/170] Reformat --- example.java | 116 +++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/example.java b/example.java index 6f421ed..6569ebd 100644 --- a/example.java +++ b/example.java @@ -86,64 +86,64 @@ public static void basicExample() { /** - * Like the basicExample, but we store the input array size manually. - */ - @Test - public void basicExampleHeadless() { - int[] data = new int[2342351]; - System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); - // data should be sorted for best - // results - for (int k = 0; k < data.length; ++k) - data[k] = k; - // Very important: the data is in sorted order!!! If not, you - // will get very poor compression with IntegratedBinaryPacking, - // you should use another CODEC. - - // next we compose a CODEC. Most of the processing - // will be done with binary packing, and leftovers will - // be processed using variable byte - SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), - new IntegratedVariableByte()); - // output vector should be large enough... - int[] compressed = new int[data.length + 1024]; - // compressed might not be large enough in some cases - // if you get java.lang.ArrayIndexOutOfBoundsException, try - // allocating more memory - - /** - * - * compressing - * - */ - IntWrapper inputoffset = new IntWrapper(0); - IntWrapper outputoffset = new IntWrapper(1); - compressed[0] = data.length; // we manually store how many integers we - codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); - // got it! - // inputoffset should be at data.length but outputoffset tells - // us where we are... - System.out.println( - "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); - // we can repack the data: (optional) - compressed = Arrays.copyOf(compressed, outputoffset.intValue()); - - /** - * - * now uncompressing - * - */ - int howmany = compressed[0];// we manually stored the number of - // compressed integers - int[] recovered = new int[howmany]; - IntWrapper recoffset = new IntWrapper(0); - codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0)); - if (Arrays.equals(data, recovered)) - System.out.println("data is recovered without loss"); - else - throw new RuntimeException("bug"); // could use assert - System.out.println(); - } + * Like the basicExample, but we store the input array size manually. + */ + @Test + public void basicExampleHeadless() { + int[] data = new int[2342351]; + System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // Very important: the data is in sorted order!!! If not, you + // will get very poor compression with IntegratedBinaryPacking, + // you should use another CODEC. + + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte + SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + // output vector should be large enough... + int[] compressed = new int[data.length + 1024]; + // compressed might not be large enough in some cases + // if you get java.lang.ArrayIndexOutOfBoundsException, try + // allocating more memory + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(1); + compressed[0] = data.length; // we manually store how many integers we + codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + */ + int howmany = compressed[0];// we manually stored the number of + // compressed integers + int[] recovered = new int[howmany]; + IntWrapper recoffset = new IntWrapper(0); + codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0)); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + } /** From 16caafa7c8cd3687b9842a27f70e2c3baea4f35e Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Thu, 7 Apr 2016 18:58:19 -0400 Subject: [PATCH 022/170] Adding an example. --- README.md | 2 +- examples/Axelbrooke/CompressBitmap.java | 97 ++++++++++++++++++++++++ examples/Axelbrooke/README.md | 0 examples/Axelbrooke/example_bitmap.bin | Bin 0 -> 2961813 bytes examples/Axelbrooke/run.sh | 3 + 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 examples/Axelbrooke/CompressBitmap.java create mode 100644 examples/Axelbrooke/README.md create mode 100644 examples/Axelbrooke/example_bitmap.bin create mode 100755 examples/Axelbrooke/run.sh diff --git a/README.md b/README.md index 78d5e89..b15ef84 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Really simple usage: int[] recov = iic.uncompress(compressed); // equals to data ``` -For more examples, see example.java. +For more examples, see example.java or the examples folder. Some CODECs ("integrated codecs") assume that the integers are in sorted orders and use differential coding (they compress deltas). diff --git a/examples/Axelbrooke/CompressBitmap.java b/examples/Axelbrooke/CompressBitmap.java new file mode 100644 index 0000000..c641c65 --- /dev/null +++ b/examples/Axelbrooke/CompressBitmap.java @@ -0,0 +1,97 @@ +import java.io.*; +import java.nio.file.*; +import java.util.*; +import java.util.zip.*; + +import me.lemire.integercompression.differential.*; +import me.lemire.integercompression.*; + + +public class CompressBitmap { + + public static void main(String[] args) throws IOException { + if(args.length == 0) { + System.out.println("usage: please provide the file name of a bitmap binary file."); + return; + } + System.out.println("loading file "+args[0]+" as a bitmap"); + int[] data = fromBitsetFileToArray(args[0]); + System.out.println("Compressing "+data.length+" integers"); + int[] compressed = iic.compress(data); + int[] recov = iic.uncompress(compressed); + System.out.println("compressed from "+data.length*4/1024+"KB to "+compressed.length*4/1024+"KB"); + System.out.println("ratio: "+Math.round(data.length*1.0/compressed.length)); + + if(!Arrays.equals(recov,data)) throw new RuntimeException("bug"); + + long bef,aft; + bef = System.nanoTime(); + recov = iic.uncompress(compressed); + aft = System.nanoTime(); + + System.out.println("decoding speed:"+Math.round(data.length*1000.0/(aft-bef))+" millions of integers per second"); + + + bef = System.nanoTime(); + compressed = iic.compress(data); + aft = System.nanoTime(); + + System.out.println("encoding speed:"+Math.round(data.length*1000.0/(aft-bef))+" millions of integers per second"); + + System.out.println("note: with a bit of effort, speed can be much higher."); + + + System.out.println(); + zipStats(args[0]); + + + } + + static IntegratedIntCompressor iic = new IntegratedIntCompressor( + new SkippableIntegratedComposition( + new IntegratedBinaryPacking(), + new IntegratedVariableByte())); + + public static int[] fromBitsetFileToArray(String filename) throws IOException { + Path path = Paths.get(filename); + byte[] data = Files.readAllBytes(path); + // we determine cardinality + int card = 0; + for(int k = 0 ; k < data.length; ++k) { + int bv = data[k] & 0xFF; + card += Integer.bitCount(bv); + } + int[] answer = new int[card]; + int pos = 0; + for(int k = 0 ; k < data.length; ++k) { + int bv = data[k] & 0xFF; + for(int b = 0 ; b < 8; ++b) + if ( ( (bv >> b) & 1 ) == 1) { + answer[pos++] = b + k * 8; + } + } + if(pos != card) throw new RuntimeException("bug"); + return answer; + } + + public static void zipStats(String filename) throws IOException { + Path path = Paths.get(filename); + byte[] input = Files.readAllBytes(path); + System.out.println("I will try to compress the original bitmap using zip."); + + long bef = System.nanoTime(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ZipOutputStream zos = new ZipOutputStream(baos); + zos.setLevel(9); + ZipEntry entry = new ZipEntry(filename); + entry.setSize(input.length); + zos.putNextEntry(entry); + zos.write(input); + zos.closeEntry(); + zos.close(); + byte[] result = baos.toByteArray(); + long aft = System.nanoTime(); + System.out.println("zip encoding speed:"+input.length*1000.0/(aft-bef)+" million of bytes per second"); + System.out.println("zip compression ratio at best level : "+input.length * 1.0 / result.length); + } +} \ No newline at end of file diff --git a/examples/Axelbrooke/README.md b/examples/Axelbrooke/README.md new file mode 100644 index 0000000..e69de29 diff --git a/examples/Axelbrooke/example_bitmap.bin b/examples/Axelbrooke/example_bitmap.bin new file mode 100644 index 0000000000000000000000000000000000000000..7a00138d684db3acd27577fa6252de07b2d0f16a GIT binary patch literal 2961813 zcmX85Z_Jb3edqZ-$H(T_7;lceFvn|1M; z`s^-Wi@Y1nC9e~ThR-{mKf<7{ZA#zwW9hkTIc7EHwz_tmzkRH@`I%YFKeI`s;kCUn$5XIdy{I-STQE-YB{UAS4g`QY-Q0gbF0c~?Blux{mrs0ci-$Y%5Bur zX>FA{DW{SdEcah5_rkGC&y=h;6R+8wmage33&>W7A;Iq+`K@Vxv6nAw1}cXot3Ncp zn>tETT@y7lLb^TQPA}7=)YKh!V;z0t(A`=s2J-?YKCP7tm6QkaZ>%DW^(x6sWUp=| zlg7rf-oU|yw{Kb@T-4u***yzH6E!g^%f-bR+w@)kwkPd46#vpFJoYus(bUp+ms!$J z`DaZ|Vr~U4KA_k#pwEFRg%) zw6;pI)OmAff7To3&Bvv@Iz0~nu4x7fz30pb2 z_)#lww5moIE;B~u#KmyM`*1Vyc2Lq-@7qJ2Xr3pXa*xAQ4VRb>u`4r0+0?Rc*bn$0 z$$@QkeH{afGGlG0jgcIdaInxtGsM8u$%NMpCM|CkS2q?!dauhucG0VYyl)g7x~WOw zUzy2j9QThKt8K>#ioB_o5aD;TITlhEA{0uMujbV4@XoebBV)!UEL~wc$D&rnZ<%-v zQKgH$o%4>|%BHf*{>C|{JoNwdXO% zXI{6*6@{a2Pj)u5!VTF+QkuuE3jZRvgy4m9op#Pcjs31$i~lKKENH78v3gVg)WF+Y z<2Z|Q&58EfX;i6q!fwj79AnOkz{pI;@eJsHk%qZD;S$qIH`k7LHx}+(?zB~VlisS?o3zYC@%2h1I4EOB| zWo;5n&2z6^N;&p*gBw%|=J+|4t>VzfxhZ`nS)ZjB6@c&_nDWt#)lBbHJDYCp=Hr}0K=#Sa&L z?ohHY$lac`4DYN>%e4@#aUKr{z_Kfc2#o_IQ&`}xRnVv&u&Vgbu9mBwTlsuf*P^$_ z9(D(=t%|a?gu8z+v-)t1kWe2)e^6o8V4YoI?0#ap|3#%=1KXvX(}7KY>&ytdT8+aM zCZErrloz10guxB|GxT2epzb1x00`!)(@aEwzDpK*D#7w22LRzf-sYP>EeuJz`546NjeeRZ@vmW zDdc0yGnX47zQ8bJytZ$$Nl&gv8-GbD5ni(6{wpaAU7Sy`Mqvi-S@w#{WRW^D$o0Y) z-hsewdDFwb@oGx@dMSAfd&0%>iXRh`@1Rs(;a~Iby3d<_jNNf;yK*#1q2|I21L}>m z_o3A{rF}4}Mc*LJZliCJ9D;P|Xv(?)j1C6o(G`KgT`4BHo{c3zyYS9RfnBIn)R!N01bM<-u7tuH zsG#DVG(v*C$()(9-|Df&N)D9cFGQVYaNv#&YP0u{S6=6nOrdAZ6Z!E)Oi^0v=fC&m zUw&bpYuqh9iUglG2nN|6HrHG=zIZQImV7X4FZ%}9U{zhhlgZBHLDH?txyYvg>VCSa zx4cy=t$gU1>+Ud8uVlHa$UjJ^mQ`%}(Gg~BVZt5zj%6PK|wL>&} z{vO=CG!|zVE!SGoW0;uo8v-W5q}3DwOiXn3Qw$j2QLW=m->;F$i#yFO$y; zMbkU#bbN!nty}KDf{uTD<yik7zq={W1+R*{@XFKJT<5RA_WI5^yj?o4gT=}(y04W;&Sva`X6OIq4p zC2naC?-W%1!Oj5aZ7Keyv#rJzIkr_n%LNQ;yAt+k_?9DXC0%mk zEAoUmyPiFV3B}NSG0G z7!ZTw){<@1(%j}>nInNq)>3~28+_@rZ}7gtib}mfR@+49w$0*pt8H)*zd5@%@S&ww zorDl{y|IaBSA)6%c1SOFNaEgtFb#agoyK!^z6()^d81Jx(=~-cA8GRE4+cX#{%+Zh z7R13KyF^o)p&})_rdz8ie{Gz9FJkAUPyTf1sFp*8bt4(C`&RU^Iq_QWy+)&@vVA9r zrUgT&y{z-b4pvCzZcu%A5}~Jk-a@1^#3C(7H!1er2A*QqS%?loY#Xig`$)C zLI;1a;cZFfn8L-4!~dz0|36%mxCuf))s_Ly>6|qrsD}$)$Tei^%^rh_i2xcfQ<>4e zo!1&XSWa}Vt_O(^^H%v$tEvKHBqO?A*Sbv^%#7*~REKzy5ubF8cZsZ2vvt-GxcIlS zNhgdZG2@EDWT<>A-O4NY7a}y~`LXd>v2@A%B@_JVJzwJP0lB8lvznjzyow0b{+V-g z-H82nv`W1`q+AI0U$I2dxdEm$EyBc*{>R+n_Sk+7e9C2qdVvUrwrHj@OAKFlow6^J zub^AiS`9l1i#@c)04JqKT$$v%Qano$b*~@l9gQDfn1iTJ))gF;6_j831?5q`-RUE- zwXcyGyOJMR%i70t(q?};*3{9Brlpl?Bq~&C(N1tShonJ+o@gJHSrFZv2LYyvfJI1WBx%$9{?De^jUi2)9SRNr~2nefK zRCd*vEPt99(imGsm?hS4o{oA;4`-osJ$N!{vZ;_J;46149;ddAit||3ma%rqzfrRh zyGhizi~WOTHp}EXKaNd5h^uv_swIV)lr))J&&+_puKBF#kEZsA{x9&w)8&*b1yUZ7$ zFb&aAD@0?Je5>$y)wn|#n>*jm8;u+I(5+fGbnx51y@7;fq5BcTW(4wn+3F*j6{a2Q z8l5tW&0dv9w>BBOBfGtdtF|Eyl~8}0m6S}7i}s z)Jdv;;;6c*?%#IgHO8!(L1`t?n| zZx)zWj!#?6VB6MecT1nUdAXEk2!(`g0VC%7s(cK}24hU~4w0bQ<}WPUkGs zx`>+V*FN3SslvL`D0d+2wKh~xCYyO68X5?=to^CTX{l?L zMv;pqA8Y^jOFf*&a5=+`p)jc-dzbJ=Y08K*@k#vpK2>&+O_ZStM`J?xec8u??%0}^ zozX@AWIODcYCq>aX*aeV)Ht+8;T@wXnU~S}o_A%l>g?OEv zYcP-wxGBCC=D4R+*6Q265y0V9h!9jJt9AGkCqfO1AOUff)&tcKuR=D zO)fo;ILHG_rtfxhf~TU1*DbUuGUb}@K64L%sXLvdoe_ztBJFo8Km7yt2EfxZ$ml0# z(bb0}6m&uZwZFOjFAx;*Y!wD00H3x!HythVAZq2$F?*53ssn9F#M@S&vgz}4-%^LoekiRYnc7xQW@ z4*6w()jXJ~h@biKp;9NeX+t<2PBhytT#=_F+pv- zXEQm{wnx9V{-4t3FPUOoAacbTB*}8_WMU7;%`cDgD`Wk{3|?g2N_`>{(`oIX=27G4 z-?LX*&D$MK;8WuqG(1jah()wt8`a~r(uU#G_C(tWovpn~#0jVl>X4T2%~Ue~>`{l| zasJG=jB;kXPQ)a8I!1OAun1G#tM;uZ(@xIR#|6KWYgU_*u!Tb#EA@X#o#{xW4n$9x zo+$23=M@f(N~fEReomzWwB8PFXsAxWO6-Ku_G4q8MCTq7<t&FpbA9ITr)BqF z?}%@pRO_S1Gb)odl`a)o7ZGJ$z+Dhcts-rwWBfV#eua z6}PHfKNA?_kI~ut1G(+#)~sn7BQS3a@M@1gZ$BK(Sfg|ycZF*}qig&vRo4%+YNn9s zaMT1{>K%fbgH<*{)WoC+!eg7vwc9Q|O&yoFK7He?n{6Gdog~@l&kKhD;q;VeJ30_s zU34{})j+GrP)c;xg<=e*CI4?P6sEOv5ys@;&q>&kg7B}hlWVi0Orr1kTUqWDwJ1O*v9DTeuzw{Kx{ZmzM)OV7DK(V(F&x{$wTO3HEyw#cafdIat}NV5Z-vqWM5 zgFvcB*SNIX*)cM+Mb~d69DNIOg9LwKXZApe{Bl(a0=5ke#ahJseI6!Bj#Xr{j}bL2qyu;Z)eh;Jilaxnc|)3yqmya z${QX1$HK9!^|YPYO3KR8H*vaXIQ%W5kBIT~>F9LBQ1Uf1-hyr7O08h6n5;L14j97u z6!X^xZ9 ztH=j&%64jV<&8i21wnhyefa?(u5R=E^#$GS zXiVrVc&yu78!bC{+UUChTGAxHY2S%kvkADbc(!x0Nl&&l)+v7t*XHvFZ&w<21V{Pb z-HU$OZsaQRsKwNYp}jov!9qeCjVEynzaw;{v@vLSgU`etoLz)&)c=Fi)@W9-dwqLh zbgU5DWT2tGdl-d-EOov@x4`w!TXA8&61^)TTfGc3;k4cAkJ6NF2Q%j?>VN#zl8Ltn z#nLS;BAzkiy%x_`N!&2mciO$Vs(iVbjWx9Ek`rp^yw+spiE+%Kz32vAVYJj(=>m-! zGL_M0v&u;~zU>|cjGEdOLFHsYRGhVhmpl`d?tWe50JE>=ocT-Y{&X}}7IDRpDznGcE2TD2!k1fqs~wppR^{Qd5mE8?VsOqf3bYD#NSDuu9fqN3`QR9zIgriN$A5J zwt9zZjwN*3eZ={{wV_L&J7pF0yK${LaQQQ_m#4wueha~uj>Z{#aiG1jdk2&;VVtdF zW_)99Or;N zqK<-NoUYXEtNDlq*m<&J+AsR2au->$PKkPfb)vF2kI?~xZ+K%v6Y)~0BV;G*L z=2glC4cDpei_<*b&KMW^CZ+f@5|vk=v1D+EX*Dqr!&??SFFVfV0JklIF;WCBY&T59 zIM?`NLR{eP7e@4_QUq-#DS&!-_PD=66sk3nVTl2ZZ7iIv4B0r4VXsBf5i= zi1{R~_Q{SyZOI2woR50ytTYZA6HnFdy@#ztrB23f){#(+Nh zA<7k4+^_Lh!cAYgtT}TGl8e#>5n_zt-EA~g2u3FHBifCP8QRi_i=7RZP})h<-Zd|> zNt;EXMva9U$l(_)Ek+;3K87Uhwz~t8=T-@~70)s3YMjWD^Xg|u^lm>gX<*9i#kPCh z^e#|#u1zj`2(5f2pr)ss7qsqsuFY+!cINlBsC9}|4iJeD(Rt_3anSj?w(fM_|DToc z8I|1OS~@l(k9dHE^ciVLoK@<g zi@MtWJVA2#23*MOXRAZk&-Qa#IwW;E<3cOloC}*Er|uRG6DRfG#91+qi4ZmLn*mrM zymotG#s#LqNs%kLkr`*q!1_L}s}PLVC;I_QqXj59qkOtHikcrxr}KA)TbcWMm26w> zn32Z>W0lPCezth{hAjJ0n_$l)V^7&IW1<|hp%Wgli>Y1Dan8+>p?A)rxy5p=Zb)Bt z`9ME0A&%v%NBWZi{Ci(!jw9l33x_dGu94DOweP!Fwfb~K2VH%;$8L_|8~jqyBU9Eu z>%@NP71?Db^>9yV46%$hOajYhdC;jnR-m!h`6@r7-A2~U(IqDilNsNim0-%NcJnd! zeZ!b1fVk_55-H71b%OYY8;+aKlPi&|lip7_>c|Ck;7qig;7qnvoyrazl@tsYX}Z z(EH{{gWGmJrx#J%#T~5jzWcMR$zJYRwPz-O0@watDoks3E_0FHijVjT<8lOq3uub< z#xwIBlQY3_hEQC#P?Mt1U@_7X-)?7SvQ8U2H8tOkca}qH%8RcI7^AKT7t{5{R)=`T}9IbuCkGc@^gk3W2HVv!e!6d0{ko1D>N> zZcv2`fZbRWZj)5$r(i!TO`|oP^iPxQWtFt6X{prg5DXoz7QF)YR5LbSTNn7Max7~> zE43g!ay*%YoD$ybg=nw0|GI6^=4stOvj3h=HUe%5X zBEpEXrKHO;^%+4gHs>LCGqIXU^WFE%t7*Nx$Ir${Je=UpR_fNq|5E2uF-v4pzj1a- zbJs4XaTfD^=#ED+=GA7iZK~>r>84|lMGh2zdQLzPT2q5oh2qMDo&4fIpa9V^_~R&} z5KYb_R1jInyz?w3PuqLx)Zov+GSXodqRluDUI$JohqTqKuy|`+x~jUN zQ2o{JHzcN%#%^nuVG(1I0r;co{TEr9t(*3IaErT|nM9Rb#BrhaM>$v3It^eT^gXu0 z&GONu9NxPNQ19C2U?)k_bit-*329tHnf79OgO9nQTW+Y6)}AkHQ(+S|9>P#mC>A z6BLyA+2AjkY{U2Yym*Bb+h>kaK<)SQ#%|BEU*2z>xPaBgmliW?1BzHAe%Np$(jz;A zE-sq%#QgmrIK4+xG$KjPeZJbynV4by*>jFl__85fQC#L3Y5K5}M*0x4gp~R1@%E(} zne(nqHD@DpHg1yRCrl6 z*w%9WF8^%C^hAUEDU=@)BYrEy5`-w_aIW$MUMr$?MtPNB^~@g>DX4MF@P3iK@1k?D z(vAIreDqh_8fKl_+&}#B5suzN`qa)z-;H$b5nI8Tf1zEz^V5iJo+Fyf<2Mpa6bJtJ9l7~&=G`XuYub!ZK&exF zlB#D&1w2Gw;UJlohkac95&CtnefeVp$kY<1Uw?rhVLt7&#YqZbK#vX$0k!J#x#$G28^SXV=ZldgR|% zFz8NaC-sBVlfGqtQLfRIZF{eyN7+C!s;>PgMz(HEo#uKuw-#@}_ziWq2Hzu)B-3fc zcb>A<50gR}_&-d?bW6ukzUvs=He2Lf_Keg?2NKPv6qC)0+`BB)yk$+agP@(({qfLM za9hhbN>;8Dfh-NBlsZZJmBgyTat%_I795?6=FfZjY=8Oxru2(w;ce!O4D6AJPitQb zX02iHxuikf%f&qW!lK8gJ1M`HCabFLE_!6kngL%Qx=oIkGWI>AF1A#rrk9vIEUWpIsvWS}Xi8J%! zug#&9o+;9)&31FfY^=+&W}DPv{TysUEJ$a+j`CZ#Vy@fOgriopGdEDbq#u>Q#A2V^ zt+2*PeEI+09k#71IkP#-5emQNbp5=to-Gk~!M>iFJfLqk`}F2HF?7 zi;xc<_!FKLs1%Sn$9yq;5L`s}O50h?u$TIl8`HPRL|lGeD<=zv9d&g`x-++*cg|0# z?$LErQ%T|e#KcrgS3((3t-ZxZb@9XYIjK*%@U0=az}Z4%m2sK$o{U#(L4^7Ev6lQqg%4?(l$a7;9(9n|7V$EsY@9U+TFe!M0AvmHhRX6}t)>p>F|O_9^Q4Lr=iTqK=SLg?w!jaweHCD zb{?FS$AU0_D18zcTDC=d`sZP8Q`n%$VEe2za=wZJUys!C_m+9X{5HnMz1%Tr_cQtP z&&yZN4Sc+hezFR9Ly1cnF@*bhTU>f-9c?o4SOJF_2xy&aKd@=U0O;;@(NwZ$eZPRm zl7D{KI5b}Rt-niWqgA*X@7KS+Om#rA?DTYyDXZoO7e^1{bMmPC5Vh8gnk_%Qk5 z64iBFE3T@78{3A{P zeqlIM=0-dBI7B4PgCc}2683tlXZpRuE{k$P&OWITK0)QWdrE_m7#);}6!es)QPasI z4oA2L*>g|^BiTLLzDQcv6O?f`5p68}4SFi%_H%^CsMnEC-WKkd%X7PRd(}na)f2p;48 z$ciSj(gQy^jk{Ty1t_N&HB;w;L9*q-hrs>@I*Yn{8)D_3ZQTQ|T}Bz_awZ^L@;e_x z7}xX~`fU!a28d2wiqH*KvV`G3t)v0)-nS~4xwmezEX&(Ay#?<%?b}`SGmVL4hU>_! zICaEaiU$>cTun3mbvK`@yBjf>JjuVtUIPMWxe}{4g1&1furGhNNpy?5CZTu$L?7aK zkbjbcj`THxhtzazjzxW6cnodHc4n1JW~GlRE2-0ZD?OiGT(8*bTh7Ma@=Mgz^U1m2 z%b2Kf*;swF(8+Yd(rMZo(Qwh?_<4W!T}f_Qo7=v9Xd#Z>yKN_m;O7}$Lhc#R%|TN4 zO+h&qNAb-M3Ys4UPL35qFKgW>otVW~tiW=QX?Q4B)+PlTzm>T*AIRS{-3y7uO)8sd z+Gs)|T#hPd(qBN60fFA!mNaCRVbrELHQ@A6Cgzc%;<0Jn?RN;E;Hj6-H!E8XZah~ZQA5)3E zKvA($u19r^%mB37WJ7cgfx*BtaZ?HgDdx@dGDB;P>EJ53&CMNddIF<%7kPuP@Hp1P|SfAbpumKY`_tse+ zkqYYYj|?pB~6?HF;X8aEDSfc?`f zIL+Q3Mpkp)M48Mcp^q_fRMp{te`&)^4-Xs%N-C+5xVc?}5Yzr>H|EWHP19iZtCxom z#v@bg#f(?R{$SLhM`7;R5)N^-Af#fYs-`6rx9EZL;37V}lz*or2n52N?6T2P?G#1U zy;0gO=>P?G`!zaV#(nq$wHJUrYvZ{gCuE-eUySk_SBRmnH#w?39d!bp@<<$7=v+>} znWY%9y|@g6-x&Wk-JF`boH0bII>bR>cNmD|Wy!~~Ch7`-PBFE=Ae`A5$w}3kKQf!M ze!s;H6Yq-T-3*dBb)k3eTsR|FPou2<`Zad4JEf-FLT-}pMQX*^n4+1lz<8x#u$bG* z%nw;-Zy4U&)REbIvBP>;#*@;LyGPaze^bMl$Id?~^XRMYmHi>|i}e%Umx@V}`U^nJ zj8C%h1Bwcpl-2Ir1VFlxAz+ws*=C(_p)t(b+sgRl;#bQq$4`pZh z_G4WeAQ^NVe`0OTzNUcB2Or>8r~MS^a*&{(9c+$NuB40cSojV(I|*<~sx@>$xFQ74 zW;fW=>F18on_xRR(dtDiMsmjtgT~Hx!NJ=$J`G>?LyBUBFsi7=WX(V+TOVQ+KDZK ztP|1RpMTd^Kp*(uLhf)bmNW=wKOy~ zDje?G<;-@ggRK)wqZmVd+SiY!rmy4U#U``Vd7bd1d3E-cA5~+0n|GYb`e8v{B01t? zgU^{G=Ie!P08#A5DGptX(d4+22;Y}EG{NfME4uE}(YGiTUM8Ne$@&eVWu8xYIMt`F zCr^DBj5D^bdkTPUd~v{w5YuzZd5WuDGrpj~_Tr4^FqVW5 zV8dC7_*pc?2E+pnsQBE7^W^Fyms|-vG57Ter>9bp=%P=aXtJ1@9lp(Vj36{G`u<7} zL?E5UE61##xp*@R@&+N=oWCVIX_y=$+i_IMXy5Nzk{Qh7Z2py0Jj)xqsvT2n0hx&Q z)hO{GNC(|eFuV;nLaL8#Qgc&Y(qPoD=ah^~rTE^v(UcaqNJpTq;j)$#iK&(?2g|Va zwd=ab?S??|YM43tz?n-ZlX>tb`dy5cyy`y3xbJTE9qRuMPg-D(_YhVaAI=sOVSUy~ ztfF6kP#Zcv(D>k+Eh)Ectit;XOdVy#ZmUwg~GC%bi8mP(*(ZjN6s=Ez_I z#YZ!}%mmU8(MrX9b`k4nhcMtX(G4i+rZY9Oqk+z=iXw8q4_Ad(VW5&dBpxAqZhWP1 zB~)VeNML!@7LS(<;nvCcV?QHb%yf?w@gKB6%!`sFze z*F$x5vKXFi8boibt#>>wyO_eJ9qL>)*8F|(xQcy^TXm_-WB|#fPV-Z2aI7@{99j5T z~-4bypV|;(MltOes;~cT*)6QY6w5hm7S5+D1IJio$Xy5$oYr}9Im|| z2HjGPUc#Cr*xam{yFe@Tyk?Dx>~lM_|AX_{f2GDUQ1cJUbKSz-t>>ex#-@IQE z39nA-xGe%H=x^oeF>vK-^igv6vc@CKtM)>3#ltGUJ-s~sjAJHm{_AR{)(a3&4ZEzj zTMi;NVTv^Dd5JHHIm=9DN1RRya#r*)9=8S)zHG=wKPyO?Ykgn9#_HP7?-buzlXNsY1IA^NMGOmEMHu=mSb8>7%bPDSp8&=V#y_U^3neRD2 zzE6v^=mt;C9t|#WGkkHpPbN|~jie>LhORq-rXfgVFzOt3yyNxKgkyH8RJ_mnX!~~x zYTO$<(82WJb#c{Ih|Sd>Q-S)?ETx#+`asNpMj;a$NTQzOsye8cu^mQBze6J00_3co zEK-?w6D!z>?CEZVyAB~d;J^$+dPeX4O+Hv=VDSYoQJ(MClA`gGW5#ws zvr)t{hK1LnggV#`f0x0uk==XLa^CK`J`TEAu8=c#a;!&Tas}J7x^H!N((2WYADV?K zM%9&X992EF#z1E5m;=D-^p?aWfdHDbvA0*lUZlYh19OtsB*MbCpnFdbW_Vt}=?+g^ zeGqZ_+~riu)9MGue%>F{HZhXdV|V~pZZy^XHQ)WQ-cTl`xWwb|>Z~-`!xumC~+gg0A|;Rw~#Gk>*V%)s8GBTkEq{f=`~ z6z+sQ^yKN_$Sb}8N^bQ^A$|KqKPTj&HHpzVsa`Ahbtj>zS;N`%x_RQ#*mbS!C|+@_ zbm^_*JK6f_E7%r=l*z1?S)0n=vn7Bq&g7NRoBeN5NyE(_=hDQUdq}{<5N?<#^q`BK zPvse&_+-K{9gOGQ(&X{JPiR>oLTQ4GI|o4x;&X2_E6wB(Jbdu4lKc#=+CV_ZniWot)vG37bR3FB*m?_{?D|1nBA-HuE$H<4(YJ;*}rCGXIO2mLME=H!yVp!uExD>`QAEq;M zA|*~X+x(EdDE_?nZIf(!_cYJnTK?21V$3}@EzQSE+;3td`H#4C*rR|zk$9aD6_H~_ zyMY-aFx_Z2^_EIX7u0db;VyhqtjZ`3UUT+idT3&Qk!H2VoXv16|Gp>em*yO%zm%=1 zyiV=~&F3{VMzebfP)nWjB$V0FU%oeEe(96^gdTuCE>iZ8hxI+v1{qs%afsCLt6hCg z=C`fNkf_cMpR5SEN#C6noF%-Mi`mR4?nE>3=c0hdVgL&P3zgE1ndXM=t#?uJhYLRS zF|BT07{lhKQ2AEo9+F%dy{%Y0q{u0d=AwFk^L>Ax}kcaOm;8dD_b{6jecJ7 zK%FMBE=@PkYF@D7YMZBr>>yCKYFmmtHWamSgDR%p!vuWtt1Pp!UCo?U&L8l_e#e*w z5_09(>)C%@f1r3hU4zid9e#|~wW}Q-$w#e?Jc-!a0M86%CLyE^oGyuIVV-_Y>jUpE z7A`qhI_4f9F>x>}$Q{Kd9%OJSX7W_>UbJwBAs;br3A?FQWRovpdlcQFWFH!vI3SZ- zNJq!k$fF(Mjc2X-O0+dD2o&BA`3u@MZ`GAew~f@tbd6RU(u19p$DCj9Q*#_3G1%QS z=Z<@BYJ2xJt#;pvo!Sh~W(t86K;mVymR|}whqjIv%KOm6HkNVN4dP!#Ury#}L?Im# zra`Xh|KeP#HYX--ZT^;I=yuwW49AYp3+BMntboR%wMhMA{I zLgj@d^rMbBjiyuX6!#@t6K(QoFwkSJ+MS#L!`TJfaVx9L`76Fr3++9lac)h%no6~d z8H^8)>=+(;rTWl@&85X?nPkbY$-FKe&eqAN6S^2nb}x}3QenOO-lR{!{YuuJsk@ph zzVV}Vqt@^T5(lhBmjNtfdu955L6?@jToh^DNkO=+6uS-dB(=M`BwtD*FBwEEkg@qw z^Vn=v2tcGzgDHxz$-EsX#&|6GJRCCIP!3NUxy(U^jd#lr1{9nYJEHy)6t`l&gB0(^ z1t)X_O?#?VAfSgW1Gk`m~Uh` z3V`1bV;sQy8>?rLe8Pp2?*w)?{h>H*vEIC>^|!IX5-MQfUoahQg+Y1;kQ}!faCp~chNC`3`!|NgMJ zhY?H_b~?JtEa`f$Z>?KbjOn;U4juJ8)RLtRcF~KrS@k!>DtNMNu2w% z`J1qXXmHU{qX!6!zj%cXTp$Oz*{h6m-{WMmX{}y5yWZOU)oz|Mr0Lwo&%T)pS#l4B zg?g44h)7z7E9RP8s_#;Id_&FQf%lOW(!jBC%-FcD@(he(lEq%wP%m8Tl9^WEiTnT~cKuIyDt>SP<$2AJXL_39 zk(v;^zD?-#9^km3ZOWGxP_Lbh#bhkI=~c8;Rnu#G_7}Oya+0Bv;6Z-W?@b%}u=^2> zuY9ZIUPhGU=!553>`Q--Mw%-sMxMqaVjVMQwxCO{S*o4c#S@&qE1P6&YW}VA%9bF_ zTQ{z1vK)1aa%NU`@EhjY;9OXmoH4$RpL?6UO{TH4QK466UTdVosfBB@l#;!3uf}YT=k&FAzQJf;Uh5oRBO0lF)LF)q@5eiK{3u4H500#2($_zmHr&{39wdW_ zRu%HzbPiunsoO7{L=g#`e)7ne$hpS`)ewM$z7^iL{by_DaAAa?W_FfHkX=E?e`$_^ zD&I~=WajTKWEL1fEB9J-DEO92b$fa-ozRUyLhI8c%c^bTre_ZSAMp>FfuKXu`Du&-`ij4A?ON9y+xcp{V zlCX?9q@7ED4OPGPJahd&UH~eOJlJRFw$bVH?9-1!;3+`h^PT{y2Hs%4<@s zBP3It->V1}ZE@|oZO94SC)Ly<+um`&iQp^*-#D9mBf;daYj``WS50EaIrkuGz{e4a z{i@mJD{|HiUv;N0EN5IMw8{}HLqC*?p4W8G1L9DfrPJ)2u)pEUs;x`y-htGjHyPv2 zr@3WQLx=co0tBD_f0Eue*vaKg@O!$|5-lNcO9)0_X11lHgT*oS3e0%1*Qt6W#IeBG zD;VtMPCTg>j9u9AOfil>IH^iiO9)nQxsG7)1mE%p!C)75%_dCZOx>-@hZlx*@Gb8Y zJDEwG)O=u^TPbHMsq%;YoXYPd$G-QTBfW3;)6f5Z-EG>n%sMzusm@O%iRJ`oF~?;e z5!m~c&Rz`)hog`B1*C#%%X3X6;bZPO^Amoj(FEKBxv4e6%*#` z0DsQqb2^7?V{iJ%d>9E)=%L*AjcI+h741A4R{9J8M4s2;mX3cmNiRCHC__o(y=D1R z*4YtJg}^SCq~5G*(`0J3RHj34f$?kgK?fp82I^6O(}}qOH-um0VdE}KkhLI}E7MeG znzb?wCG&`5rf9~sS=>l5m0KeW_(Jb%*s&cg2mcV-$JB?F4j4njLq{47xn(Hcgx+~#i?iSq zAZI1HPq!v7Gl5E%VbIeu*@+SdBN#c05w?&mSVFrP-j9RXqBL|epq{htgZ^)Rf6P*9 z`RlfQB6r$H2g}fmj3>{UeJN!MqB(L7MNx~+HP2bgt}}^ZhtQ{NZu)$CQtYEKn4!K< zw=hwD$=L+O-rcEOpC`kad=sFVu;v0MwEAn2(!|O&?gBAvIwB}DQZBJ1F+W3|YYqoP zo2Mb})^)KNRFUX}F=roI?BG|6W{L8gMs!}ZTPJvtWq!wYd9;!vo6;9Ke-keU)ZF)t z3&d3s);QV`D<9w&apb{%MQVu8#J(69WW3NML=h??+t2Rbp$MhdFf19mLK-a;)khQZ zfO$+LL6WWt@xVs5W$Mybcm}6vfi;A#9wkU3FXdumzHl7r1{A@q@6~RHG0~InY>IqF zuHG1_8_JKtYn;bB0z$h*9nq3_-U}3_x#3wfxOnqZzGyow%~cREh7(Z-6BYA~bcDVN zar2ON3_pSl&12s;*D{=;EJl!rcASB}PGV7dIbqB;dQC!BJRF+3OexK7$A#=jL+Qh8 zSE&|HJILsq@~M`Sy4Q`Nl@wj*p@0WB9wuFXV~Ffl6OndsU0)nbk9mj(!WuUd@QQQA z5{uG#VZx&HzXUobDl&5{Yp^@=6t*>Xn+o@+te-`*LAoq2wAl?dLJkkgEEsW1-yt1Q z?179xdjR#ep;Pr|-Qc^f6ehm#uMz&{J-k;ryEJu^Y}H(qEyPM=Cx#~b`QV~ZmEn}#GHl#6x|0dnL=2S$k7mI(x53wD#iIU z7sQzj@0ZmE$4A+xYPDGEB!u>?Nca6$vfuw+T@@mBjQ>-`rGgP7?j89MlH`@Tu^Tm7 zXA{xo^FbW-%zVy!U4nBNY++Vz40^qh0`MB}pUOk|0Z?{OQA>VDYJ>@gQ95;SoUY)k zJ4JoBigXyl?{BE49RHb# z>|*mG7#>AIG^eraf839x?pK+LPBb;HrTwPFckqy@csM~av>+P`dhLmQ%gWa*f<^OZ zGwaHmA4bj4iy#R3caH(?S$OY3M2ch7R3ISwj!W{PywIbjW3m<@iM^C|g?8RarD31h zqCr7C3g()qF+n5z(^e3<+@G*f%oAx**m-aP=Y1E$y{JW-g{*5D>BD`M65le~gr<3e8ZEnW=#A_wA&x2uC4GODAu2meH|{Ko-E}5S1WoD9(Ym6&kyr)Th0t&jy?W2T^DP@V{9a1o($27s?hqRyH zQnj!KecnJ5S@(-DZCYL z)o8lK3?7t&a!996hUy;|#zEMHN)CQ9MHSnOzonO}g76;9d`?o{5Ig+r9acBVTF<9r zv$igEr79|VbN5c%$m7C0#ig|6)biQA$ z*^1E;&fQX~?E@!!(8WyP+iqtN;GcfL&D6*XH!M2eM2Oq$;K6MSijkYumE5guXJ+d! z$usekOm)1fkH!j$CUr;W^ENVpER|z&{ek?I8+5(W%(Mvl>Ea91dIc=jHj|j8!vn6T z(7k!HqDO}=KTk+5<&a_O)Wqk0u>M|wvut}9n?k#T|BHBz;KUa-jG#S98Q)$B1N+kW zUNZdx#crcN_w2z9@t73xM@1UXIdMbl$TSP9D$qSB-U!&2sTLUrTka zQd-5dDN)V~%Iq}eapgm$=FoYaQQmtV%tQR=I7?3tzS|gw0ddzSKahCkBMXUH24+&c zoOP74%X^#iSL%U7m>_<Htscfn-g)5CN0 zux;>3JXY3<#rL$A;UJ0v7|mrY)kO(>vC=gfUTepX-DkdMSW#o zYRt>BSh&^gX*_CmUm{s&6|5*$VFx3;JZ`E3J3Ia}vEQ;o(KM_^kvMO58;@GLUI179>7d*>{L;HTZSu2`@K&#!ht*NJ|cfW?WidV((ZE~dIhUdB$ zXS7}lVinuxNM;drO4+B+CQX9oH~JLmVDoo5vOPi~0pVCA(;8KesKk5u1ivmDdl(qA zI{;a8?gs-kMJb#(eqegjv`9#to6lmkS2d`7(Nfpg$8>P4#|J0n5qKdVbwBBBl{(`? zV;T}<N`+{pF?0IP7CLV_9*99bY$EZmKLx&GgdDS95-s+ft4a9;AC#Ov5jly>(f> zRBPURAidy!4NFeQVA)~_RarpY4-U(;9MUAR*D&^GjhDv=SA8$k)+xW$J|TAdR~ao# zdiN0`&JmeXFH^-Wy~0VDKd63U3pP8q-a8HMv^GaLC_rdw$nZA7U$`?LcKxf5g^{Sl zUpCdITtBhqQ7gHn?j+1^sdkn9HJ-(U>% zB`5>1B&w{g4wp4QpXsG|I_PPu5YgK?pN9apzAkxT}_mMQ~FySb+8j4+B4wjxWRVu`kGs{f6 z2?MtKm)y;#C4HQ#=Fu)RGG7uj9YZq|`5iN%j9{R$umVNS%TF4C(R1NGC-%a{+Aug* zlq*qEgSY0J7m!@GtZVS@uB7SBH^%<}EoU zSu{;%!z|pjK5M_$p)DP9KiG&^D%LQQNo&9{YM5i$`xA8qO!$7BHTihr%l$6ncw^M- zlaq|!mXr2Qt!tefo=e3owIn_o(!*MtJJ)h_KN5(wjUDn|rz)SHi5_Z^|Elcb`^r zI$kl+Os0M`=ZL*@OaHW^2G?jWPWuDzWhpq&mH}`Az+aTi7`Y?n#(@@YMEx|iUX=vU z#+?O#ewp89OIL}M_$B3i2UEU14!Ry`d6|*%n*=?`u_EFx6>WNmv*+zI$~J@>-SutG zgy7n(s*yZReL6<*4SO5KIsAgP)}rVqfp7Ad3HOhn@g>h48+<=%wWko@_;8c2Acu{D z4I)xuEGU@#-3T2b zY`lMXrEU3xvT!>qDm@9oxO75B=f5wcPaROFKCOwRm`|X#aItLS#yK>7eJ$BM8 zE1}h=BZc4#p6{UopRS!;4>{$kk=}G4mePb~d8U`~au^wMn(Z}rO{%ayNg=6JtVq_t zcm`$_s7=oBrksB=6)F=0`0yL6%NQifkamrD4z*9!6&P=ZKH-q zi?~z!?k*NYW3%XA%EC%Qu^5{ONaPp;q(TK-LvVcNp)*o^di?@%g7JpX@4{}tcorm1$08z!BgpgaDY8dee>)x}Wg89JV zh_hELFtlGXJM_0H4kjm5uJmOX(Pz?esrCswXC--up-sLY8q1w78JLh-#;shT8Cmc~ zjNxde5okhV`Of5;zn{_-0RK<5nPU6McNN4j)ChgP$ zC}*qfmNmv6?#`u`EXUx(OfEo8sdOZh&3?IIZBEue^UUc!x{AYd& z>agY0#m9#bJ@NZxE6D0joof{Mvk;W z3rA;^?7&WrsFsAn7<((eGzQ9%lVaJtCsOQ&403fjn@CUoMLLkJrKt)ir`OEYi&E4M zfJyeYrD-Y!uj-8V$f#=wQz0zxUO_J<8r^t`e-u~8b66IwGa@SH<6eHBNv$H_Olf06 z1~w|->UZSr@sghAV&z^o>bWGZ6TG}Jt9IdB#e9}990)}7M`hA<@N}T3F8a$*N#k^`vB=Ps)BRI-88aw3+RGn<8 zKf4siSET+J(=HMd8Wn|2J%@9R-aOA)H6NN+SY6t;sO971d|#XkIBixMqNg0_EOOdj zUYak>xt&9d*L_plk>sKtE}yL5mhRFD+{bIArPDUPh@Oke#iwDqSkCE#UUHgQMx*M< z(1XZcb`&$a;T9)~cFV`=*WBwhDXd!P;S7zpFclURvLR7=*8yhM`k{MKU|S?9jn>&v z8mC=n7Vj32hK3&EX{4jP)a260%LnDsRB-bPmOdO&{F=F2kC^h=4DPE>hfYld&m9<z;nta*C!5VD!$CdKKB$LTm^Y>`2B}}hkU>e*!pSapf43aC|Q4jf^EG1H@ z#_4D4tgVU5SWwIY&zINni{1HBx;!D>MV*-ks3vC6#1+d}$2MR1!z`Cg5NHSgQ=AG! zU=kC%ykyuiQ3D$meDfRfGqycnyw%9<4Iq<;8z{Rc-w-H1B#U6Z*=Qs3iZ z=)bYdSPe;Jg%f-6(Uz}J^}NVEe9Vd*A@_QHM$u0zhO}iXHt(}U)Dd5zkCDR4Q5jbK z%^GVVr!A||*<^MJ8IBs#J>C&k$>2U^x5N&4MA6ay$&TXAiQjr6>6e|Rc`9A?iCEH= zxQs}OF1ZyR;%cx7{tlv42w@;dnvQ%Am!daEorG>l<<{F!&AaM9cXNjQ( zDA~6B(%Y8&yeF-@T*Ec@e!?+E3$?`AVj_2b&Hq>Hn@0vQEbq@HTtn7ae(Bp~jejY1 zw=Nm;8Nf|MofIb%yt$Alx)oEDT}F0|>$5s>ax2uZG zb$IwuDM(79WvLI#a`Rs7j*+VYGccFdGB{Y}0e8Wf>UD@^Ujv)V6_*3_F9}Kd)Rzfz z(2t3dRkokmNw|;V6gO*EK`U<2;#Q<@_LdiOU<< z2>vH_M_sCwSgqd?`xsNCjotF&eJWf?-J!u3C>&~ed7&qZYHpfQ;vkd{kH)@VNwWQu zRf=pPE#$r9EqVN&?6Wl2{=mKsN`tEaOe;x@z9H@h)-L+uA2Geqn|uz@U8LUSVsX`8 z>f___4G8b|+m=Ih*jJQr#p6Ks+W1${MWgD`HA%xbk;4e`EP_KRF<8MdH{v56uh&ka zfeZ8OnDw%?*e4%(Op4y+VJz>jkJ*AUpp|98#lYzFH8*1Y(9(Oxz$p#!ZlOOkbUOsm zM0eO$rHf66dAyAfq%MztbGXQd5}P$e9+m0noXjs!#x16i?}iv{`=M2`4?oIaSj}CS z+g5ShWk%!;KOIuM+~Uv;0OqO;Q85YU^IqD#xfbkZvE!>X?~++$lC$ZcFRzFpz9>z( zmW3&sLnCA$_7>?TLp>VWcdi$Ty;L3fQ$DkQ*~*LP*-xG4=^z;XZDNyaWIt~ z+XvHkttAp#?LM}nD^|%6x;`2{WaJdZF?b*VrzBYao7}3j%43hhHEab}WNFg0x9ojZa*Jx8zg!0zZsi7C_nZu02RXZbsQhJ53+)u(Gx5qU;FYYz4I#BStC zIZ$geo?bspJ_Y^gx8q9Y93Yd0n#F%2^XKcMATI@d7>^+GDEyPaY11(rLX{^@-ep|7 z=s4fho4LRq^rJmI(BRi%w^?yKa+zQGLt0?0_Lhy@t;2zh3w6DIfpL_r?{qG&c^{Xv#6YG)T-&CDXOjC>`iR{6Llw3!FfL5Q; zm8Fa)t{JuC@g)XxkUIy(GgT|C7w?&m|G?f zDofG70NdSIzkY;)El!uTQlxg4q#9%Br!w6mb`iVaXK{=&pruUWetRApamI-5v9uKf z_Gpi@Mjip8F?(gRF#=lP1T96HB9{v<@Mh3_vgVP?WbsfpqH9AbF`d2lhBo&%al}@Q z!!nj(rbun!-^hZ{p1n@KD4chgXSQ!1?^h-RI$Q)XyDg97-LNXNS2Q(cDHzgFPUUIt zCW3pbe=Kr?-nr(YAcbU)9Yu)(rlp+CV8?h3=)Kiq6$f@< z6O25=BfCo8hj-6IA`lXb7wL2mDEGcNd;@;-Mp~zN{2Mn{p;D6W*{_MM$nW*d>MlD?TQSw}^{s#DC7uS%6jH-T(`hk+~a_bR7~nWCl0IFpFF zWx&`$9l4m%>>{#aYIn8>L9Pky)AFhDVOIKJVagh2xv)wFFv;F*pvvplvf1x;pyi63?(yl(2&Q^5Rt>lMBPy%R%EdcutPNm{ZFQk?|93hREBX zD`LG^=N+`-}aYRS-XQj4cKbRQhx#=UB{mC~lGFt--yIYuiktcG$9TrKDP@$af z3x@eSD6;(Sf1^`yIVF4Sel2}@w~2nCF5DU9$5QGB(N%hy%PZ?w#lmI{^k$R`VU8*7 zxLpNG3My8>a3_ol#>nt0?kr<;1W5wJN*&$10-r>Q534qqET`J~-POyt$$nACRd*a!hiu2`@?0T_%74|V= zM!%!O+CP_t%6!Z=kJ87+w_XK_ax$HkZit+J2t$$$``Zl zoyB0#BOm!fl5RsNqw-XvWSaVrjfi&a5EtuONVyw5l(0_2oL zcG1(;Q*L7pgLx@`VH4$`sfrFpwXmr`QSHil02Zw#*UAh5C%gc77gy596Ld*ac8iV2f~VGp)j5`I)Qz z+dfD^O;^@8S*k)7vFNJ(%Vo{SBL6 z#1X}5#nTNpa0Y4stblLj8rgdz(amFAF?oJGub+1^lSc_Rx`cZmuUzi}eA16Y8RQ2( zOkyNMgs3p!Dm^3tB7z$jUx2-{lKM^y#r)dH2zI^&w?$lVj}=;iNRMZZ-%~mH1crMQ z5>_f`NG*HTKMRzvw9w%u5A=BUWKC5=SfQpAI?Ri>>qeof;r zj*}5LmSdFUYG}S>ZV*?7SdM;*`;5=SM=K#81T_1e^^coy>qK{wT6n@09oimkRdv!9 z6!=4nH-N3*js6Di1PgqoU7U)RU+aP!+7L=Sdq?_N3sr+}R*xGg#8V*f64ydD32nh? zIe&wbipC?19Sh0Dfwo>cP%ec7m0ye>>bi-;O+&^ zluko-c>08CCN+Q?cA!d3xG-be=-w@ONW<6cPOxCD#%aU~F&1iML>_=pPWwjUp?bY< z4Id{6b(Fh0n`aQ$p#Yi z4U-VNS0sHAHy)iW%ZD-AGZQBqG)<9aDP?r;S20{niZIjgh5H<`K9?%gzWBt5oyyDG zoWKF3MSnnI9pePS!#brHnq9OZYKJtdIl-}iOjHch71Geo#Ld?&Y)z%;(%`+NWaCf@ z={WocTZ&Bp_vAoT{x?Q-GBVZv-r_c3K=?;SserH)^0AyG>H6Eb_RjnSL3cpHs{z%) zK0jtd*O*4CkNNEfJEvHN|4?K@RH9jUID zGQx0?{IDJBxohnm%(|>&P{NgYn{oy1nCyXuFoaR4)P2o8G!X02N=yJ*56FI5t$qR+&-E$^QfxV7?}m|7u{m6xu6Qc`hJdPi;+MGN%A67%Ca zt#J{}B$e_bx1)VElgRR_Xh{%dX+VPcVL(8OyQA#Q#R2(T7Ng?afb=BFtJW;zoVt18 zX~;Z6x!TOzk2hIr@&6%WD4eKJfDdcI7UO|-m>;w_V|y^ipFm;eD?UQj60}MM^grrmYA?$ z!0XHNEz)J<*W$Xc>s&>*T|UL0=S*nU1=wj1v&siEKn=ZW>`i)(PX~v2x#y%4mt&R9 zk#F8nB)T6s(ifs#yt?ihmmnsmyt(eDW!a=}BE zE@)0H(V~k1U5`N*DE5V6eNf~jusL{p)2ZM{L|mEwSi;3ID*hQgBZ~v^;L!7cX7CI2 zmKOXcJI`41pJjJ{6eki-TAR*dx18RsJZF^l8D}L8I7gy8zL-R2ye>8-`G+wB$UZ-) z-o*Y*vD1i;f9`J)$O4&ncWo=U86@M6RZ341Z{sU;HT`WLC1~WAc!-kX)Pyci#j+~~ z6g=>**qc)Ryv`b|SXyI6(;(94O_BA_2qk#gC2>E5|0)FCW@`)Ab_s<-{$zyah+|GF zS|+A8mx5bePr&x;BeCFU?@)p+rLEiUp}jZc_q~vbS!Lc{xMbIV$oXjnZi*k>tZP=yJg&IpU&vtX|$5h(q*KoD?K;;;io2@O&7Q2oH%wc z_HN68-6d9LvOPk&ts={t=e1D4#m{%s4D5w?yPjn8QdMGRN49l*7zPW7$y;R!Q zOGMuh4#zu%YIZ3X9oO&j-5BZh^TlBVw5Yg%c=_s}kU%786rN8)p-}f}iu5NT1a2V2 zVYv2NYb-h`DnD~JseP7YCeM*YmKOm(7=zzb1Z+Oc_F}A?=fTTyIMTz=<{2AKI8UL< zqbpO5v(`$j^nIZn9qKnp8S!F>k6+PtmU<(6msd%#k-au=JH~|}o^s#q8{Prf*y%}o zCig*2hpg?2D}*#@ZxQ@n1L*Evkpd_eHZ^=79_Ec1AGhAO8c^*}B*B53xdo0tL}dp4Sq+8HXLu2h;kgL@6iHKVzrm z!c3i*hs{31=_I9{XAF)bos4JDSfinQe9y2nWb6L`+3tXgPXfqQS{oO!?(8mTo!HX) zpT{$!BAz?7Ned{Xp`bvH1~gllF(ZwPKE%reOsSF-=ChQA1Q%|wx{e|%bS+*$UI;xv z0uM?O99V_I18Bv6C1WaC!_acHTo2YNZF+@wm0J_PjqI=FzVVJ6mtrK@#VP+i-Av!^ z+vXxNKxHMfpu*(dW@%D<_JuI;t-~ByRAqE!ma_cyvJWVpUU&L`tjJWFJ zyMQyttOJ{*dgEZVMH~GX1{-&9Hi`Y>zSZ*>7gEdJF98*~{OvgD=p`XgdcIbMO#Y+x zN%~{CwG@n?!JTNQD33&SkqISs$2?=1Go5tLkJIrji83D#0qU@G`)A@L&V{>9xh47N z^E)>$n|ge6jp%F=C$1V*OqU_Djurhxh-Ozp2|O?tO;^6jj!Z~oc?1)fX-&D8$ZW<9 z`N{+%Ws}@4O0@5D|1zLQ2Ygxu_Gyg6uj`2$P(k%uGo(nww9vE4GCRlpA?2F_kzm+b z_^2=NkVz@=Tm*2-3mXCpmnQRS^%{*Zi{Mb)^Ko6!RJ z7+X%=37cq5e!*=xLkjOm!|uET=wN%cOrKn&(`26yGEEh?0bDlF2R-jxDC>5fx%N*+ zDT>P$6?A!<-JQAsn-EGIisb^QnY^A(ljxUw_K;#lSy+dzPjYJ<`Y}Thw#$_e1*Wob zsQE#NW#qQyKi4%PkYdk%NdBe}Pkz9i*fWj^Jx$DoQ=?yMeQLcBGBh7|NlrIUkrtPs zi7H%u@^nzVB%UL;h;PXU_QMrLG~u-~mv!Fb{Ja z*nJ1yN2j=pWi7B|cU|CL>0OjK3MK9z4BVIOPWUL3?pMD8=uH}-(;?d;!T2YT5U&fp zL1;)m%sjfM0a-c6%bWp z{L<3<-rVhS?pmbl!;M_XrwncPm)0j|U%P5&YX2gAzRFQ!gj`VOcPngN{bQ`$`B$Pa@bo9^0RdXPD?Jtb;u zUQ;?Cj$MC!c*u6v@>5~R0OewPhdky}j)X`BF@B^yuw}`boY8Qt*#-2_T|S86#bA+k z(zg8#!q$aIUwF7L6)h>|o;tB8KY1w03IX@9k5y(iKddczdNw=>0Z^;&uI(OiMnF@|Rnvf;| z<2Zl<-61Z0#!0_scjxSL`NyPTuMAY;nS{hBB1a5LR?bC7JW0m5qXsQeuzlH76x6sz zSEKKuoC}E8GP()8Rd4~^%jBr*#VgY25+9<%*!(0ZTh7$A((tozD|Uo<+x;~u1v!tS zoxtiR?I7}>ljx~D?(E0p=w02J^U(^s;KQ0(Q`aN6IQR-QJ71KmUtUWL=DdXctsZ_V znNXWP@s_*?x?eU1&_Rq!1@i|*-G`#sQD~=XFOJgB%x)-?dt?1QiMukfviH-A)CC_P{)I<0g9TE)~vDoC2*kCk#L%}S-`!``U(d4qiL1>UzEEQKo@Lhyb70F|;8{MdE zN<3S6E-&~zB4`Ogp>-cB*aa}$4QH&Q{B^YPA{~)^oeTIYUCCch1=a0Rr6)v8sKQ+u zYV!xF981;ZDqO@ZMxq2F8Dgs~DV!X`S_bszTWZzvWe6d%oXHEb{hWIZ#|OLa33RQ! zeSK#vY6!vv#%YH!ek;n01--kX7P{Pbwqq5QJPrxb;T^fczfkRJj_^ksFwK};DLBMo zhRw zvk|v4J(f9mibvjQNZFYW^ywYUi#BYA{Am9&dHy$e=G({o3NEDwk4q8#po3?x5~xV0L~2Thq&%FayKrPBx?1J6fBMw=FTgxEgB+cZNy2*vR$SGYiSJ2! z6bZuyk`ELdzEYf7iNHyMtT1o|B9bFLv{5O$lJp0KH`&-9J&X0SM!n6FpFP7g+=_VR zj9WB8*0O14`-DGod!Hkp$v@J-1org_?!vn1Tx%&mw^^%7nk@EZpou`gNM{!gA9Icz z+57l)`Q=2!S(V%=BS5wE|3s0skxXB)g+*?+UTPRELX)p?q_Bm}#|)U{s5MZ6{E(>Z zxD!jxNIGv@WAveqQzW)RQi2r^61IdIy_Ph98m#9TT#fUBVr`f0lX5zmh(_-~mI~Q{ zfjBA1j)ySp>PO?J)9%f1GMde~JfndiO4DMx<+NBX80D$QQDwW( zl;Qdjtz2cWzgT!v^Cu;Y=?j{rCb_ItnrkJiNO{4q7^2M@dUrqE9EJ=3%&$2zMn1@B z9CP)9*CfEX#)1m)=I_z`N21@PHu{4LZX%ZPajI-tDZ!djwygw0O9S~Sh?Ofw^2Za< znOIg_#S#A2&^v6^eQVnDv42cpIx9@Epb_|3L7%zY*cnK1ICXu-xRV`B;7xX_)E+cR zf8_&NdDs333Q63<^`ZEm$;(}l$=^N76>7gd?;#{x%?aI^6WI}~Cf%0W6E1=?dTELX zX&FjRS|ZiM8j{zUfrg=IPGxzmdR-+TN#Ew1f)tltM==Pc%$iewqHM;Ubrb58&I$R+ z?%wWHVpwrrA3TYZ&Kqj44D+fES4L+0WXcL?4wcin$eJ&cq+|xN(CYDgBq%iRaEAEq zRsM-dEM_DGsz_zgQ7u^Mw2_MXUg7Ul^(X{{CSAutNK&b(>&mZmA~Ux5P9Y=1BN6uftymITz0iWvgZ3;|y;CRCgN(gh?%f z{gbl>#V5xtyP|s|`Ki^bVdU$2A1X)DvK%eF+0ZDXHk`HyQ~zgR2REds9JS6aMHA>L zSYclo49ZcFNTTEtlu}pTKNRXyobO>DV~~sn&}Y?T;2~ zRh$JJaO_k!ITXb*kBa{!a#wmwCVGV`@w2sK66nLM+B`2EjRP~KgWgZ~J6}$0)WMbg z=5={I9m?Fk6ZMi=zg)2J84OwLd<;f+bOA;;vulg4^JjX(Pst+pOx|8;WEnAu^y2Ug z_ToCyjd6z-*{Jh92ZynzV?NS{+&C^oCsL)O^&Tqg|6Fz_@~0%^*hT6O3|(WjOdArl zDMQ&R8=);o4UaM|M~IqB1g@2ML30 ztTuPFdOAR6A-4Ej%I%`wr|^x1}pX_q7naJiSX+_OnTz zi|sYnNVGrLN2<}Y9p5Br_zN}#EJa@F2;fl96K%j6owgmg*et0g*T|feBr)Z%_B^K1 z_%khQmuOnz8*=d&phAs>IvM#SbP_1zoWv^Ju*Wz$#Sc9-A-Ij7(V=>)s!Q<`Spu$+ zWFhaj*<}z%{z5_%Fr1xlE^Ex!AXs#UvDf};#AmC^s$=)|*%XIN{X4H8bu76me%QhK zn1s^pr3&g<>9b>`u-v%7dg8cRxE^rYs#pj$k>T77xiqXV6q`L+zyeyeVxp~^|i*>o|?H;5m zYSzWrElt?bkkP{-meVt*ebGIAQt&+Y6)O>0`f+F(vyHZq<@Oj6lsJ^QW-BU576Zo@ zXb&Z^I=6Oax65BS&1>9`n~9_qV_2ztR_1&*`!dAbaa-cu=CXq0#i`HiZehSgdF6IT z=sn#_@4h|e&bJa7qOg>73$-a`0HUV1+TSat0zoj$D#RTS9G5Vq;aWF&NCrQlGB)<~ zaPqmBo3RKZ$;EST9lWUoWz*E!xlXgv0%%H2NmScq=fPpYRfW4-g`K@_ugQ$q1$?G> zB;y~P&m$$YDHHtll=sdFzHQ4~G2#}aVtx8tlDW=j+}eYsm3d-8_2C^iPha*s9|&6# z=62+fjzaw?PVR8_Ucleyu|i#x1yeXbKAg*#l(NqinT3W~)erSoEEXhwDo>R$bc-p* zm*eJaXoa3n`Eh5{Jd(TqG-`a?u)W zE@3Ja=)+|DbF%AW-;IMYp;a~kAoC$Zcz2&A^vcbtg4QYOCCYEmqdx31jTl#ohix+a zs!0buWyAKH)|mKhV0 zR~!A68ID<~Wa$O)vb2Q0GtPA4LbqVzk-{aWY#| z^6ObK3}kfqwV606c*$i?njLcg-?U;Qj$ zm09IQn@FquM0p&~)-je;LW*{1yDCxa!^uQ+MM3JUgT4EL+{FH=1agy&N#rMHVvd(D z%D-bJnYU|iN-QCm;^ilE9uGo~7kCu=b*j_fuMR7c3@@4@+3DxipByKDYG@MLuRSvpFDP`Vf6>2`DSS-xvEr zO!Z-{glJ4J;%Oqb1iGa()jJ}IdSx3K5wb3zFu`{~tydM0L`9i&(`Zx|3-e<0#4IB0pYsJIH9KKWgq%N$7i6v2 zD`HR|m(8E0DOi`|_q>73eEFM>RFA%ytXR;v==n_HKr)g0M4W`vu2oiwBn;N^?rbxm zjl~@8{z_vEepCd#DP7_-YG@r6Q9^AO2^I-px2k_S?W>66t9JWNr_zERzlKD{{3d?>_c*3GfExy9{- zvq97gfxBUPq1lxek~2bK8T}~hP}S(TOYsN%fu&80V{(&{7=PGs+mdSA=oBNy@|KgGK8i{S$U@*#xh}b5Lfh*<3z|E=OWnsb2zqj(6 zF~(t7?jB)U7iJqh@P{TP0895Ps{Up0^d5|E%Fbs@^re1mrCF5OVDh%cn+cCChJ_5e z_9gy05A-Mi(A&jz9GH$tAvU2#8B&QGQ_Zj8j$V@`r(*r!)a}Tv zhzk>?)QFfKgnBtA*B?yB#+O+|MWuHj3V11bHKyRMqV_dNGG+Fv43m#?E^)?GLAZe& zb&TW9sJTEdR@aGI(?AZK{*evS@i-Al;8l5ZAfBf*J{-V{Y{GY9b@COMX@wF?n{any zxE6>NmT`r|JTgwDE6u6F09oZ5{)q_gjWjJ}hjZL$uYgtfW+>5x<>#b4VtZ;R)Pq|| z`(Md^Oh$#$TuDP|m{zrAs3wPqm!xu6;-nGHOUMdOrogQlM-%Ib$Yh*k9Y(F8n5Fta z#vLjvHcGm#6}lS4%E-t6kEHhvdUClAJWsb;q9p|Pk*>hH7<>8=0t-SMfpG>q`EVoz5g2;~ z!4A2b4}uUcc3e}$<*CZdr-+S-r%Yw}+1`$tbd-KWq0bNY055s48mG7*0_x!2N(po#KawCK<{ z>|leVwS~jZVZ*Lnrr9|wAGj6Z>9)$aG~l%PGBjD%1*!OLt1w>Zia)CJc)0od(ooq; z>0KPIrX%*mRrM9;1WBC+lH=5=nQkO&H0{HS;n(v~m?I~w;FI{I(55bo*kQ4eO1?T` zl)ey8oSyp37csVLsT0D+77j6X@GIm+-y=WflidPpg4_C6f04g2{9PrKJpvpkzv0dCq|hQSU0^01@g7iLmv z>k{f_6ifAtjA2`m-YZh>t-0ouQe~@%Djbihwl{MB>rCmHJegQ?^g%S{5zJqJ4x)@` zE4?P)V?F@7U)&5By?!OQ4k{klM><7Gmw@A(#lwJyv>Kv z+IiPKb`Jk!=GN{K(2FvFHo{b8DktGXl&)VNI;^o$jSLMd+RF;NZP`<#_EiBY)3L3(&#v+$JP>1ckeW!HOdZvtgwtQon8CkHXK6IbTHHFnl-vJRD9 z>9)BDBX#y$_}hd-|6c&<;%?ZHiu+%_&mdtNoma1(7x|k2{^fQ;7fdy_-|0j|A_QL} z@zZImMb9VLjD{dPW_=3oL{$I=BDr7p=67(xoGIo**#E@Djaufdn4U7i=d66v7Q8>> zYSp*D(z~ZXWrO6C$XI?OXRqV`-;_6j!cw7J7BAoCU2&rbM)i}K+Z(3M>gES`9Utq0 zj%UqAfKy2@T?kzL3#_9T!Gs+cur#g$-_XW4H7cR~oe1KVpTLGMsm%3o66nGj?;Qy9 z`Rs5ovgwv$E8&1}KColx?S+$xWXIA_y(WT6el;%o7^~SDG*&H<&ko5(SF(DD)@

    |hg)I9$Fo=1Cuvh!`y6 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%0Dt9-%<5&3=^*F_~L6+98C57Hrh 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

    ;YiQGG$HzG_cTKor zihdL~9K2&Hb9P_GHs^C+m5&VQ(gZWK;gcwPgB$QqkDL62C zY#4>NL+;3oi%<2gr7sy$v4vtrtx$Ui*gVUBQ20#MKu{HGXFxVNOcw#%HavgU`0D$n znYoicTb=gAJWA4&%WTSk3hc%q1L8N}DI{wEn^3aSqt!@9;nQPE=);Bvu-%@tc5uh; zg&D;x?)NvSnR=gp_!ZkbhJ$c=GZzvCG%0JVDj2@&J1CA$?lud&IX9?Yqn}IR9qbnGfh#v52={NUL;v<9+uCQCPJ5q z=O-#K#@|W4Jm$D{$OcUikIIQiuRmUt|k%8MkVvh6sXvC2(PxVe0;sFMefvf*MR4C)xo^ zNOol+MkU8M`*C~@Q5z(XV?-(aQL%+}2%{fr;8Ao*h7xhKXBDIpot^?UoWaPC%vl($ zN!#Xq4@k))|4?K7g?MLEq%FR)IC#p4X35wo&c`RrW}~D*ufDkSICu;Vm=9)w)#YkR zx8=R?z~ug=y%d4rA4m$LVoT>;pjypSAhwjdJz4Y%{vnjB(#=a7okY;O?iM+3vrL-R z7-zGz{x#ae>*dt@s>YQ}&CP{yqR4J^va!Zzq7(+4r|g7K2YGQ2ex%|$BCurieGVqK=CwV3@0R8U?;?`g*?Egy-cx{g zq--Myy>)HUevV1kCnRunwo_aJ0hpd8aP6j72In;TOmM8)}rAPJW> zfTK!L1bnBZBbq8_3lB6ve{w`RWdv6ANJ;hC4v-UEHONtkObc96xlVc@G{%$RD=1Ed&@L7qNM3DjPY!8JpO9!MMWa5${KY-;en8mu; zKnspj?u?hcrR-r<^<*-Wcvz;cTM`Du#5qC;e<}8j$UH&Hu>`3Y4a~mS*q`2) z6~wyVNcfnQxyRA7TJj<|wnrVl#tuWMt=HBkC$dUXU^Iq&6+ltmM zwE200pJp)$-$?pi0^5aab&m7msuCBL3QL}kmmF&u@8n6LQ5XJq$bG`5-Z@v1tTUD` zgsLoyqmL<_F18Q((wr6Klj3M8d{x=~FMqD~qMTBYFUdTF%~EXS+Qs|~bWgmf67l<5 zi-yQIBD`76rQKn(7R}uop5I8~ZM}B6NU@@9N?;mzRwLs|pgKxBIgBjN|ASDoOBfKT zbm?EW8|(mG#z=`iUc1x!!M&{}H9pP;DXP!xv3e?21oG*Q?w1mQ^H}d9+NQ>P&3iDK zIp3wqoU(kzTkXw_m;|69!hdiyr-QKVkQcRMIsbdo)5x?Vvn_DCb0XOsuc5p<`AH~% zN{~?zm4upxFScT&JJ8pJ=Ha!Im^$AXr?nE~jRjc>2=2U1W{QKL)E-LTSeC5WqNnEK zp2S)xu*&?ZAqPXdebeUE-Xw4wNojGk8$z|8@VlO3WVfnaDTv6fqC=G=G~d3N z14E=Xa+DAfC!Yx#kJ6j4kt?9;Ebus+B3NaPX4yI#0A3XE;sBG;8#s*FvR{>NTy6TlFs0 zW5A<2EQlj5l#E}QOf^QMUh8G-rBpe8A=w&AirU%p*DSoOEDp1><9EcjEp~mZ7AmHy zlbww$bSxd%0s4NEFn0vn+xd8Uq*NtZPLUv*3~jSyw68eDzf#hsAg?=SDhUsj-chHL z63`jx!lVgvY$BS<1UlYLySF~|VwXo|jC4xUUu$q3R5KY9i@Bx6wm8brP;gRA4#|abK`2r9gu8x4fQyVf(PGj0z7?nK z)$xY07(k9igMRQ<^d1L6Ap)wL=z2mPl>(|)aU>#s7kUyD)43Nh#pIuogF6Fdb`jC!hs(dvVcxdeI-F}|oq&e1 z7g9h4!#o#VGhX-c0CDa=L<-9wj;nMG8Y~}_1f(yb7U%2D)F|>RwKpJq{0V-4ST2Q{9Ar@>0CA7RYEA`hn+(hQ z&YdD9LF76OBPhj)?S~tghIBv5Vq&HeQ)!Lh-aUOx*};neEbM$5tIn|RD{z%?hipv7 z+pK)$8sl|mf70mfg$B9e@Qmfb7L+*Ncj&5v&O+N(R(q`+2+1PqJv!A@puB{L1(W|5 zF^}qUW=%F?o|!0jOTCOp;T?`g<=9L}r+PH6%PPj;iTOJsR8rjAT|9^p zv}N#Ij>-*I>p&(YLr9iv_dzz&r4lMo0QVeWy9@6414IuYg4Bhq0KUjax0xcK#LN8} z8%r2Dil~&T6|aj#)RqNS!KymoW z0o|zVMpX#HbAGsB)3h6LRd*R&2hKUl^Z%>bG?D}mJ#a;3u_imk0m%rv1+2-SVH^L@ z+LRt9ZRopkGmsC^>exi=6J!$Z(ZXj5T7dH!BovCwYh%Ads_H(@LIL@EsWjhsiu$Yt z52f2Sqx}=0)k%_FNt0;OcPGD-i!UBor1mnN;PJA-Ie z&+6E4bDClQ!s5I8-3aj#+Efg9-7Fy0fq)spM>}HhOdqvvSaABAXr8-ypgoJO z0Dw#N_zBu2X&q@(&@Ff&>W|}Iv>DxQbT*^}N{K*ozQ$Lou)Zh-HYJ~x$cWw&`c1wiGRVgFzQG#BhAZQTPw!mNn3P*zJC4` z-O@CVX?xN?-;zZ+k7g|cNz`_(cARK;tcpN5{T8D+v^Qx#)}t0cDM=V_2Do=XP41qb z)2GfUoE(^MyTQPQSldtHLm_Q{Pl6Ld#*^X6wacW+{$U_?{L8w-86Qx(+y+Z9Dg zLI0@2t8iQfiGTn#a9@Rol7?BmaH-z+j&!mLTd#}Hl4??RrfBx4C*>{wYZolxkeRx& ze@oQ!3#~Nf>C{sFPGpF_Yu338t-?F|6?27^OPDa+K(JIiGZRbwgecY9F|E@(pH5+Rn|2sA>3=QH{ovr3th9E8ZN*m)QqtodUgDw zBy2r1DH~kfwEK04J({7;s$Gml$i9)O{a_ z%PTo>xI%Cr6KI!cVkkNRg?IdE**T7m&2vA2 z1PHbvt-u2t{{?5o@ATY`TzcUpp)sC?eEwpz@i;29$-Htd9hiUYy(>y#l z@1(aTh5lC9z!RhUhf4At*rfoM^YcS>#Wl;k9QxvRAvlii*A42U3a*sGkD~A=qWHms zHOXBUbe6!(Sq=dUk!DVbcU4X0#!=^;o|^IeE!p@7Nrv}*JlSZ{f$W-rQYvZRNvKFQ zlMA8BG59wDA`jFY{wJIt7>qmUJRmH|NKM$dSAtnKVgiSovQ(smuqOD}A_fEazz$P# zDjbJ>7slbGtI8J*W&AA=?Af1HQ~V`aqp9r>kR|^on1i9MDH6q-Zd*1{>97fhX{Bn{ z`aO_>ljJWPDzPh?;C9za1iWW?E8hdTX}9~PP0Zxb`wLcbb~dS`>K$9P~Y$#=i(AwYHbu^n^?Uo)pP@J5_9z-ZX*kRkGXChN~oO*qnyaLhT42 zb;mMWGFxaYF~)BsNsb99@Lwv0l2iN_6q0h08&Qs|U`wVO0XH?6*HB$alYfO4wz!Q4 z_#rZhVH^pm*%1PZfrDcp+Vms0o2BrNeSkVxpRpBW*U4Y>I^)pNo(&)3l^#B zL$bii>HtzCS;poEqxT7l0Rejq>EtRB5c85A0|0hd?9`QPN7PcBZ^bda_Zy{wgJa~AlpZ?7R(P`v-jkrq!C0sO_bj(fh)z=0$PbFgsdmmCH z68D{w8^~|qRzc>_6!`=hW6kF@Uv(b-TeMM7-!C_e&a&=Z$fj@V7umWgVY!xrJ5SdE zrUN+JK86uHeqYA-#PeEElByt_=7nl?{-T07rNERcyon16Ak)uiM%IR_hY) z42Y8oDycy7S`S4l=3AFVqoSUTjJs*-#GAyKeM9G@`#{8IJvl~KgS8Wf1R-eG3aDur zJ4NS1T82c3PjL}E)_=9~>{BnGYFwGmAkk4AnM!;S4KmhO%C+h=Q%Q;TUwJ7cl(2s> z!vQ2^in2>QU#7$&%C3#|SJkaVGEBBJd058(D&a{+@Y0S^!e+O(KB5g3N{LQ4ne;GU zDntUpDf#t8-efO_T1Ga3?7UYVtkzEy`Nq%}JJYp8{F@~uY3IKSf+GYkQO|IZ(vpIem^F>C`%{p|-*V9BCP~tx4HrW-;9oawBszL8)z2 zK9=Ykp-@>zc^8TD0+@4KKfm#RP>6Sa+Ck)%P@nv0qo0qsVD(;?Uuht|j-PY%s46FiS+ zwDWmySG`1O!U4 z4Cs1Ixdti~z@g-mBRF=c_I&oB%WlT$!g>JjN*WX-zVFF*mRoB(hH&p~V6FQTT;k=7n*Y=6?sbh$AWd+80gN)LbhRpvbi=sIJ(w)m z;DOJ9z$H-3MRmHf;Z}yc2RbkhloED4d$mw{?87+kP1%A!x~_sJ(5WS z^bJs|H^oMCJP1i8o)+n=Z3(nz7f{>3CrALa(l$6fz76N zHYqE0tQatMfFmm_9`bN_(5et-VWOUUIyVYzv&Z{lm8AJRy?m+ybfHi2@1;Jxm;4{`vN1^p8lm98u&9 z+>obvrFB$$>l`D93-->&cn@+|(K-obvycUe5C-rhSGJ~cgp`C<5kU$J2;EPj6`oYs zt;j{vqFCBHPgp83ZEyIsKNo*&`lMDM6p+?T(g}wx%P7A0d{$&;vfQCIo_}5g%61Z9 zf{}4MQ29_iMqMB!lD^I6pfsz`iV|b&^TuP_L=pw3uWiYv2un~cFjQPkc<>bsV@BLt0b+7p4h)*z7rE)|kro_>kboh3K|XNp|a2 zuvA49+~im}cHn&nMBVVXBiv1j?WJ(Yk^Id{eSRW7Y#V;r>*H_12KbRxH~Zupcf#Cw zyb-s1svc)FP)LDxo~<%;qb@+l0;*eTLN%T z24!NB&dBHYM=1rnsl$(JPDadpOt)6-Ws#UT6X*Drt=(BTVoTBzv$0iFd?iHnp?L`P z%mkHyQbKKuBaM&mvo=}g>{yyI#bQ8LGccB>G)tGvtna6Y_;a*2%C#j%JT+-9mT-!* z6^RZ(l$!9W3#5k^%&Ji9!KPaFhq~1V#$cm=qk#R!yPSOYsk*5LP@_&y}T<4MMJq^_$BD%DrqQD7DZ1)9n zq|!3d)wW#o2}^)hfitbq?o6yauU=)T2|r+2S}t`_Iox!1f-Gdx=egVdcuk?9s^c1D z0qO9$=_tyZBKgw62sI>WjDOb!+l95shagPRWnHb$S{Hj%iN%Ew>H0&cAp7v}gTT#G zlN1Ft1!^bAvSDrn_lDIJYS1J`<(3E++1_=f>f<6|iI4kprTms{<+=+-w4a3!DU9L> z4v<%66U@_;hP2@tsU6=w|CdSSGuC?;|F3F*b)DCiO7i73#WSqq_ifRIOHvQXbP>rN zndKh#x=4AC*_u?XU;CXuc>|LB5NaSs zb2%Vjr4rJWtA{`arLPj2iTjF{?;+NFl`5WgMp?x5Pr= zOZp@dKbBC$tm`;vAF(56$O2g;J_F@ZL@C~K{GGxK5QLm6d1xzYEIbRy+LH2h3DJOU zE$5xkf&msqviHZ?wG0<~ZN8!tZI>8QOVKTtNfQU$o^2e(BcB&EfGVVTMZZ?Zlj%lrQAQXI|uj!;uP-7#`I(g3Rq^oaml$ zuHFgn@6Ynf<5Z8ZYIeyp!4iV%y!J{$$xt(}=%Qq9P()dG#QGF7tCTXW%Lb6D(he)s zTwQ_<;^n3$p%jL|t<$K26R#Xd`!+ABAdqr|e;NNF$~8CqWR+42W-Iq=+dX_kWix+#bK8c7)osvB7UoDBQNjFEjV4 zL{a`|h}O$*-B}tdcwO>2x9s?@IG2x~Kep;h<$5v3QrnVpM@xOsWEa$zT`M@vOgLx3 zCcXoQcs2qJ4hc{yWfT-QkY2B4oY>POQG?+5mAL8YpuzA4YFhKXr|l8Wv<4Om&+kb? z>Iil|KDOY_cwgPyk_wxoc89M?Fo2us-EsD6m-a(aX0II|>49H;Sx)iWfRh!`s#BSI zNvSSKgfw(`x=_N#5A=fk#AN2o-(=DhS%={BP%laaOAeeuiE@OU3L)A&qIqObgjs?{ z5-deBXW-|qyezNQ;pYyP$hXaoFdwHb$DpYk_J1CP>pVX-V>+01+}lC-NOs)$dz-MK zxlreYW~Lk$vOR(O41&ZO^2Pm16DaFE=pkL^iy{|KVdtNy-{xx}2a-x_jDP7)K6$_> zP;k;Uj)jsnj%}^UbzinEevOSqeeWG%#6Z+D%bNK3aeQwdmykCOAf2j{etKHA?#^0lo9P`Vm=fS||UlreWiXN1E_yoXXIR}c%MoTk6-c1 zDZmLJ_=U32=|Gq%3Ltx%u{|ph=O!(hGZ%-{cWf1%e^7tu)`fQsp^{rb*&G=R))0*iPJ=5B zf$|fktTMj7i1~N2zK&786z#zw`WP?CO#TMcd470Ed!Dw~+;g2A8N2Al)FJkEyrm@0 z_OSD3zFy7xx*WGE;bE|2x)rMO;S+Q3^Y&AKzlG=;XX*aW$qYCAka}%NkFqi@iF_kx z;^Gv>_IqQ2-NYa(jvm?5^tL9XzV2Sax5iYqq()VMrv8NpR^O3?AAJ=OrrKH=&ylrU zYW3d3kVLXR@HC0uP$hUU?|r#lNTu%qOMcC9#}OQDqY&dbf;u?~PANDhnV~BW%qMH<5Jc++r~I zcXxY8WJ`|^ozvxAOAE$ilHGTAxUOgSrgK8sK)K}P%Q2u>PE?)PiVNwQ@qN>sV~a1A zz93BwLO@o>z6YQ*h+rBG7r#lC*Zt(!$uy0Bw?btM^6?5uxJ#-)kD-oWPi4z5BDZg) z=}$b%G;e)>nEvKB+Y)Gh~2SfxA`BbXrVTloRG^0#mVnJ8Bm8pjB4{^bs$zuBm>%f^XzyM^T~! z{4gYJZiSahhGpi*CfTcU9JOf)g4=?KL!M;yo1PtfmfK|6DGtK{G&puAd+u>ui1Z$d zFee20-FS2lCGE&7IV_TN>PH27CojL`atH34IxDeM(`(ut}jdB^WMCzFI?(7+J~(?dD{ zeXNvq$wcw@Nr9aEZ1-rPT*$@v^HGd}ttI$Oth&z?X|6vzg93Fzwf*lf0kUtsX-iBB z%F|`03#TMN87!zEa3UKE;@}18;7J@d|K%v+qWaf6ozQwLK_!KM<$~_9rxdQqb>A1M zEMS)*sKfcLB!Z6Q*sb2qyCyUPvWVum8UG&K-!pNJOUyU)?GoaU2)2$4{f1at#y>D= zj0a|YE#pb|H=9X%MZ8`Ozv z7D}9%Rz-M*RxZy_e@a3Te&1BmS%D>vly0N`^vHH)43J_Gy7-Z_;7VdxQdDicstKdq zIpI!9wW*=H@hQRXcN0R9Dgc%m3)0N?0LJ|cDao5NcV$l0Eb8BNh=F^gt}XNIaU$K~ z2%?u)wcXVmK>=ko9jPls8qx|yp@P-JaH;hFqw8&YG)aQ{zO0(sVee`!_pa8$S`dur z;Yb(>Jd6Yz&@pB_7Mg+%V;>B{r#7I2;FCT=baQA74Z#=@2Fzm%;DJY8d>_(0=;)7N ze-r=y|H!Q8nWYrnl^O35nU$59RnJ@Ur_$L|K7W-lwm>Q7`$oe}nnA{0GzM2XK&aT| zi2rf(`PiwvJ=Mk68ObBpm%b6>C1*OM(BO_8heI}pw-nE5=-ga5&^sskzgTIXXT%|U z+pB3@du(UIxFI*FPU@qOvHksd+npu@U$8W-LDEi>&a<)RBA#TV{`>ZG{UkM^i1Dky-&wt>}_;V9@5gm%(C zQrTndYFcnOwW8vlPMd7qQY^^Oj7(;ReYu(g$9dU&Dku@oKurPanj`;=?4&>uzf04R zhBj*@#1VVaZm8xWWHWEHA5|Gz{iAkRpS^(#bT;175Y}S6Ox5NO>8G% z1z}H5AR$U;P;U6=LCJ~+ku+Ij!0OY1w!P{Jfqn%ojJX$4+dixp7h)8DaxHD&#A}yE ztG+-~f-U&>O74*VuN=uSzT-IlOxS{LA*=2rvdP43JrwPn1AnM|QWAplQSkbNw?CIE z4r>Stj;ErSknfG8%eg9+eZ)GMgaXRtD$1uZ7dh*K5o2;QSjf4ZVM!)@Lq7%r?<_$) zQ?}6Sei^51WMivvfGc&ty^7t`LJ05_tK%XqUxL*o*23Um`yEP@l3ak#DhxKv%f6L(!#fbU$^t}_H zc+Y}11l1X?{yUSfP=znE$KekFXm`S5wQK$@-9MvM>;OdAyAb4-HHrq@}t3WkjQt_AAZ+tbPwKT4($ zSGy_n80MJ0=yxT8p;>AiY7}lAS`G3N9NNTyyr;QXd{IJvkV};zVtgmnErqVk!#L}$ z=4!&5@o>g!>snO7+}!#4n3Ka<(HYvEt)yge1+{SJPg`;^ zX59;?eqsROnkif6&S|@;tft&`Ml+WdXi|pZj!a57Iq8C!hUvO}kt{0K9lKQ;mkO=1 zW*5CPpi?w+zng;iBe`dgLhD)tu=&Cq^L>d(4o0HH_SG8^C`(417|3VNEuY11Z3!0e zVb5@m$pA3ivhkcy#J6h|On(B?GymcS7S?4ImcoLmNX$Nw(Oq%dKMA1wC>%0-!)KrK zja6J$|8Dn`n%G1X|5u{AzSz!@+EzcL>ra$P%bFT{YBrfIJsUiZJMEDHE+qOqxfF?& z;gym^)u>9k(T}BUN9(Jb_C^^wy;*8`HQcP>NX!Yh_c)$S2#~aC9OcFh;1Eyqu?EF* z48oTQq!=fVMlIsyLjGg5+HY{*|3<^Ia9M=aX(QVzw?!}Tuml3|fLq~SQ@iQnS(3tJ zo~rcH-mZ-8a2z$iLLCv>p+^f`7(Oqsl5>i-!BeRNPKK+;M_0G>NP^{9>L8U&;T9`( zfz0_X=A;^*APTKHxYf-2_i%jw#(uTzup3i>^tLB4Ohnn2f|2%b0M26m9dyBiKXh-m zkXeqhh2}1K(2|m9oZv1uWz4^(vvwo7T+4EQ?d8l~E=F|O{LwFExe=|S*yA#vJz}0N zxy(Tl1LdIX<{4>YJe0|2_A9L0b_3_j(d@gi^=w1?{=$m0I6AhkiPUejE!fko51c8N z+hC+o7ji9lFa8=VA)HD(*)zhN@e_3nsKZy(jjl$g)Z!ZdfIy@&)p1-XtSx9d%14&5 zTl8~_f6iIAoRT}C_+~N4@jr<@#}X-i6G|iy&YH$nIFBlEC-^HMQUqb5)@T$%P)ao^ z)k?3uBl}8HkM#Thkti}bA5_6Bqg2gv8!*mxFtejqw<76(4Exg{^6@}FGwH`tb2!Zo z^wR=f^;DAevt~2hy#iT&+foze5O?<@%y*Ogrcyq?0R`<}`BW@-p)|P0t{`YW`{wWa zTuYE&HK;rTczUt2#JYVIp#DWQUW2OmkM#N|5^->xaC~mGu-;xukYbSUE=;LygZEQ| zEUPzCP^^t%pPKt1kLd8FfQSDRzEil=%f*nE*{F{FzQbq{i6v1A-JsSSuV;N-Nx#9@ z$rAl6C;a1jj+@yV|3*DAeG!4*gX^#aN)ngzJHedCCGHFgB%~fZW6Q=o=;Jry14}=KabQ>s(31 z)AhxcF+NH0hd1Xi#A*BWw#L?O>s2?Ex%BJo1ZT!~(Z<+wEZ9O=V5VC*{g)U5-kaPZ z$PoTT0M1S)&IXKUID*;s9|F68<|rxw4t`)i->HLkFNDdqL_=zyOsn$O=Nr<{cNRfFenc1oU5 zsY;OPi%G4nv8PhGK;|CrY3z5yp2w40hQC6G3P{y@XyAKpad1(p;rT_;dlMAg%a`!k zIhgvp0mL#dW%nQo2t5#Zr|)aJ^^y%$7Mw*IQ>o6d)1WE{!*Rou4Ir62;O;v{Dk*-q zo|>*~`YENp>xR&}9c@5WE&3LixWy&zI|*(Mi;GghUJd0z2hEdIn`VMNwTIc^J727} zS8~GAFPgC#(ogFsmoJoq?`dziLA2{!%(uei(h#+H#zd=Oyzsfd0>g4IPj4{-F?oSoUe3qInWhs-ZG^liF*Y< zVW|KmUUsDy)2w@h&{TMV>jRxMDNo;n^VL!xrOsB#Z?=C9i@COtsmbn|(p+O7yL~s_ zDYyPQ1EL&??$Pz`=22=ba*ru+aTw6_V;_6+XFg<%3Z-)8HXHb=?5J00Ye*o6A>^k$ z#!u)wOEKVA;kDSZLZHZ8DYjD*VkpI$VDE^PC(*u9)JEYBJ>91PsH%4-%-cq#Vjp4) z(T&b*ayxT>;QDFfieN1#cC-R)Kb1$rAB@lKKd3Zl$ygYj zh?{22ycsWsaPz|1mN>>pM>B+Q9l=4PS2zbt?u-=|g(Q+uk=uzK6Jy)?w1X?3THDl; zuAIAF8e7YIjho*=G_&Utk(QuTa0TQN7MS&{@E+82(4HgyUHfgL&!_=`qx}g4`8Gb` zs~fiCggIx|Tg!;bj5y>u#siE6PKVP7oo7%mo|$ow)ED928^{Mub5d^N*bw{_HntW< zX+H`zh#NBL5pDu4Y?R?3JAnontE1Xbo3+56@03Kg8z$r-VB1+E zKnn}D5eUtOlE=|&EFwY#VOFtdQ$4S=`j zFIw~ThP1-S{>hNt;uh&tDFK3&k)V`U4@k9!#HN)qBGF{EY1S)=bBPn;dLlWKnAd3U zjZo4;^OhQH>2%}dTU-tj8aOTy{zVhe2_a?JIqB}wnv@K!tD%(OpE%&?u6@F@Jnu=2 z6~5cda1$iv{cD;KTJ<}CdJqV0CoYW^%N^E*NvsRxLm$UoX)+J*4Gw4CT36-eM&k=y z--L}f30fS$CC@oVnEQvm(mkO6p(fUba^-w$J@8RtgjKI|KRMI1fxf$$*0ub8dggU^ zeUV=rH_uDiVX`S@at;XG!oGqyGy{^g0)7KxpUvs>UV79u`*!Ls>U*g&NOLiIdlXh9 zg#xk10_{Z?j+9qVfc^$5N79jc%h5cg{S<(yJY@DfkaMVo#nI&7^jOD|JA)Ze*Vd6X z+s+)UP-f1emnHaV28i!Sp>}?(58kq^UcBLiyr8ha2Cz8~VsTcN#C6!mmwO0JKl?ux zcd8(h-30k1Tv791&7B?YDqvkZcRYC7R@{Gc=5PaiRiQOLm)*@rvF5AEx{(2<#}1?% zN?c9}6X9>*(C;?`nlJz}%+>mqq7kl(=jhiis%p;bv4)3*@8opzt8^(lL2 zHrZszuM!u0FGBr}H&oxQ3`g`HJV(fK!y#Uys{{sCfk7dnd9Pt zb5bx2(P7I8io-+Yt!gD3Vliw~0UBc0t-$+-x$$^FOtzFR&OTj;CcTif<&C+aMmzVd zAY^fq6zf$J{D#>vTX@hhyA+@^g#gpT#N;He8@&|X|1%^4JJ3ZHT&KhB|F3JZslSC+ z8UQcETYG|>3Vk2eM7GaAnXmPsLZhGkKEfVAY8y&$#|Xq=KMNP+j7`1fv)SAtMKZ+J z6B=lsV{l4~P>qtkU(T?GJK!4&i7+4J$*QhJ9OBu&oemTU&9LBa#W=<*RZ7stR7ypr zi9;>YC(P~d7=L(S{=uA9VrjkZZ8u~pFPsTdVJ}vTO|X)fc9ky5Qv3K1FqIFKIT#V+ z*Xd|kN^ZEG1(fxI5R$!qf~{vY>uDT840BnKWk-nScd5PD+$ShGrF3=^7!A^bXRt%L zprvu}c|h$QSC={`5=1Ca%C&J+(A}a63|{Hj=Rm`vw;0JGdDAVGDcT^U!``dx9Grhi4BE zpp;aj*WoUU)RN7b@ajEc@UK=0Kr=^#iMc`DQWPU7&TZMaxuf5R)>rtRpoSf#h7Yqo zZV3{5{Zex}3k5dt)NiZfPZsIZAOdHlg(7)Pq2%x*Y2n476AC0paBzzwNqHGi`ap0L zhgR_B^m(_PUK;!`Ll6_aOCcJqv|sOGq{EMkX6`^v+bwgB-8+Z3{% zC4i5gdxMZijsGATjgPymwMaX^;DYUw`zARFzr4{9;VXVoN^-L*1+URfJV$(m(M~`F z_b6W&Wu7zX+;TFAIkntf((?qc#7Id8s373& z9BbV>B+yTiw6f}%QwXOBZxyyV{5N%-JBRQ{uR-JoG1led_@PM5rsHo(g!!X77066g zK)8HKXiZ^GX~|}btiYa_darSm9YI{OzM*;h$YLQboD@0gU!Y$2m=rsQydQ}50}Bl# z^W1#VJQJArN}Y&xFs#{Evx)6h&a%UhXs4)9euS9XJz|=;%BguOVS8V zaT%rX1X9ZZn$su99K_O89DSRmT)By75|SG37oz&IeVg2wj2h@>>9rk!8No=;Xx!YO z45m~-k#*SWQoSj-Df$Ad75$0)ONQBsxiq&CpclDrHEW&8rKE;-{pYu2?R zuDe#A`lGoaX0F$v1EOagkO_FxzF$BK>y>l*G=&~oJUYL?&ZPkSWdE0MF^Ja4t~&NX z?7}kCM`Qe#dG|>B51e>y&YUHs6xQ^3&w$9O&Q1SxbEgFb4;Qe?;&48t zAi$E;VyCdz56%9jtM8b=afUJ6XNXb3j%>z+m*Q=)I4Bb^&6T8Kn^Ts? z9faUz*vcwG-*fz5Q^m`1z^D#>qn7xCK6)+3O%fgY@AdVa*g0N$ ze?cRFt&NOVsiHN?YQpSPQ|+X(H^;VL6BY8pIYaVKrs1^k3gF*1A-RC5gKfsyB9ZI1 zo(1FeKo8&p2YD2ILnh8h%xee;Mxoo;&K{NYrUjq=R?$6sR!7I)By;ZsCF>kU;&{T> z+1T?Ax|QMc5bXV6vvu7qJcp4=Z)DvOJ_R8bUBZKb+Z28Uo#SHcN2z80qCZ6!ym~tP zv$dK+)huh;pX`p z`ZnMSLFa^9W|xPiLKV~0p2kG6!I`6{^mZ>yoiy@edWj^b>F=&zXyt{!9qwQ7-57)X zRdh@50$hgeHW;phr>BB+_A6G1RXFxZFjw8M=YXfpbAbq^0m@fRatx;3Vy|GgF5i=d zm6TA>v!##eX;w!64MpwgY;VaBNHz{I452`eMsZkc@<|!joqB>P`t{1*dcR;&#z5xG zF>~BU$ny5G6FWZRHd|ZS$JkSO1x?i}w)z5KUB~hypn@zKivi~ z45{ZHs0VR?DECns_pWL_A%>y2|7mzwcT_mzpLns(!a5f)#`mGd@9sCLO_{QK|Ri9_ppgAga-R&Lv3ry30


    )3im#cyr&Evy+t;F~ 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ěPJYo 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�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

    B=>@ga?xP^&o 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 AO8@`> literal 0 HcmV?d00001 diff --git a/examples/Axelbrooke/run.sh b/examples/Axelbrooke/run.sh new file mode 100755 index 0000000..59bcd94 --- /dev/null +++ b/examples/Axelbrooke/run.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +echo "please be patient as I build the library and the example" + mvn -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -f ../../pom.xml package > /dev/null && javac -cp "../../target/*" CompressBitmap.java && java -cp "../../target/*":. CompressBitmap example_bitmap.bin From 9d5914131134ecbda7bad97c36a4684aca462e8a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Thu, 7 Apr 2016 18:59:13 -0400 Subject: [PATCH 023/170] Forgot to save content --- examples/Axelbrooke/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/examples/Axelbrooke/README.md b/examples/Axelbrooke/README.md index e69de29..fad997e 100644 --- a/examples/Axelbrooke/README.md +++ b/examples/Axelbrooke/README.md @@ -0,0 +1,25 @@ +# Bitset compression example + +A bitset can be considered as an array of integers. +Suppose you want to compress it quickly (at a rate of + millions of integers per second or better). + + The ``CompressBitmap.java`` file shows how it can be done. + +## Usage + +```bash +./run.sh + +loading file example_bitmap.bin as a bitmap +Compressing 1784073 integers +compressed from 6969KB to 1348KB +ratio: 5 +decoding speed:199 millions of integers per second +encoding speed:124 millions of integers per second +note: with a bit of effort, speed can be much higher. + +I will try to compress the original bitmap using zip. +zip encoding speed:0.4458317816544745 million of bytes per second +zip compression ratio at best level : 2.255323798747234 +``` From 871ceb5b8a0f93a079fe0ca08c5275353435e09e Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 10 Apr 2016 10:31:27 -0400 Subject: [PATCH 024/170] Source should be 1.6 or better, surely. --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c4afee9..1406b43 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 0.1.7-SNAPSHOT jar - 1.5 - 1.5 + 1.6 + 1.6 UTF-8 From f83240c3a9e53b2d60849f5f1c3f88a31631241e Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 10 Apr 2016 10:49:38 -0400 Subject: [PATCH 025/170] Excluding some files from documentation. --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index 1406b43..999fd09 100644 --- a/pom.xml +++ b/pom.xml @@ -101,6 +101,9 @@ org.apache.maven.plugins maven-javadoc-plugin 2.8 + + com.kamikaze.pfordelta:me.lemire.integercompression.benchmarktools + attach-javadocs @@ -127,6 +130,10 @@ org.jacoco jacoco-maven-plugin 0.7.2.201409121644 + + com/kamikaze/pfordelta/* + me/lemire/integercompression/benchmarktools/* + prepare-agent From d89453e667b0a7af63b7f2c2a334ae3780f5bd57 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 10 Apr 2016 14:12:25 -0400 Subject: [PATCH 026/170] Updating coverage plugin. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 999fd09..fe3f723 100644 --- a/pom.xml +++ b/pom.xml @@ -146,7 +146,7 @@ org.eluder.coveralls coveralls-maven-plugin - 3.1.0 + 3.2.1 From e652298eb17498acd6f0dcd0084bf199ba186121 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 10 Apr 2016 14:32:52 -0400 Subject: [PATCH 027/170] Updating jacobo plugin. --- pom.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fe3f723..ff274b0 100644 --- a/pom.xml +++ b/pom.xml @@ -129,10 +129,12 @@ org.jacoco jacoco-maven-plugin - 0.7.2.201409121644 + 0.7.6.201602180812 + com/kamikaze/pfordelta/* me/lemire/integercompression/benchmarktools/* + From 6e498d63b04f2be84ae040fd77f1b3fdf6c40ed8 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 10 Apr 2016 21:39:02 -0400 Subject: [PATCH 028/170] Updating oss-parent. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff274b0..967f17a 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ org.sonatype.oss oss-parent - 5 + 9 From 4eab2b38d28c86900ff0c0f88037aa61a4f357f1 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 20 Apr 2016 19:56:02 -0400 Subject: [PATCH 029/170] Adding reference. --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b15ef84..af79474 100644 --- a/README.md +++ b/README.md @@ -203,9 +203,8 @@ He also posted his slides online: http://www.slideshare.net/ikhtearSharif/ikhtea Other recommended libraries ----------------------------- -TurboPFor is a C library that offers lots of interesting optimizations and Java wrappers. Well worth checking! - -https://github.com/powturbo/TurboPFor +* CSharpFastPFOR: A C# integer compression library https://github.com/Genbox/CSharpFastPFOR +* TurboPFor is a C library that offers lots of interesting optimizations and Java wrappers. Well worth checking! (Uses a GPL license.) https://github.com/powturbo/TurboPFor Funding ----------- From 737b4216b2b1f3e2bfe636e3fd85110b68c289bf Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 20 Apr 2016 19:59:47 -0400 Subject: [PATCH 030/170] Adding another lib. ref. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index af79474..bc7a4aa 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,7 @@ He also posted his slides online: http://www.slideshare.net/ikhtearSharif/ikhtea Other recommended libraries ----------------------------- +* Encoding: Integer Compression Libraries for Go https://github.com/zhenjl/encoding * CSharpFastPFOR: A C# integer compression library https://github.com/Genbox/CSharpFastPFOR * TurboPFor is a C library that offers lots of interesting optimizations and Java wrappers. Well worth checking! (Uses a GPL license.) https://github.com/powturbo/TurboPFor From 4842c942b6060a0e06afa8a59cf66c7fbe6ea405 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 22 Apr 2016 18:12:03 -0400 Subject: [PATCH 031/170] Documentation fix. --- CHANGELOG | 3 ++ .../lemire/integercompression/FastPFOR.java | 30 +++++++++---------- .../integercompression/FastPFOR128.java | 28 ++++++++--------- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 660b5bf..14d7b68 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.1.7 (April 22nd 2016) + - Documentation fix. + 0.1.4, 0.1.5, 0.1.6 (November 25th 2015) - Added IntCompressor and IntegratedIntCompressor for users looking for a simpler API diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index 4f0591f..d10576f 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -16,8 +16,8 @@ * up to 65536 integers. Note that it is important, to get good * compression and good performance, to use sizeable blocks (greater than 1024 integers). * For arrays containing a number of integers that is not divisible by BLOCK_SIZE, you should use - * it in conjunction with another CODEC: - * + * it in conjunction with another CODEC: + * * IntegerCODEC ic = new Composition(new FastPFOR(), new VariableByte()). *

    * For details, please see: @@ -29,23 +29,23 @@ *

    *

    For sufficiently compressible and long arrays, it is faster and better than other PFOR * schemes.

    - * + * * Note that this does not use differential coding: if you are working on sorted - * lists, use IntegratedFastPFOR instead. + * lists, you should first compute deltas, see {@link #me.lemire.integercompression.differential.Delta#delta}. * * For multi-threaded applications, each thread should use its own FastPFOR * object. - * + * * @author Daniel Lemire */ public final class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { final static int OVERHEAD_OF_EACH_EXCEPT = 8; /** - * + * */ public final static int DEFAULT_PAGE_SIZE = 65536; /** - * + * */ public final static int BLOCK_SIZE = 256; @@ -57,11 +57,11 @@ public final class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { final int[] dataPointers = new int[33]; final int[] freqs = new int[33]; final int[] bestbbestcexceptmaxb = new int[3]; - + /** * Construct the FastPFOR CODEC. - * + * * @param pagesize * the desired page size (recommended value is FastPFOR.DEFAULT_PAGE_SIZE) */ @@ -85,7 +85,7 @@ public FastPFOR() { /** * Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE integers * are provided, nothing is done). - * + * * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper) */ @Override @@ -93,7 +93,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); // Allocate memory for working area. - + final int finalinpos = inpos.get() + inlength; while (inpos.get() != finalinpos) { int thissize = Math.min(pageSize, @@ -101,7 +101,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, encodePage(in, inpos, thissize, out, outpos); } - + } private void getBestBFromData(int[] in, int pos) { @@ -215,7 +215,7 @@ private void encodePage(int[] in, IntWrapper inpos, int thissize, * Uncompress data in blocks of integers. In this particular case, * the inlength parameter is ignored: it is deduced from the compressed * data. - * + * * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper) */ @Override @@ -292,7 +292,7 @@ private void decodePage(int[] in, IntWrapper inpos, int[] out, for (int k = 0; k < cexcept; ++k) { final int pos = byteContainer.get() &0xFF; out[pos + tmpoutpos] |= 1 << b; - } + } } else { for (int k = 0; k < cexcept; ++k) { final int pos = byteContainer.get() &0xFF; @@ -313,7 +313,7 @@ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, return; out[outpos.get()] = inlength; outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); + headlessCompress(in, inpos, inlength, out, outpos); } @Override diff --git a/src/main/java/me/lemire/integercompression/FastPFOR128.java b/src/main/java/me/lemire/integercompression/FastPFOR128.java index 50ccc2d..a5ba5d1 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR128.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR128.java @@ -12,23 +12,23 @@ /** * This class is similar to FastPFOR but uses a small block size. - * + * * Note that this does not use differential coding: if you are working on sorted - * lists, use IntegratedFastPFOR instead. - * + * lists, you should first compute deltas, see {@link #me.lemire.integercompression.differential.Delta#delta}. + * * For multi-threaded applications, each thread should use its own FastPFOR * object. - * + * * @author Daniel Lemire */ public final class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC { final static int OVERHEAD_OF_EACH_EXCEPT = 8; /** - * + * */ public final static int DEFAULT_PAGE_SIZE = 65536; /** - * + * */ public final static int BLOCK_SIZE = 128; @@ -40,10 +40,10 @@ public final class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC { final int[] dataPointers = new int[33]; final int[] freqs = new int[33]; final int[] bestbbestcexceptmaxb = new int[3]; - + /** * Construct the FastPFOR CODEC. - * + * * @param pagesize * the desired page size (recommended value is FastPFOR.DEFAULT_PAGE_SIZE) */ @@ -66,7 +66,7 @@ public FastPFOR128() { /** * Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE integers * are provided, nothing is done). - * + * * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper) */ @Override @@ -192,7 +192,7 @@ private void encodePage(int[] in, IntWrapper inpos, int thissize, * Uncompress data in blocks of integers. In this particular case, * the inlength parameter is ignored: it is deduced from the compressed * data. - * + * * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper) */ @Override @@ -271,7 +271,7 @@ private void decodePage(int[] in, IntWrapper inpos, int[] out, for (int k = 0; k < cexcept; ++k) { final int pos = byteContainer.get() &0xFF; out[pos + tmpoutpos] |= 1 << b; - } + } } else { for (int k = 0; k < cexcept; ++k) { final int pos = byteContainer.get() &0xFF; @@ -284,7 +284,7 @@ private void decodePage(int[] in, IntWrapper inpos, int[] out, outpos.set(tmpoutpos); inpos.set(inexcept); } - + @Override public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { @@ -293,7 +293,7 @@ public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, return; out[outpos.get()] = inlength; outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); + headlessCompress(in, inpos, inlength, out, outpos); } @Override @@ -305,7 +305,7 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, inpos.increment(); headlessUncompress(in, inpos, inlength, out, outpos, outlength); } - + @Override public String toString() { return this.getClass().getSimpleName(); From efbdfd70b5b2d65a8d60d034db387bbe9edd6ed8 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 22 Apr 2016 18:12:38 -0400 Subject: [PATCH 032/170] Changing link for see --- src/main/java/me/lemire/integercompression/FastPFOR.java | 2 +- src/main/java/me/lemire/integercompression/FastPFOR128.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index d10576f..bc9cbec 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -31,7 +31,7 @@ * schemes.

    * * Note that this does not use differential coding: if you are working on sorted - * lists, you should first compute deltas, see {@link #me.lemire.integercompression.differential.Delta#delta}. + * lists, you should first compute deltas, @see me.lemire.integercompression.differential.Delta#delta. * * For multi-threaded applications, each thread should use its own FastPFOR * object. diff --git a/src/main/java/me/lemire/integercompression/FastPFOR128.java b/src/main/java/me/lemire/integercompression/FastPFOR128.java index a5ba5d1..c1efa94 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR128.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR128.java @@ -14,7 +14,7 @@ * This class is similar to FastPFOR but uses a small block size. * * Note that this does not use differential coding: if you are working on sorted - * lists, you should first compute deltas, see {@link #me.lemire.integercompression.differential.Delta#delta}. + * lists, you should first compute deltas, @see me.lemire.integercompression.differential.Delta#delta. * * For multi-threaded applications, each thread should use its own FastPFOR * object. From 890d51fc5dde7eceb9d389136c66ac919f58fa22 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 22 Apr 2016 18:13:46 -0400 Subject: [PATCH 033/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 967f17a..effa84b 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.7-SNAPSHOT + 0.1.7 jar 1.6 From 11e2fbf0d77a626ef7150ea6f87721b9b6213b9c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 22 Apr 2016 18:13:48 -0400 Subject: [PATCH 034/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index effa84b..bdd7b57 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.7 + 0.1.8-SNAPSHOT jar 1.6 From 821e8e6b8bc77786b7a24ad696e739551a1d1620 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 7 Aug 2016 11:28:44 -0400 Subject: [PATCH 035/170] Not sure. --- .../benchmarktools/BenchmarkOffsettedSeries.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java index d9243bd..c31411d 100644 --- a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java +++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkOffsettedSeries.java @@ -88,7 +88,7 @@ private static void benchmarkSine(final PrintWriter csvWriter, final IntegerCODEC[] codecs, final int count, final int length, final int mean, final int range, final int freq) { String dataProp = String.format( - "(mean=%1$d range=%2$d freq=%2$d)", mean, range, freq); + "(mean=%1$d range=%2$d freq=%3$d)", mean, range, freq); int[][] data = generateSineDataChunks(0, count, length, mean, range, freq); benchmark(csvWriter, "Sine " + dataProp, codecs, data, From 39536e72195fd4d34464da49107551d47a1a78f7 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 13 Sep 2016 17:15:42 -0400 Subject: [PATCH 036/170] Preparing release --- CHANGELOG | 3 + .../integercompression/GroupSimple9.java | 3692 +++++++++++++++++ .../me/lemire/integercompression/S16.java | 379 +- .../java/me/lemire/integercompression/S9.java | 363 +- .../lemire/integercompression/Simple16.java | 358 +- .../me/lemire/integercompression/Simple9.java | 557 ++- .../me/lemire/integercompression/Util.java | 10 +- .../benchmarktools/Benchmark.java | 21 +- .../lemire/integercompression/BasicTest.java | 9 + 9 files changed, 4536 insertions(+), 856 deletions(-) create mode 100644 src/main/java/me/lemire/integercompression/GroupSimple9.java diff --git a/CHANGELOG b/CHANGELOG index 14d7b68..a899df4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.1.8 (September 13th 2016) + - Added GroupSimple9 + 0.1.7 (April 22nd 2016) - Documentation fix. diff --git a/src/main/java/me/lemire/integercompression/GroupSimple9.java b/src/main/java/me/lemire/integercompression/GroupSimple9.java new file mode 100644 index 0000000..d109fee --- /dev/null +++ b/src/main/java/me/lemire/integercompression/GroupSimple9.java @@ -0,0 +1,3692 @@ +package me.lemire.integercompression; + +/** + * Group Simple 9 Credit Kun Jiang, Yuexiang Yang and Qinghua Zheng source: + * https://github.com/deeper2/simple + * + * Adapted by D. Lemire. + */ + +public final class GroupSimple9 implements IntegerCODEC { + + private static final int[][] M = { { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, { 9, 10, 11, 12, 13, 14, 15, 16, 17 }, + { 18, 19, 20, 21, 22, 23, 24, 25, 26 }, { 27, 28, 29, 30, 31, 32, 33, 34, 35 }, + { 36, 37, 38, 39, 40, 41, 42, 43, 44 }, { 45, 46, 47, 48, 49, 50, 51, 52, 53 }, + { 54, 55, 56, 57, 58, 59, 60, 61, 62 }, { 63, 64, 65, 66, 67, 68, 69, 70, 71 }, + { 72, 73, 74, 75, 76, 77, 78, 79, 80 } }; + + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { + int tmpoutpos = outpos.get(); + int currentPos = inpos.get(); + int selector1 = 0; + int selector2 = 0; + out[tmpoutpos++] = inlength; + outpos.add(1); + final int finalin = currentPos + inlength; + while (currentPos < finalin - 28 * 2) { + mainloop1: for (selector1=0; selector1 <= 8; selector1++) { + int compressedNum = codeNum[selector1]; + //if (finalin <= currentPos + compressedNum - 1) + // compressedNum = finalin - currentPos; + int b = bitLength[selector1]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop1; + } + currentPos += compressedNum; + break; + } + mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) { + int compressedNum = codeNum[selector2]; + //if (finalin <= currentPos + compressedNum - 1) + // compressedNum = finalin - currentPos; + int b = bitLength[selector2]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop2; + } + currentPos += compressedNum; + break; + } + int code = M[selector1][selector2]; + out[tmpoutpos] = 0; + out[tmpoutpos + 1] = 0; + switch (code) { + case 0: + encode0(in, inpos, code, out, outpos); + break; + case 1: + encode1(in, inpos, code, out, outpos); + break; + case 2: + encode2(in, inpos, code, out, outpos); + break; + case 3: + encode3(in, inpos, code, out, outpos); + break; + case 4: + encode4(in, inpos, code, out, outpos); + break; + case 5: + encode5(in, inpos, code, out, outpos); + break; + case 6: + encode6(in, inpos, code, out, outpos); + break; + case 7: + encode7(in, inpos, code, out, outpos); + break; + case 8: + encode8(in, inpos, code, out, outpos); + break; + case 9: + encode9(in, inpos, code, out, outpos); + break; + case 10: + encode10(in, inpos, code, out, outpos); + break; + case 11: + encode11(in, inpos, code, out, outpos); + break; + case 12: + encode12(in, inpos, code, out, outpos); + break; + case 13: + encode13(in, inpos, code, out, outpos); + break; + case 14: + encode14(in, inpos, code, out, outpos); + break; + case 15: + encode15(in, inpos, code, out, outpos); + break; + case 16: + encode16(in, inpos, code, out, outpos); + break; + case 17: + encode17(in, inpos, code, out, outpos); + break; + case 18: + encode18(in, inpos, code, out, outpos); + break; + case 19: + encode19(in, inpos, code, out, outpos); + break; + case 20: + encode20(in, inpos, code, out, outpos); + break; + case 21: + encode21(in, inpos, code, out, outpos); + break; + case 22: + encode22(in, inpos, code, out, outpos); + break; + case 23: + encode23(in, inpos, code, out, outpos); + break; + case 24: + encode24(in, inpos, code, out, outpos); + break; + case 25: + encode25(in, inpos, code, out, outpos); + break; + case 26: + encode26(in, inpos, code, out, outpos); + break; + case 27: + encode27(in, inpos, code, out, outpos); + break; + case 28: + encode28(in, inpos, code, out, outpos); + break; + case 29: + encode29(in, inpos, code, out, outpos); + break; + case 30: + encode30(in, inpos, code, out, outpos); + break; + case 31: + encode31(in, inpos, code, out, outpos); + break; + case 32: + encode32(in, inpos, code, out, outpos); + break; + case 33: + encode33(in, inpos, code, out, outpos); + break; + case 34: + encode34(in, inpos, code, out, outpos); + break; + case 35: + encode35(in, inpos, code, out, outpos); + break; + case 36: + encode36(in, inpos, code, out, outpos); + break; + case 37: + encode37(in, inpos, code, out, outpos); + break; + case 38: + encode38(in, inpos, code, out, outpos); + break; + case 39: + encode39(in, inpos, code, out, outpos); + break; + case 40: + encode40(in, inpos, code, out, outpos); + break; + case 41: + encode41(in, inpos, code, out, outpos); + break; + case 42: + encode42(in, inpos, code, out, outpos); + break; + case 43: + encode43(in, inpos, code, out, outpos); + break; + case 44: + encode44(in, inpos, code, out, outpos); + break; + case 45: + encode45(in, inpos, code, out, outpos); + break; + case 46: + encode46(in, inpos, code, out, outpos); + break; + case 47: + encode47(in, inpos, code, out, outpos); + break; + case 48: + encode48(in, inpos, code, out, outpos); + break; + case 49: + encode49(in, inpos, code, out, outpos); + break; + case 50: + encode50(in, inpos, code, out, outpos); + break; + case 51: + encode51(in, inpos, code, out, outpos); + break; + case 52: + encode52(in, inpos, code, out, outpos); + break; + case 53: + encode53(in, inpos, code, out, outpos); + break; + case 54: + encode54(in, inpos, code, out, outpos); + break; + case 55: + encode55(in, inpos, code, out, outpos); + break; + case 56: + encode56(in, inpos, code, out, outpos); + break; + case 57: + encode57(in, inpos, code, out, outpos); + break; + case 58: + encode58(in, inpos, code, out, outpos); + break; + case 59: + encode59(in, inpos, code, out, outpos); + break; + case 60: + encode60(in, inpos, code, out, outpos); + break; + case 61: + encode61(in, inpos, code, out, outpos); + break; + case 62: + encode62(in, inpos, code, out, outpos); + break; + case 63: + encode63(in, inpos, code, out, outpos); + break; + case 64: + encode64(in, inpos, code, out, outpos); + break; + case 65: + encode65(in, inpos, code, out, outpos); + break; + case 66: + encode66(in, inpos, code, out, outpos); + break; + case 67: + encode67(in, inpos, code, out, outpos); + break; + case 68: + encode68(in, inpos, code, out, outpos); + break; + case 69: + encode69(in, inpos, code, out, outpos); + break; + case 70: + encode70(in, inpos, code, out, outpos); + break; + case 71: + encode71(in, inpos, code, out, outpos); + break; + case 72: + encode72(in, inpos, code, out, outpos); + break; + case 73: + encode73(in, inpos, code, out, outpos); + break; + case 74: + encode74(in, inpos, code, out, outpos); + break; + case 75: + encode75(in, inpos, code, out, outpos); + break; + case 76: + encode76(in, inpos, code, out, outpos); + break; + case 77: + encode77(in, inpos, code, out, outpos); + break; + case 78: + encode78(in, inpos, code, out, outpos); + break; + case 79: + encode79(in, inpos, code, out, outpos); + break; + case 80: + encode80(in, inpos, code, out, outpos); + break; + default: + throw new RuntimeException("unsupported code"); + }// end switch + inpos.set(currentPos); + tmpoutpos += 2; + } + + outer: while (currentPos < finalin) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalin <= currentPos + compressedNum - 1) + compressedNum = finalin - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + if (compressedNum != codeNum[selector]) { + res <<= (codeNum[selector] - compressedNum) * b; + } + res |= selector << 28; + out[tmpoutpos++] = res; + + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + inpos.set(currentPos); + outpos.set(tmpoutpos); + } + + private void encode0(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + (in[inf + i]); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode1(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode2(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 28 + i];// 第二个28位是低位存储的,所以浪费的1比特在最顶端。 + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode3(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode4(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode5(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode6(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode7(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode8(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode9(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode10(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) { + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + + } + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode11(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode12(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode13(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode14(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode15(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode16(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode17(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode18(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 9 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode19(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 9 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode20(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 9 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode21(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode22(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode23(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode24(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode25(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode26(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode27(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode28(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode29(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode30(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode31(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode32(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode33(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode34(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode35(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode36(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode37(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode38(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode39(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode40(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode41(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode42(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode43(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode44(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode45(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode46(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode47(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode48(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode49(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode50(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode51(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode52(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode53(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode54(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode55(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode56(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode57(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode58(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode59(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode60(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode61(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode62(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode63(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode64(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode65(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode66(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode67(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode68(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode69(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode70(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode71(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode72(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode73(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode74(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode75(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode76(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode77(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode78(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode79(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + private void encode80(final int[] in, final IntWrapper inOffset, final int code, final int[] out, + final IntWrapper outOffset) { + int inf = inOffset.get(); + int outf = outOffset.get(); + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + outOffset.add(2); + } + + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + int currentPos = outpos.get(); + int tmpinpos = inpos.get(); + final int finalout = currentPos + in[tmpinpos++]; + while (currentPos < finalout - 2 * 28) { + + int val = in[tmpinpos++]; + int valn = in[tmpinpos++]; + int header = val >>> 24; + switch (header) { + case 0: { + decode0(val, valn, out, currentPos); + currentPos+=56; + break; + } + case 1: { + decode1(val, valn, out, currentPos); + currentPos+=42; + break; + } + case 2: { + decode2(val, valn, out, currentPos); + currentPos+=37; + break; + } + case 3: { + decode3(val, valn, out, currentPos); + currentPos+=35; + break; + } + case 4: { + decode4(val, valn, out, currentPos); + currentPos+=33; + break; + } + case 5: { + decode5(val, valn, out, currentPos); + currentPos+=32; + break; + } + case 6: { + decode6(val, valn, out, currentPos); + currentPos+=31; + break; + } + case 7: { + decode7(val, valn, out, currentPos); + currentPos+=30; + break; + } + case 8: { + decode8(val, valn, out, currentPos); + currentPos+=29; + break; + } + case 9: { + decode9(val, valn, out, currentPos); + currentPos+=42; + break; + } + case 10: { + decode10(val, valn, out, currentPos); + currentPos+=28; + break; + } + case 11: { + decode11(val, valn, out, currentPos); + currentPos+=23; + break; + } + case 12: { + decode12(val, valn, out, currentPos); + currentPos+=21; + break; + } + case 13: { + decode13(val, valn, out, currentPos); + currentPos+=19; + break; + } + case 14: { + decode14(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 15: { + decode15(val, valn, out, currentPos); + currentPos+=17; + break; + } + case 16: { + decode16(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 17: { + decode17(val, valn, out, currentPos); + currentPos+=15; + break; + } + case 18: { + decode18(val, valn, out, currentPos); + currentPos+=37; + break; + } + case 19: { + decode19(val, valn, out, currentPos); + currentPos+=23; + break; + } + case 20: { + decode20(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 21: { + decode21(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 22: { + decode22(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 23: { + decode23(val, valn, out, currentPos); + currentPos+=13; + break; + } + case 24: { + decode24(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 25: { + decode25(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 26: { + decode26(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 27: { + decode27(val, valn, out, currentPos); + currentPos+=35; + break; + } + case 28: { + decode28(val, valn, out, currentPos); + currentPos+=21; + break; + } + case 29: { + decode29(val, valn, out, currentPos); + currentPos+=16; + break; + } + + case 30: { + decode30(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 31: { + decode31(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 32: { + decode32(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 33: { + decode33(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 34: { + decode34(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 35: { + decode35(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 36: { + decode36(val, valn, out, currentPos); + currentPos+=33; + break; + } + case 37: { + decode37(val, valn, out, currentPos); + currentPos+=19; + break; + } + case 38: { + decode38(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 39: { + decode39(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 40: { + decode40(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 41: { + decode41(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 42: { + decode42(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 43: { + decode43(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 44: { + decode44(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 45: { + decode45(val, valn, out, currentPos); + currentPos+=32; + break; + } + case 46: { + decode46(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 47: { + decode47(val, valn, out, currentPos); + currentPos+=13; + break; + } + case 48: { + decode48(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 49: { + decode49(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 50: { + decode50(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 51: { + decode51(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 52: { + decode52(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 53: { + decode53(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 54: { + decode54(val, valn, out, currentPos); + currentPos+=31; + break; + } + case 55: { + decode55(val, valn, out, currentPos); + currentPos+=17; + break; + } + case 56: { + decode56(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 57: { + decode57(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 58: { + decode58(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 59: { + decode59(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 60: { + decode60(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 61: { + decode61(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 62: { + decode62(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 63: { + decode63(val, valn, out, currentPos); + currentPos+=30; + break; + } + case 64: { + decode64(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 65: { + decode65(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 66: { + decode66(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 67: { + decode67(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 68: { + decode68(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 69: { + decode69(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 70: { + decode70(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 71: { + decode71(val, valn, out, currentPos); + currentPos+=3; + break; + } + case 72: { + decode72(val, valn, out, currentPos); + currentPos+=29; + break; + } + case 73: { + decode73(val, valn, out, currentPos); + currentPos+=15; + break; + } + case 74: { + decode74(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 75: { + decode75(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 76: { + decode76(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 77: { + decode77(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 78: { + decode78(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 79: { + decode79(val, valn, out, currentPos); + currentPos+=3; + break; + } + case 80: { + decode80(val, valn, out, currentPos); + currentPos+=2; + break; + } + default: + throw new RuntimeException("Wrong code: " + header); + }// end switch + } // end while + + while (currentPos < finalout) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finalout - currentPos < 28 ? finalout - currentPos : 28; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } + + outpos.set(finalout); + inpos.set(tmpinpos); + } + + + + private void decode80(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode79(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number :2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode78(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27); + // number : 3, bitwidth :9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode77(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode76(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 25); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode75(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode74(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode73(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode72(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode71(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode70(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode69(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode68(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode67(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode66(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode65(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode64(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode63(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode62(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode61(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode60(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode59(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode58(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode57(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode56(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode55(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode54(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode53(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode52(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode51(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode50(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode49(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode48(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode47(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode46(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode45(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode44(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode43(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode42(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode41(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode40(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode39(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode38(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode37(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode36(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode35(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode34(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode33(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 1) >>> 28; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode32(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode31(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 3) >>> 28; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode30(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode29(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 1) >>> 28; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode28(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode27(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode26(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode25(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode24(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 2) >>> 29; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode23(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode22(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 4) >>> 29; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode21(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode20(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 2) >>> 29; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode19(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode18(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode17(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode16(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode15(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 1) >>> 30; + out[currentPos++] = (valn << 3) >>> 30; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode14(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode13(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 3) >>> 30; + out[currentPos++] = (valn << 5) >>> 30; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + + } + + private void decode12(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + + } + + private void decode11(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 1) >>> 30; + out[currentPos++] = (valn << 3) >>> 30; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + + } + + private void decode10(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode9(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode8(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode7(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode6(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + out[currentPos++] = (valn << 4) >>> 31; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode5(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode4(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = (valn << 3) >>> 31;// 头部3bit + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode3(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode2(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = (valn << 1) >>> 31;// 头部1bit + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + out[currentPos++] = (valn << 4) >>> 31; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode1(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31;// 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode0(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } +} \ No newline at end of file diff --git a/src/main/java/me/lemire/integercompression/S16.java b/src/main/java/me/lemire/integercompression/S16.java index 4b3b577..08ffbc4 100644 --- a/src/main/java/me/lemire/integercompression/S16.java +++ b/src/main/java/me/lemire/integercompression/S16.java @@ -15,198 +15,191 @@ */ public final class S16 { - /** - * Compress an integer array using Simple16 - * - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @param out output array - * @param tmpoutpos location in the output array - * @return the number of 32-bit words written (in compressed form) - */ - public static int compress(final int[] in, int currentPos, - int inlength, final int out[], final int tmpoutpos) { - int outpos = tmpoutpos; - final int finalin = currentPos + inlength; - while (currentPos < finalin) { - int inoffset = compressblock(out, outpos++, in, - currentPos, inlength); - if (inoffset == -1) - throw new RuntimeException("Too big a number"); - currentPos += inoffset; - inlength -= inoffset; - } - return outpos - tmpoutpos; - } - - /** - * Estimate size of the compressed output. - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @return estimated size of the output (in 32-bit integers) - */ - public static int estimatecompress(final int[] in, int currentPos, - int inlength) { - final int finalin = currentPos + inlength; - int counter = 0; - while (currentPos < finalin) { - int inoffset = fakecompressblock(in, currentPos, - inlength); - if (inoffset == -1) - throw new RuntimeException("Too big a number"); - currentPos += inoffset; - inlength -= inoffset; - ++counter; - } - return counter; - } - - /** - * Compress an integer array using Simple16 - * - * @param out - * the compressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the integer input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the size of the outputs in 32-bit integers - * - */ - public static final int compressblock(int[] out, int outOffset, - int[] in, int inOffset, int n) { - int numIdx, j, num, bits; - for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { - out[outOffset] = numIdx << S16_BITSSIZE; - num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; - - for (j = 0, bits = 0; (j < num) - && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { - out[outOffset] |= (in[inOffset + j] << bits); - bits += S16_BITS[numIdx][j]; - j++; - } - - if (j == num) { - return num; - } - } - - return -1; - } - - private static final int fakecompressblock(int[] in, int inOffset, int n) { - int numIdx, j, num; - for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { - num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; - - for (j = 0; (j < num) - && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { - j++; - } - - if (j == num) { - return num; - } - } - - return -1; - } - - /** - * Decompress an integer array using Simple16 - * - * @param out - * the decompressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the compressed input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the number of processed integers - */ - public static final int decompressblock(int[] out, int outOffset, - int[] in, int inOffset, int n) { - int numIdx, j = 0, bits = 0; - numIdx = in[inOffset] >>> S16_BITSSIZE; - int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; - for (j = 0, bits = 0; j < num; j++) { - out[outOffset + j] = (in[inOffset] >>> bits) - & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); - bits += S16_BITS[numIdx][j]; - } - return num; - } - - /** - * Uncompressed data from an input array into an output array - * - * @param in input array (in compressed form) - * @param tmpinpos starting location in the compressed input array - * @param inlength how much data we wish the read (in 32-bit words) - * @param out output array (in decompressed form) - * @param currentPos current position in the output array - * @param outlength available data in the output array - */ - public static void uncompress(final int[] in, int tmpinpos, - final int inlength, final int[] out, int currentPos, - int outlength) { - final int finalpos = tmpinpos + inlength; - while (tmpinpos < finalpos) { - final int howmany = decompressblock(out, currentPos, - in, tmpinpos, outlength); - outlength -= howmany; - currentPos += howmany; - tmpinpos += 1; - } - - } - - private static int[][] shiftme(int[][] x) { - int[][] answer = new int[x.length][]; - for (int k = 0; k < x.length; ++k) { - answer[k] = new int[x[k].length]; - for (int z = 0; z < answer[k].length; ++z) - answer[k][z] = 1 << x[k][z]; - } - return answer; - } - - private static final int S16_NUMSIZE = 16; - private static final int S16_BITSSIZE = 28; - // the possible number of bits used to represent one integer - private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, - 6, 5, 5, 4, 3, 2, 1 }; - // the corresponding number of elements for each value of the number of - // bits - private static final int[][] S16_BITS = { - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1 }, - { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, - { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, - { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, - { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, - { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, - { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; - private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); + /** + * Compress an integer array using Simple16 + * + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @param out + * output array + * @param tmpoutpos + * location in the output array + * @return the number of 32-bit words written (in compressed form) + */ + public static int compress(final int[] in, int currentPos, int inlength, final int out[], final int tmpoutpos) { + int outpos = tmpoutpos; + final int finalin = currentPos + inlength; + while (currentPos < finalin) { + int inoffset = compressblock(out, outpos++, in, currentPos, inlength); + if (inoffset == -1) + throw new RuntimeException("Too big a number"); + currentPos += inoffset; + inlength -= inoffset; + } + return outpos - tmpoutpos; + } + + /** + * Estimate size of the compressed output. + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @return estimated size of the output (in 32-bit integers) + */ + public static int estimatecompress(final int[] in, int currentPos, int inlength) { + final int finalin = currentPos + inlength; + int counter = 0; + while (currentPos < finalin) { + int inoffset = fakecompressblock(in, currentPos, inlength); + if (inoffset == -1) + throw new RuntimeException("Too big a number"); + currentPos += inoffset; + inlength -= inoffset; + ++counter; + } + return counter; + } + + /** + * Compress an integer array using Simple16 + * + * @param out + * the compressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the integer input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the size of the outputs in 32-bit integers + * + */ + public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j, num, bits; + for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { + out[outOffset] = numIdx << S16_BITSSIZE; + num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; + + for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { + out[outOffset] |= (in[inOffset + j] << bits); + bits += S16_BITS[numIdx][j]; + j++; + } + + if (j == num) { + return num; + } + } + + return -1; + } + + private static final int fakecompressblock(int[] in, int inOffset, int n) { + int numIdx, j, num; + for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { + num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; + + for (j = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { + j++; + } + + if (j == num) { + return num; + } + } + + return -1; + } + + /** + * Decompress an integer array using Simple16 + * + * @param out + * the decompressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the compressed input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the number of processed integers + */ + public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j = 0, bits = 0; + numIdx = in[inOffset] >>> S16_BITSSIZE; + int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; + for (j = 0, bits = 0; j < num; j++) { + out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); + bits += S16_BITS[numIdx][j]; + } + return num; + } + + /** + * Uncompressed data from an input array into an output array + * + * @param in + * input array (in compressed form) + * @param tmpinpos + * starting location in the compressed input array + * @param inlength + * how much data we wish the read (in 32-bit words) + * @param out + * output array (in decompressed form) + * @param currentPos + * current position in the output array + * @param outlength + * available data in the output array + */ + public static void uncompress(final int[] in, int tmpinpos, final int inlength, final int[] out, int currentPos, + int outlength) { + final int finalpos = tmpinpos + inlength; + while (tmpinpos < finalpos) { + final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength); + outlength -= howmany; + currentPos += howmany; + tmpinpos += 1; + } + + } + + private static int[][] shiftme(int[][] x) { + int[][] answer = new int[x.length][]; + for (int k = 0; k < x.length; ++k) { + answer[k] = new int[x[k].length]; + for (int z = 0; z < answer[k].length; ++z) + answer[k][z] = 1 << x[k][z]; + } + return answer; + } + + private static final int S16_NUMSIZE = 16; + private static final int S16_BITSSIZE = 28; + // the possible number of bits used to represent one integer + private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 }; + // the corresponding number of elements for each value of the number of + // bits + private static final int[][] S16_BITS = { + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, + { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, + { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, + { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; + private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); } diff --git a/src/main/java/me/lemire/integercompression/S9.java b/src/main/java/me/lemire/integercompression/S9.java index a14b1fb..2180e5a 100644 --- a/src/main/java/me/lemire/integercompression/S9.java +++ b/src/main/java/me/lemire/integercompression/S9.java @@ -11,202 +11,193 @@ *

    * Adapted by D. Lemire from the Apache Lucene project. *

    + * * @author Daniel Lemire */ public final class S9 { - /** - * Estimate size of the compressed output. - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @return estimated size of the output (in 32-bit integers) - */ - public static int estimatecompress(int[] in, int currentPos, - int inlength) { - int tmpoutpos = 0; - int finalpos = currentPos + inlength; - outer: while (currentPos < finalpos) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int compressedNum = codeNum[selector]; - if (finalpos <= currentPos + compressedNum - 1) - compressedNum = finalpos - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) - if (max <= in[currentPos + i]) - continue mainloop; - currentPos += compressedNum; - ++tmpoutpos; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - tmpoutpos++; - currentPos++; - } - return tmpoutpos; - } + /** + * Estimate size of the compressed output. + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @return estimated size of the output (in 32-bit integers) + */ + public static int estimatecompress(int[] in, int currentPos, int inlength) { + int tmpoutpos = 0; + int finalpos = currentPos + inlength; + outer: while (currentPos < finalpos) { + mainloop: for (int selector = 0; selector < 8; selector++) { - /** - * Compress an integer array using Simple9 - * - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @param out output array - * @param tmpoutpos location in the output array - * @return the number of 32-bit words written (in compressed form) - */ - public static int compress(int[] in, int currentPos, int inlength, - int out[], int tmpoutpos) { - int origtmpoutpos = tmpoutpos; - int finalpos = currentPos + inlength; - outer: while (currentPos < finalpos) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - if (finalpos <= currentPos + compressedNum - 1) - compressedNum = finalpos - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (max <= in[currentPos + i]) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - if (compressedNum != codeNum[selector]) - res <<= (codeNum[selector] - compressedNum) - * b; - res |= selector << 28; - out[tmpoutpos++] = res; - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - return tmpoutpos - origtmpoutpos; - } + int compressedNum = codeNum[selector]; + if (finalpos <= currentPos + compressedNum - 1) + compressedNum = finalpos - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) + if (Util.smallerorequalthan(max , in[currentPos + i])) + continue mainloop; + currentPos += compressedNum; + ++tmpoutpos; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + tmpoutpos++; + currentPos++; - /** - * Uncompressed data from an input array into an output array - * - * @param in input array (in compressed form) - * @param tmpinpos starting location in the compressed input array - * @param inlength how much data we wish the read (in 32-bit words) - * @param out output array (in decompressed form) - * @param currentPos current position in the output array - * @param outlength available data in the output array - */ - public static void uncompress(int[] in, int tmpinpos, int inlength, - int[] out, int currentPos, int outlength) { - int finallength = currentPos + outlength; + } + return tmpoutpos; + } - while (currentPos < finallength) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - final int howmany = finallength - currentPos < 28 ? finallength - - currentPos - : 28; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (k + 4)) >>> 31; - } - break; - } - case 1: { // number : 14, bitwidth : 2 - final int howmany = finallength - currentPos < 14 ? finallength - - currentPos - : 14; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (2 * k + 4)) >>> 30; - } - break; - } - case 2: { // number : 9, bitwidth : 3 - final int howmany = finallength - currentPos < 9 ? finallength - - currentPos - : 9; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (3 * k + 5)) >>> 29; - } - break; - } - case 3: { // number : 7, bitwidth : 4 - final int howmany = finallength - currentPos < 7 ? finallength - - currentPos - : 7; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (4 * k + 4)) >>> 28; - } - break; - } - case 4: { // number : 5, bitwidth : 5 - final int howmany = finallength - currentPos < 5 ? finallength - - currentPos - : 5; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (5 * k + 7)) >>> 27; - } - break; - } - case 5: { // number : 4, bitwidth : 7 - final int howmany = finallength - currentPos < 4 ? finallength - - currentPos - : 4; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (7 * k + 4)) >>> 25; - } - break; - } - case 6: { // number : 3, bitwidth : 9 - final int howmany = finallength - currentPos < 3 ? finallength - - currentPos - : 3; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (9 * k + 5)) >>> 23; - } - break; - } - case 7: { // number : 2, bitwidth : 14 - final int howmany = finallength - currentPos < 2 ? finallength - - currentPos - : 2; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (14 * k + 4)) >>> 18; - } - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen"); - } - } - } + /** + * Compress an integer array using Simple9 + * + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @param out + * output array + * @param tmpoutpos + * location in the output array + * @return the number of 32-bit words written (in compressed form) + */ + public static int compress(int[] in, int currentPos, int inlength, int out[], int tmpoutpos) { + int origtmpoutpos = tmpoutpos; + int finalpos = currentPos + inlength; + outer: while (currentPos < finalpos) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalpos <= currentPos + compressedNum - 1) + compressedNum = finalpos - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + if (compressedNum != codeNum[selector]) + res <<= (codeNum[selector] - compressedNum) * b; + res |= selector << 28; + out[tmpoutpos++] = res; + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + return tmpoutpos - origtmpoutpos; + } - } + /** + * Uncompressed data from an input array into an output array + * + * @param in + * input array (in compressed form) + * @param tmpinpos + * starting location in the compressed input array + * @param inlength + * how much data we wish the read (in 32-bit words) + * @param out + * output array (in decompressed form) + * @param currentPos + * current position in the output array + * @param outlength + * available data in the output array + */ + public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) { + int finallength = currentPos + outlength; - private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + while (currentPos < finallength) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finallength - currentPos < 28 ? finallength - currentPos : 28; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finallength - currentPos < 14 ? finallength - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finallength - currentPos < 9 ? finallength - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finallength - currentPos < 7 ? finallength - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finallength - currentPos < 5 ? finallength - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finallength - currentPos < 4 ? finallength - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finallength - currentPos < 3 ? finallength - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finallength - currentPos < 2 ? finallength - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } - private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + } + + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; } diff --git a/src/main/java/me/lemire/integercompression/Simple16.java b/src/main/java/me/lemire/integercompression/Simple16.java index 9562c3a..e0f9d5a 100644 --- a/src/main/java/me/lemire/integercompression/Simple16.java +++ b/src/main/java/me/lemire/integercompression/Simple16.java @@ -1,8 +1,5 @@ package me.lemire.integercompression; - - - /** * This is an implementation of the popular Simple16 scheme. It is limited to * 28-bit integers (between 0 and 2^28-1). @@ -14,190 +11,175 @@ * Adapted by D. Lemire from the Apache Lucene project. *

    */ -public final class Simple16 implements IntegerCODEC,SkippableIntegerCODEC { - - public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], - IntWrapper outpos) { - int i_inpos = inpos.get(); - int i_outpos = outpos.get(); - final int finalin = i_inpos + inlength; - while (i_inpos < finalin) { - int inoffset = compressblock(out, i_outpos++, in, i_inpos, inlength); - if (inoffset == -1) - throw new RuntimeException("Too big a number"); - i_inpos += inoffset; - inlength -= inoffset; - } - inpos.set(i_inpos); - outpos.set(i_outpos); - } - - /** - * Compress an integer array using Simple16 - * - * @param out - * the compressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the integer input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the number of compressed integers - */ - public static final int compressblock(int[] out, int outOffset, int[] in, - int inOffset, int n) { - int numIdx, j, num, bits; - for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { - out[outOffset] = numIdx << S16_BITSSIZE; - num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; - - for (j = 0, bits = 0; (j < num) - && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { - out[outOffset] |= (in[inOffset + j] << bits); - bits += S16_BITS[numIdx][j]; - j++; - } - - if (j == num) { - return num; - } - } - - return -1; - } - - - /** - * Decompress an integer array using Simple16 - * - * @param out - * the decompressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the compressed input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the number of processed integers - */ - public static final int decompressblock(int[] out, int outOffset, int[] in, - int inOffset, int n) { - int numIdx, j = 0, bits = 0; - numIdx = in[inOffset] >>> S16_BITSSIZE; - int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; - for (j = 0, bits = 0; j < num; j++) { - out[outOffset + j] = (in[inOffset] >>> bits) - & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); - bits += S16_BITS[numIdx][j]; - } - return num; - } - - - @Override - public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, - IntWrapper outpos,int num) { - int i_inpos = inpos.get(); - int i_outpos = outpos.get(); - while (num > 0) { - final int howmany = decompressblock(out, i_outpos, in, i_inpos, num); - num -= howmany; - i_outpos += howmany; - i_inpos++; - } - inpos.set(i_inpos); - outpos.set(i_outpos); - } - - /** - * Uncompress data from an array to another array. - * - * Both inpos and outpos parameters are modified to indicate new positions - * after read/write. - * - * @param in - * array containing data in compressed form - * @param tmpinpos - * where to start reading in the array - * @param inlength - * length of the compressed data (ignored by some schemes) - * @param out - * array where to write the compressed output - * @param currentPos - * where to write the compressed output in out - * @param outlength - * number of integers we want to decode - */ - public static void uncompress(int[] in, int tmpinpos, int inlength, - int[] out, int currentPos, int outlength) { - final int finalpos = tmpinpos + inlength; - while (tmpinpos < finalpos) { - final int howmany = decompressblock(out, currentPos, in, tmpinpos, - outlength); - outlength -= howmany; - currentPos += howmany; - tmpinpos += 1; - } - - } - - private static int[][] shiftme(int[][] x) { - int[][] answer = new int[x.length][]; - for (int k = 0; k < x.length; ++k) { - answer[k] = new int[x[k].length]; - for (int z = 0; z < answer[k].length; ++z) - answer[k][z] = 1 << x[k][z]; - } - return answer; - } - - @Override - public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, - IntWrapper outpos) { - if (inlength == 0) - return; - out[outpos.get()] = inlength; - outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); - } - - @Override - public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, - IntWrapper outpos) { - if (inlength == 0) - return; - final int outlength = in[inpos.get()]; - inpos.increment(); - headlessUncompress(in, inpos, inlength, out, outpos, outlength); - - } - @Override - public String toString() { - return this.getClass().getSimpleName(); - } - - private static final int S16_NUMSIZE = 16; - private static final int S16_BITSSIZE = 28; - // the possible number of bits used to represent one integer - private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, - 5, 5, 4, 3, 2, 1 }; - // the corresponding number of elements for each value of the number of bits - private static final int[][] S16_BITS = { - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1 }, - { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, - { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, - { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, - { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, - { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, - { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; - private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); +public final class Simple16 implements IntegerCODEC, SkippableIntegerCODEC { + + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { + int i_inpos = inpos.get(); + int i_outpos = outpos.get(); + final int finalin = i_inpos + inlength; + while (i_inpos < finalin) { + int inoffset = compressblock(out, i_outpos++, in, i_inpos, inlength); + if (inoffset == -1) + throw new RuntimeException("Too big a number"); + i_inpos += inoffset; + inlength -= inoffset; + } + inpos.set(i_inpos); + outpos.set(i_outpos); + } + + /** + * Compress an integer array using Simple16 + * + * @param out + * the compressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the integer input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the number of compressed integers + */ + public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j, num, bits; + for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { + out[outOffset] = numIdx << S16_BITSSIZE; + num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; + + for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { + out[outOffset] |= (in[inOffset + j] << bits); + bits += S16_BITS[numIdx][j]; + j++; + } + + if (j == num) { + return num; + } + } + + return -1; + } + + /** + * Decompress an integer array using Simple16 + * + * @param out + * the decompressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the compressed input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the number of processed integers + */ + public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j = 0, bits = 0; + numIdx = in[inOffset] >>> S16_BITSSIZE; + int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; + for (j = 0, bits = 0; j < num; j++) { + out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); + bits += S16_BITS[numIdx][j]; + } + return num; + } + + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { + int i_inpos = inpos.get(); + int i_outpos = outpos.get(); + while (num > 0) { + final int howmany = decompressblock(out, i_outpos, in, i_inpos, num); + num -= howmany; + i_outpos += howmany; + i_inpos++; + } + inpos.set(i_inpos); + outpos.set(i_outpos); + } + + /** + * Uncompress data from an array to another array. + * + * Both inpos and outpos parameters are modified to indicate new positions + * after read/write. + * + * @param in + * array containing data in compressed form + * @param tmpinpos + * where to start reading in the array + * @param inlength + * length of the compressed data (ignored by some schemes) + * @param out + * array where to write the compressed output + * @param currentPos + * where to write the compressed output in out + * @param outlength + * number of integers we want to decode + */ + public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) { + final int finalpos = tmpinpos + inlength; + while (tmpinpos < finalpos) { + final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength); + outlength -= howmany; + currentPos += howmany; + tmpinpos += 1; + } + + } + + private static int[][] shiftme(int[][] x) { + int[][] answer = new int[x.length][]; + for (int k = 0; k < x.length; ++k) { + answer[k] = new int[x[k].length]; + for (int z = 0; z < answer[k].length; ++z) + answer[k][z] = 1 << x[k][z]; + } + return answer; + } + + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } + + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); + + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + private static final int S16_NUMSIZE = 16; + private static final int S16_BITSSIZE = 28; + // the possible number of bits used to represent one integer + private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 }; + // the corresponding number of elements for each value of the number of bits + private static final int[][] S16_BITS = { + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, + { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, + { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, + { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; + private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); } \ No newline at end of file diff --git a/src/main/java/me/lemire/integercompression/Simple9.java b/src/main/java/me/lemire/integercompression/Simple9.java index 5703b04..032489d 100644 --- a/src/main/java/me/lemire/integercompression/Simple9.java +++ b/src/main/java/me/lemire/integercompression/Simple9.java @@ -7,10 +7,9 @@ package me.lemire.integercompression; - /** - * This is an implementation of the popular Simple9 scheme. - * It is limited to 28-bit integers (between 0 and 2^28-1). + * This is an implementation of the popular Simple9 scheme. It is limited to + * 28-bit integers (between 0 and 2^28-1). * * Note that this does not use differential coding: if you are working on sorted * lists, you must compute the deltas separately. @@ -19,296 +18,282 @@ * */ public final class Simple9 implements IntegerCODEC, SkippableIntegerCODEC { - @Override - public void headlessCompress(int[] in, IntWrapper inpos, int inlength, - int out[], IntWrapper outpos) { - int tmpoutpos = outpos.get(); - int currentPos = inpos.get(); - final int finalin = currentPos + inlength; - outer: while (currentPos < finalin - 28) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (max <= in[currentPos + i]) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - res |= selector << 28; - out[tmpoutpos++] = res; - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - outer: while (currentPos < finalin) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - if (finalin <= currentPos + compressedNum - 1) - compressedNum = finalin - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (max <= in[currentPos + i]) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - if (compressedNum != codeNum[selector]) - res <<= (codeNum[selector] - compressedNum) - * b; - res |= selector << 28; - out[tmpoutpos++] = res; - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - inpos.set(currentPos); - outpos.set(tmpoutpos); - } + @Override + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { + int tmpoutpos = outpos.get(); + int currentPos = inpos.get(); + final int finalin = currentPos + inlength; + outer: while (currentPos < finalin - 28) { + mainloop: for (int selector = 0; selector < 8; selector++) { + + int res = 0; + int compressedNum = codeNum[selector]; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (max <= in[currentPos + i]) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + res |= selector << 28; + out[tmpoutpos++] = res; + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + outer: while (currentPos < finalin) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalin <= currentPos + compressedNum - 1) + compressedNum = finalin - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (max <= in[currentPos + i]) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + + if (compressedNum != codeNum[selector]) + res <<= (codeNum[selector] - compressedNum) * b; + res |= selector << 28; + out[tmpoutpos++] = res; + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + inpos.set(currentPos); + outpos.set(tmpoutpos); + } + + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, + int outlength) { + int currentPos = outpos.get(); + int tmpinpos = inpos.get(); + final int finalout = currentPos + outlength; + while (currentPos < finalout - 28) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + out[currentPos++] = (val << 4) >>> 31; + out[currentPos++] = (val << 5) >>> 31; + out[currentPos++] = (val << 6) >>> 31; + out[currentPos++] = (val << 7) >>> 31; + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + break; + } + case 1: { // number : 14, bitwidth : 2 + out[currentPos++] = (val << 4) >>> 30; + out[currentPos++] = (val << 6) >>> 30; + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + break; + } + case 2: { // number : 9, bitwidth : 3 + out[currentPos++] = (val << 5) >>> 29; + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + break; + } + case 3: { // number : 7, bitwidth : 4 + out[currentPos++] = (val << 4) >>> 28; + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + break; + } + case 4: { // number : 5, bitwidth : 5 + out[currentPos++] = (val << 7) >>> 27; + out[currentPos++] = (val << 12) >>> 27; + out[currentPos++] = (val << 17) >>> 27; + out[currentPos++] = (val << 22) >>> 27; + out[currentPos++] = (val << 27) >>> 27; + break; + } + case 5: { // number : 4, bitwidth : 7 + out[currentPos++] = (val << 4) >>> 25; + out[currentPos++] = (val << 11) >>> 25; + out[currentPos++] = (val << 18) >>> 25; + out[currentPos++] = (val << 25) >>> 25; + break; + } + case 6: { // number : 3, bitwidth : 9 + out[currentPos++] = (val << 5) >>> 23; + out[currentPos++] = (val << 14) >>> 23; + out[currentPos++] = (val << 23) >>> 23; + break; + } + case 7: { // number : 2, bitwidth : 14 + out[currentPos++] = (val << 4) >>> 18; + out[currentPos++] = (val << 18) >>> 18; + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen: limited to 28-bit integers"); + } + } + } + while (currentPos < finalout) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finalout - currentPos; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } + outpos.set(currentPos); + inpos.set(tmpinpos); + + } - @Override - public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, - int[] out, IntWrapper outpos, int outlength) { - int currentPos = outpos.get(); - int tmpinpos = inpos.get(); - final int finalout = currentPos + outlength; - while (currentPos < finalout - 28) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - out[currentPos++] = (val << 4) >>> 31; - out[currentPos++] = (val << 5) >>> 31; - out[currentPos++] = (val << 6) >>> 31; - out[currentPos++] = (val << 7) >>> 31; - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - break; - } - case 1: { // number : 14, bitwidth : 2 - out[currentPos++] = (val << 4) >>> 30; - out[currentPos++] = (val << 6) >>> 30; - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - break; - } - case 2: { // number : 9, bitwidth : 3 - out[currentPos++] = (val << 5) >>> 29; - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - break; - } - case 3: { // number : 7, bitwidth : 4 - out[currentPos++] = (val << 4) >>> 28; - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - break; - } - case 4: { // number : 5, bitwidth : 5 - out[currentPos++] = (val << 7) >>> 27; - out[currentPos++] = (val << 12) >>> 27; - out[currentPos++] = (val << 17) >>> 27; - out[currentPos++] = (val << 22) >>> 27; - out[currentPos++] = (val << 27) >>> 27; - break; - } - case 5: { // number : 4, bitwidth : 7 - out[currentPos++] = (val << 4) >>> 25; - out[currentPos++] = (val << 11) >>> 25; - out[currentPos++] = (val << 18) >>> 25; - out[currentPos++] = (val << 25) >>> 25; - break; - } - case 6: { // number : 3, bitwidth : 9 - out[currentPos++] = (val << 5) >>> 23; - out[currentPos++] = (val << 14) >>> 23; - out[currentPos++] = (val << 23) >>> 23; - break; - } - case 7: { // number : 2, bitwidth : 14 - out[currentPos++] = (val << 4) >>> 18; - out[currentPos++] = (val << 18) >>> 18; - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen: limited to 28-bit integers"); - } - } - } - while (currentPos < finalout) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - final int howmany = finalout - currentPos; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (k + 4)) >>> 31; - } - break; - } - case 1: { // number : 14, bitwidth : 2 - final int howmany = finalout - currentPos < 14 ? finalout - - currentPos - : 14; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (2 * k + 4)) >>> 30; - } - break; - } - case 2: { // number : 9, bitwidth : 3 - final int howmany = finalout - currentPos < 9 ? finalout - - currentPos - : 9; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (3 * k + 5)) >>> 29; - } - break; - } - case 3: { // number : 7, bitwidth : 4 - final int howmany = finalout - currentPos < 7 ? finalout - - currentPos - : 7; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (4 * k + 4)) >>> 28; - } - break; - } - case 4: { // number : 5, bitwidth : 5 - final int howmany = finalout - currentPos < 5 ? finalout - - currentPos - : 5; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (5 * k + 7)) >>> 27; - } - break; - } - case 5: { // number : 4, bitwidth : 7 - final int howmany = finalout - currentPos < 4 ? finalout - - currentPos - : 4; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (7 * k + 4)) >>> 25; - } - break; - } - case 6: { // number : 3, bitwidth : 9 - final int howmany = finalout - currentPos < 3 ? finalout - - currentPos - : 3; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (9 * k + 5)) >>> 23; - } - break; - } - case 7: { // number : 2, bitwidth : 14 - final int howmany = finalout - currentPos < 2 ? finalout - - currentPos - : 2; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (14 * k + 4)) >>> 18; - } - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen"); - } - } - } - outpos.set(currentPos); - inpos.set(tmpinpos); + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } - } - @Override - public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, - IntWrapper outpos) { - if (inlength == 0) - return; - out[outpos.get()] = inlength; - outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); - } + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); - @Override - public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, - IntWrapper outpos) { - if (inlength == 0) - return; - final int outlength = in[inpos.get()]; - inpos.increment(); - headlessUncompress(in, inpos, inlength, out, outpos, outlength); + } - } - private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; - private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; - @Override - public String toString() { - return this.getClass().getSimpleName(); - } + @Override + public String toString() { + return this.getClass().getSimpleName(); + } } diff --git a/src/main/java/me/lemire/integercompression/Util.java b/src/main/java/me/lemire/integercompression/Util.java index 70e46b7..346e3b2 100644 --- a/src/main/java/me/lemire/integercompression/Util.java +++ b/src/main/java/me/lemire/integercompression/Util.java @@ -13,7 +13,15 @@ * */ public final class Util { - /** + + + + // check whether x is small than y as unsigned ints (supported by Java 8 natively); + protected static final boolean smallerorequalthan(int x, int y) { + return (x + Integer.MIN_VALUE) <= (y + Integer.MIN_VALUE); + } + + /** * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range * of value * diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java index 847a28a..c5fee69 100644 --- a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java +++ b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java @@ -15,6 +15,7 @@ import me.lemire.integercompression.DeltaZigzagVariableByte; import me.lemire.integercompression.FastPFOR; import me.lemire.integercompression.FastPFOR128; +import me.lemire.integercompression.GroupSimple9; import me.lemire.integercompression.IntWrapper; import me.lemire.integercompression.IntegerCODEC; import me.lemire.integercompression.JustCopy; @@ -24,6 +25,7 @@ import me.lemire.integercompression.OptPFD; import me.lemire.integercompression.OptPFDS16; import me.lemire.integercompression.OptPFDS9; +import me.lemire.integercompression.Simple16; import me.lemire.integercompression.Simple9; import me.lemire.integercompression.VariableByte; import me.lemire.integercompression.differential.Delta; @@ -153,7 +155,7 @@ private static void testCodec(PrintWriter csvLog, int sparsity, + data[k][m] + " found " + decompressBuffer[m] - + " at " + m); + + " at " + m + " out of " + outpos.get()); } } } @@ -487,7 +489,6 @@ private static void test(PrintWriter csvLog, int N, int nbr, int repeat) { int[][] data = generateTestData(cdg, N, nbr, sparsity); System.out.println("# generating random data... ok."); - testCodec(csvLog, sparsity, new Composition( new FastPFOR128(), new VariableByte()), data, repeat, false); @@ -635,6 +636,14 @@ private static void test(PrintWriter csvLog, int N, int nbr, int repeat) { System.out.println(); + testCodec(csvLog, sparsity, new Simple16(), data, + repeat, false); + testCodec(csvLog, sparsity, new Simple16(), data, + repeat, false); + testCodec(csvLog, sparsity, new Simple16(), data, + repeat, true); + System.out.println(); + testCodec(csvLog, sparsity, new Simple9(), data, repeat, false); testCodec(csvLog, sparsity, new Simple9(), data, @@ -643,6 +652,14 @@ private static void test(PrintWriter csvLog, int N, int nbr, int repeat) { repeat, true); System.out.println(); + testCodec(csvLog, sparsity, new GroupSimple9(), data, + repeat, false); + testCodec(csvLog, sparsity, new GroupSimple9(), data, + repeat, false); + testCodec(csvLog, sparsity, new GroupSimple9(), data, + repeat, true); + System.out.println(); + { IntegerCODEC c = new Composition( new XorBinaryPacking(), diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java index 1fe7255..cbdb60e 100644 --- a/src/test/java/me/lemire/integercompression/BasicTest.java +++ b/src/test/java/me/lemire/integercompression/BasicTest.java @@ -37,6 +37,7 @@ public class BasicTest { new Composition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16(), + new GroupSimple9(), new Composition(new XorBinaryPacking(), new VariableByte()), new Composition(new DeltaZigzagBinaryPacking(), new DeltaZigzagVariableByte()) }; @@ -128,6 +129,14 @@ public void varyingLengthTest2() { } catch (ClassNotFoundException e) { e.printStackTrace(); } + try { + // CODEC GroupSimple9 is limited to "small" integers. + if (c.getClass().equals( + Class.forName("me.lemire.integercompression.GroupSimple9"))) + continue; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } for (int L = 1; L <= 128; L++) { int[] comp = TestUtils.compress(c, Arrays.copyOf(data, L)); From 97ebd37658665f28a1d005d075163316774b5d33 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 13 Sep 2016 17:18:35 -0400 Subject: [PATCH 037/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.8 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bdd7b57..95eac76 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.8-SNAPSHOT + 0.1.8 jar 1.6 From db9e3e99c785329d6c5bc882111e5cc7cf32b205 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 13 Sep 2016 17:18:42 -0400 Subject: [PATCH 038/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 95eac76..755e696 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.8 + 0.1.9-SNAPSHOT jar 1.6 From 07b1ffefc930c6ead9017ea02772967a3e94a91b Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 14 Sep 2016 09:10:58 -0400 Subject: [PATCH 039/170] Simplifying code somewhat --- .../integercompression/GroupSimple9.java | 829 +++++++----------- 1 file changed, 334 insertions(+), 495 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/GroupSimple9.java b/src/main/java/me/lemire/integercompression/GroupSimple9.java index d109fee..cbd99e0 100644 --- a/src/main/java/me/lemire/integercompression/GroupSimple9.java +++ b/src/main/java/me/lemire/integercompression/GroupSimple9.java @@ -25,32 +25,33 @@ public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWra outpos.add(1); final int finalin = currentPos + inlength; while (currentPos < finalin - 28 * 2) { + int nextCurrentPos = currentPos; mainloop1: for (selector1=0; selector1 <= 8; selector1++) { int compressedNum = codeNum[selector1]; - //if (finalin <= currentPos + compressedNum - 1) - // compressedNum = finalin - currentPos; + //if (finalin <= nextCurrentPos + compressedNum - 1) + // compressedNum = finalin - nextCurrentPos; int b = bitLength[selector1]; int max = 1 << b; int i = 0; for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[currentPos + i])) + if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) continue mainloop1; } - currentPos += compressedNum; + nextCurrentPos += compressedNum; break; } mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) { int compressedNum = codeNum[selector2]; - //if (finalin <= currentPos + compressedNum - 1) - // compressedNum = finalin - currentPos; + //if (finalin <= nextCurrentPos + compressedNum - 1) + // compressedNum = finalin - nextCurrentPos; int b = bitLength[selector2]; int max = 1 << b; int i = 0; for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[currentPos + i])) + if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) continue mainloop2; } - currentPos += compressedNum; + nextCurrentPos += compressedNum; break; } int code = M[selector1][selector2]; @@ -58,253 +59,253 @@ public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWra out[tmpoutpos + 1] = 0; switch (code) { case 0: - encode0(in, inpos, code, out, outpos); + encode0(in, currentPos, code, out, tmpoutpos); break; case 1: - encode1(in, inpos, code, out, outpos); + encode1(in, currentPos, code, out, tmpoutpos); break; case 2: - encode2(in, inpos, code, out, outpos); + encode2(in, currentPos, code, out, tmpoutpos); break; case 3: - encode3(in, inpos, code, out, outpos); + encode3(in, currentPos, code, out, tmpoutpos); break; case 4: - encode4(in, inpos, code, out, outpos); + encode4(in, currentPos, code, out, tmpoutpos); break; case 5: - encode5(in, inpos, code, out, outpos); + encode5(in, currentPos, code, out, tmpoutpos); break; case 6: - encode6(in, inpos, code, out, outpos); + encode6(in, currentPos, code, out, tmpoutpos); break; case 7: - encode7(in, inpos, code, out, outpos); + encode7(in, currentPos, code, out, tmpoutpos); break; case 8: - encode8(in, inpos, code, out, outpos); + encode8(in, currentPos, code, out, tmpoutpos); break; case 9: - encode9(in, inpos, code, out, outpos); + encode9(in, currentPos, code, out, tmpoutpos); break; case 10: - encode10(in, inpos, code, out, outpos); + encode10(in, currentPos, code, out, tmpoutpos); break; case 11: - encode11(in, inpos, code, out, outpos); + encode11(in, currentPos, code, out, tmpoutpos); break; case 12: - encode12(in, inpos, code, out, outpos); + encode12(in, currentPos, code, out, tmpoutpos); break; case 13: - encode13(in, inpos, code, out, outpos); + encode13(in, currentPos, code, out, tmpoutpos); break; case 14: - encode14(in, inpos, code, out, outpos); + encode14(in, currentPos, code, out, tmpoutpos); break; case 15: - encode15(in, inpos, code, out, outpos); + encode15(in, currentPos, code, out, tmpoutpos); break; case 16: - encode16(in, inpos, code, out, outpos); + encode16(in, currentPos, code, out, tmpoutpos); break; case 17: - encode17(in, inpos, code, out, outpos); + encode17(in, currentPos, code, out, tmpoutpos); break; case 18: - encode18(in, inpos, code, out, outpos); + encode18(in, currentPos, code, out, tmpoutpos); break; case 19: - encode19(in, inpos, code, out, outpos); + encode19(in, currentPos, code, out, tmpoutpos); break; case 20: - encode20(in, inpos, code, out, outpos); + encode20(in, currentPos, code, out, tmpoutpos); break; case 21: - encode21(in, inpos, code, out, outpos); + encode21(in, currentPos, code, out, tmpoutpos); break; case 22: - encode22(in, inpos, code, out, outpos); + encode22(in, currentPos, code, out, tmpoutpos); break; case 23: - encode23(in, inpos, code, out, outpos); + encode23(in, currentPos, code, out, tmpoutpos); break; case 24: - encode24(in, inpos, code, out, outpos); + encode24(in, currentPos, code, out, tmpoutpos); break; case 25: - encode25(in, inpos, code, out, outpos); + encode25(in, currentPos, code, out, tmpoutpos); break; case 26: - encode26(in, inpos, code, out, outpos); + encode26(in, currentPos, code, out, tmpoutpos); break; case 27: - encode27(in, inpos, code, out, outpos); + encode27(in, currentPos, code, out, tmpoutpos); break; case 28: - encode28(in, inpos, code, out, outpos); + encode28(in, currentPos, code, out, tmpoutpos); break; case 29: - encode29(in, inpos, code, out, outpos); + encode29(in, currentPos, code, out, tmpoutpos); break; case 30: - encode30(in, inpos, code, out, outpos); + encode30(in, currentPos, code, out, tmpoutpos); break; case 31: - encode31(in, inpos, code, out, outpos); + encode31(in, currentPos, code, out, tmpoutpos); break; case 32: - encode32(in, inpos, code, out, outpos); + encode32(in, currentPos, code, out, tmpoutpos); break; case 33: - encode33(in, inpos, code, out, outpos); + encode33(in, currentPos, code, out, tmpoutpos); break; case 34: - encode34(in, inpos, code, out, outpos); + encode34(in, currentPos, code, out, tmpoutpos); break; case 35: - encode35(in, inpos, code, out, outpos); + encode35(in, currentPos, code, out, tmpoutpos); break; case 36: - encode36(in, inpos, code, out, outpos); + encode36(in, currentPos, code, out, tmpoutpos); break; case 37: - encode37(in, inpos, code, out, outpos); + encode37(in, currentPos, code, out, tmpoutpos); break; case 38: - encode38(in, inpos, code, out, outpos); + encode38(in, currentPos, code, out, tmpoutpos); break; case 39: - encode39(in, inpos, code, out, outpos); + encode39(in, currentPos, code, out, tmpoutpos); break; case 40: - encode40(in, inpos, code, out, outpos); + encode40(in, currentPos, code, out, tmpoutpos); break; case 41: - encode41(in, inpos, code, out, outpos); + encode41(in, currentPos, code, out, tmpoutpos); break; case 42: - encode42(in, inpos, code, out, outpos); + encode42(in, currentPos, code, out, tmpoutpos); break; case 43: - encode43(in, inpos, code, out, outpos); + encode43(in, currentPos, code, out, tmpoutpos); break; case 44: - encode44(in, inpos, code, out, outpos); + encode44(in, currentPos, code, out, tmpoutpos); break; case 45: - encode45(in, inpos, code, out, outpos); + encode45(in, currentPos, code, out, tmpoutpos); break; case 46: - encode46(in, inpos, code, out, outpos); + encode46(in, currentPos, code, out, tmpoutpos); break; case 47: - encode47(in, inpos, code, out, outpos); + encode47(in, currentPos, code, out, tmpoutpos); break; case 48: - encode48(in, inpos, code, out, outpos); + encode48(in, currentPos, code, out, tmpoutpos); break; case 49: - encode49(in, inpos, code, out, outpos); + encode49(in, currentPos, code, out, tmpoutpos); break; case 50: - encode50(in, inpos, code, out, outpos); + encode50(in, currentPos, code, out, tmpoutpos); break; case 51: - encode51(in, inpos, code, out, outpos); + encode51(in, currentPos, code, out, tmpoutpos); break; case 52: - encode52(in, inpos, code, out, outpos); + encode52(in, currentPos, code, out, tmpoutpos); break; case 53: - encode53(in, inpos, code, out, outpos); + encode53(in, currentPos, code, out, tmpoutpos); break; case 54: - encode54(in, inpos, code, out, outpos); + encode54(in, currentPos, code, out, tmpoutpos); break; case 55: - encode55(in, inpos, code, out, outpos); + encode55(in, currentPos, code, out, tmpoutpos); break; case 56: - encode56(in, inpos, code, out, outpos); + encode56(in, currentPos, code, out, tmpoutpos); break; case 57: - encode57(in, inpos, code, out, outpos); + encode57(in, currentPos, code, out, tmpoutpos); break; case 58: - encode58(in, inpos, code, out, outpos); + encode58(in, currentPos, code, out, tmpoutpos); break; case 59: - encode59(in, inpos, code, out, outpos); + encode59(in, currentPos, code, out, tmpoutpos); break; case 60: - encode60(in, inpos, code, out, outpos); + encode60(in, currentPos, code, out, tmpoutpos); break; case 61: - encode61(in, inpos, code, out, outpos); + encode61(in, currentPos, code, out, tmpoutpos); break; case 62: - encode62(in, inpos, code, out, outpos); + encode62(in, currentPos, code, out, tmpoutpos); break; case 63: - encode63(in, inpos, code, out, outpos); + encode63(in, currentPos, code, out, tmpoutpos); break; case 64: - encode64(in, inpos, code, out, outpos); + encode64(in, currentPos, code, out, tmpoutpos); break; case 65: - encode65(in, inpos, code, out, outpos); + encode65(in, currentPos, code, out, tmpoutpos); break; case 66: - encode66(in, inpos, code, out, outpos); + encode66(in, currentPos, code, out, tmpoutpos); break; case 67: - encode67(in, inpos, code, out, outpos); + encode67(in, currentPos, code, out, tmpoutpos); break; case 68: - encode68(in, inpos, code, out, outpos); + encode68(in, currentPos, code, out, tmpoutpos); break; case 69: - encode69(in, inpos, code, out, outpos); + encode69(in, currentPos, code, out, tmpoutpos); break; case 70: - encode70(in, inpos, code, out, outpos); + encode70(in, currentPos, code, out, tmpoutpos); break; case 71: - encode71(in, inpos, code, out, outpos); + encode71(in, currentPos, code, out, tmpoutpos); break; case 72: - encode72(in, inpos, code, out, outpos); + encode72(in, currentPos, code, out, tmpoutpos); break; case 73: - encode73(in, inpos, code, out, outpos); + encode73(in, currentPos, code, out, tmpoutpos); break; case 74: - encode74(in, inpos, code, out, outpos); + encode74(in, currentPos, code, out, tmpoutpos); break; case 75: - encode75(in, inpos, code, out, outpos); + encode75(in, currentPos, code, out, tmpoutpos); break; case 76: - encode76(in, inpos, code, out, outpos); + encode76(in, currentPos, code, out, tmpoutpos); break; case 77: - encode77(in, inpos, code, out, outpos); + encode77(in, currentPos, code, out, tmpoutpos); break; case 78: - encode78(in, inpos, code, out, outpos); + encode78(in, currentPos, code, out, tmpoutpos); break; case 79: - encode79(in, inpos, code, out, outpos); + encode79(in, currentPos, code, out, tmpoutpos); break; case 80: - encode80(in, inpos, code, out, outpos); + encode80(in, currentPos, code, out, tmpoutpos); break; default: throw new RuntimeException("unsupported code"); }// end switch - inpos.set(currentPos); tmpoutpos += 2; + currentPos = nextCurrentPos; } outer: while (currentPos < finalin) { @@ -337,10 +338,8 @@ public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWra outpos.set(tmpoutpos); } - private void encode0(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode0(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + (in[inf + i]); for (int i = 0; i < 4; i++) @@ -348,13 +347,11 @@ private void encode0(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode1(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode1(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -362,13 +359,11 @@ private void encode1(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode2(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode2(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -376,13 +371,11 @@ private void encode2(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 28 + i];// 第二个28位是低位存储的,所以浪费的1比特在最顶端。 out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode3(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode3(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -390,13 +383,11 @@ private void encode3(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode4(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode4(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -404,13 +395,11 @@ private void encode4(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode5(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode5(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -418,13 +407,11 @@ private void encode5(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode6(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode6(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -432,13 +419,11 @@ private void encode6(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode7(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode7(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -446,13 +431,11 @@ private void encode7(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode8(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode8(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 24; i++) out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; for (int i = 0; i < 4; i++) @@ -460,13 +443,11 @@ private void encode8(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 28 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode9(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode9(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -475,13 +456,11 @@ private void encode9(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 1) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode10(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode10(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) { out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; @@ -492,13 +471,11 @@ private void encode10(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 2) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode11(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode11(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -507,13 +484,11 @@ private void encode11(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 3) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode12(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode12(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -522,13 +497,11 @@ private void encode12(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 4) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode13(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode13(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -537,13 +510,11 @@ private void encode13(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 5) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode14(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode14(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -552,13 +523,11 @@ private void encode14(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 7) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode15(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode15(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -567,13 +536,11 @@ private void encode15(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 9) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode16(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode16(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -582,13 +549,11 @@ private void encode16(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 14) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode17(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode17(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 12; i++) out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; for (int i = 0; i < 2; i++) @@ -597,13 +562,11 @@ private void encode17(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 28) + in[inf + 14 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode18(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode18(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -612,13 +575,11 @@ private void encode18(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 1) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode19(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode19(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -627,13 +588,11 @@ private void encode19(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 2) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode20(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode20(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -642,13 +601,11 @@ private void encode20(final int[] in, final IntWrapper inOffset, final int code, out[outf + 1] = (out[outf + 1] << 3) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode21(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode21(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -656,13 +613,11 @@ private void encode21(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode22(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode22(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -670,13 +625,11 @@ private void encode22(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode23(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode23(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -684,13 +637,11 @@ private void encode23(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode24(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode24(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -698,13 +649,11 @@ private void encode24(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode25(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode25(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -712,13 +661,11 @@ private void encode25(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode26(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode26(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 8; i++) out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -726,13 +673,11 @@ private void encode26(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 9 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode27(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode27(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -740,13 +685,11 @@ private void encode27(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode28(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode28(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -754,13 +697,11 @@ private void encode28(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode29(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode29(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -768,13 +709,11 @@ private void encode29(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode30(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode30(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -782,13 +721,11 @@ private void encode30(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode31(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode31(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -796,13 +733,11 @@ private void encode31(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode32(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode32(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -810,13 +745,11 @@ private void encode32(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode33(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode33(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -824,13 +757,11 @@ private void encode33(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode34(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode34(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -838,13 +769,11 @@ private void encode34(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode35(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode35(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 6; i++) out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; for (int i = 0; i < 1; i++) @@ -852,13 +781,11 @@ private void encode35(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 7 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode36(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode36(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -866,13 +793,11 @@ private void encode36(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode37(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode37(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -880,13 +805,11 @@ private void encode37(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode38(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode38(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -894,13 +817,11 @@ private void encode38(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode39(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode39(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -908,13 +829,11 @@ private void encode39(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode40(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode40(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -922,13 +841,11 @@ private void encode40(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode41(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode41(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -936,13 +853,11 @@ private void encode41(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode42(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode42(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -950,13 +865,11 @@ private void encode42(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode43(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode43(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -964,13 +877,11 @@ private void encode43(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode44(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode44(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 4; i++) out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); @@ -978,13 +889,11 @@ private void encode44(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 5 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode45(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode45(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -992,13 +901,11 @@ private void encode45(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode46(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode46(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1006,13 +913,11 @@ private void encode46(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode47(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode47(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1020,13 +925,11 @@ private void encode47(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode48(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode48(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1034,13 +937,11 @@ private void encode48(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode49(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode49(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1048,13 +949,11 @@ private void encode49(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode50(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode50(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1062,13 +961,11 @@ private void encode50(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode51(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode51(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1076,13 +973,11 @@ private void encode51(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode52(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode52(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1090,13 +985,11 @@ private void encode52(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode53(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode53(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 3; i++) out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); @@ -1104,13 +997,11 @@ private void encode53(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 4 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode54(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode54(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1118,13 +1009,11 @@ private void encode54(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode55(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode55(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1132,13 +1021,11 @@ private void encode55(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode56(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode56(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1146,13 +1033,11 @@ private void encode56(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode57(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode57(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1160,13 +1045,11 @@ private void encode57(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode58(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode58(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1174,13 +1057,11 @@ private void encode58(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode59(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode59(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1188,13 +1069,11 @@ private void encode59(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode60(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode60(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1202,13 +1081,11 @@ private void encode60(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode61(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode61(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1216,13 +1093,11 @@ private void encode61(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode62(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode62(final int[] in, final int inf, final int code, final int[] out, + final int outf) { for (int i = 0; i < 2; i++) out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); @@ -1230,13 +1105,11 @@ private void encode62(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 3 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode63(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode63(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); @@ -1244,220 +1117,186 @@ private void encode63(final int[] in, final IntWrapper inOffset, final int code, for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode64(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode64(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode65(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode65(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode66(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode66(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode67(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode67(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode68(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode68(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode69(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode69(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode70(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode70(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode71(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode71(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 14) + in[inf]; out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 2 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode72(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode72(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 28; i++) out[outf + 1] = (out[outf + 1] << 1) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode73(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode73(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 14; i++) out[outf + 1] = (out[outf + 1] << 2) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode74(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode74(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 9; i++) out[outf + 1] = (out[outf + 1] << 3) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode75(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode75(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 7; i++) out[outf + 1] = (out[outf + 1] << 4) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode76(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode76(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 5; i++) out[outf + 1] = (out[outf + 1] << 5) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode77(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode77(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 4; i++) out[outf + 1] = (out[outf + 1] << 7) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode78(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode78(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 3; i++) out[outf + 1] = (out[outf + 1] << 9) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode79(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode79(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 2; i++) out[outf + 1] = (out[outf + 1] << 14) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } - private void encode80(final int[] in, final IntWrapper inOffset, final int code, final int[] out, - final IntWrapper outOffset) { - int inf = inOffset.get(); - int outf = outOffset.get(); + private void encode80(final int[] in, final int inf, final int code, final int[] out, + final int outf) { out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); for (int i = 0; i < 1; i++) out[outf + 1] = (out[outf + 1] << 28) + in[inf + 1 + i]; out[outf + 0] = code << 24 | out[outf + 0]; - outOffset.add(2); + } @Override From afd7dc474c9fe49bee532f67ee3f24bf1407bc68 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 14 Sep 2016 09:18:10 -0400 Subject: [PATCH 040/170] Tuning GroupSimple9 --- CHANGELOG | 3 + .../integercompression/GroupSimple9.java | 1793 +++++++++-------- 2 files changed, 910 insertions(+), 886 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index a899df4..7431667 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.1.9 (September 14th 2016) + - Tuning GroupSimple9 + 0.1.8 (September 13th 2016) - Added GroupSimple9 diff --git a/src/main/java/me/lemire/integercompression/GroupSimple9.java b/src/main/java/me/lemire/integercompression/GroupSimple9.java index cbd99e0..0ce10ce 100644 --- a/src/main/java/me/lemire/integercompression/GroupSimple9.java +++ b/src/main/java/me/lemire/integercompression/GroupSimple9.java @@ -1,13 +1,17 @@ package me.lemire.integercompression; /** - * Group Simple 9 Credit Kun Jiang, Yuexiang Yang and Qinghua Zheng source: + * Group Simple 9 is a variation on Simple 9 that preserves the same + * compression ratios but offers higher decoding speed by regrouping + * the 32-bit words into pairs of 64-bit words. + * + * original by Kun Jiang, Yuexiang Yang and Qinghua Zheng source: * https://github.com/deeper2/simple * * Adapted by D. Lemire. */ -public final class GroupSimple9 implements IntegerCODEC { +public final class GroupSimple9 implements IntegerCODEC, SkippableIntegerCODEC { private static final int[][] M = { { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, { 9, 10, 11, 12, 13, 14, 15, 16, 17 }, { 18, 19, 20, 21, 22, 23, 24, 25, 26 }, { 27, 28, 29, 30, 31, 32, 33, 34, 35 }, @@ -17,325 +21,11 @@ public final class GroupSimple9 implements IntegerCODEC { @Override public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { - int tmpoutpos = outpos.get(); - int currentPos = inpos.get(); - int selector1 = 0; - int selector2 = 0; - out[tmpoutpos++] = inlength; - outpos.add(1); - final int finalin = currentPos + inlength; - while (currentPos < finalin - 28 * 2) { - int nextCurrentPos = currentPos; - mainloop1: for (selector1=0; selector1 <= 8; selector1++) { - int compressedNum = codeNum[selector1]; - //if (finalin <= nextCurrentPos + compressedNum - 1) - // compressedNum = finalin - nextCurrentPos; - int b = bitLength[selector1]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) - continue mainloop1; - } - nextCurrentPos += compressedNum; - break; - } - mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) { - int compressedNum = codeNum[selector2]; - //if (finalin <= nextCurrentPos + compressedNum - 1) - // compressedNum = finalin - nextCurrentPos; - int b = bitLength[selector2]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) - continue mainloop2; - } - nextCurrentPos += compressedNum; - break; - } - int code = M[selector1][selector2]; - out[tmpoutpos] = 0; - out[tmpoutpos + 1] = 0; - switch (code) { - case 0: - encode0(in, currentPos, code, out, tmpoutpos); - break; - case 1: - encode1(in, currentPos, code, out, tmpoutpos); - break; - case 2: - encode2(in, currentPos, code, out, tmpoutpos); - break; - case 3: - encode3(in, currentPos, code, out, tmpoutpos); - break; - case 4: - encode4(in, currentPos, code, out, tmpoutpos); - break; - case 5: - encode5(in, currentPos, code, out, tmpoutpos); - break; - case 6: - encode6(in, currentPos, code, out, tmpoutpos); - break; - case 7: - encode7(in, currentPos, code, out, tmpoutpos); - break; - case 8: - encode8(in, currentPos, code, out, tmpoutpos); - break; - case 9: - encode9(in, currentPos, code, out, tmpoutpos); - break; - case 10: - encode10(in, currentPos, code, out, tmpoutpos); - break; - case 11: - encode11(in, currentPos, code, out, tmpoutpos); - break; - case 12: - encode12(in, currentPos, code, out, tmpoutpos); - break; - case 13: - encode13(in, currentPos, code, out, tmpoutpos); - break; - case 14: - encode14(in, currentPos, code, out, tmpoutpos); - break; - case 15: - encode15(in, currentPos, code, out, tmpoutpos); - break; - case 16: - encode16(in, currentPos, code, out, tmpoutpos); - break; - case 17: - encode17(in, currentPos, code, out, tmpoutpos); - break; - case 18: - encode18(in, currentPos, code, out, tmpoutpos); - break; - case 19: - encode19(in, currentPos, code, out, tmpoutpos); - break; - case 20: - encode20(in, currentPos, code, out, tmpoutpos); - break; - case 21: - encode21(in, currentPos, code, out, tmpoutpos); - break; - case 22: - encode22(in, currentPos, code, out, tmpoutpos); - break; - case 23: - encode23(in, currentPos, code, out, tmpoutpos); - break; - case 24: - encode24(in, currentPos, code, out, tmpoutpos); - break; - case 25: - encode25(in, currentPos, code, out, tmpoutpos); - break; - case 26: - encode26(in, currentPos, code, out, tmpoutpos); - break; - case 27: - encode27(in, currentPos, code, out, tmpoutpos); - break; - case 28: - encode28(in, currentPos, code, out, tmpoutpos); - break; - case 29: - encode29(in, currentPos, code, out, tmpoutpos); - break; - case 30: - encode30(in, currentPos, code, out, tmpoutpos); - break; - case 31: - encode31(in, currentPos, code, out, tmpoutpos); - break; - case 32: - encode32(in, currentPos, code, out, tmpoutpos); - break; - case 33: - encode33(in, currentPos, code, out, tmpoutpos); - break; - case 34: - encode34(in, currentPos, code, out, tmpoutpos); - break; - case 35: - encode35(in, currentPos, code, out, tmpoutpos); - break; - case 36: - encode36(in, currentPos, code, out, tmpoutpos); - break; - case 37: - encode37(in, currentPos, code, out, tmpoutpos); - break; - case 38: - encode38(in, currentPos, code, out, tmpoutpos); - break; - case 39: - encode39(in, currentPos, code, out, tmpoutpos); - break; - case 40: - encode40(in, currentPos, code, out, tmpoutpos); - break; - case 41: - encode41(in, currentPos, code, out, tmpoutpos); - break; - case 42: - encode42(in, currentPos, code, out, tmpoutpos); - break; - case 43: - encode43(in, currentPos, code, out, tmpoutpos); - break; - case 44: - encode44(in, currentPos, code, out, tmpoutpos); - break; - case 45: - encode45(in, currentPos, code, out, tmpoutpos); - break; - case 46: - encode46(in, currentPos, code, out, tmpoutpos); - break; - case 47: - encode47(in, currentPos, code, out, tmpoutpos); - break; - case 48: - encode48(in, currentPos, code, out, tmpoutpos); - break; - case 49: - encode49(in, currentPos, code, out, tmpoutpos); - break; - case 50: - encode50(in, currentPos, code, out, tmpoutpos); - break; - case 51: - encode51(in, currentPos, code, out, tmpoutpos); - break; - case 52: - encode52(in, currentPos, code, out, tmpoutpos); - break; - case 53: - encode53(in, currentPos, code, out, tmpoutpos); - break; - case 54: - encode54(in, currentPos, code, out, tmpoutpos); - break; - case 55: - encode55(in, currentPos, code, out, tmpoutpos); - break; - case 56: - encode56(in, currentPos, code, out, tmpoutpos); - break; - case 57: - encode57(in, currentPos, code, out, tmpoutpos); - break; - case 58: - encode58(in, currentPos, code, out, tmpoutpos); - break; - case 59: - encode59(in, currentPos, code, out, tmpoutpos); - break; - case 60: - encode60(in, currentPos, code, out, tmpoutpos); - break; - case 61: - encode61(in, currentPos, code, out, tmpoutpos); - break; - case 62: - encode62(in, currentPos, code, out, tmpoutpos); - break; - case 63: - encode63(in, currentPos, code, out, tmpoutpos); - break; - case 64: - encode64(in, currentPos, code, out, tmpoutpos); - break; - case 65: - encode65(in, currentPos, code, out, tmpoutpos); - break; - case 66: - encode66(in, currentPos, code, out, tmpoutpos); - break; - case 67: - encode67(in, currentPos, code, out, tmpoutpos); - break; - case 68: - encode68(in, currentPos, code, out, tmpoutpos); - break; - case 69: - encode69(in, currentPos, code, out, tmpoutpos); - break; - case 70: - encode70(in, currentPos, code, out, tmpoutpos); - break; - case 71: - encode71(in, currentPos, code, out, tmpoutpos); - break; - case 72: - encode72(in, currentPos, code, out, tmpoutpos); - break; - case 73: - encode73(in, currentPos, code, out, tmpoutpos); - break; - case 74: - encode74(in, currentPos, code, out, tmpoutpos); - break; - case 75: - encode75(in, currentPos, code, out, tmpoutpos); - break; - case 76: - encode76(in, currentPos, code, out, tmpoutpos); - break; - case 77: - encode77(in, currentPos, code, out, tmpoutpos); - break; - case 78: - encode78(in, currentPos, code, out, tmpoutpos); - break; - case 79: - encode79(in, currentPos, code, out, tmpoutpos); - break; - case 80: - encode80(in, currentPos, code, out, tmpoutpos); - break; - default: - throw new RuntimeException("unsupported code"); - }// end switch - tmpoutpos += 2; - currentPos = nextCurrentPos; - } - - outer: while (currentPos < finalin) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - if (finalin <= currentPos + compressedNum - 1) - compressedNum = finalin - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[currentPos + i])) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - if (compressedNum != codeNum[selector]) { - res <<= (codeNum[selector] - compressedNum) * b; - } - res |= selector << 28; - out[tmpoutpos++] = res; - - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - inpos.set(currentPos); - outpos.set(tmpoutpos); + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); } private void encode0(final int[] in, final int inf, final int code, final int[] out, @@ -1301,508 +991,21 @@ private void encode80(final int[] in, final int inf, final int code, final int[] @Override public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - int currentPos = outpos.get(); - int tmpinpos = inpos.get(); - final int finalout = currentPos + in[tmpinpos++]; - while (currentPos < finalout - 2 * 28) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); + } - int val = in[tmpinpos++]; - int valn = in[tmpinpos++]; - int header = val >>> 24; - switch (header) { - case 0: { - decode0(val, valn, out, currentPos); - currentPos+=56; - break; - } - case 1: { - decode1(val, valn, out, currentPos); - currentPos+=42; - break; - } - case 2: { - decode2(val, valn, out, currentPos); - currentPos+=37; - break; - } - case 3: { - decode3(val, valn, out, currentPos); - currentPos+=35; - break; - } - case 4: { - decode4(val, valn, out, currentPos); - currentPos+=33; - break; - } - case 5: { - decode5(val, valn, out, currentPos); - currentPos+=32; - break; - } - case 6: { - decode6(val, valn, out, currentPos); - currentPos+=31; - break; - } - case 7: { - decode7(val, valn, out, currentPos); - currentPos+=30; - break; - } - case 8: { - decode8(val, valn, out, currentPos); - currentPos+=29; - break; - } - case 9: { - decode9(val, valn, out, currentPos); - currentPos+=42; - break; - } - case 10: { - decode10(val, valn, out, currentPos); - currentPos+=28; - break; - } - case 11: { - decode11(val, valn, out, currentPos); - currentPos+=23; - break; - } - case 12: { - decode12(val, valn, out, currentPos); - currentPos+=21; - break; - } - case 13: { - decode13(val, valn, out, currentPos); - currentPos+=19; - break; - } - case 14: { - decode14(val, valn, out, currentPos); - currentPos+=18; - break; - } - case 15: { - decode15(val, valn, out, currentPos); - currentPos+=17; - break; - } - case 16: { - decode16(val, valn, out, currentPos); - currentPos+=16; - break; - } - case 17: { - decode17(val, valn, out, currentPos); - currentPos+=15; - break; - } - case 18: { - decode18(val, valn, out, currentPos); - currentPos+=37; - break; - } - case 19: { - decode19(val, valn, out, currentPos); - currentPos+=23; - break; - } - case 20: { - decode20(val, valn, out, currentPos); - currentPos+=18; - break; - } - case 21: { - decode21(val, valn, out, currentPos); - currentPos+=16; - break; - } - case 22: { - decode22(val, valn, out, currentPos); - currentPos+=14; - break; - } - case 23: { - decode23(val, valn, out, currentPos); - currentPos+=13; - break; - } - case 24: { - decode24(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 25: { - decode25(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 26: { - decode26(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 27: { - decode27(val, valn, out, currentPos); - currentPos+=35; - break; - } - case 28: { - decode28(val, valn, out, currentPos); - currentPos+=21; - break; - } - case 29: { - decode29(val, valn, out, currentPos); - currentPos+=16; - break; - } - - case 30: { - decode30(val, valn, out, currentPos); - currentPos+=14; - break; - } - case 31: { - decode31(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 32: { - decode32(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 33: { - decode33(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 34: { - decode34(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 35: { - decode35(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 36: { - decode36(val, valn, out, currentPos); - currentPos+=33; - break; - } - case 37: { - decode37(val, valn, out, currentPos); - currentPos+=19; - break; - } - case 38: { - decode38(val, valn, out, currentPos); - currentPos+=14; - break; - } - case 39: { - decode39(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 40: { - decode40(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 41: { - decode41(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 42: { - decode42(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 43: { - decode43(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 44: { - decode44(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 45: { - decode45(val, valn, out, currentPos); - currentPos+=32; - break; - } - case 46: { - decode46(val, valn, out, currentPos); - currentPos+=18; - break; - } - case 47: { - decode47(val, valn, out, currentPos); - currentPos+=13; - break; - } - case 48: { - decode48(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 49: { - decode49(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 50: { - decode50(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 51: { - decode51(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 52: { - decode52(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 53: { - decode53(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 54: { - decode54(val, valn, out, currentPos); - currentPos+=31; - break; - } - case 55: { - decode55(val, valn, out, currentPos); - currentPos+=17; - break; - } - case 56: { - decode56(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 57: { - decode57(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 58: { - decode58(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 59: { - decode59(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 60: { - decode60(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 61: { - decode61(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 62: { - decode62(val, valn, out, currentPos); - currentPos+=4; - break; - } - case 63: { - decode63(val, valn, out, currentPos); - currentPos+=30; - break; - } - case 64: { - decode64(val, valn, out, currentPos); - currentPos+=16; - break; - } - case 65: { - decode65(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 66: { - decode66(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 67: { - decode67(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 68: { - decode68(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 69: { - decode69(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 70: { - decode70(val, valn, out, currentPos); - currentPos+=4; - break; - } - case 71: { - decode71(val, valn, out, currentPos); - currentPos+=3; - break; - } - case 72: { - decode72(val, valn, out, currentPos); - currentPos+=29; - break; - } - case 73: { - decode73(val, valn, out, currentPos); - currentPos+=15; - break; - } - case 74: { - decode74(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 75: { - decode75(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 76: { - decode76(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 77: { - decode77(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 78: { - decode78(val, valn, out, currentPos); - currentPos+=4; - break; - } - case 79: { - decode79(val, valn, out, currentPos); - currentPos+=3; - break; - } - case 80: { - decode80(val, valn, out, currentPos); - currentPos+=2; - break; - } - default: - throw new RuntimeException("Wrong code: " + header); - }// end switch - } // end while - - while (currentPos < finalout) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - final int howmany = finalout - currentPos < 28 ? finalout - currentPos : 28; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (k + 4)) >>> 31; - } - break; - } - case 1: { // number : 14, bitwidth : 2 - final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (2 * k + 4)) >>> 30; - } - break; - } - case 2: { // number : 9, bitwidth : 3 - final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (3 * k + 5)) >>> 29; - } - break; - } - case 3: { // number : 7, bitwidth : 4 - final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (4 * k + 4)) >>> 28; - } - break; - } - case 4: { // number : 5, bitwidth : 5 - final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (5 * k + 7)) >>> 27; - } - break; - } - case 5: { // number : 4, bitwidth : 7 - final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (7 * k + 4)) >>> 25; - } - break; - } - case 6: { // number : 3, bitwidth : 9 - final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (9 * k + 5)) >>> 23; - } - break; - } - case 7: { // number : 2, bitwidth : 14 - final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (14 * k + 4)) >>> 18; - } - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen"); - } - } - } - - outpos.set(finalout); - inpos.set(tmpinpos); - } - - - - private void decode80(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } + + + private void decode80(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } private void decode79(int val, int valn, int[] out, int currentPos) { // number : 1, bitwidth : 28 @@ -3458,74 +2661,892 @@ private void decode1(int val, int valn, int[] out, int currentPos) { out[currentPos++] = (valn << 30) >>> 30; } - private void decode0(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; + private void decode0(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + @Override + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + int tmpoutpos = outpos.get(); + int currentPos = inpos.get(); + int selector1 = 0; + int selector2 = 0; + final int finalin = currentPos + inlength; + while (currentPos < finalin - 28 * 2) { + int nextCurrentPos = currentPos; + mainloop1: for (selector1=0; selector1 <= 8; selector1++) { + int compressedNum = codeNum[selector1]; + //if (finalin <= nextCurrentPos + compressedNum - 1) + // compressedNum = finalin - nextCurrentPos; + int b = bitLength[selector1]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) + continue mainloop1; + } + nextCurrentPos += compressedNum; + break; + } + mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) { + int compressedNum = codeNum[selector2]; + //if (finalin <= nextCurrentPos + compressedNum - 1) + // compressedNum = finalin - nextCurrentPos; + int b = bitLength[selector2]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) + continue mainloop2; + } + nextCurrentPos += compressedNum; + break; + } + int code = M[selector1][selector2]; + out[tmpoutpos] = 0; + out[tmpoutpos + 1] = 0; + switch (code) { + case 0: + encode0(in, currentPos, code, out, tmpoutpos); + break; + case 1: + encode1(in, currentPos, code, out, tmpoutpos); + break; + case 2: + encode2(in, currentPos, code, out, tmpoutpos); + break; + case 3: + encode3(in, currentPos, code, out, tmpoutpos); + break; + case 4: + encode4(in, currentPos, code, out, tmpoutpos); + break; + case 5: + encode5(in, currentPos, code, out, tmpoutpos); + break; + case 6: + encode6(in, currentPos, code, out, tmpoutpos); + break; + case 7: + encode7(in, currentPos, code, out, tmpoutpos); + break; + case 8: + encode8(in, currentPos, code, out, tmpoutpos); + break; + case 9: + encode9(in, currentPos, code, out, tmpoutpos); + break; + case 10: + encode10(in, currentPos, code, out, tmpoutpos); + break; + case 11: + encode11(in, currentPos, code, out, tmpoutpos); + break; + case 12: + encode12(in, currentPos, code, out, tmpoutpos); + break; + case 13: + encode13(in, currentPos, code, out, tmpoutpos); + break; + case 14: + encode14(in, currentPos, code, out, tmpoutpos); + break; + case 15: + encode15(in, currentPos, code, out, tmpoutpos); + break; + case 16: + encode16(in, currentPos, code, out, tmpoutpos); + break; + case 17: + encode17(in, currentPos, code, out, tmpoutpos); + break; + case 18: + encode18(in, currentPos, code, out, tmpoutpos); + break; + case 19: + encode19(in, currentPos, code, out, tmpoutpos); + break; + case 20: + encode20(in, currentPos, code, out, tmpoutpos); + break; + case 21: + encode21(in, currentPos, code, out, tmpoutpos); + break; + case 22: + encode22(in, currentPos, code, out, tmpoutpos); + break; + case 23: + encode23(in, currentPos, code, out, tmpoutpos); + break; + case 24: + encode24(in, currentPos, code, out, tmpoutpos); + break; + case 25: + encode25(in, currentPos, code, out, tmpoutpos); + break; + case 26: + encode26(in, currentPos, code, out, tmpoutpos); + break; + case 27: + encode27(in, currentPos, code, out, tmpoutpos); + break; + case 28: + encode28(in, currentPos, code, out, tmpoutpos); + break; + case 29: + encode29(in, currentPos, code, out, tmpoutpos); + break; + case 30: + encode30(in, currentPos, code, out, tmpoutpos); + break; + case 31: + encode31(in, currentPos, code, out, tmpoutpos); + break; + case 32: + encode32(in, currentPos, code, out, tmpoutpos); + break; + case 33: + encode33(in, currentPos, code, out, tmpoutpos); + break; + case 34: + encode34(in, currentPos, code, out, tmpoutpos); + break; + case 35: + encode35(in, currentPos, code, out, tmpoutpos); + break; + case 36: + encode36(in, currentPos, code, out, tmpoutpos); + break; + case 37: + encode37(in, currentPos, code, out, tmpoutpos); + break; + case 38: + encode38(in, currentPos, code, out, tmpoutpos); + break; + case 39: + encode39(in, currentPos, code, out, tmpoutpos); + break; + case 40: + encode40(in, currentPos, code, out, tmpoutpos); + break; + case 41: + encode41(in, currentPos, code, out, tmpoutpos); + break; + case 42: + encode42(in, currentPos, code, out, tmpoutpos); + break; + case 43: + encode43(in, currentPos, code, out, tmpoutpos); + break; + case 44: + encode44(in, currentPos, code, out, tmpoutpos); + break; + case 45: + encode45(in, currentPos, code, out, tmpoutpos); + break; + case 46: + encode46(in, currentPos, code, out, tmpoutpos); + break; + case 47: + encode47(in, currentPos, code, out, tmpoutpos); + break; + case 48: + encode48(in, currentPos, code, out, tmpoutpos); + break; + case 49: + encode49(in, currentPos, code, out, tmpoutpos); + break; + case 50: + encode50(in, currentPos, code, out, tmpoutpos); + break; + case 51: + encode51(in, currentPos, code, out, tmpoutpos); + break; + case 52: + encode52(in, currentPos, code, out, tmpoutpos); + break; + case 53: + encode53(in, currentPos, code, out, tmpoutpos); + break; + case 54: + encode54(in, currentPos, code, out, tmpoutpos); + break; + case 55: + encode55(in, currentPos, code, out, tmpoutpos); + break; + case 56: + encode56(in, currentPos, code, out, tmpoutpos); + break; + case 57: + encode57(in, currentPos, code, out, tmpoutpos); + break; + case 58: + encode58(in, currentPos, code, out, tmpoutpos); + break; + case 59: + encode59(in, currentPos, code, out, tmpoutpos); + break; + case 60: + encode60(in, currentPos, code, out, tmpoutpos); + break; + case 61: + encode61(in, currentPos, code, out, tmpoutpos); + break; + case 62: + encode62(in, currentPos, code, out, tmpoutpos); + break; + case 63: + encode63(in, currentPos, code, out, tmpoutpos); + break; + case 64: + encode64(in, currentPos, code, out, tmpoutpos); + break; + case 65: + encode65(in, currentPos, code, out, tmpoutpos); + break; + case 66: + encode66(in, currentPos, code, out, tmpoutpos); + break; + case 67: + encode67(in, currentPos, code, out, tmpoutpos); + break; + case 68: + encode68(in, currentPos, code, out, tmpoutpos); + break; + case 69: + encode69(in, currentPos, code, out, tmpoutpos); + break; + case 70: + encode70(in, currentPos, code, out, tmpoutpos); + break; + case 71: + encode71(in, currentPos, code, out, tmpoutpos); + break; + case 72: + encode72(in, currentPos, code, out, tmpoutpos); + break; + case 73: + encode73(in, currentPos, code, out, tmpoutpos); + break; + case 74: + encode74(in, currentPos, code, out, tmpoutpos); + break; + case 75: + encode75(in, currentPos, code, out, tmpoutpos); + break; + case 76: + encode76(in, currentPos, code, out, tmpoutpos); + break; + case 77: + encode77(in, currentPos, code, out, tmpoutpos); + break; + case 78: + encode78(in, currentPos, code, out, tmpoutpos); + break; + case 79: + encode79(in, currentPos, code, out, tmpoutpos); + break; + case 80: + encode80(in, currentPos, code, out, tmpoutpos); + break; + default: + throw new RuntimeException("unsupported code"); + }// end switch + tmpoutpos += 2; + currentPos = nextCurrentPos; + } + + outer: while (currentPos < finalin) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalin <= currentPos + compressedNum - 1) + compressedNum = finalin - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + if (compressedNum != codeNum[selector]) { + res <<= (codeNum[selector] - compressedNum) * b; + } + res |= selector << 28; + out[tmpoutpos++] = res; + + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + inpos.set(currentPos); + outpos.set(tmpoutpos); } + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { + int currentPos = outpos.get(); + int tmpinpos = inpos.get(); + final int finalout = currentPos + num; + while (currentPos < finalout - 2 * 28) { - private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + int val = in[tmpinpos++]; + int valn = in[tmpinpos++]; + int header = val >>> 24; + switch (header) { + case 0: { + decode0(val, valn, out, currentPos); + currentPos+=56; + break; + } + case 1: { + decode1(val, valn, out, currentPos); + currentPos+=42; + break; + } + case 2: { + decode2(val, valn, out, currentPos); + currentPos+=37; + break; + } + case 3: { + decode3(val, valn, out, currentPos); + currentPos+=35; + break; + } + case 4: { + decode4(val, valn, out, currentPos); + currentPos+=33; + break; + } + case 5: { + decode5(val, valn, out, currentPos); + currentPos+=32; + break; + } + case 6: { + decode6(val, valn, out, currentPos); + currentPos+=31; + break; + } + case 7: { + decode7(val, valn, out, currentPos); + currentPos+=30; + break; + } + case 8: { + decode8(val, valn, out, currentPos); + currentPos+=29; + break; + } + case 9: { + decode9(val, valn, out, currentPos); + currentPos+=42; + break; + } + case 10: { + decode10(val, valn, out, currentPos); + currentPos+=28; + break; + } + case 11: { + decode11(val, valn, out, currentPos); + currentPos+=23; + break; + } + case 12: { + decode12(val, valn, out, currentPos); + currentPos+=21; + break; + } + case 13: { + decode13(val, valn, out, currentPos); + currentPos+=19; + break; + } + case 14: { + decode14(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 15: { + decode15(val, valn, out, currentPos); + currentPos+=17; + break; + } + case 16: { + decode16(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 17: { + decode17(val, valn, out, currentPos); + currentPos+=15; + break; + } + case 18: { + decode18(val, valn, out, currentPos); + currentPos+=37; + break; + } + case 19: { + decode19(val, valn, out, currentPos); + currentPos+=23; + break; + } + case 20: { + decode20(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 21: { + decode21(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 22: { + decode22(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 23: { + decode23(val, valn, out, currentPos); + currentPos+=13; + break; + } + case 24: { + decode24(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 25: { + decode25(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 26: { + decode26(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 27: { + decode27(val, valn, out, currentPos); + currentPos+=35; + break; + } + case 28: { + decode28(val, valn, out, currentPos); + currentPos+=21; + break; + } + case 29: { + decode29(val, valn, out, currentPos); + currentPos+=16; + break; + } + + case 30: { + decode30(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 31: { + decode31(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 32: { + decode32(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 33: { + decode33(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 34: { + decode34(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 35: { + decode35(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 36: { + decode36(val, valn, out, currentPos); + currentPos+=33; + break; + } + case 37: { + decode37(val, valn, out, currentPos); + currentPos+=19; + break; + } + case 38: { + decode38(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 39: { + decode39(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 40: { + decode40(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 41: { + decode41(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 42: { + decode42(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 43: { + decode43(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 44: { + decode44(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 45: { + decode45(val, valn, out, currentPos); + currentPos+=32; + break; + } + case 46: { + decode46(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 47: { + decode47(val, valn, out, currentPos); + currentPos+=13; + break; + } + case 48: { + decode48(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 49: { + decode49(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 50: { + decode50(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 51: { + decode51(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 52: { + decode52(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 53: { + decode53(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 54: { + decode54(val, valn, out, currentPos); + currentPos+=31; + break; + } + case 55: { + decode55(val, valn, out, currentPos); + currentPos+=17; + break; + } + case 56: { + decode56(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 57: { + decode57(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 58: { + decode58(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 59: { + decode59(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 60: { + decode60(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 61: { + decode61(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 62: { + decode62(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 63: { + decode63(val, valn, out, currentPos); + currentPos+=30; + break; + } + case 64: { + decode64(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 65: { + decode65(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 66: { + decode66(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 67: { + decode67(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 68: { + decode68(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 69: { + decode69(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 70: { + decode70(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 71: { + decode71(val, valn, out, currentPos); + currentPos+=3; + break; + } + case 72: { + decode72(val, valn, out, currentPos); + currentPos+=29; + break; + } + case 73: { + decode73(val, valn, out, currentPos); + currentPos+=15; + break; + } + case 74: { + decode74(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 75: { + decode75(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 76: { + decode76(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 77: { + decode77(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 78: { + decode78(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 79: { + decode79(val, valn, out, currentPos); + currentPos+=3; + break; + } + case 80: { + decode80(val, valn, out, currentPos); + currentPos+=2; + break; + } + default: + throw new RuntimeException("Wrong code: " + header); + }// end switch + } // end while - private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + while (currentPos < finalout) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finalout - currentPos < 28 ? finalout - currentPos : 28; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } - @Override - public String toString() { - return this.getClass().getSimpleName(); + outpos.set(finalout); + inpos.set(tmpinpos); + } } \ No newline at end of file From 5fc20a0c61881e9e870c41a4160bface7fbc1c54 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 14 Sep 2016 09:24:57 -0400 Subject: [PATCH 041/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.9 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 755e696..bfa84c0 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.9-SNAPSHOT + 0.1.9 jar 1.6 From 2f252d61f16185548e3d1b12eb49cf50f6e03c6e Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 14 Sep 2016 09:25:00 -0400 Subject: [PATCH 042/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bfa84c0..65d6754 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.9 + 0.1.10-SNAPSHOT jar 1.6 From 15fa89bff528cf6bf183e2d1dc33db5ccd5f9d15 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 7 Oct 2016 10:00:56 -0400 Subject: [PATCH 043/170] Preparing update --- .../integercompression/IntCompressor.java | 13 ++- .../UncompressibleInputException.java | 19 ++++ .../differential/IntegratedIntCompressor.java | 16 +++- .../integercompression/ResourcedTest.java | 92 +++++++++++++++++++ 4 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 src/main/java/me/lemire/integercompression/UncompressibleInputException.java create mode 100644 src/test/java/me/lemire/integercompression/ResourcedTest.java diff --git a/src/main/java/me/lemire/integercompression/IntCompressor.java b/src/main/java/me/lemire/integercompression/IntCompressor.java index 5f174fd..87e7bde 100644 --- a/src/main/java/me/lemire/integercompression/IntCompressor.java +++ b/src/main/java/me/lemire/integercompression/IntCompressor.java @@ -33,13 +33,20 @@ public IntCompressor() { * * @param input array to be compressed * @return compressed array + * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { - int [] compressed = new int[input.length+1024]; + int [] compressed = new int[input.length + input.length / 100 + 1024]; compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); - codec.headlessCompress(input, new IntWrapper(0), - input.length, compressed, outpos); + try { + codec.headlessCompress(input, new IntWrapper(0), + input.length, compressed, outpos); + } catch (IndexOutOfBoundsException ioebe) { + throw new + UncompressibleInputException("Your input is too poorly compressible " + + "with the current codec : "+codec); + } compressed = Arrays.copyOf(compressed,outpos.intValue()); return compressed; } diff --git a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java b/src/main/java/me/lemire/integercompression/UncompressibleInputException.java new file mode 100644 index 0000000..c490946 --- /dev/null +++ b/src/main/java/me/lemire/integercompression/UncompressibleInputException.java @@ -0,0 +1,19 @@ +package me.lemire.integercompression; + +/** + * This exception might be thrown if the input is poorly compressible. + * + */ +public class UncompressibleInputException extends RuntimeException { + + /** + * Create new exception + * @param string explanation for the exception + */ + public UncompressibleInputException(String string) { + super(string); + } + + private static final long serialVersionUID = -798583799846489873L; + +} diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java index 652c018..5808bdd 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java @@ -3,10 +3,13 @@ import java.util.Arrays; import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.UncompressibleInputException; /** * This is a convenience class that wraps a codec to provide - * a "friendly" API. + * a "friendly" API. It is useful to compress sorted integers. + * If your integers are not sorted (not even nearly so), please + * consider the IntCompressor class instead. * */ public class IntegratedIntCompressor { @@ -33,14 +36,19 @@ public IntegratedIntCompressor() { * * @param input array to be compressed * @return compressed array + * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { - int [] compressed = new int[input.length+1024]; + int [] compressed = new int[input.length + input.length / 100 + 1024]; compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); IntWrapper initvalue = new IntWrapper(0); - codec.headlessCompress(input, new IntWrapper(0), - input.length, compressed, outpos, initvalue); + try { + codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue); + } catch (IndexOutOfBoundsException ioebe) { + throw new UncompressibleInputException( + "Your input is too poorly compressible with the current codec : " + codec); + } compressed = Arrays.copyOf(compressed,outpos.intValue()); return compressed; } diff --git a/src/test/java/me/lemire/integercompression/ResourcedTest.java b/src/test/java/me/lemire/integercompression/ResourcedTest.java new file mode 100644 index 0000000..b4cb5aa --- /dev/null +++ b/src/test/java/me/lemire/integercompression/ResourcedTest.java @@ -0,0 +1,92 @@ +package me.lemire.integercompression; + +import java.util.ArrayList; +import java.util.Arrays; + +import me.lemire.integercompression.differential.Delta; +import me.lemire.integercompression.differential.IntegratedBinaryPacking; +import me.lemire.integercompression.differential.IntegratedByteIntegerCODEC; +import me.lemire.integercompression.differential.IntegratedComposition; +import me.lemire.integercompression.differential.IntegratedIntCompressor; +import me.lemire.integercompression.differential.IntegratedIntegerCODEC; +import me.lemire.integercompression.differential.IntegratedVariableByte; +import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC; +import me.lemire.integercompression.differential.XorBinaryPacking; + +import java.io.BufferedReader; +import java.io.File; +import org.junit.Assert; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.*; +import java.util.stream.Stream; + +import org.junit.Test; + +/** + * Tests with resources + * + */ +public class ResourcedTest { + SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(), + new SkippableComposition(new BinaryPacking(), new VariableByte()), + new SkippableComposition(new NewPFD(), new VariableByte()), + new SkippableComposition(new NewPFDS9(), new VariableByte()), + new SkippableComposition(new NewPFDS16(), new VariableByte()), + new SkippableComposition(new OptPFD(), new VariableByte()), + new SkippableComposition(new OptPFDS9(), new VariableByte()), + new SkippableComposition(new OptPFDS16(), new VariableByte()), + new SkippableComposition(new FastPFOR128(), new VariableByte()), + new SkippableComposition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16() }; + + /** + * @throws IOException + * if the resource cannot be accessed (should be considered a + * bug) + * + */ + @Test + public void IntCompressorTest() throws IOException { + // next line requires Java8? + // int[] data = + // Files.lines(Paths.get("integers.txt")).mapToInt(Integer::parseInt).toArray(); + File f = new File("src/test/resources/integers.txt"); + System.out.println("loading test data from "+ f.getAbsolutePath()); + BufferedReader bfr = new BufferedReader(new FileReader(f)); + String line; + ArrayList ai = new ArrayList(); + while ((line = bfr.readLine()) != null) { + ai.add(Integer.parseInt(line)); + } + bfr.close(); + int[] data = new int[ai.size()]; + for (int k = 0; k < data.length; ++k) + data[k] = ai.get(k).intValue(); + ai = null; + // finally! + { + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] compressed = iic.compress(data); + int[] recovered = iic.uncompress(compressed); + Assert.assertArrayEquals(recovered, data); + } + for (SkippableIntegerCODEC C : codecs) { + IntCompressor iic = new IntCompressor(C); + int[] compressed = iic.compress(data); + int[] recovered = iic.uncompress(compressed); + Assert.assertArrayEquals(recovered, data); + + } + for (SkippableIntegerCODEC C : codecs) { + if (C instanceof SkippableIntegratedIntegerCODEC) { + IntegratedIntCompressor iic = new IntegratedIntCompressor((SkippableIntegratedIntegerCODEC) C); + int[] compressed = iic.compress(data); + int[] recovered = iic.uncompress(compressed); + Assert.assertArrayEquals(recovered, data); + } + + } + + } + +} From 0411964b9a7824cc82ab3e6b078ed75a7e822b76 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 7 Oct 2016 10:02:24 -0400 Subject: [PATCH 044/170] Update to changelog --- CHANGELOG | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 7431667..1377346 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +0.1.10 (October 7th 2016) + - Fix for issue 36 https://github.com/lemire/JavaFastPFOR/issues/36 + 0.1.9 (September 14th 2016) - Tuning GroupSimple9 From 6804c57b6a3fc0b437f7787e1c957d3b907749ec Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 7 Oct 2016 10:04:15 -0400 Subject: [PATCH 045/170] Adding new resource file --- src/test/resources/integers.txt | 130657 +++++++++++++++++++++++++++++ 1 file changed, 130657 insertions(+) create mode 100644 src/test/resources/integers.txt diff --git a/src/test/resources/integers.txt b/src/test/resources/integers.txt new file mode 100644 index 0000000..06a56d3 --- /dev/null +++ b/src/test/resources/integers.txt @@ -0,0 +1,130657 @@ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +15 +30 +31 +9 +32 +19 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +4 +43 +44 +45 +19 +46 +47 +48 +49 +50 +9 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +16 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +9 +12 +86 +87 +88 +89 +90 +91 +92 +10 +93 +77 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +43 +20 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +89 +129 +130 +131 +132 +133 +19 +134 +19 +135 +136 +137 +138 +139 +140 +141 +142 +143 +57 +89 +20 +43 +144 +14 +145 +32 +43 +14 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +43 +158 +159 +160 +161 +43 +162 +163 +164 +165 +57 +166 +167 +168 +169 +170 +171 +172 +19 +173 +174 +9 +175 +19 +14 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +104 +189 +190 +25 +191 +19 +4 +192 +193 +194 +195 +32 +196 +197 +198 +199 +200 +201 +202 +12 +203 +204 +205 +206 +207 +48 +208 +2 +209 +4 +164 +104 +210 +211 +212 +2 +213 +214 +215 +216 +217 +2 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +19 +12 +3 +233 +234 +235 +236 +237 +48 +238 +239 +213 +240 +241 +22 +242 +243 +244 +245 +246 +247 +248 +249 +57 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +248 +269 +270 +271 +272 +273 +3 +57 +19 +46 +274 +275 +276 +213 +277 +278 +43 +279 +280 +281 +282 +283 +283 +248 +284 +213 +213 +2 +285 +43 +32 +286 +284 +287 +288 +289 +290 +15 +291 +292 +293 +57 +294 +60 +295 +296 +297 +179 +298 +299 +29 +300 +284 +301 +302 +303 +213 +213 +304 +305 +89 +306 +307 +308 +248 +99 +309 +19 +188 +310 +311 +19 +312 +313 +314 +155 +22 +213 +248 +315 +176 +316 +317 +318 +319 +320 +19 +57 +248 +321 +322 +323 +324 +325 +43 +326 +327 +303 +328 +329 +330 +15 +248 +303 +331 +332 +333 +205 +334 +335 +14 +336 +337 +283 +43 +338 +339 +340 +341 +57 +342 +343 +337 +43 +344 +345 +346 +284 +347 +337 +348 +349 +14 +350 +46 +337 +351 +352 +286 +353 +43 +15 +354 +355 +356 +357 +358 +359 +238 +9 +360 +361 +164 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +114 +380 +15 +381 +382 +43 +383 +384 +385 +386 +387 +388 +389 +179 +390 +358 +20 +391 +392 +349 +393 +9 +394 +395 +396 +397 +14 +398 +399 +210 +32 +400 +401 +20 +402 +403 +404 +405 +406 +407 +408 +409 +345 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +14 +48 +2 +420 +421 +422 +423 +424 +425 +426 +427 +228 +428 +20 +429 +430 +431 +432 +433 +434 +435 +9 +14 +436 +25 +437 +438 +32 +439 +440 +32 +441 +442 +443 +444 +137 +345 +445 +20 +446 +447 +448 +449 +450 +451 +452 +48 +453 +454 +455 +456 +457 +458 +459 +16 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +137 +470 +17 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +15 +482 +483 +484 +317 +485 +486 +19 +487 +488 +489 +490 +2 +491 +492 +369 +493 +494 +495 +496 +497 +9 +498 +499 +32 +500 +501 +502 +213 +14 +503 +77 +504 +505 +345 +506 +507 +508 +12 +509 +20 +510 +43 +511 +512 +115 +513 +514 +515 +176 +516 +15 +517 +518 +2 +519 +3 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +19 +530 +531 +532 +155 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +345 +115 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +354 +555 +556 +357 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +541 +568 +57 +569 +14 +66 +570 +15 +109 +249 +571 +572 +15 +573 +574 +575 +576 +201 +577 +578 +579 +274 +580 +581 +582 +583 +584 +585 +196 +586 +201 +342 +587 +588 +39 +589 +590 +140 +591 +592 +593 +594 +43 +595 +596 +597 +598 +9 +286 +599 +600 +601 +228 +602 +603 +604 +200 +605 +196 +606 +607 +608 +509 +609 +610 +10 +17 +611 +248 +612 +613 +614 +197 +615 +616 +617 +618 +48 +619 +286 +620 +621 +622 +509 +623 +20 +48 +624 +9 +625 +626 +15 +627 +628 +43 +337 +629 +630 +631 +632 +43 +633 +14 +634 +635 +14 +636 +637 +2 +4 +43 +638 +639 +640 +19 +52 +641 +248 +642 +643 +644 +284 +3 +645 +2 +646 +647 +19 +648 +649 +145 +650 +43 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +196 +662 +358 +663 +345 +19 +554 +664 +528 +665 +666 +667 +331 +19 +668 +669 +670 +671 +672 +673 +155 +491 +674 +675 +676 +57 +2 +677 +678 +679 +680 +140 +398 +681 +554 +682 +14 +683 +493 +684 +597 +685 +213 +686 +687 +688 +213 +689 +4 +690 +665 +284 +691 +692 +398 +693 +694 +270 +695 +141 +19 +696 +303 +697 +19 +698 +699 +337 +248 +700 +22 +4 +701 +702 +96 +286 +703 +704 +705 +706 +237 +707 +708 +48 +57 +709 +710 +20 +48 +213 +711 +712 +713 +270 +714 +715 +284 +155 +716 +717 +718 +4 +345 +719 +720 +721 +34 +722 +20 +723 +724 +725 +726 +15 +727 +728 +729 +730 +22 +731 +732 +733 +734 +735 +736 +286 +737 +20 +738 +739 +740 +270 +19 +741 +742 +743 +744 +196 +745 +746 +747 +10 +748 +749 +665 +249 +750 +751 +155 +752 +753 +19 +754 +248 +249 +755 +756 +757 +758 +759 +760 +60 +761 +762 +763 +213 +764 +765 +766 +345 +767 +768 +707 +769 +284 +770 +771 +772 +323 +773 +774 +775 +776 +137 +777 +778 +176 +779 +780 +781 +782 +16 +783 +784 +785 +786 +43 +787 +788 +789 +232 +790 +791 +792 +793 +794 +379 +795 +2 +796 +57 +797 +798 +178 +799 +178 +188 +800 +801 +802 +803 +804 +805 +806 +141 +807 +808 +15 +809 +15 +209 +3 +810 +811 +812 +813 +814 +48 +665 +815 +286 +25 +586 +816 +34 +817 +818 +819 +820 +821 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831 +832 +32 +833 +14 +834 +835 +15 +836 +837 +20 +838 +839 +840 +137 +841 +842 +843 +844 +845 +80 +846 +847 +848 +849 +323 +208 +155 +357 +850 +851 +852 +853 +3 +284 +854 +855 +32 +856 +201 +857 +399 +858 +859 +860 +861 +2 +48 +862 +863 +864 +745 +43 +865 +866 +845 +867 +868 +869 +870 +871 +19 +872 +873 +286 +874 +875 +876 +20 +877 +878 +879 +880 +201 +323 +881 +882 +883 +884 +885 +43 +886 +35 +887 +25 +888 +889 +890 +19 +891 +892 +893 +894 +895 +896 +48 +897 +898 +899 +900 +57 +901 +902 +903 +904 +566 +43 +905 +906 +907 +908 +32 +909 +99 +15 +910 +911 +721 +912 +913 +914 +915 +916 +917 +918 +554 +564 +919 +920 +317 +564 +921 +922 +923 +924 +10 +925 +665 +926 +10 +201 +927 +928 +929 +930 +931 +932 +933 +10 +934 +201 +20 +935 +936 +416 +937 +936 +938 +357 +19 +939 +940 +941 +942 +943 +249 +201 +554 +944 +945 +946 +77 +2 +947 +948 +949 +950 +951 +952 +9 +953 +954 +955 +956 +741 +957 +958 +959 +677 +960 +80 +43 +196 +961 +57 +962 +963 +354 +964 +658 +965 +966 +967 +968 +969 +970 +971 +286 +14 +2 +19 +972 +973 +974 +975 +976 +22 +977 +978 +979 +980 +981 +982 +983 +77 +984 +985 +986 +17 +2 +987 +155 +20 +34 +988 +989 +43 +990 +991 +9 +992 +993 +14 +994 +19 +115 +995 +57 +996 +3 +720 +997 +437 +2 +998 +999 +1000 +1001 +184 +1002 +1003 +1004 +15 +1005 +1006 +1007 +1008 +34 +1009 +1010 +1011 +1012 +1013 +1014 +1015 +1016 +67 +910 +1017 +1018 +1019 +19 +1020 +1021 +1022 +1023 +1024 +1025 +1026 +32 +19 +1027 +1028 +1029 +140 +1030 +1031 +1032 +1033 +1034 +1035 +1036 +1037 +1038 +1039 +1040 +165 +1041 +1042 +1043 +1044 +658 +1045 +4 +1046 +14 +1047 +1048 +1049 +1050 +9 +34 +1051 +1052 +1053 +713 +1054 +1055 +1056 +1057 +1058 +1059 +1060 +76 +1061 +1062 +19 +1063 +1064 +9 +1065 +736 +345 +1066 +15 +1067 +428 +1068 +1069 +286 +1070 +1071 +1072 +1073 +1074 +185 +1075 +1076 +57 +1077 +179 +1078 +1079 +703 +14 +1080 +1081 +491 +1082 +57 +1083 +1084 +1085 +1086 +1087 +1088 +788 +1089 +17 +1090 +1091 +1092 +1093 +1094 +692 +1095 +43 +1096 +180 +9 +19 +1097 +57 +14 +1098 +1099 +1100 +1101 +1102 +188 +1103 +1104 +89 +22 +1105 +286 +1106 +1107 +1108 +1109 +658 +1110 +1111 +1112 +1113 +1114 +1115 +57 +33 +1116 +373 +1117 +20 +1118 +32 +959 +179 +1119 +17 +114 +1120 +77 +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +713 +57 +60 +671 +109 +1131 +1132 +57 +1133 +1134 +14 +1135 +1136 +1137 +301 +1138 +228 +1139 +249 +1140 +1141 +10 +137 +1142 +927 +1143 +1144 +43 +57 +464 +1145 +1146 +1147 +1148 +1149 +286 +1150 +1151 +1152 +19 +379 +1153 +20 +9 +1154 +32 +200 +1155 +1156 +1157 +16 +222 +1158 +358 +1082 +32 +1159 +1082 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +677 +915 +1170 +1171 +1172 +1173 +1174 +20 +1175 +1176 +15 +1177 +1178 +19 +1179 +1180 +323 +1181 +15 +1182 +1183 +1184 +1185 +1186 +1187 +1188 +1189 +1013 +1190 +237 +1191 +1192 +210 +1193 +4 +658 +1194 +1195 +32 +548 +201 +248 +19 +112 +1196 +1197 +1198 +1199 +323 +1200 +1112 +112 +910 +1201 +286 +707 +1202 +57 +1203 +1204 +317 +1205 +1206 +43 +1207 +15 +303 +1208 +15 +14 +1209 +1021 +1210 +1211 +1212 +43 +1213 +303 +1214 +19 +279 +9 +1215 +1216 +1217 +1218 +1219 +1220 +1221 +1011 +1222 +1105 +32 +1223 +1224 +1225 +1226 +1227 +1228 +1229 +1230 +43 +1231 +284 +1232 +10 +4 +1233 +43 +349 +19 +845 +43 +1234 +1235 +213 +1236 +248 +493 +141 +1237 +1238 +1239 +1240 +1241 +1242 +1243 +1244 +35 +284 +1245 +19 +14 +284 +1246 +1247 +1248 +57 +1249 +1224 +20 +32 +1250 +19 +57 +379 +274 +32 +1251 +337 +1252 +213 +1253 +1254 +1255 +43 +91 +323 +201 +1256 +1257 +1258 +1259 +196 +1260 +1261 +3 +19 +1262 +1263 +15 +20 +48 +1264 +99 +42 +303 +1265 +1266 +1267 +345 +1268 +770 +370 +1269 +1270 +10 +239 +1271 +1272 +15 +1273 +1274 +1275 +1276 +1277 +141 +1278 +1279 +1280 +1281 +849 +1282 +278 +1283 +1284 +464 +373 +1285 +303 +1286 +345 +10 +15 +509 +1287 +1262 +1288 +862 +286 +1289 +1290 +1291 +1292 +809 +514 +1047 +583 +1293 +3 +337 +1294 +201 +484 +1295 +1296 +1297 +1298 +1299 +1300 +237 +1301 +209 +1302 +1303 +872 +1304 +1305 +1306 +4 +1307 +15 +393 +15 +15 +57 +1308 +1309 +1310 +19 +1311 +910 +1312 +1313 +1314 +1315 +322 +20 +1316 +1317 +1318 +1319 +1300 +2 +15 +1320 +10 +699 +1321 +1322 +1323 +1324 +337 +57 +1325 +1326 +1327 +417 +1328 +1329 +32 +1330 +1331 +1021 +286 +1332 +533 +284 +1333 +1334 +1335 +57 +184 +1336 +822 +398 +1337 +1338 +57 +57 +20 +1339 +1340 +1341 +14 +1342 +1300 +1343 +1344 +1345 +155 +15 +1346 +269 +248 +1347 +1348 +2 +1349 +1350 +1048 +1351 +1352 +222 +303 +1353 +1354 +1355 +705 +1356 +1357 +43 +1358 +1359 +1360 +134 +1186 +1361 +1362 +1047 +188 +1363 +164 +1364 +1365 +1366 +32 +1367 +1368 +1369 +2 +22 +1370 +1371 +1372 +358 +842 +1373 +849 +1374 +15 +2 +1375 +1376 +1377 +1378 +1379 +790 +123 +201 +1380 +1381 +1382 +1383 +1384 +1385 +9 +1386 +1387 +1388 +1389 +1390 +9 +155 +1391 +1392 +1393 +1394 +1395 +281 +286 +1396 +1397 +1398 +1399 +1400 +1401 +725 +721 +1402 +1403 +89 +1404 +32 +15 +1405 +1406 +1407 +1408 +1409 +1410 +9 +1411 +317 +46 +1412 +1413 +1414 +1415 +1416 +352 +188 +1417 +1418 +647 +188 +1419 +1420 +1421 +1422 +1423 +43 +1424 +1091 +1425 +1426 +1427 +89 +1428 +1429 +1430 +1431 +77 +43 +1432 +1433 +862 +1434 +1435 +9 +495 +1436 +48 +1437 +1438 +554 +1439 +1440 +32 +971 +1441 +1425 +1442 +1443 +802 +155 +1444 +1445 +1446 +711 +1447 +1448 +57 +1449 +1450 +872 +1451 +1452 +1453 +1454 +1455 +249 +15 +1456 +1457 +1458 +43 +1459 +9 +1460 +1461 +1462 +1463 +1464 +501 +1465 +14 +1466 +1467 +1468 +1469 +1470 +1471 +1472 +1473 +43 +1474 +1475 +1476 +345 +1477 +1478 +1479 +1480 +1481 +1482 +696 +1483 +1484 +1485 +1486 +1487 +32 +1488 +248 +1489 +1490 +1491 +1492 +849 +1493 +228 +1494 +1495 +48 +17 +1496 +19 +286 +1497 +1498 +1499 +1500 +1501 +1502 +111 +10 +1503 +1504 +1384 +1505 +1506 +1507 +1508 +284 +1509 +1510 +331 +1511 +1512 +1396 +213 +32 +1513 +1514 +1515 +248 +1516 +4 +1517 +337 +1518 +244 +1519 +20 +1520 +1300 +1521 +1522 +1523 +43 +1524 +1525 +1526 +1245 +32 +32 +1527 +1528 +43 +597 +1465 +1465 +1364 +1529 +1530 +1531 +1437 +554 +188 +1532 +43 +1533 +958 +1534 +317 +1535 +1536 +1537 +1538 +528 +1384 +1539 +1540 +1541 +1542 +22 +597 +1543 +14 +1544 +19 +19 +1245 +1545 +1546 +1547 +1548 +1444 +1082 +14 +1549 +19 +70 +10 +1550 +57 +178 +1551 +1552 +1553 +1554 +1555 +15 +1556 +1557 +1558 +188 +845 +1559 +1560 +1561 +1562 +1563 +1564 +398 +1565 +1566 +1567 +178 +1568 +25 +9 +1077 +1021 +43 +1569 +1570 +1571 +1572 +1573 +989 +1212 +245 +1574 +1575 +1576 +286 +1577 +1578 +828 +1579 +1580 +1574 +9 +1581 +648 +237 +179 +1582 +1425 +193 +1583 +1584 +1234 +1569 +57 +1585 +1586 +713 +1587 +1588 +1224 +20 +1589 +138 +845 +1590 +1591 +1592 +1593 +43 +1594 +658 +1595 +1011 +1596 +1597 +1598 +1599 +15 +1600 +1601 +1149 +1602 +1603 +1604 +1605 +1606 +1607 +1608 +1609 +57 +178 +1610 +1251 +43 +1042 +738 +1611 +9 +1612 +1613 +1614 +43 +1615 +1580 +1452 +1616 +1617 +286 +1618 +1619 +1620 +1621 +1622 +1623 +1624 +1625 +842 +349 +1626 +213 +966 +1627 +822 +1628 +1629 +1630 +1631 +201 +1632 +1633 +1634 +1635 +1636 +1637 +19 +1638 +57 +12 +2 +178 +1639 +16 +15 +1640 +57 +1641 +1642 +1643 +1644 +1645 +1646 +303 +1647 +1648 +936 +19 +1649 +1650 +1651 +317 +1652 +213 +349 +1653 +365 +1654 +1655 +436 +1376 +1656 +1657 +1658 +1659 +1660 +1661 +1662 +38 +34 +14 +1663 +1664 +248 +1665 +32 +1666 +19 +1667 +284 +1668 +1669 +1670 +1671 +48 +1672 +57 +286 +1673 +274 +1674 +1675 +20 +1596 +1676 +57 +1677 +1678 +1679 +1680 +1681 +703 +1682 +1683 +213 +1684 +1685 +1686 +442 +43 +1220 +373 +1687 +1688 +1689 +1690 +1691 +1692 +1217 +379 +597 +15 +1693 +43 +1694 +248 +1262 +446 +48 +15 +536 +586 +402 +1695 +1696 +1697 +337 +1698 +22 +1699 +115 +1700 +1701 +1702 +1703 +1704 +20 +491 +1705 +1107 +1706 +34 +1707 +1708 +1149 +1709 +15 +1710 +1711 +1712 +1713 +57 +15 +1714 +1715 +14 +284 +1454 +764 +1716 +2 +1717 +1718 +1719 +358 +1720 +1721 +1722 +1723 +1724 +1425 +1725 +1726 +19 +43 +1727 +14 +1728 +1524 +586 +528 +305 +703 +1729 +1730 +337 +1731 +1732 +795 +1733 +1734 +1735 +1736 +286 +1737 +1738 +179 +1739 +152 +1740 +1741 +1742 +20 +1743 +1744 +1745 +1746 +1425 +654 +1747 +648 +495 +1112 +1748 +1749 +10 +1750 +1751 +1752 +1753 +201 +1754 +430 +1755 +1756 +1757 +2 +790 +15 +1758 +48 +1759 +1760 +1761 +1762 +114 +872 +1763 +1764 +201 +416 +1765 +1317 +1766 +1767 +936 +1768 +1769 +1770 +1771 +1772 +1773 +1774 +1234 +1775 +981 +1776 +1777 +1778 +1779 +1780 +1781 +1782 +1783 +1310 +665 +1784 +1785 +15 +1786 +1787 +345 +358 +1788 +29 +1789 +317 +43 +15 +9 +1790 +491 +1791 +415 +1792 +316 +9 +566 +1793 +43 +188 +1794 +1243 +1743 +1795 +155 +1796 +554 +1797 +208 +1798 +514 +1799 +32 +1800 +1801 +1802 +741 +1803 +1804 +1805 +201 +1806 +1807 +1808 +1809 +1300 +1810 +1100 +1811 +442 +1812 +1813 +276 +286 +32 +19 +1425 +1814 +354 +201 +1815 +237 +1816 +1817 +43 +1818 +19 +323 +34 +1819 +1820 +1821 +1822 +1823 +1824 +1825 +36 +1826 +1827 +1828 +1829 +1830 +1823 +1831 +1832 +1833 +1834 +201 +1835 +1836 +142 +1837 +1838 +1839 +1840 +1841 +411 +411 +1842 +1843 +1844 +1845 +369 +1300 +1846 +1847 +357 +1848 +586 +1849 +1850 +1851 +1852 +1853 +1854 +1855 +1856 +1857 +1858 +1859 +15 +1860 +1861 +1862 +1863 +1864 +284 +16 +1865 +1866 +1867 +1868 +1869 +1465 +1870 +1871 +1872 +15 +1873 +1874 +1875 +1876 +1877 +1878 +1879 +1880 +822 +1881 +14 +286 +14 +9 +1882 +1883 +1884 +1885 +14 +1886 +77 +3 +1887 +1888 +286 +14 +1889 +1890 +1100 +1891 +14 +1892 +1893 +1894 +15 +1895 +1896 +554 +43 +1897 +1010 +48 +1898 +708 +1899 +1208 +43 +1900 +1169 +1100 +1901 +1902 +1903 +299 +53 +66 +15 +1904 +1905 +1906 +1907 +1908 +16 +1909 +10 +1910 +671 +1369 +1465 +1911 +1912 +1913 +1655 +1914 +1915 +1916 +104 +1083 +1917 +213 +4 +1918 +1287 +1919 +213 +1920 +39 +1921 +1922 +1923 +43 +201 +1924 +1925 +1926 +43 +43 +1927 +1928 +112 +1929 +1930 +358 +1931 +248 +1932 +1933 +1934 +354 +694 +1907 +1935 +9 +213 +1936 +1937 +1938 +1939 +1940 +20 +178 +1941 +32 +20 +1942 +43 +1943 +1944 +35 +43 +1945 +286 +1946 +276 +1947 +1948 +1949 +1950 +19 +1951 +284 +1952 +14 +337 +1524 +1953 +713 +1513 +1954 +248 +284 +1149 +1955 +1956 +201 +1957 +1958 +1959 +43 +53 +1960 +1961 +1962 +1963 +1091 +1964 +303 +1965 +1966 +1863 +2 +1967 +1968 +1969 +354 +1970 +1971 +99 +1021 +1972 +665 +284 +1973 +1386 +286 +337 +1974 +1975 +1976 +1977 +1978 +1979 +269 +9 +1980 +1981 +337 +32 +1982 +1983 +1984 +713 +1985 +1986 +99 +176 +19 +910 +597 +303 +303 +1987 +1988 +1989 +1990 +32 +1991 +1992 +303 +213 +201 +1993 +237 +1994 +1995 +492 +1996 +155 +761 +1997 +1998 +1999 +2000 +2001 +2002 +2003 +2004 +2005 +2006 +2007 +2008 +2009 +1566 +1224 +1234 +99 +2010 +22 +2011 +936 +2012 +2013 +2014 +2015 +2016 +2017 +590 +2018 +2019 +2020 +15 +43 +2021 +415 +2022 +576 +10 +15 +1543 +48 +2023 +2024 +1684 +2025 +2026 +2027 +2028 +2029 +284 +2030 +248 +2031 +2032 +2033 +2034 +2035 +43 +2036 +2037 +2038 +2039 +2040 +57 +2041 +2042 +2043 +2044 +713 +188 +2045 +694 +586 +1221 +286 +2046 +2047 +2048 +1502 +2049 +554 +2050 +32 +2051 +249 +916 +2052 +2053 +2054 +38 +43 +2055 +2056 +2057 +910 +2058 +2059 +491 +2060 +2061 +170 +2062 +2063 +22 +2064 +2065 +270 +2066 +2067 +2040 +201 +2068 +32 +1542 +2069 +554 +2070 +19 +2071 +2072 +2073 +2074 +2075 +2076 +845 +2077 +201 +2078 +2079 +15 +2080 +77 +12 +2081 +2082 +2083 +57 +694 +2084 +345 +89 +597 +1047 +2085 +867 +2086 +2087 +2088 +1386 +2089 +14 +2090 +2091 +2092 +201 +2093 +373 +10 +764 +2094 +2095 +2096 +2097 +1584 +46 +2098 +9 +2099 +2100 +286 +89 +2101 +2102 +2103 +2104 +2105 +2106 +2107 +2108 +245 +2109 +179 +597 +2110 +1131 +2111 +25 +2112 +665 +2113 +201 +201 +2114 +2115 +2116 +197 +2117 +2118 +2119 +2120 +80 +2121 +176 +2122 +509 +1502 +2123 +2124 +179 +1502 +1047 +2125 +1698 +2126 +2127 +2128 +43 +2129 +2130 +2131 +2132 +2133 +1585 +2134 +2135 +573 +2136 +2137 +2138 +2139 +536 +2140 +2141 +2142 +647 +222 +2143 +2144 +2145 +2146 +2147 +89 +2148 +176 +2149 +2150 +2151 +22 +2152 +2153 +15 +2154 +286 +76 +2155 +2156 +77 +2157 +1522 +2158 +283 +36 +48 +1415 +178 +19 +1533 +1655 +2159 +2160 +43 +2161 +99 +2162 +2163 +2164 +2165 +1169 +2166 +3 +2167 +25 +2168 +138 +2169 +2170 +43 +1514 +2171 +2172 +188 +2173 +2174 +231 +1234 +2175 +21 +155 +2176 +2177 +2178 +2179 +2180 +2181 +2182 +2183 +2184 +2185 +2186 +2187 +2188 +2189 +2190 +2191 +10 +2192 +43 +2193 +2194 +179 +647 +77 +2009 +99 +2195 +2196 +2197 +19 +2198 +2199 +989 +2200 +238 +2201 +286 +2202 +1019 +2203 +22 +2204 +2205 +2206 +209 +188 +2207 +20 +2208 +2209 +155 +2210 +35 +2211 +2212 +15 +48 +2213 +155 +519 +2214 +2215 +3 +2216 +2217 +14 +1010 +2218 +345 +179 +2219 +2220 +188 +2221 +2222 +1091 +57 +2223 +2224 +2225 +2226 +2227 +2228 +2229 +2230 +2231 +201 +2232 +2233 +286 +2234 +2235 +237 +2236 +155 +292 +2237 +10 +791 +2238 +43 +20 +2239 +2240 +2241 +2242 +2243 +2244 +15 +2245 +196 +201 +379 +77 +2246 +2247 +1169 +16 +2248 +2249 +910 +2250 +2251 +9 +2252 +2253 +2254 +48 +2255 +2256 +1100 +2257 +2258 +2259 +2260 +2261 +2262 +2263 +2264 +2185 +2260 +2265 +2266 +57 +2267 +2268 +2269 +491 +89 +2270 +430 +541 +2271 +222 +616 +2272 +2273 +2274 +2275 +713 +2276 +700 +2277 +2278 +48 +2279 +77 +2280 +2281 +2282 +2283 +2284 +19 +43 +201 +15 +2285 +2286 +2287 +2288 +10 +2289 +616 +2290 +586 +2291 +398 +2292 +2293 +2294 +2295 +48 +2296 +411 +2297 +25 +349 +2298 +2299 +1829 +2300 +14 +15 +2301 +10 +2302 +1245 +2303 +2304 +19 +2305 +29 +2306 +598 +2307 +2308 +2309 +1765 +4 +815 +9 +2310 +345 +228 +741 +2311 +2 +2312 +2313 +19 +32 +2314 +2315 +2316 +1529 +590 +1116 +2317 +2318 +2319 +2320 +2321 +2322 +2 +2323 +2324 +2325 +2326 +2327 +2328 +179 +22 +2329 +2330 +2331 +2332 +2333 +2334 +201 +57 +2335 +1775 +2336 +2337 +188 +25 +2338 +14 +2339 +2340 +2341 +2342 +2343 +2344 +2345 +2346 +2347 +2348 +2349 +2042 +57 +2350 +2351 +2352 +2353 +2354 +2355 +35 +176 +2356 +2357 +155 +2358 +2359 +2360 +369 +20 +2361 +9 +1710 +1203 +369 +34 +2362 +57 +34 +2363 +2364 +2365 +536 +2366 +2367 +694 +2368 +2369 +43 +2370 +910 +2371 +141 +2372 +2373 +43 +2374 +2375 +25 +2376 +2377 +2378 +286 +2379 +2380 +19 +286 +2381 +2382 +2383 +20 +2384 +2385 +2386 +2387 +2388 +57 +2197 +3 +2389 +790 +165 +2390 +2391 +15 +1458 +2341 +741 +201 +710 +1038 +43 +2392 +2393 +2394 +188 +484 +2395 +1012 +2396 +2397 +4 +2398 +2399 +2400 +155 +2401 +2402 +283 +3 +2403 +2404 +2405 +2406 +2407 +2408 +209 +238 +2409 +179 +2410 +2411 +2412 +43 +11 +2413 +2414 +2415 +2416 +2417 +2418 +1082 +9 +2419 +2 +2420 +2421 +2422 +2423 +2424 +2425 +2426 +2427 +1364 +2428 +2429 +14 +2430 +43 +176 +201 +2431 +354 +9 +1049 +35 +2432 +2433 +1680 +57 +2434 +104 +2435 +2 +1765 +2135 +411 +397 +2436 +2437 +2438 +2439 +663 +2440 +1454 +43 +2441 +989 +1508 +32 +2442 +2443 +2281 +283 +564 +2444 +436 +155 +2445 +2446 +283 +188 +2447 +15 +2448 +2449 +1765 +2450 +491 +2451 +2452 +2453 +2454 +2455 +2456 +1710 +15 +1809 +43 +2457 +2458 +20 +2459 +2460 +2461 +14 +2462 +2410 +1385 +2463 +2464 +2465 +1790 +1436 +2466 +2467 +2468 +188 +35 +2140 +2469 +2399 +2470 +14 +2471 +2472 +19 +2473 +2474 +741 +1415 +9 +2475 +2476 +16 +2477 +2478 +34 +43 +2479 +2480 +14 +2481 +57 +10 +14 +2482 +554 +2483 +30 +2484 +416 +828 +1425 +2485 +155 +2486 +2487 +672 +2488 +19 +2489 +1124 +665 +2490 +19 +57 +2491 +2410 +2492 +707 +2493 +60 +249 +495 +286 +738 +2494 +16 +2495 +2496 +2497 +57 +2498 +1683 +2499 +815 +2500 +89 +188 +2501 +1867 +2502 +915 +237 +2503 +597 +2504 +2505 +19 +2506 +2507 +2508 +2509 +2510 +2511 +2512 +2513 +60 +2514 +2515 +19 +10 +2260 +2516 +2517 +2518 +2519 +2520 +2521 +99 +35 +2522 +788 +2523 +2524 +2525 +2526 +2527 +2528 +19 +1212 +2529 +2530 +2531 +2532 +201 +1425 +2533 +2534 +2535 +2536 +2537 +10 +272 +2538 +2539 +2540 +66 +2541 +10 +2122 +2542 +323 +2543 +2544 +48 +2545 +1248 +20 +2546 +2547 +1994 +2548 +2549 +2550 +671 +2551 +2552 +48 +1112 +222 +1175 +48 +2553 +2554 +2555 +1384 +43 +2556 +245 +2557 +2558 +2559 +1013 +2560 +201 +2561 +2562 +15 +15 +2563 +2564 +2565 +2566 +2567 +1901 +2568 +1286 +397 +2569 +2570 +2571 +155 +2572 +2287 +259 +179 +2573 +2574 +2575 +2576 +342 +2577 +2578 +286 +2579 +20 +34 +1559 +32 +2580 +989 +2581 +694 +1134 +2582 +2583 +2584 +2585 +484 +297 +2430 +2586 +2587 +105 +373 +2588 +2589 +3 +15 +2590 +2591 +2592 +2593 +2594 +705 +2595 +2596 +57 +2015 +2597 +2598 +2599 +188 +228 +2600 +2601 +1300 +2602 +2603 +2604 +2605 +2606 +1085 +12 +677 +2607 +1578 +2608 +2609 +2610 +1578 +57 +2611 +2612 +2613 +379 +1502 +2614 +2615 +1013 +493 +2616 +491 +671 +2617 +9 +15 +2618 +2 +2619 +2620 +15 +2 +2621 +2622 +457 +2623 +2624 +43 +14 +2625 +696 +2308 +2626 +2627 +2628 +2629 +137 +1870 +2630 +554 +237 +2631 +2632 +2633 +2634 +2635 +2636 +2637 +2638 +2639 +2640 +1291 +1855 +201 +286 +2641 +38 +2642 +2643 +2644 +57 +2645 +2547 +2646 +2318 +222 +345 +19 +104 +2647 +2648 +369 +2649 +342 +2650 +358 +43 +2651 +2652 +301 +677 +2653 +1047 +2654 +57 +845 +2655 +1107 +2656 +2657 +859 +2658 +2659 +123 +2660 +2661 +2662 +14 +1913 +32 +668 +2430 +2663 +2664 +274 +354 +2665 +1992 +2666 +2667 +2668 +2669 +2670 +180 +2671 +1822 +19 +2672 +2673 +22 +402 +2674 +32 +2675 +201 +2676 +2677 +2678 +2655 +2679 +2680 +138 +2681 +2682 +2121 +9 +2683 +286 +397 +2684 +2685 +2686 +770 +34 +2687 +2688 +1870 +2689 +2690 +2686 +554 +43 +286 +19 +2691 +2692 +2693 +1310 +2694 +2695 +2696 +1051 +2697 +2698 +19 +57 +2699 +791 +2700 +2701 +2702 +2703 +188 +2058 +2704 +317 +2705 +2706 +2707 +193 +484 +2708 +2709 +16 +17 +2710 +2711 +2712 +2713 +2714 +2715 +2716 +2717 +2718 +1437 +2719 +2720 +15 +2721 +2722 +2723 +2724 +2725 +509 +1570 +2726 +2727 +2728 +138 +2729 +16 +1716 +2730 +1513 +1287 +2731 +2732 +2733 +193 +2040 +2734 +2735 +2736 +2737 +910 +2738 +43 +2739 +34 +2740 +14 +2741 +2742 +20 +554 +2743 +2744 +597 +707 +2745 +2746 +721 +2747 +333 +2748 +2749 +2750 +2751 +15 +2752 +2753 +57 +2754 +2755 +2756 +20 +2757 +2758 +7 +2759 +2760 +2761 +2762 +2763 +286 +10 +2764 +3 +2765 +2766 +20 +179 +10 +2767 +3 +15 +2768 +2769 +1013 +2770 +2771 +1710 +2772 +15 +2773 +514 +15 +708 +2774 +19 +1172 +2775 +2776 +286 +19 +32 +2777 +415 +2778 +2779 +15 +1013 +1679 +2780 +983 +590 +379 +2781 +1042 +57 +1529 +2782 +188 +32 +200 +1738 +2783 +2784 +2785 +2786 +2787 +2788 +2789 +188 +2790 +417 +19 +2791 +20 +2792 +1606 +2793 +2794 +1711 +2795 +2796 +1169 +2797 +2798 +2799 +2800 +2801 +2802 +20 +10 +2803 +2804 +568 +2805 +2806 +2314 +1091 +2807 +2808 +2809 +915 +845 +32 +237 +2810 +2811 +80 +590 +2812 +2813 +2259 +2814 +2815 +201 +2816 +2817 +15 +586 +188 +2818 +2819 +43 +197 +2820 +66 +828 +1465 +2821 +2822 +2823 +357 +245 +2 +2824 +43 +2825 +2826 +478 +2827 +2828 +34 +1018 +10 +648 +2829 +2830 +2831 +2832 +39 +358 +43 +2833 +2550 +196 +2834 +4 +57 +2835 +2836 +2837 +2838 +2406 +2728 +2839 +2840 +2841 +22 +20 +2842 +2843 +2844 +2845 +2846 +2847 +1970 +2848 +2849 +228 +67 +1612 +2850 +2851 +2852 +98 +2853 +2854 +2414 +2855 +43 +2856 +2857 +2858 +2859 +2860 +2861 +463 +134 +2862 +2694 +201 +1165 +2863 +2864 +2865 +14 +2866 +142 +15 +2 +2867 +2868 +2476 +2869 +1606 +43 +2870 +2871 +2872 +872 +2873 +10 +2874 +583 +14 +19 +2875 +616 +2876 +2877 +15 +15 +2878 +2879 +25 +2880 +2881 +43 +2882 +2883 +48 +2884 +1001 +2885 +9 +9 +2886 +2887 +43 +2888 +2889 +57 +873 +2890 +2891 +2431 +26 +57 +533 +2892 +25 +2893 +533 +2894 +910 +2895 +19 +48 +2896 +2897 +34 +2898 +2526 +286 +2899 +2900 +2762 +19 +533 +2901 +554 +2902 +2903 +2904 +358 +2905 +2906 +2907 +2908 +2909 +2910 +249 +2911 +2912 +1924 +2913 +2092 +2914 +99 +2915 +665 +1066 +2253 +43 +2916 +57 +2917 +196 +2918 +2919 +2920 +2921 +2922 +123 +2923 +16 +237 +75 +284 +2924 +15 +2925 +2926 +237 +33 +2927 +2928 +20 +2929 +2930 +2931 +2932 +299 +721 +440 +1711 +213 +15 +20 +2933 +2934 +2935 +2936 +2937 +213 +303 +9 +2551 +2938 +303 +2939 +2940 +845 +286 +57 +89 +2941 +2942 +2943 +2944 +2945 +2946 +554 +2947 +284 +373 +2948 +2949 +2950 +533 +2951 +2260 +2952 +531 +2953 +2954 +575 +201 +2955 +1116 +213 +2956 +2957 +48 +286 +2958 +20 +2959 +269 +15 +2960 +1710 +1051 +2961 +19 +43 +2962 +43 +2963 +2964 +322 +140 +2965 +2966 +2967 +2968 +2 +2969 +491 +1384 +2970 +2971 +155 +2972 +15 +1425 +15 +2577 +2973 +2974 +14 +2975 +2976 +76 +658 +2977 +2978 +2979 +2980 +509 +2981 +2439 +337 +2982 +25 +57 +2983 +2984 +2985 +2986 +48 +15 +2987 +2988 +170 +3 +19 +2989 +2990 +349 +19 +22 +2525 +9 +43 +317 +788 +665 +32 +2991 +2992 +2993 +2994 +2995 +2996 +484 +2997 +2998 +2999 +3000 +3001 +3002 +67 +3003 +3 +43 +1013 +3004 +15 +248 +3005 +3006 +125 +337 +57 +3007 +3008 +3009 +2561 +3010 +3011 +96 +3012 +3013 +43 +514 +3014 +3015 +3016 +713 +3017 +3018 +3019 +936 +57 +78 +3020 +14 +3021 +1287 +3022 +137 +2764 +3023 +3024 +3025 +1605 +3026 +25 +3027 +15 +554 +43 +3028 +3029 +541 +1224 +3030 +22 +3031 +9 +3032 +663 +3033 +1051 +3034 +1612 +3035 +155 +399 +3036 +1861 +3037 +3038 +3039 +3040 +20 +43 +3041 +32 +3042 +14 +3043 +99 +15 +484 +3044 +3045 +165 +3046 +3047 +3048 +3049 +3050 +237 +3051 +3052 +3053 +3054 +3055 +3056 +3057 +3058 +3059 +3060 +2865 +3061 +57 +3062 +3063 +53 +3064 +399 +3065 +3066 +845 +417 +3067 +3068 +3069 +425 +3070 +3071 +491 +3072 +3073 +2260 +3074 +3075 +3076 +32 +19 +436 +22 +3077 +3078 +14 +3079 +3080 +3081 +3082 +3083 +3084 +57 +3085 +3086 +3087 +3088 +3089 +910 +3090 +3091 +411 +3092 +1245 +3093 +1470 +342 +1604 +3094 +3095 +1612 +3096 +60 +3097 +19 +3098 +3099 +32 +3100 +19 +3101 +3102 +3103 +32 +1172 +3104 +2 +3105 +3106 +270 +2537 +4 +3107 +3108 +20 +3109 +3110 +24 +57 +3111 +1808 +3112 +337 +3113 +480 +32 +3114 +3115 +3116 +3117 +3118 +554 +3119 +3120 +3121 +3122 +3123 +2926 +19 +3003 +19 +3124 +3125 +3126 +3127 +1437 +694 +3128 +3129 +3130 +3131 +2061 +398 +43 +3132 +3133 +3134 +741 +741 +3135 +3136 +3137 +248 +2471 +1513 +3138 +3139 +9 +3140 +3141 +3142 +3143 +3144 +3145 +2402 +2259 +2591 +3146 +3147 +3148 +1792 +3149 +3150 +3151 +3152 +3153 +3154 +3155 +3156 +3157 +3158 +3159 +286 +2769 +3160 +114 +3161 +3162 +3163 +32 +3164 +286 +16 +104 +711 +3165 +1232 +3166 +14 +745 +3167 +777 +3168 +43 +3169 +1668 +32 +125 +165 +3170 +3171 +3172 +3173 +10 +213 +3174 +43 +201 +3175 +3176 +179 +1047 +284 +3177 +3178 +3179 +22 +3180 +3181 +15 +213 +57 +3182 +16 +345 +3183 +3184 +2 +3185 +3186 +519 +66 +197 +3187 +3188 +3189 +104 +3190 +3191 +86 +3192 +3193 +2672 +286 +3194 +3195 +2835 +57 +3196 +337 +3197 +648 +3198 +10 +3199 +3200 +15 +337 +303 +228 +180 +3201 +32 +3202 +3203 +345 +3204 +3205 +1889 +915 +3206 +213 +337 +1401 +3207 +3208 +32 +3209 +3210 +3211 +248 +286 +2410 +1010 +3212 +3213 +3214 +3215 +3216 +32 +3217 +337 +3218 +3219 +3220 +3221 +3222 +337 +337 +2616 +849 +3223 +57 +3224 +317 +15 +293 +3225 +3226 +3227 +248 +3228 +3229 +3230 +915 +1091 +3231 +3232 +9 +1364 +3233 +43 +3234 +3235 +3236 +3237 +38 +1352 +3238 +3239 +3240 +3241 +3242 +3243 +3244 +43 +770 +22 +3245 +3246 +303 +303 +3247 +3248 +3249 +3250 +2728 +3251 +9 +17 +32 +2314 +3252 +3253 +3254 +3255 +3256 +2260 +19 +43 +349 +178 +1465 +337 +138 +3257 +3258 +12 +1364 +1224 +1604 +286 +188 +15 +478 +15 +379 +15 +20 +3259 +15 +3260 +3261 +3262 +3263 +491 +165 +1021 +3264 +3265 +3266 +3267 +3268 +188 +3269 +57 +3270 +3271 +3272 +3273 +3274 +297 +20 +3275 +2 +3276 +3277 +3278 +377 +15 +2129 +3279 +3280 +3281 +4 +270 +3282 +3283 +3284 +32 +1637 +1710 +3285 +2978 +3286 +89 +3287 +3288 +3287 +3289 +3290 +3291 +648 +3292 +3293 +3294 +20 +1961 +48 +3295 +188 +3296 +3297 +3298 +3299 +22 +201 +3300 +3301 +764 +3302 +3303 +3304 +3305 +3306 +2316 +1513 +540 +237 +3307 +583 +3308 +196 +15 +3309 +3310 +89 +89 +89 +104 +2035 +3311 +3312 +3313 +3314 +3315 +3178 +209 +3316 +272 +3317 +509 +3318 +3319 +3320 +764 +3321 +286 +43 +3322 +20 +3323 +15 +3324 +3325 +3326 +3327 +2546 +201 +358 +155 +3328 +554 +3329 +3330 +3331 +43 +3332 +3333 +1655 +1181 +3334 +1615 +3335 +155 +2129 +3336 +3337 +3338 +3339 +671 +3340 +1172 +3341 +142 +48 +3342 +3343 +3344 +3317 +2764 +3345 +3346 +3347 +910 +29 +3348 +3349 +3350 +3351 +3352 +3353 +3354 +3287 +99 +3355 +3356 +3357 +495 +861 +3358 +3359 +77 +3360 +15 +3361 +15 +3362 +2325 +3363 +3364 +379 +10 +3365 +354 +3366 +3367 +3368 +286 +32 +3369 +9 +3370 +1364 +3371 +665 +3372 +286 +142 +14 +3373 +3374 +3375 +99 +3376 +1547 +3377 +1529 +3378 +687 +491 +3379 +3380 +3381 +665 +373 +3382 +249 +3383 +3384 +19 +3385 +3386 +3387 +3388 +3389 +1502 +3390 +3391 +3392 +3393 +931 +22 +3394 +3395 +3396 +286 +2260 +3397 +373 +43 +3398 +3399 +3400 +3401 +15 +22 +1234 +3402 +3403 +943 +2896 +3404 +3405 +3406 +32 +354 +1790 +3407 +3408 +3054 +457 +3409 +3410 +345 +3050 +53 +738 +15 +3411 +3412 +3413 +3414 +2122 +345 +3415 +3416 +25 +3417 +213 +43 +3418 +3419 +3420 +3421 +14 +936 +3422 +3423 +3424 +3425 +3426 +38 +3427 +1508 +3428 +25 +713 +15 +3429 +57 +3430 +20 +3431 +3432 +3433 +14 +3434 +3435 +43 +3436 +3437 +745 +916 +700 +3438 +3439 +3440 +3441 +3442 +3443 +3444 +3445 +2804 +3446 +3447 +3448 +20 +815 +10 +19 +286 +3449 +3450 +3451 +3452 +213 +3453 +764 +57 +3454 +3455 +3456 +284 +3457 +57 +3458 +3459 +386 +248 +3460 +3461 +3462 +10 +3463 +379 +3464 +519 +3465 +3466 +22 +3467 +3468 +3469 +3470 +43 +3471 +3472 +3473 +3310 +12 +3474 +155 +3475 +694 +354 +2015 +3476 +14 +3477 +3478 +3247 +3479 +596 +303 +337 +683 +3480 +3481 +3482 +3483 +3484 +528 +48 +671 +3485 +554 +286 +610 +16 +178 +3486 +1514 +3487 +3488 +3489 +3490 +3491 +1066 +249 +3492 +3493 +3494 +9 +19 +43 +3495 +9 +665 +554 +3496 +3497 +32 +1502 +3498 +43 +3499 +248 +915 +3500 +3501 +3502 +248 +354 +3503 +1423 +248 +3504 +3505 +16 +3506 +3507 +19 +791 +3508 +185 +3509 +3510 +19 +337 +1976 +248 +2195 +1091 +303 +3511 +597 +3512 +2768 +1900 +3513 +3514 +3515 +3516 +3517 +109 +2601 +1585 +3518 +3519 +3520 +20 +20 +44 +66 +3521 +3522 +3523 +3524 +3525 +3526 +3527 +3528 +15 +2260 +3529 +3530 +3531 +1208 +1559 +3532 +3533 +791 +573 +16 +3534 +19 +3535 +3536 +19 +1907 +43 +209 +2019 +2489 +3537 +586 +3538 +15 +3539 +3540 +3541 +3542 +34 +3543 +3544 +15 +3545 +3546 +3547 +43 +3548 +554 +3549 +3550 +3551 +3552 +3553 +3554 +237 +109 +15 +791 +32 +43 +345 +3555 +1630 +248 +3556 +3557 +3558 +3559 +3560 +1716 +57 +1847 +484 +1927 +22 +2762 +3561 +415 +48 +15 +3562 +188 +48 +196 +3317 +3563 +3564 +3565 +3566 +32 +3567 +32 +694 +3568 +861 +3569 +554 +2029 +201 +1508 +3570 +188 +3571 +201 +1091 +3572 +180 +3573 +3287 +286 +3574 +736 +1149 +3575 +3576 +3577 +29 +172 +3578 +3579 +43 +3580 +3581 +3582 +3583 +20 +3584 +3585 +373 +43 +3586 +32 +1013 +3587 +32 +3588 +3589 +3590 +3591 +3592 +3593 +14 +1436 +3594 +3595 +210 +3330 +29 +3596 +9 +398 +430 +3597 +1529 +3598 +15 +3599 +3600 +2896 +3601 +19 +3602 +3603 +3604 +3605 +43 +57 +3606 +3607 +3608 +3609 +201 +3610 +3611 +3612 +1452 +3613 +3307 +3614 +3615 +3616 +57 +14 +1559 +1300 +3617 +178 +3618 +3619 +3620 +3621 +3622 +345 +188 +2260 +3623 +3316 +893 +3624 +595 +1524 +3625 +3626 +3627 +3628 +3629 +3630 +3631 +3632 +3633 +1655 +271 +3634 +3635 +3636 +3637 +3638 +48 +2 +15 +89 +491 +3353 +3639 +3640 +3641 +3642 +22 +3643 +1637 +3644 +279 +34 +2993 +3645 +560 +3646 +25 +3647 +1160 +15 +1019 +1531 +3648 +3649 +22 +3650 +3651 +3652 +3653 +3654 +3655 +3656 +19 +3657 +915 +3658 +323 +3659 +3660 +3661 +3662 +3663 +15 +43 +3664 +3665 +19 +20 +3666 +3667 +379 +3668 +3669 +237 +910 +3670 +3671 +3672 +3673 +3674 +3675 +3676 +3677 +3678 +3679 +3680 +3681 +32 +77 +3682 +57 +14 +3683 +3684 +3685 +3686 +2459 +3687 +3688 +15 +3689 +3690 +1817 +586 +3691 +3692 +1249 +3043 +185 +43 +3693 +57 +22 +3694 +99 +3695 +3696 +178 +15 +19 +3697 +3698 +595 +3699 +1149 +533 +3700 +3701 +3702 +188 +1688 +1508 +3703 +9 +57 +3704 +9 +77 +3705 +1961 +57 +3061 +3706 +1249 +317 +370 +3707 +4 +15 +43 +1015 +3708 +713 +43 +20 +3709 +43 +3710 +3711 +3712 +2314 +3713 +3714 +3715 +3716 +411 +112 +3717 +2289 +323 +3718 +3719 +3720 +3721 +345 +2721 +3722 +3723 +3724 +3725 +2764 +22 +3726 +15 +3727 +292 +3728 +3729 +32 +3730 +3731 +3732 +3733 +3734 +914 +3735 +3736 +2 +9 +3737 +3738 +2 +3739 +3740 +703 +528 +440 +1232 +3741 +1563 +3742 +484 +3743 +3744 +3745 +1559 +1364 +3746 +411 +20 +3747 +3748 +25 +3749 +3750 +566 +2728 +15 +3751 +15 +10 +357 +882 +3752 +178 +46 +3525 +3753 +2260 +3754 +1521 +3755 +20 +3756 +15 +2 +3 +19 +22 +112 +3757 +3758 +3759 +249 +2903 +2764 +3760 +3761 +3762 +694 +303 +3763 +155 +3764 +3765 +16 +3766 +3767 +3768 +3769 +3770 +3771 +15 +303 +3772 +15 +586 +57 +3773 +3003 +3774 +3775 +3776 +228 +3777 +1513 +4 +3778 +2 +3779 +3780 +337 +19 +284 +1889 +3781 +284 +248 +3782 +1021 +3783 +3784 +286 +9 +3785 +3786 +736 +2314 +3787 +464 +15 +3788 +20 +3789 +3790 +34 +43 +213 +337 +3791 +3792 +3793 +303 +3794 +3795 +1817 +3796 +358 +3797 +248 +188 +3798 +3799 +337 +3800 +19 +3801 +3802 +337 +20 +1354 +3803 +1817 +1765 +213 +1234 +3804 +1172 +3805 +1051 +337 +3806 +2410 +3807 +3808 +1013 +2009 +3809 +1682 +3810 +3811 +1468 +213 +43 +3812 +3813 +484 +3814 +10 +597 +3815 +3816 +3817 +337 +3818 +3819 +1833 +188 +3820 +809 +228 +415 +32 +2882 +3821 +1961 +791 +142 +2260 +597 +3822 +3 +3823 +2 +3824 +595 +3825 +14 +89 +3826 +3827 +751 +486 +3828 +3829 +3830 +2202 +3831 +3 +3832 +2035 +3833 +43 +915 +436 +3834 +317 +3835 +337 +1604 +155 +115 +379 +3836 +3837 +3838 +3839 +3840 +3841 +43 +3842 +2064 +3843 +3732 +3844 +3845 +15 +3846 +3847 +3848 +1889 +3849 +1291 +3850 +115 +3851 +3852 +155 +3853 +3854 +3855 +14 +48 +104 +3856 +3857 +3858 +3859 +152 +3860 +2042 +3861 +3862 +2439 +3863 +3864 +2465 +3865 +3866 +3867 +3868 +3869 +3870 +3871 +10 +3872 +1696 +42 +3873 +3546 +3874 +3875 +3876 +3790 +3877 +386 +3878 +286 +3879 +15 +3880 +3881 +3882 +3883 +57 +3884 +19 +495 +509 +3885 +20 +25 +155 +554 +3886 +9 +3887 +3888 +32 +1765 +15 +57 +3889 +3890 +20 +3891 +3476 +57 +20 +213 +1425 +3553 +179 +155 +3892 +271 +3893 +3894 +15 +3895 +3896 +15 +15 +3897 +46 +3898 +3899 +845 +3900 +1927 +22 +3901 +3902 +15 +15 +43 +1083 +3903 +3904 +76 +1655 +3905 +3484 +3906 +827 +3907 +3908 +1710 +3909 +3910 +3911 +3912 +1234 +3913 +3914 +3915 +57 +57 +3916 +1245 +3917 +736 +155 +1096 +3918 +179 +3919 +3920 +3921 +493 +3922 +3923 +1415 +3924 +3925 +3926 +2769 +43 +201 +3927 +48 +3928 +3929 +284 +3930 +1655 +3931 +3932 +3933 +3934 +3935 +3936 +3937 +19 +3938 +3939 +20 +1502 +345 +3940 +20 +3941 +272 +3942 +3943 +484 +283 +3944 +1051 +1115 +3945 +598 +3946 +3947 +3948 +123 +222 +3949 +3950 +3951 +3952 +3953 +3954 +3955 +3956 +12 +3957 +248 +19 +15 +665 +3958 +3959 +3960 +3961 +3962 +248 +2 +1128 +3963 +1864 +3964 +3965 +284 +3966 +3967 +1806 +39 +3968 +3969 +3970 +3971 +1559 +1401 +3972 +12 +43 +3973 +1047 +3974 +3975 +3976 +3654 +3977 +3978 +3979 +32 +3980 +3981 +213 +337 +720 +806 +213 +14 +3982 +284 +3983 +3984 +3985 +286 +284 +3986 +3987 +3988 +213 +3989 +1668 +3990 +3991 +3992 +248 +1234 +955 +15 +3993 +270 +352 +3994 +3995 +1889 +4 +3996 +1499 +3997 +19 +3998 +3999 +237 +4000 +4001 +25 +4002 +4003 +4004 +283 +248 +1217 +34 +4005 +137 +2581 +176 +4006 +19 +4007 +845 +89 +2463 +337 +1529 +4008 +4009 +373 +4010 +1386 +4011 +4012 +4013 +188 +4014 +303 +2500 +337 +349 +303 +586 +4015 +10 +4016 +379 +4017 +337 +4018 +882 +213 +519 +4019 +77 +32 +20 +1942 +386 +4020 +180 +12 +2140 +845 +4021 +4022 +3745 +4023 +4024 +4025 +2593 +180 +4026 +4027 +4028 +20 +1234 +1291 +4029 +155 +4030 +34 +303 +4031 +4032 +32 +4033 +14 +4034 +19 +4035 +70 +4036 +43 +137 +155 +9 +4037 +25 +272 +4038 +4039 +3351 +4040 +57 +4041 +4042 +4043 +4044 +4045 +4046 +2721 +4047 +4048 +9 +4049 +9 +2 +1817 +137 +286 +4050 +590 +4051 +2924 +3959 +4052 +99 +1961 +286 +4053 +57 +4054 +4055 +4056 +4057 +4058 +4059 +4060 +4061 +142 +43 +188 +1710 +4062 +15 +4063 +1018 +57 +38 +4064 +4065 +89 +4066 +861 +4067 +4068 +19 +4069 +4070 +4071 +53 +4072 +1800 +3317 +4073 +4074 +299 +4075 +4076 +2347 +4077 +248 +43 +4078 +1710 +1604 +721 +4079 +4080 +2012 +4081 +4082 +12 +4083 +4084 +4085 +4086 +32 +4087 +4088 +4089 +57 +4090 +188 +4091 +4092 +1637 +4093 +4094 +4095 +4096 +4097 +283 +4098 +519 +597 +3310 +9 +4099 +4100 +4101 +43 +4102 +4103 +22 +4104 +4105 +19 +4106 +4107 +4108 +1100 +4109 +915 +4110 +4111 +597 +2471 +4112 +43 +16 +4113 +60 +4114 +4115 +4116 +188 +1048 +20 +4117 +4118 +4119 +305 +4120 +4121 +4122 +4123 +1502 +16 +14 +716 +4124 +4125 +4126 +1655 +4127 +1292 +4128 +20 +4129 +671 +286 +1749 +2019 +12 +4130 +4131 +4132 +4133 +2157 +4134 +317 +4135 +4136 +4137 +415 +4138 +4139 +809 +317 +9 +25 +4140 +4141 +286 +4142 +915 +4143 +4144 +4145 +4146 +4147 +4148 +4149 +70 +4150 +4151 +4152 +43 +4153 +4154 +4155 +4156 +764 +1021 +411 +14 +4157 +286 +4158 +4159 +4160 +4161 +446 +4162 +4163 +4164 +15 +4165 +3003 +4166 +4167 +4168 +4169 +4170 +1698 +4171 +4172 +15 +4173 +19 +4174 +200 +4175 +4176 +4177 +44 +4178 +279 +4179 +15 +4180 +1655 +4181 +20 +2347 +4182 +4183 +942 +19 +4184 +4185 +4186 +4187 +4188 +4189 +4190 +57 +66 +4191 +1513 +317 +707 +4192 +4193 +815 +4194 +4 +1223 +4195 +19 +4196 +4197 +188 +4198 +112 +4199 +9 +4200 +22 +19 +43 +43 +1559 +4201 +286 +155 +4202 +4203 +9 +4204 +4205 +4206 +1710 +415 +208 +4207 +4208 +196 +1224 +4209 +3711 +141 +668 +4210 +4211 +4212 +4213 +1606 +4214 +4215 +43 +4216 +4217 +48 +3376 +1228 +4218 +77 +4219 +20 +4220 +4221 +4222 +354 +43 +4223 +178 +4224 +15 +20 +15 +4225 +15 +4226 +1900 +2043 +197 +4227 +4228 +4229 +20 +19 +4230 +369 +2061 +4231 +46 +4232 +561 +4233 +39 +188 +3790 +77 +4234 +286 +4235 +43 +14 +4236 +4237 +317 +4238 +4239 +4240 +597 +4241 +4242 +1011 +4243 +2762 +4244 +4245 +4246 +4247 +4248 +2330 +4249 +188 +213 +32 +379 +4250 +4251 +20 +284 +3055 +19 +4252 +20 +4253 +4254 +4255 +4256 +4257 +4258 +4259 +32 +3350 +4028 +4260 +4261 +145 +15 +4262 +4263 +1291 +4264 +337 +971 +32 +1961 +4265 +4266 +741 +4267 +1513 +4268 +238 +686 +4269 +4270 +2577 +213 +249 +1112 +4271 +694 +4272 +1889 +4273 +4274 +2043 +57 +4275 +4276 +4277 +4278 +4279 +4280 +3059 +66 +1015 +2039 +178 +337 +665 +237 +25 +2804 +4281 +303 +57 +60 +4282 +2476 +484 +4283 +25 +337 +4284 +237 +4285 +43 +1889 +3417 +4286 +4287 +179 +4288 +4289 +4290 +687 +19 +4291 +2855 +554 +4292 +4293 +20 +188 +1234 +4294 +20 +4295 +1220 +3406 +1364 +4139 +4296 +4297 +4298 +43 +201 +4299 +1955 +4300 +2982 +648 +4301 +188 +4302 +4 +170 +4303 +4304 +4305 +4306 +4307 +284 +35 +3055 +4308 +533 +4309 +4310 +1415 +4311 +286 +34 +4312 +379 +4313 +536 +1374 +1562 +303 +707 +4314 +554 +4315 +4316 +4317 +43 +4318 +15 +4319 +2195 +4320 +4321 +4322 +4323 +4324 +1244 +4325 +4326 +4327 +4328 +4329 +4330 +1508 +915 +4 +2764 +4331 +4332 +4333 +4334 +4335 +4336 +43 +736 +4337 +4338 +179 +317 +1149 +736 +4339 +4340 +4341 +4342 +4343 +416 +4344 +43 +19 +1673 +4345 +4346 +4347 +354 +4348 +4349 +4350 +4351 +2764 +4352 +180 +4353 +4354 +4355 +4 +286 +43 +286 +4356 +317 +4357 +4358 +4359 +3 +43 +15 +971 +20 +4360 +1018 +12 +4361 +4362 +14 +4363 +3553 +4364 +269 +554 +3055 +4346 +4365 +15 +57 +4366 +4180 +4367 +4368 +861 +176 +179 +114 +3 +4369 +4370 +188 +57 +4371 +4372 +4373 +4374 +4375 +2797 +2577 +4344 +4376 +1042 +1425 +201 +4377 +4378 +4379 +29 +4380 +4381 +19 +4382 +4383 +155 +1559 +586 +484 +4384 +4385 +4386 +4387 +1879 +4280 +4388 +4389 +15 +3543 +1384 +57 +4 +4390 +4391 +1559 +14 +174 +4392 +4393 +4394 +1870 +201 +4395 +4396 +4397 +4398 +554 +3300 +849 +4399 +4400 +4401 +19 +4402 +9 +4403 +2026 +586 +4404 +4405 +1533 +416 +4406 +4407 +4408 +4409 +4410 +4411 +9 +4 +4412 +4413 +270 +15 +4414 +2782 +4415 +4416 +4417 +39 +4418 +1234 +4419 +2164 +4420 +4421 +1481 +4422 +1710 +2040 +4423 +4424 +4425 +2060 +4426 +4427 +4428 +70 +4429 +2166 +4430 +4431 +2836 +4432 +4433 +4434 +4435 +1559 +4436 +33 +1851 +4437 +1605 +34 +15 +4438 +19 +1688 +4439 +1992 +249 +89 +4440 +57 +4441 +4442 +4443 +4444 +2836 +10 +14 +57 +4445 +176 +4446 +48 +57 +4447 +4448 +176 +4449 +4450 +915 +411 +4451 +4452 +59 +4453 +4454 +4455 +4456 +19 +4457 +3256 +4458 +4459 +4460 +43 +4461 +4462 +29 +2619 +4463 +2260 +1531 +57 +484 +4464 +35 +1426 +286 +4465 +43 +4466 +4467 +185 +2683 +4468 +586 +4469 +4470 +4471 +4472 +4473 +4474 +43 +2769 +4475 +43 +4476 +4477 +4478 +286 +4479 +915 +1605 +2 +4480 +20 +4481 +484 +872 +4482 +4483 +20 +141 +15 +3354 +15 +665 +990 +4484 +4485 +4486 +4487 +4488 +345 +43 +4489 +4490 +9 +4491 +1688 +573 +4492 +19 +57 +1120 +4493 +398 +4494 +4495 +4496 +4497 +4498 +4499 +2064 +4500 +4501 +4502 +142 +201 +345 +4503 +43 +4504 +1232 +4505 +4506 +3 +4507 +352 +2804 +349 +4508 +4509 +4510 +2728 +155 +15 +43 +4511 +4033 +4512 +4513 +4514 +4515 +586 +4516 +1716 +4517 +4518 +179 +1149 +48 +4519 +4520 +4521 +2113 +4522 +29 +4523 +165 +4524 +43 +4525 +4526 +4527 +4528 +4529 +43 +4530 +77 +9 +4531 +4532 +1244 +4533 +4534 +4535 +761 +4536 +4537 +140 +4538 +4539 +4540 +155 +4541 +4542 +4543 +4544 +9 +57 +4545 +155 +286 +4546 +4547 +1562 +4548 +4549 +4550 +2485 +4551 +3491 +250 +4552 +4553 +4554 +3003 +4555 +4556 +270 +4557 +282 +4558 +4559 +4560 +4561 +4562 +1768 +22 +4563 +15 +4564 +1834 +3335 +1262 +4565 +4566 +4567 +237 +4568 +4569 +4570 +4571 +4572 +57 +4573 +43 +4574 +345 +4575 +4576 +4577 +4578 +60 +2770 +4579 +4580 +4581 +301 +57 +15 +4582 +4583 +4584 +19 +15 +2347 +1604 +2954 +4585 +815 +4586 +1112 +4587 +4588 +4589 +4590 +14 +317 +53 +4591 +271 +4592 +4116 +4593 +4594 +4595 +17 +1021 +9 +4596 +48 +4597 +15 +4598 +19 +4599 +4600 +1605 +19 +342 +4601 +4602 +2476 +4603 +4317 +1824 +583 +201 +4604 +57 +3 +20 +4605 +4606 +4607 +2795 +402 +57 +916 +3984 +4608 +4609 +43 +4610 +915 +4611 +4612 +745 +57 +4613 +4614 +3061 +4615 +4616 +4617 +1234 +4618 +4619 +4620 +564 +4621 +4622 +4547 +4623 +32 +4624 +3626 +138 +936 +4625 +1710 +4626 +354 +4627 +4628 +379 +57 +4629 +1812 +4630 +4631 +4632 +43 +1689 +4633 +4634 +4635 +15 +4636 +4637 +4638 +4639 +4640 +9 +9 +155 +4641 +915 +4642 +4643 +59 +4644 +4645 +2770 +4646 +942 +2561 +4647 +4648 +32 +4649 +430 +4088 +531 +4650 +4651 +4652 +686 +57 +4653 +155 +4654 +9 +1524 +4655 +4656 +342 +237 +2029 +4657 +4658 +4659 +1880 +4660 +613 +4661 +57 +4662 +4663 +164 +43 +43 +4664 +4665 +694 +4587 +4666 +4667 +4668 +4669 +665 +484 +3958 +4670 +4671 +4672 +4673 +4674 +4675 +2136 +3287 +4676 +4677 +4678 +1668 +2489 +4679 +125 +4680 +4681 +4682 +4683 +57 +4684 +4685 +4686 +259 +665 +586 +4687 +4688 +464 +4689 +4690 +4691 +4692 +4693 +19 +4694 +4695 +4696 +32 +4697 +4698 +4699 +4700 +573 +4701 +249 +213 +1834 +2341 +4702 +45 +493 +665 +284 +32 +4703 +4704 +4705 +1444 +4706 +849 +677 +4707 +35 +153 +4708 +4709 +213 +4710 +4711 +4712 +4713 +4714 +68 +43 +4715 +4716 +4717 +586 +4718 +57 +22 +4719 +4720 +4721 +248 +915 +4722 +809 +15 +213 +4723 +4724 +259 +4725 +14 +1790 +4726 +4727 +4728 +2431 +4729 +2 +4730 +4731 +178 +4732 +4733 +4734 +2009 +19 +4735 +19 +4736 +14 +694 +4737 +1720 +4738 +2739 +4739 +284 +4740 +572 +4741 +317 +9 +4742 +251 +303 +4743 +4744 +4745 +4746 +57 +2619 +303 +4747 +4748 +1300 +19 +845 +4749 +43 +4750 +19 +19 +4751 +345 +4752 +4753 +4754 +201 +4755 +4756 +4757 +77 +286 +48 +4758 +238 +4759 +10 +4760 +3353 +4761 +4762 +4012 +4763 +19 +736 +861 +440 +4764 +1743 +4765 +4766 +1779 +4767 +4768 +43 +4769 +4770 +4771 +4413 +248 +4772 +4773 +764 +4774 +4775 +464 +4776 +2902 +4777 +1090 +222 +4778 +1047 +2591 +694 +32 +15 +845 +354 +4779 +1181 +43 +4780 +4781 +3842 +3 +4782 +286 +4783 +4784 +4785 +303 +2998 +4786 +4787 +4788 +4789 +4790 +4791 +4792 +4793 +4794 +4042 +4795 +4796 +616 +14 +4797 +1116 +4798 +4799 +1529 +4800 +790 +769 +32 +4801 +4802 +4803 +155 +4804 +57 +764 +3745 +4805 +536 +4806 +416 +4807 +4808 +4809 +4810 +3382 +4811 +20 +22 +77 +249 +4812 +2015 +43 +4813 +4814 +1377 +915 +4815 +4816 +57 +1889 +4817 +4818 +4819 +1559 +4820 +9 +4821 +354 +10 +4822 +4823 +357 +137 +4824 +4825 +4826 +4827 +4828 +180 +4829 +32 +4830 +14 +2459 +286 +19 +705 +345 +152 +14 +48 +15 +4831 +4832 +1112 +4833 +19 +19 +764 +648 +4834 +25 +4835 +736 +4836 +32 +491 +554 +4837 +4838 +22 +1543 +4839 +4840 +20 +4841 +4842 +286 +4843 +4844 +3946 +4845 +4846 +4847 +2274 +1234 +4848 +4849 +4850 +4790 +4851 +4852 +741 +4853 +2131 +201 +4854 +4855 +4856 +4857 +379 +4858 +4859 +2668 +4860 +9 +1612 +3601 +4861 +4174 +43 +4862 +4863 +4864 +4865 +464 +590 +791 +4866 +3300 +4867 +4868 +3278 +4869 +4870 +3354 +4871 +4872 +4873 +4874 +4875 +4876 +4877 +4878 +4716 +4879 +140 +101 +4880 +4881 +4882 +4050 +4883 +15 +155 +586 +4803 +4884 +19 +201 +19 +188 +4885 +4886 +1604 +4887 +4888 +4889 +2012 +595 +4890 +15 +4891 +943 +57 +4892 +10 +15 +4893 +4894 +4346 +4895 +4896 +43 +4897 +4898 +4899 +4900 +4901 +2125 +4902 +4903 +4904 +4905 +4906 +4907 +2 +279 +4908 +4909 +19 +665 +677 +176 +1425 +4910 +4911 +2316 +15 +4912 +4913 +4914 +1364 +4915 +4916 +1051 +3353 +349 +77 +286 +1169 +770 +4917 +4918 +20 +201 +4919 +1612 +48 +4920 +4921 +4922 +4923 +4924 +4925 +14 +4926 +22 +4927 +671 +597 +4264 +4928 +4929 +4930 +32 +692 +4931 +4932 +4933 +2009 +4934 +4935 +57 +4936 +4937 +4938 +4939 +1217 +4940 +4941 +14 +4942 +4943 +4944 +4945 +1212 +2113 +4946 +4947 +237 +4948 +915 +4949 +2349 +228 +286 +4950 +1295 +19 +436 +4 +4951 +43 +178 +4952 +22 +4953 +4954 +1124 +4955 +4956 +4957 +176 +1529 +89 +4958 +4959 +4 +4960 +104 +4961 +4624 +4962 +19 +4963 +4964 +4965 +3160 +4966 +4967 +1695 +15 +4968 +43 +4969 +4970 +2260 +3995 +4971 +178 +15 +4972 +1364 +4973 +4974 +1696 +665 +2 +4975 +4976 +4977 +4824 +248 +237 +2260 +19 +4978 +4979 +201 +4980 +1021 +4981 +1533 +4982 +4983 +4984 +4985 +4986 +4987 +4988 +4989 +647 +15 +4990 +4991 +2476 +337 +4992 +4993 +14 +4994 +4995 +4996 +4997 +4998 +4999 +155 +707 +213 +665 +248 +1060 +5000 +1710 +9 +5001 +337 +5002 +5003 +43 +5004 +5005 +2356 +5006 +5007 +5008 +5009 +22 +5010 +2537 +1710 +5011 +5012 +237 +5013 +337 +665 +19 +57 +284 +3743 +5014 +15 +9 +5015 +213 +4406 +5016 +303 +213 +5017 +5018 +5019 +3698 +5020 +3353 +5021 +5022 +5023 +5024 +2668 +5025 +2588 +5026 +5027 +5028 +5029 +22 +115 +15 +845 +5030 +5031 +2619 +19 +5032 +4344 +5033 +15 +188 +5034 +5035 +5036 +14 +43 +2356 +303 +5037 +5038 +9 +5039 +1465 +5040 +915 +1961 +32 +5041 +1531 +303 +5042 +5043 +5044 +43 +5045 +20 +5046 +2316 +32 +5047 +43 +16 +189 +915 +5048 +286 +4716 +342 +57 +57 +5049 +48 +5050 +5051 +5052 +15 +5053 +5054 +20 +5055 +305 +5056 +5057 +14 +4856 +5058 +32 +5059 +2040 +20 +109 +10 +15 +5060 +5061 +15 +178 +5062 +5063 +5064 +5065 +5066 +278 +707 +548 +57 +43 +269 +5067 +5068 +5069 +5070 +1236 +5071 +5072 +4859 +2009 +5073 +32 +1109 +436 +32 +10 +57 +5074 +5075 +1011 +5076 +5077 +2330 +5078 +5079 +5080 +5081 +3743 +3192 +32 +77 +448 +358 +5082 +5083 +5084 +57 +180 +286 +5085 +5086 +5087 +5088 +5089 +15 +5090 +5091 +178 +373 +5092 +358 +57 +57 +19 +317 +57 +201 +5093 +303 +5094 +3816 +738 +20 +5095 +3139 +222 +1109 +1013 +519 +5096 +5097 +5098 +5099 +5100 +5101 +5102 +5103 +5104 +22 +5105 +3544 +48 +25 +5106 +57 +5107 +258 +3408 +5108 +60 +554 +32 +5109 +5110 +1107 +19 +5111 +109 +43 +5112 +5113 +11 +14 +2594 +3480 +2446 +1612 +5114 +155 +276 +4 +57 +358 +3367 +5115 +265 +5116 +201 +5117 +43 +15 +984 +5118 +5119 +861 +2405 +927 +5120 +2694 +5121 +5122 +5123 +2314 +20 +2449 +5124 +3330 +5125 +20 +5126 +5080 +5127 +5128 +5129 +1228 +5130 +2135 +104 +20 +5131 +5132 +5133 +5134 +540 +2064 +4808 +5135 +910 +338 +5136 +5137 +5138 +2040 +5139 +5140 +43 +5141 +303 +416 +5142 +5143 +5144 +5145 +193 +5146 +25 +5147 +5148 +222 +43 +5149 +5150 +5151 +5152 +115 +5153 +5154 +5155 +831 +5156 +936 +5157 +4128 +5158 +5159 +5160 +213 +5161 +286 +379 +9 +5162 +5163 +5164 +1120 +5165 +5166 +2064 +1612 +19 +213 +337 +5167 +188 +213 +35 +5168 +5169 +5170 +5171 +597 +5172 +3842 +5173 +201 +337 +416 +5174 +301 +5175 +43 +3999 +5176 +5177 +5178 +5169 +5179 +873 +32 +201 +5180 +32 +5181 +222 +5182 +703 +424 +5183 +590 +10 +201 +188 +5184 +2045 +397 +5185 +5186 +303 +5187 +5188 +5189 +115 +57 +15 +5190 +764 +5191 +5192 +379 +3553 +104 +197 +5193 +5194 +643 +910 +480 +5195 +1696 +15 +5196 +915 +25 +357 +5197 +5198 +16 +5199 +5200 +5201 +5202 +5203 +5204 +14 +303 +5205 +15 +337 +317 +272 +337 +1655 +5206 +5207 +5208 +43 +5209 +5210 +5211 +43 +1870 +5212 +155 +9 +15 +5213 +5214 +1698 +3553 +648 +5215 +44 +176 +4562 +3289 +337 +5216 +519 +5217 +597 +5218 +14 +5219 +138 +5220 +352 +5221 +5222 +5223 +5224 +5225 +5226 +34 +5227 +5228 +5229 +5230 +5231 +3874 +703 +4485 +43 +5232 +5233 +5234 +5235 +548 +303 +5236 +14 +15 +5237 +5238 +1356 +5239 +5240 +5241 +1529 +5242 +5243 +5244 +5245 +2769 +5246 +5247 +1083 +5248 +5249 +1559 +3745 +303 +179 +5250 +5251 +5252 +46 +4461 +566 +15 +1300 +1112 +598 +5253 +5254 +5255 +5256 +2792 +5257 +1710 +5258 +15 +57 +861 +5259 +5260 +32 +5261 +19 +14 +5262 +5263 +3209 +1364 +597 +57 +5264 +5265 +5266 +586 +1864 +5267 +2794 +2264 +1291 +1559 +1765 +5268 +104 +5269 +5270 +345 +5271 +514 +5272 +3755 +3055 +5273 +5274 +122 +703 +1710 +2517 +5275 +57 +1169 +842 +5276 +5277 +5278 +5279 +5280 +5281 +185 +4907 +5282 +5283 +5284 +5285 +15 +5286 +613 +5287 +5288 +5289 +861 +46 +379 +3287 +10 +5290 +5291 +5292 +5293 +5080 +1710 +1122 +3407 +5294 +5295 +5296 +5297 +5298 +5299 +32 +32 +5084 +5300 +3732 +5301 +5302 +5303 +5304 +5305 +1710 +43 +349 +29 +5306 +5307 +822 +5308 +3421 +155 +178 +5309 +815 +5310 +5311 +4487 +5312 +5313 +5314 +5315 +5316 +5317 +5318 +5319 +5320 +398 +5321 +5322 +19 +5323 +849 +57 +5324 +57 +5325 +5326 +2341 +155 +597 +5327 +5328 +5329 +5330 +379 +1091 +1287 +5331 +5332 +5333 +5334 +77 +15 +9 +2427 +5335 +5336 +323 +554 +5337 +5338 +5339 +5340 +249 +15 +5341 +25 +5342 +5343 +44 +5344 +2561 +5345 +5346 +1889 +123 +14 +114 +1222 +20 +804 +5347 +22 +9 +178 +5348 +345 +19 +5080 +5349 +5350 +5351 +5352 +5353 +2728 +15 +5354 +5355 +57 +2694 +25 +3685 +10 +5356 +5357 +43 +5358 +540 +5359 +4502 +5360 +1182 +358 +5361 +1244 +46 +5362 +5363 +2158 +2540 +5364 +1847 +5365 +2921 +165 +5366 +2593 +172 +1992 +5367 +201 +57 +5368 +484 +43 +19 +63 +19 +5369 +5370 +48 +14 +5371 +4061 +5372 +16 +5373 +5374 +5375 +2770 +707 +1870 +5376 +5153 +5377 +5378 +43 +5150 +5379 +586 +5380 +301 +2849 +9 +5381 +5382 +5383 +5384 +10 +5343 +3110 +1012 +5385 +43 +345 +5386 +5387 +5388 +29 +5389 +2540 +2502 +5390 +5391 +5392 +5393 +5394 +123 +5395 +983 +5396 +278 +237 +363 +5397 +155 +10 +5398 +5399 +5400 +3984 +1503 +5401 +5402 +5403 +1559 +764 +20 +15 +5404 +2859 +5405 +5406 +15 +5407 +109 +554 +104 +5408 +57 +5409 +5410 +5411 +249 +509 +5412 +3599 +5413 +5344 +5414 +1710 +5415 +5416 +5417 +213 +19 +22 +1870 +936 +910 +5418 +43 +3160 +19 +1139 +5419 +5420 +5421 +5422 +20 +1812 +2260 +5423 +665 +20 +5424 +5425 +5426 +5427 +5428 +115 +5429 +5430 +43 +2764 +5431 +9 +519 +15 +5432 +248 +337 +5433 +14 +1559 +1508 +5434 +5435 +20 +22 +1514 +5436 +98 +5437 +5438 +1300 +5439 +5440 +286 +694 +19 +5441 +20 +5442 +284 +5443 +345 +5444 +4752 +5445 +1710 +815 +5446 +5447 +5448 +5449 +3241 +379 +57 +815 +15 +2135 +14 +2502 +864 +5450 +272 +5451 +989 +5452 +5453 +5454 +43 +5455 +5456 +416 +22 +910 +4586 +910 +179 +5293 +5457 +179 +178 +4116 +5458 +5459 +1630 +22 +272 +5460 +5461 +5462 +5463 +5464 +5465 +5466 +22 +20 +1388 +5467 +5468 +1244 +43 +5469 +5470 +248 +5471 +5472 +176 +5473 +5474 +5475 +5476 +5477 +5478 +5479 +5480 +29 +5481 +5482 +19 +5483 +345 +1905 +10 +936 +32 +364 +5484 +5485 +5486 +3796 +700 +5487 +213 +1529 +5488 +5489 +14 +3599 +1244 +5490 +5491 +14 +5492 +5493 +5494 +3034 +165 +43 +5495 +5496 +213 +5497 +5498 +4631 +22 +19 +5499 +1175 +5500 +10 +57 +5501 +15 +842 +5502 +5503 +5504 +4061 +5505 +9 +19 +4 +845 +345 +7 +2015 +15 +5506 +286 +1425 +554 +5075 +286 +705 +1307 +284 +3548 +5507 +2213 +286 +89 +57 +5508 +5509 +3353 +5510 +5511 +358 +14 +5512 +4364 +5513 +179 +25 +178 +5514 +1222 +5515 +736 +5516 +9 +439 +5517 +2500 +201 +5518 +5519 +15 +2243 +57 +77 +5520 +3422 +22 +5521 +5522 +5523 +77 +1508 +915 +19 +349 +25 +5524 +213 +188 +3316 +5525 +331 +5526 +5527 +32 +43 +5528 +5529 +1743 +5530 +5531 +5532 +5533 +5534 +354 +5535 +5536 +5537 +5538 +3698 +3 +5539 +5540 +5541 +5542 +178 +5543 +25 +484 +1867 +5544 +5545 +57 +483 +15 +5546 +9 +5547 +5548 +5549 +5550 +5551 +5552 +5553 +5554 +5555 +5556 +5557 +5558 +2259 +5559 +5560 +5561 +4791 +5562 +5563 +99 +713 +10 +26 +4160 +1026 +464 +5564 +5565 +5566 +5567 +5568 +66 +5569 +5570 +5571 +5572 +5573 +286 +1862 +115 +1100 +5574 +5575 +5576 +3161 +5577 +791 +57 +5578 +2616 +5579 +284 +5580 +5581 +1944 +5582 +5583 +57 +1665 +1710 +5584 +248 +15 +5585 +5586 +1100 +5587 +2406 +284 +5588 +5589 +5590 +155 +5591 +213 +20 +19 +5592 +5593 +248 +5594 +19 +337 +5595 +5596 +5597 +5598 +5599 +5600 +5025 +213 +1900 +5601 +5602 +5603 +5604 +15 +3598 +5605 +5606 +5607 +349 +5608 +2577 +1481 +1236 +1415 +4 +57 +5609 +5610 +32 +2124 +2043 +5611 +5612 +5512 +3569 +5613 +5614 +5615 +5616 +10 +873 +5617 +317 +15 +10 +2314 +3599 +5618 +57 +5619 +15 +32 +60 +5620 +5621 +5622 +19 +5623 +5624 +436 +5625 +2601 +32 +5626 +5627 +5628 +5629 +471 +5630 +5631 +5632 +5633 +5634 +19 +15 +5635 +89 +5636 +22 +19 +4982 +15 +201 +5637 +213 +201 +278 +741 +15 +19 +345 +984 +5638 +14 +554 +179 +270 +5639 +5640 +2085 +5641 +707 +5642 +900 +4285 +5643 +1310 +2811 +5644 +3626 +5645 +19 +5646 +53 +5647 +32 +1352 +9 +5648 +5649 +196 +2260 +5650 +5651 +5652 +610 +5653 +5654 +5655 +597 +5656 +5657 +5658 +43 +5659 +5660 +5661 +237 +1531 +14 +77 +5662 +1425 +15 +22 +188 +648 +201 +5169 +19 +5663 +57 +1765 +15 +647 +5664 +1425 +237 +357 +5665 +5666 +5667 +3055 +5668 +3376 +5669 +5670 +2728 +5671 +5672 +586 +352 +5673 +155 +178 +5674 +5675 +2958 +15 +5676 +5677 +5678 +12 +2 +5679 +142 +915 +5680 +5681 +1531 +5682 +5683 +5684 +5685 +9 +736 +5686 +155 +57 +5687 +66 +1870 +137 +5688 +5689 +2619 +5690 +14 +14 +5691 +1012 +5692 +5693 +5694 +57 +14 +32 +5695 +943 +15 +286 +5696 +5697 +586 +1234 +2318 +554 +815 +5698 +9 +5699 +2 +2124 +57 +5700 +5701 +5702 +5703 +34 +32 +369 +3431 +5704 +5705 +5706 +5707 +5708 +5709 +5710 +1559 +5711 +5712 +270 +5713 +5714 +15 +5715 +4714 +238 +5716 +5717 +3 +15 +57 +5718 +5719 +5720 +5721 +5722 +2477 +936 +5723 +5724 +3899 +2913 +5725 +5252 +3626 +5726 +43 +66 +5727 +5728 +5729 +5730 +5731 +687 +5732 +5733 +5623 +5273 +554 +5734 +677 +5735 +4155 +5736 +5737 +1514 +5738 +10 +5739 +5740 +60 +5741 +43 +1465 +5742 +5743 +2260 +5744 +66 +5745 +5746 +5747 +817 +5748 +5749 +5750 +5751 +1168 +201 +5752 +501 +5753 +648 +5754 +35 +5755 +1549 +5756 +48 +5757 +5758 +5759 +5760 +14 +5761 +3252 +22 +5762 +115 +5763 +5764 +5765 +5766 +5767 +14 +5768 +5769 +48 +5770 +5771 +5772 +484 +1291 +104 +5773 +540 +32 +5774 +5775 +5776 +2772 +5777 +5778 +104 +5779 +14 +5780 +5781 +5782 +5783 +5784 +5785 +5786 +5787 +554 +1716 +141 +554 +210 +5788 +5789 +250 +5790 +32 +3 +1542 +5791 +5792 +77 +5793 +5794 +57 +43 +43 +5795 +5796 +5629 +5797 +4961 +1226 +399 +5798 +5799 +2336 +5800 +48 +5801 +2724 +57 +5802 +5803 +5804 +2619 +286 +5805 +5806 +5807 +5808 +248 +15 +15 +5809 +1203 +1047 +5810 +17 +248 +5811 +5812 +495 +5813 +1232 +5814 +89 +5815 +32 +5816 +337 +5817 +5818 +20 +5819 +5820 +1647 +5821 +48 +19 +15 +586 +19 +32 +337 +764 +19 +5822 +299 +5823 +5824 +5825 +248 +20 +3466 +5826 +5827 +337 +303 +213 +213 +5828 +5829 +5830 +5831 +5832 +345 +5833 +57 +345 +5834 +15 +5835 +5836 +5837 +5838 +5839 +9 +3 +284 +2619 +303 +48 +19 +1021 +5840 +5841 +5842 +10 +15 +5843 +5844 +5845 +5846 +5847 +5848 +19 +15 +5849 +4124 +3755 +5850 +5851 +554 +5852 +303 +1425 +19 +5853 +1562 +22 +5854 +1637 +5855 +20 +2 +5856 +1384 +5857 +5858 +713 +5859 +713 +152 +5860 +5861 +5862 +5863 +861 +5864 +1018 +1885 +5865 +176 +5866 +5867 +5868 +5285 +286 +4281 +5869 +5870 +14 +5871 +32 +5872 +67 +4757 +249 +5873 +910 +77 +694 +43 +5874 +3729 +10 +5875 +4907 +60 +20 +1765 +20 +416 +5876 +1991 +19 +5877 +2314 +597 +15 +32 +176 +5878 +5879 +5880 +5881 +5882 +868 +5883 +3743 +5884 +292 +57 +5885 +57 +5886 +43 +5887 +5888 +20 +5889 +5890 +4 +5891 +188 +416 +882 +2 +5892 +286 +5856 +5130 +5893 +5894 +5895 +5896 +2314 +5897 +43 +77 +5898 +141 +5899 +5900 +57 +5901 +5902 +5903 +5904 +5905 +817 +34 +5906 +5907 +57 +1018 +5908 +12 +15 +5909 +57 +5780 +5910 +5911 +554 +1425 +5912 +5913 +5914 +15 +19 +2260 +20 +15 +5915 +270 +213 +5916 +286 +2999 +756 +5917 +4 +1808 +5918 +5919 +492 +1442 +5920 +152 +228 +484 +5921 +19 +43 +2260 +25 +5922 +1300 +2794 +276 +519 +5923 +196 +14 +5924 +5925 +5926 +5927 +19 +5928 +5929 +201 +222 +4364 +305 +1224 +213 +5930 +25 +318 +1384 +123 +213 +337 +2697 +5931 +15 +5932 +5933 +5934 +5935 +5936 +5937 +5938 +1401 +915 +67 +5939 +5940 +733 +5941 +15 +222 +2035 +5942 +5943 +19 +43 +509 +5944 +19 +1112 +5945 +1291 +272 +5946 +5947 +5512 +4606 +67 +5948 +5949 +357 +5950 +5951 +352 +5952 +5953 +4364 +1021 +4028 +14 +188 +5954 +161 +248 +20 +1465 +5955 +5956 +1696 +1749 +5957 +5958 +5080 +337 +57 +415 +57 +57 +337 +5959 +5960 +5961 +358 +5962 +1806 +5963 +5964 +43 +5965 +2239 +5966 +5967 +225 +57 +398 +5968 +5969 +5970 +137 +5971 +3841 +142 +1710 +19 +22 +5972 +5973 +5974 +1160 +5975 +5976 +32 +5977 +4247 +5978 +278 +20 +337 +2899 +5979 +933 +5980 +5981 +317 +5982 +1172 +4035 +3476 +1604 +2540 +248 +286 +5983 +5984 +1021 +5985 +196 +5986 +5987 +3777 +1232 +738 +22 +5988 +5989 +5990 +2728 +5991 +5992 +5993 +5994 +5995 +3 +5996 +5997 +5998 +5999 +358 +286 +764 +3059 +19 +861 +14 +514 +6000 +6001 +6002 +1245 +6003 +3484 +3486 +6004 +6005 +411 +6006 +6007 +19 +248 +6008 +6009 +6010 +1082 +6011 +6012 +1529 +284 +323 +6013 +6014 +6015 +15 +3291 +4897 +15 +6016 +6017 +15 +213 +284 +910 +201 +849 +5287 +6018 +358 +6019 +213 +15 +188 +6020 +2135 +14 +12 +6021 +6022 +6023 +354 +317 +6024 +6025 +6026 +573 +6027 +2043 +6028 +6029 +6030 +2835 +665 +1083 +6031 +849 +6032 +6033 +303 +57 +6034 +6035 +6036 +6037 +1018 +6038 +1245 +6039 +4677 +6040 +6041 +6042 +6043 +337 +34 +57 +6044 +1234 +6045 +6046 +6047 +3743 +6048 +5785 +6049 +237 +493 +3055 +6050 +6051 +6052 +2577 +248 +6053 +6054 +6055 +6056 +712 +6057 +201 +3546 +6058 +6059 +178 +67 +354 +290 +647 +4364 +15 +5780 +6060 +6061 +568 +338 +2 +6062 +1021 +1026 +24 +6063 +6064 +6065 +910 +15 +25 +2129 +6066 +6067 +6068 +554 +6069 +337 +6070 +6071 +152 +4088 +9 +6072 +1291 +6073 +10 +6074 +6075 +6076 +22 +286 +6077 +1066 +6078 +6079 +185 +32 +3202 +6080 +19 +6081 +303 +19 +6082 +6083 +2591 +6084 +2 +6085 +861 +6086 +6087 +6088 +6089 +201 +32 +3345 +317 +155 +6090 +1870 +6091 +99 +6092 +303 +43 +6093 +6094 +741 +19 +14 +597 +57 +416 +815 +6095 +873 +6096 +43 +6097 +6098 +1612 +6099 +213 +179 +5498 +15 +354 +19 +19 +5561 +6100 +43 +416 +6101 +6102 +6103 +3310 +6104 +694 +493 +6105 +616 +3503 +849 +6106 +6107 +4146 +245 +1122 +2694 +4627 +345 +6108 +248 +6109 +1044 +495 +491 +6110 +6111 +2286 +6112 +15 +6113 +178 +6114 +77 +9 +1716 +228 +48 +861 +6115 +6116 +6117 +155 +6118 +6119 +6120 +6121 +2140 +6122 +6123 +6124 +6125 +6126 +2314 +9 +6127 +6128 +6129 +6130 +48 +6131 +2064 +15 +6132 +6133 +3544 +89 +5780 +936 +14 +345 +6134 +6135 +514 +25 +6136 +6137 +6138 +6139 +6140 +248 +6141 +6142 +1234 +179 +188 +2728 +25 +6143 +6144 +3978 +286 +6145 +1571 +284 +1332 +6146 +6147 +15 +22 +6148 +6149 +77 +15 +6150 +6151 +155 +284 +337 +349 +6152 +9 +6153 +6154 +248 +337 +6155 +6156 +6157 +1021 +15 +20 +6158 +6159 +6160 +6161 +6162 +284 +48 +6163 +6164 +2971 +6165 +16 +6166 +6167 +5649 +6168 +6169 +337 +6170 +6171 +671 +6172 +19 +6173 +46 +201 +43 +2576 +237 +77 +6174 +6175 +2998 +2356 +9 +6176 +6177 +6178 +6179 +6180 +6181 +1668 +6182 +22 +5780 +6183 +6184 +6185 +6186 +337 +6187 +2902 +248 +6188 +6189 +1834 +683 +6190 +6191 +1684 +6192 +6193 +6194 +6195 +6196 +6197 +6198 +6199 +6200 +5904 +6201 +32 +6202 +6203 +541 +6204 +6205 +6206 +6207 +6208 +303 +57 +6209 +566 +358 +6210 +4 +6211 +2324 +6212 +1776 +14 +4007 +6213 +286 +701 +6214 +60 +6215 +6216 +6217 +3395 +6218 +6219 +6220 +6221 +20 +48 +1502 +14 +6222 +6223 +25 +6224 +6225 +6226 +6227 +5803 +6228 +6229 +2347 +6230 +6231 +3062 +1232 +196 +6232 +6233 +1189 +2580 +6234 +6235 +2410 +57 +6236 +6237 +222 +6238 +43 +6239 +493 +57 +6240 +2728 +3 +751 +6241 +3709 +6242 +6243 +6244 +6245 +6246 +222 +1425 +4315 +14 +32 +6247 +6248 +2566 +6249 +1574 +19 +6250 +179 +6251 +415 +6252 +178 +32 +6253 +6254 +3172 +77 +6255 +6256 +6257 +694 +6258 +3989 +6259 +6260 +6261 +6262 +155 +104 +6263 +57 +6264 +1502 +6265 +6212 +6266 +788 +6267 +6268 +270 +751 +6269 +6270 +6271 +6272 +6273 +6274 +5542 +1775 +6275 +6276 +19 +1710 +484 +6277 +6278 +1112 +6279 +6280 +16 +6281 +6282 +6283 +6284 +6285 +6286 +597 +402 +1542 +6287 +6288 +6289 +6290 +6291 +6292 +6293 +6294 +6295 +6296 +9 +2260 +6297 +6298 +178 +6299 +6300 +4839 +398 +6301 +514 +77 +6302 +22 +6303 +9 +6304 +6305 +417 +6306 +6307 +6308 +19 +6309 +6310 +3375 +6311 +6312 +6313 +6314 +6315 +6316 +2368 +6317 +6318 +3525 +6319 +6320 +6321 +6322 +3252 +6323 +6324 +6325 +6326 +6327 +3 +6328 +6329 +9 +176 +6330 +57 +1531 +272 +6331 +25 +6332 +6333 +815 +4952 +3104 +6334 +6335 +1512 +6336 +4280 +5127 +6337 +6338 +6339 +2 +67 +446 +6340 +179 +66 +6289 +6341 +6342 +43 +5780 +6343 +20 +32 +32 +6344 +2197 +6345 +6346 +6347 +6348 +6349 +2015 +6350 +6351 +188 +4405 +6352 +6353 +6354 +694 +6355 +345 +822 +354 +6356 +2907 +19 +6357 +6358 +597 +6359 +514 +6360 +6361 +6362 +185 +6363 +6364 +22 +6365 +6366 +286 +6367 +48 +6368 +3777 +3466 +6369 +687 +6370 +6371 +6372 +67 +6373 +564 +6374 +6375 +19 +15 +6376 +317 +201 +693 +1287 +6377 +2 +6378 +6379 +6380 +6381 +155 +6382 +43 +6383 +6384 +43 +6385 +6386 +6387 +6175 +6388 +5837 +2064 +6389 +6390 +2 +15 +6391 +14 +411 +286 +4088 +5856 +6392 +19 +1244 +43 +514 +222 +2316 +6393 +1100 +701 +861 +6394 +2262 +6395 +4627 +142 +6396 +6397 +32 +4900 +671 +6398 +3406 +1291 +6399 +15 +286 +6400 +6401 +6402 +6403 +57 +155 +4128 +155 +6404 +3307 +1710 +6405 +6406 +1961 +6407 +286 +6408 +1245 +6409 +2320 +14 +6410 +15 +815 +6411 +6054 +15 +6412 +6413 +6414 +48 +15 +713 +76 +14 +6415 +5856 +228 +6416 +6417 +6418 +19 +1465 +6419 +1870 +6420 +6421 +6422 +6423 +6424 +6425 +5780 +6426 +6427 +1105 +6428 +345 +6429 +2019 +1245 +286 +6430 +188 +3870 +14 +6431 +15 +6432 +19 +1502 +399 +141 +6433 +1047 +6434 +6435 +6436 +3725 +6437 +6438 +6439 +597 +6440 +989 +6441 +6442 +3061 +6443 +4 +6444 +6445 +179 +6446 +6447 +15 +6341 +3406 +3 +25 +36 +6448 +4647 +6449 +6450 +6451 +286 +6452 +6453 +6454 +411 +6455 +6456 +5856 +1808 +3055 +6457 +6458 +6459 +554 +2341 +6460 +6461 +6462 +6463 +4141 +745 +231 +491 +6464 +6465 +286 +43 +845 +9 +6466 +4 +815 +6467 +6468 +6469 +6470 +6471 +6472 +178 +114 +6473 +317 +3943 +417 +6474 +6475 +29 +3198 +6476 +5013 +270 +6477 +6478 +1386 +6479 +19 +6480 +6481 +6482 +6071 +1829 +6483 +6484 +14 +6485 +209 +6486 +1961 +6487 +3317 +6488 +6289 +6489 +6490 +6491 +1169 +2040 +6492 +1834 +6493 +6494 +6495 +6496 +228 +299 +4 +179 +6497 +665 +10 +6498 +2264 +19 +57 +6412 +790 +1920 +6499 +185 +20 +6500 +6501 +6502 +6503 +3050 +6504 +6505 +270 +237 +6506 +57 +265 +6507 +354 +6508 +6509 +57 +645 +6510 +5780 +6511 +6512 +6513 +6514 +448 +586 +6515 +6516 +6517 +6518 +6519 +10 +6520 +1384 +6521 +6522 +6523 +3309 +179 +6524 +399 +6525 +6526 +1956 +6527 +16 +57 +22 +6528 +6529 +6530 +6531 +6532 +6533 +286 +5856 +4028 +176 +3829 +2835 +6534 +14 +6535 +14 +6536 +6537 +6538 +6539 +1428 +4 +6540 +6541 +6542 +6543 +788 +6544 +6545 +6546 +176 +6547 +5780 +15 +6548 +6549 +6550 +6551 +6552 +77 +201 +540 +493 +4672 +6553 +6554 +137 +196 +184 +6555 +25 +6556 +6557 +6558 +57 +15 +6559 +6560 +6561 +6562 +6563 +5127 +6564 +19 +694 +1021 +6565 +34 +6566 +48 +1715 +15 +60 +491 +6567 +6568 +5856 +4512 +9 +237 +6569 +480 +892 +25 +6570 +345 +6571 +201 +34 +32 +6572 +6573 +6574 +1744 +6575 +6576 +6577 +9 +6578 +533 +6579 +43 +6580 +1019 +6581 +6582 +15 +6583 +6584 +6585 +6586 +6587 +15 +43 +331 +39 +6588 +665 +3376 +6589 +164 +6590 +331 +6591 +15 +6592 +6593 +1249 +6594 +6595 +6596 +2502 +1415 +20 +6597 +6598 +6599 +5895 +464 +6600 +2913 +155 +415 +57 +6601 +1716 +272 +6602 +1542 +736 +558 +6603 +2356 +9 +14 +6604 +15 +1172 +279 +15 +60 +3978 +349 +6605 +3814 +379 +6606 +25 +6607 +6608 +6609 +6610 +6611 +6612 +1438 +338 +6613 +6614 +16 +3946 +1961 +1718 +707 +1047 +6615 +6616 +6617 +5856 +10 +20 +436 +6618 +6619 +2164 +15 +6620 +6621 +86 +417 +6622 +751 +6623 +6624 +15 +6625 +1920 +6626 +1668 +1100 +6627 +345 +6628 +6629 +57 +6630 +6631 +6632 +6633 +10 +6634 +286 +32 +2329 +721 +493 +6412 +1605 +1768 +3241 +349 +19 +1374 +6635 +6636 +1942 +6637 +6638 +1698 +6639 +598 +6640 +138 +6641 +6642 +6643 +345 +764 +57 +6644 +6645 +272 +5298 +1481 +3213 +6646 +10 +6647 +89 +6648 +32 +6649 +274 +286 +6650 +6651 +22 +3 +43 +1567 +180 +4128 +1966 +815 +6652 +19 +9 +6653 +1011 +6654 +4 +936 +6655 +305 +1010 +6656 +6657 +32 +1120 +43 +286 +188 +6658 +34 +15 +14 +6659 +1232 +6660 +6661 +6662 +6663 +6664 +6665 +22 +6666 +3005 +19 +2427 +533 +6667 +1889 +6668 +825 +1867 +1710 +6669 +43 +3104 +6670 +57 +331 +1245 +6671 +1442 +1808 +6672 +694 +861 +6673 +3 +6674 +6675 +14 +6676 +2546 +4441 +6289 +201 +6677 +6678 +6679 +6680 +6681 +677 +5202 +1920 +6682 +6683 +2776 +6684 +57 +15 +6685 +12 +1765 +6686 +248 +6687 +32 +6688 +1169 +6689 +1824 +6289 +5780 +15 +6690 +286 +6691 +2208 +815 +6692 +6693 +6694 +6695 +22 +1743 +6696 +6697 +398 +213 +6698 +6699 +138 +231 +6700 +6701 +6702 +6703 +6704 +2318 +197 +6705 +6706 +19 +6707 +6708 +20 +2734 +6709 +6710 +6711 +6712 +6713 +286 +43 +6714 +2836 +6715 +1082 +6716 +6289 +26 +137 +6717 +43 +5564 +6718 +6719 +6720 +6721 +6722 +6723 +6724 +6725 +345 +4 +6726 +5780 +34 +6727 +831 +6086 +6728 +6729 +6730 +6731 +6732 +6733 +6734 +20 +155 +6735 +2043 +89 +331 +15 +237 +57 +1217 +16 +6736 +6737 +43 +48 +6738 +6739 +2619 +6740 +6741 +514 +286 +6742 +345 +6743 +6744 +6745 +6746 +6747 +15 +99 +6748 +6749 +6750 +6751 +6752 +6753 +6754 +6755 +751 +6756 +32 +20 +6757 +6758 +48 +6759 +278 +648 +6760 +6761 +6762 +20 +6763 +6289 +6764 +6412 +2260 +96 +201 +6765 +1232 +19 +6766 +6767 +564 +6768 +6769 +57 +373 +417 +6770 +2260 +6771 +112 +6772 +6773 +337 +484 +6774 +6775 +4364 +6776 +1913 +6777 +32 +6778 +10 +3192 +122 +270 +1508 +22 +5856 +392 +6779 +1716 +6780 +6781 +6782 +6783 +6784 +6785 +6786 +2561 +654 +6787 +6788 +6789 +6790 +6728 +11 +6791 +342 +6792 +286 +6793 +14 +6794 +6795 +6796 +6797 +6798 +6799 +2694 +6800 +99 +6801 +34 +2318 +6802 +15 +6803 +5314 +6804 +6805 +48 +6806 +19 +6807 +1465 +6808 +112 +6809 +6810 +15 +155 +34 +4745 +484 +6811 +6812 +6813 +89 +6814 +5659 +6480 +1172 +6164 +2913 +6815 +1559 +1559 +6816 +284 +6817 +6818 +6819 +566 +48 +14 +845 +15 +6820 +6821 +6822 +286 +1133 +345 +3055 +703 +6823 +32 +6824 +6825 +6826 +665 +16 +43 +6827 +4026 +6828 +1900 +6829 +5734 +286 +6830 +237 +6831 +4388 +1383 +6832 +6833 +6834 +2029 +6835 +6836 +6837 +6838 +369 +6839 +6840 +57 +1875 +554 +155 +1012 +6841 +4 +6842 +43 +2197 +354 +6843 +736 +3995 +6844 +1465 +1172 +6845 +6846 +4765 +6847 +6848 +4263 +284 +1107 +3 +6849 +736 +6850 +303 +6851 +2849 +6852 +6853 +32 +286 +6854 +6855 +6856 +48 +6857 +303 +357 +554 +6858 +15 +6859 +659 +696 +6860 +6861 +141 +6862 +1637 +4398 +6863 +5561 +2561 +6864 +6865 +514 +6866 +701 +6867 +6868 +1172 +6869 +4002 +6870 +1637 +6871 +2302 +6872 +6873 +491 +6874 +286 +155 +2978 +6875 +6876 +155 +6877 +586 +5169 +15 +647 +1870 +6878 +6879 +6880 +6881 +6882 +6883 +38 +6884 +6885 +6886 +6887 +5008 +6412 +6888 +22 +6889 +60 +323 +6890 +2790 +6891 +6892 +6893 +6894 +6895 +2289 +6896 +6897 +284 +303 +6898 +3981 +1223 +6899 +6900 +1559 +3543 +152 +6901 +1604 +397 +213 +48 +6902 +5304 +4859 +6903 +741 +6904 +6905 +6906 +5825 +6907 +17 +19 +6908 +6909 +1612 +6910 +6911 +248 +765 +4139 +915 +6912 +4487 +6913 +1808 +6914 +6915 +910 +6916 +6917 +299 +286 +19 +48 +3594 +6918 +6919 +1961 +4709 +6920 +6921 +6922 +6923 +6095 +6924 +2260 +597 +369 +15 +1956 +6925 +6926 +751 +3367 +6927 +284 +5780 +6928 +57 +43 +284 +3054 +6929 +6595 +284 +861 +6930 +6931 +6932 +566 +6900 +6933 +349 +6934 +6935 +209 +4425 +6936 +20 +2591 +484 +531 +5111 +583 +509 +6937 +355 +613 +6938 +6939 +6940 +57 +6941 +6942 +2770 +2356 +592 +6943 +39 +885 +201 +6944 +15 +6945 +6946 +6947 +179 +6948 +6949 +286 +2482 +6950 +6951 +6952 +6953 +2502 +5780 +955 +32 +573 +6954 +398 +201 +6955 +6956 +6957 +337 +694 +6958 +597 +6959 +6960 +1512 +6961 +6962 +284 +6963 +6964 +6965 +1249 +6966 +6967 +6968 +6969 +1157 +6970 +57 +9 +6971 +6972 +57 +165 +6973 +6974 +345 +9 +713 +6975 +6976 +1829 +248 +6977 +6978 +6979 +6980 +6981 +2733 +6982 +6533 +6983 +6984 +6985 +2410 +15 +6986 +4425 +6987 +6988 +6989 +845 +471 +6990 +699 +6991 +6992 +3905 +222 +6993 +237 +6994 +6995 +6996 +6997 +6998 +6999 +7000 +7001 +7002 +2136 +892 +19 +43 +7003 +7004 +197 +842 +15 +7005 +7006 +7007 +2477 +809 +7008 +7009 +7010 +9 +648 +89 +1961 +228 +721 +910 +7011 +15 +7012 +7013 +331 +3849 +1684 +7014 +7015 +7016 +7017 +7018 +7019 +7020 +7021 +7022 +19 +3647 +616 +5537 +32 +25 +1112 +3 +7023 +7024 +7025 +4 +4616 +1244 +3519 +7026 +7027 +57 +7028 +7029 +7030 +20 +7031 +112 +2260 +19 +25 +210 +43 +3640 +7032 +7033 +5556 +7034 +7035 +7036 +7037 +345 +7038 +9 +7039 +3534 +7040 +284 +2804 +7041 +1867 +7042 +7043 +7044 +440 +7045 +3599 +2064 +1965 +7046 +15 +7047 +272 +7048 +7049 +4855 +1364 +7050 +303 +2697 +7051 +7052 +15 +43 +5308 +597 +1346 +590 +7053 +7054 +7055 +4760 +7056 +7057 +694 +7058 +7059 +7060 +7061 +4518 +7062 +7063 +7064 +2841 +436 +2431 +201 +323 +7065 +15 +201 +7066 +2944 +7067 +7068 +7069 +936 +7070 +2314 +1612 +1415 +14 +7071 +7072 +6289 +7073 +7074 +7075 +665 +15 +7076 +7077 +464 +19 +7078 +286 +10 +7079 +7080 +4139 +190 +7081 +7082 +7083 +20 +1013 +2591 +7084 +738 +7085 +7086 +32 +1768 +7087 +7088 +19 +2694 +597 +10 +7089 +7090 +3553 +7091 +7092 +200 +7093 +5320 +7094 +1051 +57 +7095 +7096 +4634 +48 +1508 +430 +7097 +19 +15 +842 +373 +7098 +1010 +20 +7099 +713 +815 +7100 +284 +155 +7101 +57 +1021 +7102 +7103 +3417 +7104 +5700 +1566 +7105 +7106 +1047 +155 +7107 +7108 +7109 +22 +1090 +665 +1021 +7110 +887 +554 +7111 +15 +20 +597 +2561 +284 +6878 +3296 +869 +7112 +7113 +172 +7114 +32 +7115 +7116 +337 +7117 +43 +7118 +415 +7119 +7120 +7121 +9 +872 +1364 +7122 +3455 +32 +7123 +492 +7124 +99 +7125 +7126 +7127 +16 +1867 +9 +586 +1415 +7128 +7129 +7130 +22 +7131 +7132 +7133 +7134 +7135 +7136 +59 +7137 +989 +7138 +2593 +2925 +7139 +48 +7140 +345 +7141 +1124 +354 +7142 +1172 +34 +7143 +721 +7144 +7145 +57 +43 +7146 +6916 +7147 +7148 +7149 +19 +1531 +14 +7150 +32 +7151 +7152 +10 +7153 +7154 +7155 +1364 +7156 +1531 +20 +7157 +20 +7158 +7159 +57 +7160 +7161 +19 +7162 +7163 +7164 +7165 +7166 +493 +7167 +3317 +7168 +1356 +7169 +7170 +15 +7171 +1738 +286 +7172 +7173 +15 +1531 +3902 +815 +2593 +3852 +99 +7174 +7175 +7176 +610 +867 +7177 +7178 +109 +7179 +7180 +7181 +648 +9 +7182 +7183 +7184 +7185 +43 +7186 +7187 +495 +7188 +7189 +4634 +16 +7190 +7191 +7192 +7193 +317 +7194 +7195 +364 +1364 +14 +7196 +155 +7197 +2 +10 +1208 +7198 +7199 +295 +7200 +3216 +7201 +7202 +7203 +98 +1710 +677 +7204 +7205 +7206 +7207 +5780 +7208 +2040 +7209 +7210 +5659 +7211 +358 +402 +155 +7212 +89 +213 +7213 +7214 +7215 +6057 +7216 +16 +7217 +1154 +7218 +7219 +1502 +2415 +815 +15 +707 +185 +4574 +7220 +6731 +7221 +7222 +2175 +7223 +19 +7224 +331 +7225 +7226 +7227 +19 +7228 +3050 +20 +1149 +1710 +201 +7229 +279 +378 +188 +15 +7230 +2254 +2550 +861 +7231 +647 +20 +7232 +7233 +7234 +3978 +7235 +7236 +7237 +2281 +7238 +46 +2988 +7239 +3376 +43 +96 +1932 +19 +7240 +478 +533 +7241 +993 +7242 +7243 +15 +7244 +7245 +7246 +7247 +7248 +43 +7249 +966 +7250 +7251 +745 +57 +7252 +2289 +76 +7253 +7254 +248 +7255 +7256 +15 +15 +533 +7257 +22 +104 +60 +7258 +7259 +15 +7260 +7261 +317 +4088 +19 +872 +3908 +286 +286 +590 +7262 +437 +586 +201 +32 +7263 +2040 +7264 +7265 +7266 +7267 +7268 +43 +7269 +2 +7270 +7271 +7272 +7273 +7274 +7275 +317 +7276 +22 +2009 +48 +7277 +3059 +1425 +7278 +4950 +7279 +7280 +178 +7281 +7282 +571 +5623 +4411 +7283 +5251 +4411 +7284 +3598 +7285 +7286 +7287 +398 +7288 +6382 +7289 +7290 +2040 +7291 +45 +7292 +2564 +7293 +7294 +3599 +7295 +7296 +7297 +597 +7298 +533 +7299 +1465 +57 +7300 +7301 +201 +7302 +2009 +7303 +7304 +7305 +1513 +751 +7306 +7307 +5254 +2593 +77 +7308 +137 +7309 +4026 +7310 +1052 +15 +7311 +7312 +7313 +271 +712 +7314 +1675 +7315 +1710 +7316 +9 +7317 +7318 +7319 +7320 +7321 +323 +7322 +7323 +7324 +178 +7325 +284 +7326 +7327 +7328 +7329 +1293 +178 +5923 +248 +25 +7330 +7331 +11 +345 +6505 +7332 +6412 +10 +7333 +7334 +764 +7335 +7336 +7337 +827 +1386 +303 +237 +7338 +7339 +7340 +583 +32 +694 +3 +4 +7341 +19 +7342 +4053 +286 +7343 +1454 +1817 +176 +2314 +7344 +7345 +7346 +7347 +7348 +15 +6928 +20 +7349 +7350 +7351 +379 +7352 +25 +155 +7353 +270 +7354 +7355 +201 +7356 +19 +1531 +7357 +32 +7358 +6505 +7359 +3599 +22 +19 +7360 +7361 +7362 +201 +7363 +2974 +7364 +7365 +282 +178 +7366 +7367 +7368 +7369 +5203 +7370 +7371 +1224 +248 +4185 +57 +2176 +25 +3172 +554 +19 +910 +7372 +7373 +15 +14 +7374 +242 +7375 +3759 +15 +14 +7376 +7377 +155 +7378 +1112 +7379 +7380 +20 +7381 +1749 +248 +7382 +7383 +317 +373 +7384 +14 +25 +7357 +19 +648 +2029 +7385 +7386 +7387 +7388 +19 +7389 +915 +7390 +7391 +7392 +7393 +7394 +99 +1244 +32 +7395 +7396 +7397 +1364 +7398 +7399 +7400 +478 +3055 +7401 +1200 +7402 +399 +7403 +15 +3104 +4364 +19 +7404 +20 +19 +7405 +7406 +2728 +7407 +656 +7408 +7409 +1834 +2029 +7410 +7411 +399 +228 +7412 +7413 +284 +7414 +34 +20 +7415 +7416 +77 +213 +48 +19 +155 +7417 +7418 +2289 +415 +7419 +7420 +6501 +7421 +7422 +43 +164 +4 +7315 +345 +7423 +1834 +7424 +1900 +7425 +7426 +2979 +19 +337 +7427 +2913 +32 +533 +564 +7428 +7429 +1107 +7430 +7431 +7432 +2368 +337 +358 +7433 +7434 +1508 +19 +7435 +1232 +7436 +5265 +7437 +15 +7438 +284 +7439 +188 +364 +77 +7440 +9 +5780 +3148 +972 +155 +7441 +7442 +1465 +7443 +4 +7444 +7445 +7446 +7447 +1992 +323 +32 +7448 +7449 +7450 +43 +1222 +5780 +7451 +7452 +7453 +7454 +345 +1079 +7455 +7456 +7457 +7458 +7459 +2314 +7460 +15 +416 +7461 +536 +286 +269 +7462 +201 +20 +7463 +3202 +7464 +190 +7465 +7466 +7467 +7369 +3599 +7468 +22 +7469 +7470 +7471 +7472 +7473 +7474 +7475 +7476 +188 +7477 +34 +7478 +7479 +7480 +915 +5326 +7481 +2387 +1944 +286 +829 +22 +586 +66 +7482 +1112 +6289 +5839 +15 +7483 +7484 +7485 +7486 +7487 +7488 +77 +7489 +7490 +32 +415 +7491 +7492 +7493 +4364 +7494 +43 +7495 +3858 +7496 +7497 +7498 +3981 +3078 +345 +3465 +3543 +7499 +6518 +7500 +7501 +4598 +7502 +7503 +3515 +1823 +5629 +7504 +197 +1220 +7505 +15 +2347 +7506 +9 +2694 +7507 +7508 +7509 +7510 +3470 +7511 +7512 +15 +7513 +7514 +19 +7515 +845 +7516 +7517 +7518 +7519 +3959 +7520 +213 +57 +7521 +5908 +1401 +7522 +7523 +7524 +337 +7525 +213 +7526 +519 +7527 +7528 +7529 +7530 +7531 +7532 +736 +7533 +7534 +5780 +7535 +7536 +7276 +7137 +5552 +7537 +7538 +373 +7539 +19 +2356 +5336 +337 +4414 +7540 +7541 +15 +2260 +7542 +7543 +3914 +7544 +7545 +303 +7546 +7547 +303 +7548 +493 +573 +7549 +206 +7550 +7551 +19 +7552 +1046 +7553 +540 +720 +1517 +286 +7554 +7555 +299 +1352 +7556 +2429 +60 +7557 +213 +7558 +1870 +7559 +861 +7560 +6617 +1840 +20 +7561 +7562 +7563 +303 +4263 +7564 +7565 +25 +7566 +7567 +7568 +357 +4155 +7569 +7570 +15 +573 +19 +7571 +7572 +3999 +7573 +7574 +7575 +7576 +7577 +373 +7578 +7579 +2253 +7580 +19 +7581 +7582 +15 +7583 +7584 +43 +19 +4884 +7585 +7586 +849 +7587 +7588 +7589 +2902 +7590 +7591 +955 +828 +694 +7592 +486 +7593 +7594 +7595 +237 +464 +5521 +3 +1357 +2135 +2697 +12 +7596 +7597 +7598 +7599 +7600 +2 +586 +7601 +7602 +7289 +7603 +694 +7604 +43 +1918 +2577 +7605 +4963 +201 +2787 +2804 +7606 +5601 +286 +7607 +7608 +7609 +2316 +7610 +6518 +7611 +7612 +2762 +7613 +7614 +7615 +7616 +1955 +7617 +7618 +7619 +6449 +7620 +7621 +7622 +43 +7623 +558 +7624 +1799 +7625 +828 +7626 +7627 +354 +7628 +484 +32 +317 +7629 +6716 +7630 +7631 +43 +1710 +303 +7632 +209 +7633 +738 +43 +197 +16 +34 +7634 +7635 +7636 +1425 +2034 +7637 +7638 +15 +7639 +416 +7640 +201 +57 +7641 +317 +1364 +7642 +7643 +7644 +3354 +7645 +19 +373 +7646 +915 +7647 +345 +201 +77 +493 +7648 +7649 +7650 +115 +648 +77 +7651 +7652 +845 +5689 +1021 +7653 +1160 +7654 +7655 +2166 +7656 +7657 +2471 +7658 +597 +7659 +7660 +504 +25 +7661 +7236 +7662 +7663 +57 +7664 +201 +7665 +1425 +1710 +7666 +89 +7667 +721 +7668 +7669 +7670 +7671 +7672 +7673 +7674 +7675 +7676 +7677 +5623 +3553 +7678 +7679 +6289 +43 +7680 +7681 +7682 +7683 +2537 +20 +7684 +7685 +201 +43 +7686 +1160 +7687 +791 +7688 +7689 +5949 +4512 +7690 +417 +3353 +7691 +2129 +7692 +7693 +1153 +9 +19 +7694 +57 +43 +286 +1812 +7695 +1343 +2253 +6518 +7696 +5204 +345 +7697 +1696 +7698 +4028 +1710 +5780 +2782 +7699 +2769 +349 +10 +2615 +7700 +915 +7701 +4598 +12 +19 +354 +14 +6305 +89 +345 +7702 +201 +14 +15 +1116 +7703 +4634 +7704 +7705 +7706 +464 +4 +7707 +5312 +7708 +4905 +3999 +39 +7709 +4024 +7710 +5990 +286 +43 +19 +248 +317 +845 +3503 +3645 +7711 +7712 +66 +17 +7713 +7714 +7715 +57 +6463 +158 +7716 +7717 +7718 +7719 +7720 +7721 +2163 +29 +248 +303 +7722 +337 +7723 +20 +7724 +2849 +4048 +15 +7725 +284 +43 +6187 +14 +7726 +7727 +7728 +7729 +337 +7730 +237 +4075 +7731 +7732 +7733 +7734 +7735 +7736 +694 +736 +1352 +29 +272 +1559 +57 +248 +665 +7737 +7738 +20 +2879 +5340 +134 +7739 +1169 +4677 +7740 +7741 +7742 +7743 +7744 +7745 +416 +845 +225 +7746 +248 +7747 +200 +7748 +43 +43 +7749 +7750 +7751 +7752 +7577 +412 +7753 +155 +7754 +11 +7755 +4 +5326 +7756 +7757 +7758 +5556 +7442 +19 +7759 +7760 +43 +7761 +7762 +114 +2140 +20 +7763 +1169 +1011 +7764 +178 +278 +5731 +7765 +3844 +7766 +1011 +14 +317 +237 +7767 +7768 +519 +7769 +7770 +201 +7771 +7772 +7773 +7774 +7775 +7776 +7777 +7778 +188 +2314 +7779 +317 +7780 +7781 +7782 +7783 +703 +1784 +7784 +7785 +7786 +7787 +7788 +822 +7789 +936 +7790 +7791 +7792 +3976 +7793 +7794 +7795 +32 +7796 +7797 +495 +20 +5601 +7798 +7799 +7800 +7137 +7801 +7802 +7803 +7804 +7805 +4925 +7806 +7807 +7808 +7809 +7810 +7811 +7812 +1083 +764 +1105 +7364 +7813 +7814 +7815 +7816 +345 +7817 +7818 +7819 +15 +7820 +7821 +3906 +7822 +279 +7823 +14 +228 +357 +3059 +7824 +354 +7825 +7826 +7827 +7828 +377 +7829 +1112 +228 +597 +7830 +7831 +210 +3467 +7832 +7833 +1580 +7834 +694 +7835 +7836 +7837 +7838 +7839 +7840 +7841 +170 +7842 +7843 +7844 +7845 +48 +7846 +43 +7847 +10 +57 +7848 +5700 +7849 +7850 +7851 +7852 +7853 +7854 +694 +3376 +7855 +35 +7856 +7857 +7858 +7859 +201 +5243 +7860 +7861 +7862 +500 +7863 +7864 +7865 +7866 +7867 +4855 +1808 +7868 +7869 +5022 +7870 +7871 +2006 +7872 +43 +15 +7873 +7874 +2320 +7875 +7876 +1696 +7877 +213 +7878 +7879 +7880 +554 +7881 +7882 +248 +7883 +7884 +16 +7885 +303 +7886 +337 +2770 +7887 +7888 +1112 +610 +176 +7889 +7890 +10 +345 +15 +7891 +7892 +3546 +7893 +2949 +16 +303 +7894 +349 +7895 +7896 +7897 +1940 +201 +7898 +1710 +16 +7899 +7900 +284 +303 +7901 +5584 +303 +15 +7902 +7903 +7904 +7905 +7906 +1089 +7907 +3598 +7908 +7909 +15 +7910 +7911 +7912 +270 +19 +7913 +2029 +7914 +5075 +7915 +269 +10 +43 +411 +7916 +7917 +1612 +1425 +491 +2694 +859 +7918 +7919 +7920 +43 +741 +7921 +3465 +271 +15 +7922 +7923 +43 +7924 +7925 +4301 +7926 +7927 +248 +7928 +286 +647 +7929 +7930 +4907 +5065 +7931 +3 +7932 +7933 +9 +6950 +7934 +7935 +7936 +741 +99 +7937 +7938 +7939 +7940 +3148 +7941 +7942 +3095 +7943 +7944 +7945 +10 +7946 +6071 +7947 +7948 +892 +7949 +7531 +299 +14 +2546 +1172 +7950 +337 +7951 +3 +7952 +549 +703 +7953 +7954 +7955 +7956 +7835 +7957 +7958 +7959 +6439 +7960 +7961 +7962 +1262 +1021 +286 +7963 +7964 +15 +1089 +484 +7965 +19 +7966 +213 +7842 +7967 +32 +7968 +284 +464 +1470 +213 +22 +7969 +725 +7970 +7971 +7956 +398 +7972 +1456 +1637 +554 +317 +213 +7973 +7974 +337 +2700 +7975 +7976 +286 +7977 +7978 +533 +112 +15 +7979 +1955 +694 +7980 +7981 +7982 +7983 +1082 +2325 +7984 +6468 +22 +7985 +7986 +1765 +7987 +7988 +7989 +7990 +7991 +345 +6439 +3004 +7992 +3844 +21 +7993 +337 +2243 +196 +7994 +7995 +7270 +15 +7996 +1562 +179 +7997 +284 +1121 +7998 +915 +342 +586 +43 +892 +4634 +22 +7999 +2040 +8000 +342 +8001 +8002 +8003 +8004 +213 +446 +19 +8005 +1445 +2449 +317 +188 +317 +8006 +8007 +8008 +8009 +1112 +8010 +8011 +2 +8012 +8013 +20 +528 +4634 +8014 +57 +6915 +1356 +8015 +8016 +14 +8017 +6304 +8018 +647 +99 +5448 +34 +32 +22 +8019 +178 +8020 +8021 +201 +2804 +378 +270 +8022 +6490 +8023 +248 +8024 +8025 +15 +8026 +8027 +19 +8028 +8029 +8030 +2197 +694 +8031 +5780 +8032 +915 +8033 +8034 +8035 +323 +8036 +8037 +8038 +8039 +8040 +8041 +1655 +8042 +1513 +989 +15 +8043 +20 +32 +2694 +8044 +5976 +155 +8045 +8046 +1320 +249 +7215 +8047 +647 +8048 +8049 +8050 +8051 +7522 +5780 +8052 +7565 +3168 +8053 +104 +305 +1710 +4441 +1559 +8054 +4762 +416 +4028 +533 +8055 +2577 +222 +8056 +3669 +8057 +8058 +201 +8059 +8060 +292 +8061 +8062 +8063 +8064 +2993 +7522 +8065 +8066 +8067 +4053 +213 +8068 +8069 +8070 +8071 +14 +114 +815 +4227 +32 +242 +8072 +89 +8073 +179 +8074 +8075 +3 +8076 +19 +8077 +179 +8078 +8079 +8080 +8081 +4261 +14 +8082 +8083 +8084 +19 +1160 +115 +8085 +8086 +8087 +99 +279 +8088 +1889 +8089 +8090 +8091 +4 +8092 +1542 +303 +303 +416 +8093 +201 +102 +109 +8094 +3038 +5764 +8095 +337 +8096 +8097 +8098 +2836 +8099 +8100 +8101 +1071 +228 +8102 +493 +8103 +8104 +8105 +4747 +4390 +112 +8106 +869 +8107 +8108 +8109 +34 +8110 +7027 +8111 +8112 +8113 +8114 +8115 +8116 +8117 +1808 +8118 +415 +8119 +1502 +8120 +249 +8121 +910 +8122 +8123 +8124 +8125 +67 +8126 +8127 +8128 +8129 +57 +1551 +8130 +8131 +137 +8132 +19 +8133 +8134 +8135 +8136 +8137 +8138 +8139 +493 +8140 +8141 +8142 +1710 +286 +8143 +8144 +8145 +528 +8146 +286 +6533 +417 +8147 +77 +815 +1578 +8148 +8149 +8150 +57 +8151 +8152 +8153 +6627 +491 +16 +1453 +1021 +8154 +8155 +8156 +8157 +25 +1989 +8158 +5172 +8159 +8160 +8161 +8162 +2043 +8163 +8164 +8165 +253 +1252 +43 +8166 +5071 +1655 +2043 +8167 +2330 +19 +57 +337 +22 +12 +416 +228 +8168 +8169 +48 +8170 +8171 +8172 +3354 +8173 +8149 +8174 +8175 +8176 +8177 +586 +8178 +1224 +14 +8179 +8180 +8181 +8182 +8183 +8184 +8185 +8186 +646 +2872 +80 +8187 +8188 +8189 +8190 +8191 +751 +8192 +8193 +284 +491 +270 +8194 +5465 +8195 +20 +237 +8196 +15 +8197 +484 +8198 +493 +22 +179 +284 +1637 +4155 +8199 +5992 +8200 +232 +5846 +703 +8201 +8202 +8203 +5623 +2410 +8204 +8205 +8206 +10 +8207 +8208 +6161 +5130 +5080 +8209 +8210 +1249 +6505 +8211 +8212 +665 +5780 +2794 +43 +286 +8213 +5297 +665 +357 +8214 +8151 +2136 +8215 +8216 +8217 +8218 +2 +8219 +57 +2117 +8220 +8221 +331 +519 +8222 +8223 +3 +237 +1684 +8224 +845 +20 +22 +3844 +8225 +15 +35 +1710 +1824 +8226 +8227 +77 +8228 +43 +8229 +4173 +5773 +8230 +8231 +7768 +1817 +8232 +590 +8233 +8234 +8235 +8236 +8237 +286 +8238 +99 +8239 +416 +8240 +104 +8241 +9 +4227 +8242 +8243 +8244 +8245 +178 +137 +22 +8246 +8247 +8248 +213 +8249 +8250 +8251 +3061 +8252 +8253 +8254 +8255 +1042 +8256 +8257 +8258 +8259 +3976 +5838 +4 +1019 +2694 +8260 +5969 +3465 +8261 +1502 +8262 +8263 +8264 +6741 +15 +19 +8265 +270 +8266 +8267 +7522 +1562 +5614 +43 +3055 +8268 +15 +8269 +305 +8270 +2913 +1105 +8271 +176 +104 +8272 +164 +317 +1133 +15 +8273 +1710 +1812 +8274 +8275 +8276 +8277 +303 +8278 +57 +8279 +8280 +4961 +178 +8281 +98 +8282 +15 +484 +6505 +2 +32 +16 +8283 +8284 +5780 +8285 +8286 +12 +8287 +213 +8288 +8289 +8290 +8291 +1533 +398 +8292 +8293 +15 +5202 +1531 +8294 +4752 +19 +8295 +20 +8296 +140 +1354 +1383 +8297 +741 +8298 +8299 +8300 +8301 +8302 +8303 +616 +8304 +703 +1047 +8305 +8306 +8307 +2993 +19 +8308 +1018 +43 +43 +3407 +8309 +8310 +8311 +8312 +1364 +77 +5904 +8313 +8314 +8315 +8316 +8317 +616 +2953 +8318 +57 +8319 +8320 +1013 +590 +342 +8321 +8322 +209 +10 +8323 +4280 +1717 +1425 +8324 +3698 +715 +8325 +1710 +2804 +8326 +541 +8327 +8328 +8329 +8330 +317 +8331 +32 +8332 +8333 +8334 +8335 +662 +398 +8336 +77 +14 +4487 +8337 +8338 +2 +15 +2015 +286 +8339 +155 +286 +2477 +8340 +1738 +815 +8341 +140 +369 +4677 +178 +665 +658 +8342 +8343 +125 +2260 +8344 +354 +8345 +8346 +8347 +989 +436 +43 +22 +8348 +8349 +16 +8350 +8351 +8352 +299 +8353 +15 +15 +2733 +6335 +4422 +817 +8354 +8355 +8356 +74 +1234 +8357 +586 +8358 +8359 +8360 +8361 +5039 +1779 +8362 +8363 +598 +8364 +8365 +57 +317 +586 +57 +15 +12 +8366 +8367 +8368 +8369 +2060 +8370 +8371 +411 +8372 +125 +8373 +8374 +8375 +8376 +1710 +22 +8377 +8378 +43 +15 +8379 +8380 +172 +8381 +14 +6883 +7270 +8382 +413 +8115 +8383 +3626 +8384 +8385 +180 +8386 +57 +8387 +554 +8388 +2988 +671 +19 +5780 +178 +8389 +32 +8390 +8391 +284 +8392 +8393 +213 +8394 +5968 +8395 +8396 +43 +8397 +8398 +764 +6070 +8399 +176 +8400 +284 +303 +8401 +284 +305 +745 +8402 +8403 +8404 +2253 +32 +20 +8405 +2029 +43 +561 +8406 +34 +8407 +337 +8408 +411 +10 +3 +8409 +8410 +8411 +1426 +8412 +8413 +701 +3743 +25 +8414 +8415 +8416 +337 +8417 +8418 +5512 +3514 +861 +1692 +464 +1955 +8419 +57 +22 +8420 +8421 +8422 +5022 +8423 +1513 +411 +155 +8424 +197 +60 +188 +8425 +3732 +8426 +415 +8427 +57 +1153 +8428 +8429 +8430 +60 +8431 +8432 +8433 +8434 +317 +8435 +8436 +176 +6225 +8437 +8438 +624 +8439 +2982 +6736 +8440 +586 +8441 +8442 +7408 +1502 +176 +8443 +286 +8444 +8445 +8446 +213 +8447 +7743 +8448 +554 +703 +1310 +22 +822 +791 +8449 +57 +201 +8450 +6214 +7137 +8451 +15 +8448 +76 +8452 +19 +8453 +842 +2439 +936 +14 +8454 +1364 +8455 +8456 +19 +8457 +8458 +713 +8459 +15 +586 +8460 +8461 +8462 +8463 +8464 +8465 +3543 +8407 +2802 +597 +6400 +8466 +8467 +8468 +8469 +882 +17 +20 +2537 +8470 +8471 +8472 +4461 +10 +8473 +8474 +416 +8475 +8476 +19 +99 +357 +8477 +8478 +8479 +8480 +15 +1727 +8481 +301 +9 +9 +8482 +8483 +19 +248 +4024 +272 +8484 +8485 +8486 +317 +15 +4278 +19 +2762 +2347 +1049 +8487 +156 +15 +8488 +8489 +22 +8490 +8491 +1310 +8492 +178 +8493 +8494 +8495 +8496 +8497 +22 +528 +8498 +436 +8499 +751 +2253 +8500 +8501 +741 +694 +766 +345 +8502 +356 +8503 +8504 +8505 +8506 +137 +8507 +8508 +8509 +8510 +8511 +8512 +8513 +270 +8514 +8515 +4359 +8516 +8517 +8518 +357 +178 +8519 +8520 +1291 +8521 +8522 +740 +370 +2728 +8523 +1956 +764 +8524 +15 +3594 +8525 +8526 +8527 +8528 +8529 +8530 +349 +8531 +10 +3504 +8532 +7896 +200 +586 +700 +8533 +1559 +89 +19 +1401 +8534 +8535 +8536 +8537 +8538 +5561 +3369 +345 +178 +8539 +8540 +8541 +6335 +8542 +8543 +5780 +8544 +8545 +155 +8546 +8547 +2316 +8548 +915 +8549 +8550 +1481 +337 +8551 +8552 +155 +8553 +19 +137 +1109 +8554 +354 +8555 +2459 +1018 +8556 +8557 +15 +910 +8558 +178 +8559 +8560 +1401 +8561 +8562 +8563 +8564 +8565 +1169 +3182 +14 +971 +1574 +6071 +8566 +213 +8567 +9 +272 +8568 +10 +533 +5169 +331 +8569 +8570 +15 +402 +8571 +8572 +8573 +248 +2405 +8574 +114 +8575 +213 +43 +8576 +8577 +284 +8578 +8579 +8580 +8581 +1071 +8582 +8583 +3382 +8584 +8585 +966 +8586 +2289 +5078 +14 +8587 +32 +303 +1385 +900 +915 +8588 +15 +1502 +15 +8589 +8590 +43 +8591 +8592 +8593 +8594 +8595 +3148 +1668 +8596 +8597 +8598 +48 +20 +8599 +3026 +8600 +17 +15 +8601 +8602 +8603 +15 +8604 +541 +8605 +14 +8606 +8607 +873 +8608 +20 +8609 +1082 +1425 +8610 +8611 +119 +8612 +1109 +22 +8613 +3559 +5782 +8614 +89 +8615 +2924 +15 +3729 +8616 +8617 +2427 +60 +989 +597 +15 +303 +8618 +7661 +32 +8619 +8620 +7154 +8621 +2770 +115 +738 +501 +6505 +8622 +8623 +20 +8624 +6581 +4441 +8625 +1018 +8626 +8627 +19 +6010 +8628 +8629 +318 +8630 +7176 +248 +8631 +305 +416 +185 +8632 +10 +8633 +77 +8634 +1232 +8635 +15 +8636 +3251 +8637 +303 +19 +14 +2029 +19 +1100 +43 +8638 +8639 +8640 +4278 +8641 +4855 +19 +399 +16 +8642 +390 +337 +357 +1232 +1021 +6532 +8643 +188 +597 +8644 +8645 +1749 +8646 +915 +32 +1696 +354 +8647 +3055 +15 +983 +6987 +284 +2009 +4388 +8648 +15 +8649 +282 +20 +958 +8650 +270 +8651 +8652 +8653 +1314 +99 +8654 +4116 +8655 +915 +8656 +8657 +8658 +25 +213 +337 +8659 +303 +694 +14 +8660 +8661 +8662 +6761 +1566 +7830 +8663 +8664 +8665 +32 +8666 +8667 +8668 +213 +8669 +15 +8670 +331 +248 +284 +8671 +8672 +8673 +286 +8674 +4387 +8675 +8676 +8677 +8678 +2349 +8679 +8680 +8681 +8682 +8683 +8684 +8685 +8686 +1401 +323 +188 +8687 +8688 +1388 +5585 +2347 +8689 +3908 +8690 +305 +8256 +15 +8691 +8692 +8693 +8694 +8695 +8696 +8697 +8698 +8699 +8700 +8701 +534 +8702 +3279 +8703 +152 +48 +8704 +8705 +15 +8706 +8707 +845 +357 +8708 +152 +8709 +2537 +8710 +8711 +8712 +12 +8713 +8714 +8715 +741 +8716 +936 +8717 +509 +8718 +1513 +3553 +8719 +1515 +8720 +9 +8721 +8722 +1920 +8723 +845 +8724 +8725 +8726 +815 +6070 +676 +8727 +6654 +2009 +1765 +1790 +337 +43 +1234 +8728 +8729 +598 +8730 +57 +8731 +7379 +8732 +8733 +57 +8734 +8735 +43 +6035 +10 +286 +8736 +8737 +8738 +8739 +892 +20 +8740 +8741 +15 +1563 +8742 +4 +398 +665 +694 +284 +8743 +5211 +8744 +8745 +8746 +357 +8747 +8171 +15 +861 +8748 +19 +8749 +4354 +8750 +590 +831 +8751 +8752 +8753 +8754 +8755 +176 +6371 +225 +8756 +8757 +8758 +3 +491 +8759 +8760 +8761 +8762 +8763 +20 +8764 +8765 +2537 +1502 +8766 +1992 +8767 +1234 +484 +1112 +6594 +8768 +8769 +7479 +2446 +2234 +22 +3626 +597 +415 +8770 +1012 +4650 +1244 +8771 +111 +817 +8772 +15 +8773 +284 +1571 +349 +67 +738 +279 +225 +19 +317 +8774 +138 +2139 +8775 +493 +8776 +8777 +8778 +8779 +22 +248 +8780 +8781 +8782 +7675 +8783 +43 +15 +67 +768 +8784 +8785 +506 +8786 +8787 +8788 +1232 +1563 +19 +3598 +4650 +8789 +4070 +8790 +8791 +322 +8792 +19 +170 +8793 +8794 +137 +32 +225 +8795 +8796 +8797 +8798 +8799 +2338 +8800 +7836 +8280 +3828 +8801 +8802 +4298 +8803 +8804 +8805 +8806 +4406 +323 +8807 +10 +1166 +3553 +7176 +32 +8808 +8809 +8810 +33 +6441 +178 +8811 +8812 +915 +15 +286 +791 +8813 +8814 +3790 +6602 +665 +15 +3317 +8815 +8816 +2410 +303 +15 +8817 +8818 +1010 +210 +19 +3559 +4677 +8819 +15 +3252 +8820 +8821 +3827 +8822 +10 +8823 +8824 +8825 +3054 +104 +248 +2308 +213 +8826 +2619 +237 +8827 +1829 +2338 +597 +8828 +2619 +8829 +286 +2537 +2988 +152 +303 +8830 +8831 +800 +138 +8832 +9 +8833 +5780 +303 +501 +32 +8834 +15 +1834 +3739 +7105 +8835 +8836 +892 +8837 +8838 +34 +457 +5780 +8839 +8840 +354 +7139 +8841 +8842 +8843 +8844 +8845 +1965 +8846 +1364 +8847 +155 +8848 +4 +180 +1415 +8849 +5780 +8850 +1200 +2692 +8851 +8852 +487 +286 +155 +8853 +2694 +155 +8854 +8855 +15 +8856 +15 +3 +8857 +8858 +8859 +4283 +8860 +8861 +4954 +8862 +15 +8863 +8864 +8865 +8866 +8867 +8868 +4624 +8869 +1364 +8870 +8871 +2260 +179 +1026 +8872 +5080 +8873 +8874 +8875 +8876 +464 +8877 +6161 +6412 +8878 +8879 +16 +873 +5780 +8880 +5825 +6214 +8881 +1217 +48 +222 +8882 +8883 +345 +8884 +8885 +201 +137 +16 +2347 +1262 +8886 +8887 +57 +43 +8888 +8889 +415 +8890 +57 +8891 +2728 +8892 +19 +464 +8893 +8894 +8895 +8896 +8897 +386 +3029 +349 +872 +4430 +8898 +8899 +8900 +170 +8901 +8902 +4512 +3726 +8903 +1047 +1169 +8904 +8905 +8906 +701 +8907 +8908 +8909 +8910 +8911 +8912 +8913 +8914 +8915 +8916 +8917 +8918 +8919 +8920 +8921 +1870 +8922 +3559 +1287 +5820 +8923 +6878 +140 +188 +8924 +2841 +15 +32 +1870 +8925 +3976 +8926 +19 +8927 +8928 +541 +6304 +8929 +1744 +48 +8930 +1384 +915 +2347 +8931 +43 +8932 +8933 +694 +164 +8934 +8935 +741 +8936 +8937 +9 +43 +8938 +2260 +8939 +1232 +8940 +4685 +303 +2540 +8941 +554 +284 +15 +1257 +8942 +8943 +8944 +1856 +8945 +8946 +8947 +8948 +8949 +3553 +8950 +8951 +8952 +8953 +2476 +8954 +665 +142 +8955 +936 +155 +8956 +5912 +8957 +15 +137 +284 +286 +495 +57 +22 +8958 +8959 +8960 +14 +8961 +4012 +1870 +8962 +43 +8963 +8964 +8965 +8966 +15 +15 +3829 +3743 +6796 +8967 +519 +8968 +703 +648 +57 +232 +5650 +8969 +8970 +8971 +1847 +8972 +8973 +1465 +8974 +8975 +8976 +2849 +8977 +665 +8978 +4490 +8979 +274 +112 +286 +8980 +8981 +1907 +8982 +8983 +32 +8984 +8985 +20 +8986 +4422 +8987 +1575 +1149 +8988 +514 +8989 +8990 +2341 +15 +109 +323 +3930 +8991 +8992 +43 +14 +8993 +8994 +8995 +415 +8996 +19 +8997 +536 +2728 +32 +8998 +8999 +9000 +15 +9001 +3466 +9002 +9003 +2 +155 +286 +5304 +9004 +9005 +6260 +9006 +15 +8645 +15 +554 +9007 +9008 +9009 +9010 +179 +402 +4907 +43 +77 +9011 +10 +1907 +20 +9012 +123 +57 +9013 +9014 +9015 +303 +9016 +9017 +1606 +9018 +398 +9019 +201 +237 +337 +9020 +201 +9021 +15 +6518 +89 +9022 +284 +9023 +12 +984 +4963 +9024 +77 +8110 +9025 +9026 +9027 +5992 +9028 +892 +1956 +9029 +9030 +98 +43 +9 +647 +345 +3 +9031 +20 +15 +9032 +2314 +4297 +5770 +9033 +337 +9034 +179 +9035 +9036 +25 +301 +736 +19 +5731 +9037 +345 +464 +692 +9038 +9039 +9040 +9041 +9042 +19 +493 +1465 +9043 +616 +9044 +9045 +4693 +270 +9046 +916 +9047 +416 +9048 +1013 +9049 +9050 +9051 +1984 +9052 +416 +9053 +373 +9 +9054 +9055 +9056 +9057 +2349 +286 +19 +5780 +9058 +1426 +9059 +19 +9060 +2824 +1655 +9061 +317 +9062 +9063 +9064 +9065 +915 +9066 +9067 +9068 +3205 +9 +57 +9069 +501 +178 +9070 +9071 +1514 +5285 +1425 +9072 +1900 +32 +9073 +19 +9074 +19 +32 +9075 +2835 +15 +9076 +1955 +104 +9 +4364 +416 +9077 +9078 +9079 +9080 +9081 +533 +9082 +14 +9083 +2865 +9084 +9085 +5313 +9086 +1834 +9087 +225 +9088 +15 +4278 +286 +9089 +284 +7716 +9090 +43 +9091 +35 +9092 +2625 +284 +284 +9093 +1100 +38 +89 +6595 +248 +2000 +9094 +5780 +9095 +9096 +9097 +2770 +9098 +270 +9099 +9100 +9101 +237 +7969 +1674 +248 +2790 +9102 +9103 +9104 +9105 +9106 +43 +9107 +1716 +1559 +5614 +9108 +1817 +7982 +249 +9109 +180 +9110 +9111 +9112 +9113 +9114 +9115 +104 +25 +3406 +8146 +586 +3543 +2323 +9116 +586 +9117 +9118 +9119 +9120 +4873 +484 +9121 +738 +345 +4634 +331 +9122 +9123 +9124 +9125 +9126 +9127 +416 +9128 +357 +286 +9129 +5217 +9130 +2824 +694 +9131 +9132 +57 +286 +9133 +9134 +3601 +9135 +58 +176 +19 +9136 +9137 +7154 +7108 +9138 +9139 +1612 +1169 +736 +9140 +9141 +892 +32 +9142 +1082 +5908 +9143 +9144 +9145 +865 +2577 +4198 +57 +9146 +357 +9147 +9148 +43 +303 +201 +9149 +9150 +1531 +15 +5415 +57 +586 +270 +9151 +3279 +9152 +3745 +15 +9153 +9154 +46 +9155 +6513 +1232 +15 +815 +831 +9156 +9157 +2559 +491 +9158 +9159 +3330 +14 +9160 +9161 +19 +1013 +566 +9162 +9163 +9164 +9165 +4088 +9166 +9167 +4850 +399 +286 +57 +15 +415 +9168 +22 +9169 +9170 +9171 +694 +713 +9172 +32 +244 +9173 +8297 +2427 +7030 +493 +9174 +9175 +9176 +9177 +89 +533 +60 +9178 +9179 +15 +66 +9180 +448 +10 +9181 +9182 +46 +9183 +5780 +43 +927 +586 +8444 +19 +764 +9184 +9185 +6877 +9186 +213 +15 +9187 +9188 +910 +9189 +9190 +2018 +9191 +337 +9192 +972 +9193 +20 +115 +22 +201 +9194 +9195 +5780 +6372 +9196 +209 +9197 +14 +2806 +57 +416 +104 +303 +665 +741 +9198 +9199 +1357 +1961 +5825 +188 +9200 +492 +817 +436 +9201 +43 +99 +112 +1401 +9202 +248 +9203 +9204 +57 +9205 +9206 +9207 +9208 +2706 +99 +9209 +43 +9210 +379 +9211 +9212 +9213 +9214 +3328 +9215 +9216 +9217 +1817 +446 +7014 +9218 +9219 +9220 +4512 +213 +872 +9221 +9222 +817 +15 +179 +4012 +22 +9223 +745 +9224 +9225 +342 +3376 +9226 +9227 +9228 +9229 +1224 +464 +9230 +1364 +1710 +9231 +9232 +2356 +9233 +286 +665 +9234 +48 +248 +9235 +1310 +9236 +1987 +9237 +284 +9238 +8566 +9239 +9240 +248 +9241 +9242 +5908 +4070 +7072 +70 +2015 +5623 +1077 +9243 +5938 +248 +284 +248 +15 +4230 +9244 +9245 +12 +9246 +9247 +9248 +43 +9249 +9250 +9251 +586 +416 +9252 +213 +9 +7595 +303 +9253 +9254 +5797 +9255 +9256 +4963 +1720 +9257 +9258 +9259 +9260 +141 +9261 +9262 +77 +213 +9263 +2446 +616 +269 +9264 +9265 +237 +9266 +284 +6965 +32 +484 +9267 +9268 +137 +9269 +34 +9270 +237 +9271 +9272 +7746 +9273 +9274 +9275 +9276 +9277 +5702 +7666 +9278 +402 +9279 +519 +9280 +9281 +9282 +8091 +616 +9283 +9284 +9285 +9286 +9287 +9288 +1160 +9289 +9290 +7276 +9291 +9292 +20 +9293 +509 +9294 +9295 +43 +9296 +9297 +9298 +2625 +5601 +1574 +19 +379 +9 +8455 +22 +3055 +20 +9299 +4915 +9300 +9301 +228 +9302 +9303 +554 +15 +9304 +9305 +540 +9306 +3233 +9307 +9308 +9309 +9310 +842 +1870 +208 +741 +9311 +9312 +19 +9313 +5410 +9314 +9315 +12 +5780 +9005 +111 +9316 +9317 +7194 +15 +7610 +1300 +9318 +9319 +9320 +9321 +3978 +9322 +1580 +15 +20 +1655 +9323 +5299 +1775 +9324 +597 +19 +20 +9325 +9326 +32 +5825 +35 +9327 +22 +9328 +9329 +9330 +9331 +9332 +1637 +9333 +8778 +1470 +9334 +9335 +77 +9336 +1212 +57 +14 +9337 +286 +348 +1912 +114 +286 +9338 +745 +7350 +9339 +9340 +1425 +9341 +48 +172 +9342 +493 +57 +415 +9343 +9344 +9345 +9346 +9347 +345 +9348 +9349 +9350 +9351 +248 +9352 +9353 +9354 +284 +9355 +9356 +7429 +9357 +9358 +357 +9359 +178 +242 +9360 +9361 +9362 +9363 +697 +9364 +397 +493 +9365 +1169 +9366 +9367 +770 +15 +9368 +9123 +20 +9369 +665 +32 +9370 +9371 +15 +9372 +9373 +9374 +9375 +248 +1364 +9376 +9377 +707 +5627 +357 +1944 +5780 +9378 +67 +9039 +9379 +9380 +1001 +8351 +849 +2043 +14 +9381 +9382 +2157 +3172 +9383 +9384 +4551 +9385 +4294 +910 +1875 +14 +1356 +9386 +43 +9387 +9388 +48 +9389 +248 +1234 +5780 +1529 +9390 +305 +6741 +17 +14 +43 +249 +9391 +43 +9392 +43 +9393 +9394 +476 +8946 +9395 +9396 +9397 +4982 +22 +9398 +9399 +9400 +7743 +317 +32 +20 +9401 +2206 +671 +9402 +590 +1612 +9403 +9404 +77 +9405 +9406 +43 +9407 +9408 +16 +9409 +337 +402 +9410 +43 +9411 +915 +9412 +977 +9413 +9414 +9415 +303 +9416 +671 +201 +5431 +9417 +283 +583 +9418 +15 +9419 +9420 +3417 +671 +209 +9421 +861 +9422 +317 +248 +9423 +9424 +33 +303 +9425 +2419 +568 +48 +9426 +1401 +19 +9427 +9428 +9429 +57 +9430 +416 +354 +3128 +9431 +22 +1377 +9432 +9433 +9434 +2944 +9435 +9436 +5582 +15 +9437 +286 +15 +10 +9438 +9439 +1470 +9440 +201 +9441 +2318 +1291 +286 +9442 +9443 +9444 +827 +9445 +9446 +178 +9395 +3944 +9447 +9448 +3964 +15 +9449 +9450 +19 +484 +9451 +9452 +4634 +9453 +1927 +19 +9454 +9455 +15 +1364 +9456 +9457 +9458 +9459 +15 +3599 +9460 +9461 +5344 +9462 +25 +9463 +245 +1840 +178 +9464 +9465 +1584 +4317 +2824 +9466 +9467 +354 +9468 +751 +792 +9469 +9470 +5218 +9471 +2841 +43 +430 +2128 +9472 +9473 +32 +9474 +9475 +48 +1710 +9476 +9477 +1377 +9478 +9479 +9480 +9481 +9482 +9483 +9484 +185 +2619 +9485 +9486 +9487 +20 +1562 +2911 +9488 +586 +5877 +9395 +9 +3330 +9489 +9490 +9491 +67 +9492 +2944 +134 +9493 +15 +9494 +5654 +892 +2047 +1710 +3030 +201 +19 +597 +25 +1961 +9495 +14 +4278 +9496 +648 +9497 +9498 +9499 +225 +19 +22 +9500 +3743 +354 +9501 +983 +2835 +9502 +9503 +9504 +249 +9505 +15 +4518 +9506 +9507 +43 +9508 +3852 +9509 +9510 +1425 +1604 +9511 +3961 +9512 +9513 +9514 +9515 +9516 +4583 +9517 +9518 +10 +209 +1100 +9519 +9520 +9521 +9522 +9523 +4012 +9524 +32 +9525 +1051 +9526 +7291 +9527 +9528 +9529 +1021 +189 +286 +3442 +9530 +6384 +303 +337 +2410 +197 +9531 +9532 +4388 +9533 +3148 +9534 +22 +9535 +9536 +9537 +554 +9538 +9539 +1232 +4439 +554 +597 +4426 +4 +9540 +155 +9541 +9542 +33 +9543 +9544 +930 +514 +109 +861 +1282 +402 +554 +357 +2764 +9545 +9546 +3599 +9547 +19 +730 +12 +9548 +164 +586 +9549 +1559 +3417 +7238 +9550 +791 +9551 +10 +4070 +271 +9552 +15 +9553 +9554 +9555 +9556 +5299 +415 +1027 +415 +237 +9557 +9558 +9559 +57 +249 +25 +9560 +2697 +822 +9561 +9562 +6505 +352 +9563 +671 +9564 +22 +363 +1116 +548 +9565 +501 +34 +57 +9566 +9567 +9568 +1743 +9569 +379 +9570 +5208 +9571 +416 +7137 +8653 +9572 +179 +9573 +9574 +415 +3525 +9575 +14 +5820 +736 +9576 +178 +176 +914 +2764 +9577 +681 +9578 +15 +597 +213 +338 +9579 +9580 +213 +533 +416 +303 +25 +9395 +4714 +9581 +9395 +4506 +1172 +9395 +9582 +9583 +9584 +1295 +15 +66 +6086 +32 +15 +1710 +315 +19 +9585 +9395 +32 +9586 +303 +5623 +5039 +936 +554 +738 +9587 +9588 +9589 +9590 +1234 +9591 +1513 +7032 +9592 +9593 +178 +9594 +9595 +9596 +1010 +2728 +9597 +32 +9598 +4042 +9395 +9395 +9599 +58 +9600 +188 +1927 +22 +9601 +9602 +9603 +9604 +9605 +9606 +9607 +8465 +1212 +9608 +9395 +9395 +1710 +1540 +274 +114 +5923 +222 +9609 +9395 +9610 +270 +9611 +1606 +936 +9612 +22 +9613 +9614 +398 +248 +9615 +9616 +9617 +4419 +9618 +9619 +9620 +9621 +9622 +9323 +3964 +9623 +9624 +9625 +178 +3508 +9626 +1710 +9627 +188 +9628 +9629 +155 +2841 +284 +6612 +4165 +25 +4764 +9630 +9631 +337 +9632 +1637 +9633 +9634 +15 +284 +9635 +8414 +9636 +9637 +9638 +9639 +248 +9640 +317 +1262 +7429 +9641 +2026 +248 +9642 +925 +9643 +9644 +9645 +484 +9646 +761 +9647 +9648 +9649 +286 +16 +9650 +9651 +8653 +9652 +3427 +10 +9653 +43 +9654 +9655 +249 +3968 +4 +9656 +416 +9657 +43 +8297 +9658 +9659 +5400 +9660 +2309 +9661 +15 +5007 +286 +242 +9662 +464 +9663 +1514 +9664 +9665 +249 +9666 +4982 +317 +43 +9667 +48 +9668 +9669 +284 +9670 +9671 +9672 +540 +373 +7014 +9395 +9673 +9674 +179 +134 +43 +9675 +43 +377 +9676 +20 +15 +9677 +9678 +411 +9679 +8348 +19 +5577 +1386 +9395 +9680 +1018 +9681 +305 +686 +9210 +640 +9682 +3291 +9395 +9395 +9683 +9684 +842 +892 +9395 +9685 +1293 +9 +9686 +9687 +713 +9688 +5908 +9395 +9689 +9395 +1867 +1442 +9690 +1716 +9691 +25 +9692 +9693 +9694 +22 +1502 +9695 +2694 +9696 +713 +9697 +5326 +20 +9698 +9699 +9395 +15 +9 +9700 +9701 +9702 +19 +9119 +92 +9395 +9395 +9703 +9395 +9 +9395 +9704 +20 +2787 +15 +9705 +14 +484 +19 +299 +4 +3481 +9706 +9707 +225 +9708 +373 +3330 +9709 +2591 +9710 +1425 +43 +4364 +2694 +9711 +19 +9712 +9713 +9714 +9715 +9716 +9717 +2944 +9718 +9719 +14 +2694 +15 +9720 +9721 +1291 +43 +9722 +9723 +14 +9724 +9725 +2260 +648 +9395 +1083 +9726 +9727 +802 +237 +5080 +9728 +2430 +5780 +1808 +707 +2694 +2787 +5780 +9729 +9730 +9731 +15 +9732 +9395 +9733 +9395 +9395 +9734 +9395 +554 +9735 +9736 +9737 +9738 +303 +9739 +19 +9740 +9741 +1870 +3296 +1300 +9742 +3 +9743 +210 +15 +9744 +2029 +249 +357 +337 +2709 +57 +2 +4764 +416 +9745 +9746 +9747 +66 +32 +9748 +43 +20 +4042 +15 +9749 +9395 +9750 +9 +9751 +9752 +9753 +10 +736 +9754 +9755 +9756 +301 +114 +9757 +9758 +9759 +2430 +9760 +9761 +35 +201 +9762 +354 +9763 +9764 +9765 +9766 +9767 +98 +8320 +9768 +201 +19 +286 +19 +10 +192 +8249 +9769 +3514 +9395 +3034 +554 +9770 +337 +14 +9771 +464 +9772 +9773 +9774 +4714 +9775 +9776 +3958 +9777 +9395 +484 +32 +9778 +10 +9779 +5451 +354 +9780 +3995 +9395 +597 +22 +248 +14 +4269 +9781 +9782 +9783 +337 +398 +9784 +140 +9785 +9786 +178 +9787 +9395 +9788 +9789 +303 +3989 +15 +2289 +9790 +9791 +9792 +179 +9793 +822 +9794 +9795 +1502 +6616 +4855 +9796 +9395 +9797 +201 +153 +4 +9798 +9799 +317 +554 +493 +32 +694 +9800 +5837 +1655 +9801 +4 +9802 +9803 +9804 +43 +14 +668 +9020 +9805 +155 +16 +89 +32 +8685 +272 +357 +9806 +9807 +1808 +9808 +5169 +9809 +9810 +2243 +16 +9811 +9812 +9813 +32 +286 +15 +9814 +9815 +9816 +7137 +9817 +9818 +9819 +35 +9820 +9821 +185 +9822 +8344 +9823 +9824 +9825 +2403 +9826 +5900 +9827 +15 +9828 +9829 +1710 +14 +9830 +1790 +286 +48 +9831 +9832 +248 +6364 +9395 +248 +9833 +249 +9834 +764 +9835 +9836 +9837 +3100 +9838 +9839 +9840 +9841 +9842 +9843 +141 +9395 +2697 +9844 +9845 +9395 +9395 +9846 +9847 +9848 +9849 +286 +9850 +9851 +337 +98 +9395 +2 +9852 +9853 +2971 +9395 +9854 +415 +9855 +703 +115 +9856 +9857 +14 +9858 +32 +892 +213 +9859 +9860 +57 +9861 +9862 +9863 +9864 +9395 +337 +9865 +2919 +43 +9866 +188 +9867 +168 +9868 +9869 +3302 +9870 +9871 +6594 +9872 +692 +9780 +9873 +32 +9874 +4388 +9875 +6445 +4631 +1542 +15 +9876 +9877 +1013 +43 +1637 +9878 +34 +9879 +9880 +138 +9881 +249 +4855 +9882 +155 +9883 +9884 +7343 +9395 +5198 +57 +694 +43 +9395 +9885 +286 +9886 +3407 +238 +286 +9887 +2697 +9888 +9889 +3698 +15 +9890 +9891 +9395 +1082 +213 +9892 +14 +303 +9 +705 +9893 +9894 +9895 +2157 +9896 +8889 +9395 +9897 +7600 +9898 +9899 +9900 +2035 +9901 +9902 +1360 +9903 +9904 +9905 +9395 +35 +9906 +5792 +15 +1605 +248 +9907 +9908 +9909 +57 +3978 +9910 +2655 +9911 +9912 +9395 +201 +554 +1015 +9913 +57 +484 +9914 +9915 +179 +9916 +9917 +286 +43 +286 +9918 +9919 +9920 +345 +9921 +9922 +8853 +222 +3491 +694 +3055 +35 +9923 +32 +9924 +1710 +9925 +791 +3421 +9926 +9927 +270 +9395 +7580 +5314 +9928 +9929 +9930 +98 +99 +15 +9931 +15 +9932 +22 +590 +9395 +933 +2049 +25 +9309 +4747 +7183 +9933 +9934 +1026 +9935 +25 +9936 +9 +10 +8053 +176 +155 +15 +14 +5774 +1364 +9937 +9938 +9939 +9940 +178 +9941 +180 +9942 +6850 +12 +9943 +15 +19 +1230 +9944 +9945 +2849 +6771 +9946 +4982 +32 +9947 +8282 +9948 +125 +5127 +303 +9949 +9950 +9951 +9952 +5791 +9953 +354 +9954 +9955 +188 +9956 +9957 +9958 +274 +9959 +4075 +9960 +671 +9961 +411 +4028 +9962 +20 +9963 +1232 +222 +35 +155 +19 +9964 +9965 +9395 +303 +9966 +9 +872 +694 +237 +1513 +9967 +6029 +22 +9968 +5022 +286 +164 +1710 +9969 +9970 +2 +89 +9971 +115 +9972 +597 +8670 +9973 +178 +9974 +2619 +464 +9975 +9976 +9977 +24 +9978 +115 +9979 +9980 +9981 +9982 +827 +1870 +9983 +286 +3790 +9984 +2619 +9985 +3406 +1464 +9986 +647 +9987 +9988 +9989 +248 +284 +8437 +9990 +213 +337 +9991 +9992 +9993 +9994 +8602 +4185 +9995 +4 +9996 +9997 +9998 +9999 +10000 +10001 +2668 +15 +15 +179 +10002 +9395 +1987 +10003 +10004 +464 +32 +10005 +15 +176 +20 +286 +10006 +10 +10007 +2289 +10008 +10009 +2824 +10010 +484 +2356 +10011 +2009 +14 +9396 +6559 +10012 +10013 +10014 +736 +3407 +10015 +10016 +19 +10017 +7376 +10018 +1395 +10019 +10020 +10021 +10022 +10023 +10024 +8783 +9 +10025 +10026 +15 +10027 +648 +32 +1021 +57 +15 +286 +15 +10028 +10029 +286 +10030 +10031 +272 +10032 +10033 +331 +9395 +9074 +4278 +20 +10034 +1425 +19 +3353 +248 +10035 +10036 +10037 +15 +3251 +8367 +10038 +10039 +1559 +10040 +10041 +2834 +5780 +2035 +701 +20 +213 +19 +248 +10042 +10043 +10044 +10045 +284 +32 +10046 +10047 +10048 +1300 +7276 +109 +155 +2770 +10049 +1655 +10050 +10051 +10052 +1531 +694 +1026 +3507 +89 +10053 +10054 +389 +2471 +125 +10055 +10056 +10057 +10058 +3104 +10059 +10060 +14 +10061 +10062 +10063 +2924 +10064 +10065 +10066 +10067 +10068 +43 +10069 +10070 +10071 +250 +1716 +10072 +10073 +14 +10074 +10075 +1705 +77 +10076 +1710 +10077 +10078 +10079 +10080 +10081 +10082 +10083 +2309 +10084 +10085 +1169 +514 +3 +15 +10086 +213 +242 +152 +10087 +10088 +1604 +305 +10089 +10090 +9395 +1536 +10091 +10092 +10093 +10094 +248 +286 +10095 +16 +6496 +16 +9 +10096 +10097 +7835 +398 +10098 +379 +5900 +10099 +242 +10100 +337 +213 +10101 +10102 +10103 +178 +337 +201 +1364 +9395 +10104 +43 +10105 +10106 +10063 +10107 +20 +10108 +10109 +10110 +648 +9095 +271 +3055 +10111 +6243 +10112 +705 +3139 +305 +10113 +643 +10114 +484 +15 +284 +10115 +7531 +10116 +10117 +861 +10118 +2449 +10119 +10120 +15 +10121 +1382 +10122 +10123 +892 +10124 +10125 +10126 +10127 +10128 +10129 +12 +10130 +10131 +915 +10132 +57 +10133 +1710 +464 +10134 +7183 +10135 +10136 +10137 +1026 +1508 +10138 +6050 +1513 +10139 +849 +12 +10140 +10141 +10142 +213 +303 +10143 +10144 +10145 +99 +57 +1529 +179 +19 +10146 +514 +10147 +15 +57 +10148 +10149 +19 +10150 +10151 +10152 +10153 +10154 +102 +10155 +10156 +5561 +337 +822 +1119 +10157 +859 +249 +10158 +1575 +2281 +10159 +10160 +2550 +9037 +1524 +10161 +4918 +10162 +10163 +10164 +15 +3818 +305 +4 +77 +2836 +501 +716 +10165 +415 +1425 +32 +286 +822 +10166 +10167 +249 +10168 +178 +9 +10169 +305 +9123 +10170 +176 +10171 +331 +10172 +10173 +10174 +10175 +10176 +5561 +10177 +6214 +301 +703 +10178 +10179 +10180 +428 +6513 +3059 +10181 +10182 +10183 +10184 +10185 +57 +14 +10186 +10187 +1885 +10188 +10189 +19 +616 +19 +15 +10190 +10191 +10192 +48 +10193 +10 +10194 +10195 +10196 +1710 +10197 +9011 +1529 +4 +10198 +10199 +317 +10200 +152 +178 +3858 +10201 +15 +152 +8724 +910 +10202 +15 +25 +703 +1529 +10203 +10204 +10205 +10206 +583 +413 +3787 +1001 +357 +98 +20 +1465 +10207 +491 +305 +10208 +10209 +76 +10210 +10211 +286 +721 +10212 +10213 +10214 +10215 +10216 +1392 +10217 +10218 +10219 +2865 +598 +10220 +10221 +4075 +10222 +10223 +790 +10224 +10225 +10226 +4278 +99 +48 +7835 +10227 +1696 +14 +10228 +19 +10229 +42 +6507 +10230 +6364 +2593 +1513 +57 +4702 +10231 +303 +80 +10232 +77 +910 +10233 +303 +9395 +43 +10234 +10235 +10236 +22 +10237 +9178 +10238 +554 +48 +1531 +284 +317 +10239 +1817 +6171 +5223 +1604 +345 +8605 +10240 +19 +58 +2015 +10241 +10242 +6644 +337 +10243 +284 +4 +10244 +10245 +415 +32 +10246 +16 +10247 +10248 +286 +10249 +10250 +10251 +1047 +10252 +10253 +284 +10254 +10255 +10256 +1533 +10257 +2260 +89 +213 +10258 +10259 +2449 +337 +10260 +10261 +694 +43 +10262 +10263 +286 +872 +32 +10264 +1718 +5990 +4061 +10265 +5216 +32 +10266 +936 +411 +10224 +10267 +77 +10268 +4422 +1749 +43 +32 +10269 +10270 +9 +1018 +43 +10271 +286 +43 +10272 +10273 +10274 +10275 +10276 +845 +8338 +10277 +10278 +10064 +10279 +1502 +10280 +379 +10281 +10282 +14 +10283 +1514 +10284 +286 +2135 +237 +10285 +32 +2064 +10286 +10287 +501 +1011 +4530 +10288 +651 +15 +10289 +250 +910 +10290 +12 +6179 +3 +373 +10291 +200 +10292 +5438 +8593 +10293 +16 +5022 +8053 +10294 +10295 +5410 +20 +1991 +10296 +10297 +1513 +19 +10298 +10299 +10300 +1172 +15 +519 +10301 +1444 +10302 +10303 +9382 +43 +448 +213 +590 +10304 +349 +10305 +10306 +493 +248 +57 +32 +10307 +10308 +10309 +77 +2019 +10310 +10311 +286 +845 +142 +10312 +1425 +10313 +10314 +10315 +284 +5326 +6359 +10316 +19 +10317 +10318 +10319 +10320 +48 +10321 +10322 +3238 +1364 +10323 +6915 +10 +10324 +1692 +10325 +10326 +2537 +305 +15 +284 +10327 +10328 +1100 +10329 +10330 +15 +5839 +564 +365 +10331 +7624 +10332 +15 +286 +357 +10333 +1012 +1867 +10334 +10335 +10336 +15 +10337 +10338 +10339 +10340 +4024 +10341 +10342 +92 +554 +19 +10343 +10344 +10345 +10346 +10347 +8230 +10348 +4452 +10349 +10350 +694 +3413 +10230 +411 +613 +15 +10351 +10352 +245 +15 +10353 +358 +10354 +9037 +10355 +1018 +1558 +10356 +99 +5601 +222 +10357 +484 +10358 +4048 +1212 +1800 +1956 +10359 +10360 +10361 +548 +10362 +10363 +10364 +10235 +3139 +179 +10365 +966 +554 +10366 +398 +915 +10367 +2526 +10368 +10369 +43 +10370 +484 +14 +286 +10371 +179 +10372 +10373 +464 +1529 +137 +10374 +8946 +10375 +10376 +10377 +337 +10378 +337 +10379 +10380 +10381 +15 +42 +213 +303 +10382 +2043 +4918 +10383 +1356 +10384 +3385 +9210 +4116 +10385 +77 +3127 +337 +10386 +77 +213 +10387 +337 +7032 +19 +1531 +10388 +3544 +2314 +10313 +10389 +10390 +4963 +3032 +5923 +736 +5773 +10391 +10392 +222 +586 +10393 +10394 +345 +10395 +10396 +10397 +2463 +10398 +19 +4108 +10399 +342 +7380 +2993 +248 +20 +5780 +10400 +6121 +345 +9837 +10401 +10402 +3178 +2135 +10403 +354 +10404 +10405 +10406 +10407 +10408 +1047 +10409 +2259 +2995 +573 +337 +4907 +10410 +10411 +10412 +112 +10413 +10414 +303 +10415 +10416 +464 +7379 +10417 +6289 +10418 +57 +484 +10419 +15 +7729 +1612 +337 +10420 +337 +10421 +16 +10422 +278 +10423 +66 +1052 +48 +2243 +286 +9144 +303 +10424 +10425 +35 +1668 +4317 +115 +10426 +514 +10427 +10428 +10429 +6920 +3061 +10430 +2526 +3225 +10431 +10432 +2427 +10433 +250 +10434 +77 +70 +10435 +4334 +10436 +10437 +1100 +2347 +10438 +20 +647 +2306 +178 +10439 +10440 +827 +10441 +3470 +1181 +10442 +10443 +10444 +10445 +66 +19 +270 +10446 +15 +188 +9583 +386 +10447 +10448 +14 +10449 +2724 +10450 +2325 +10451 +6962 +188 +10452 +2776 +3010 +10453 +1410 +10454 +10455 +10456 +10457 +10458 +323 +1829 +10459 +7600 +369 +10460 +20 +10461 +7442 +10462 +2627 +3055 +1149 +12 +464 +10463 +10464 +1425 +10465 +10466 +10467 +10468 +10439 +10469 +10470 +57 +278 +10471 +1149 +10472 +10473 +10474 +10475 +10476 +176 +10477 +10478 +10479 +357 +10480 +10481 +738 +10482 +397 +493 +8593 +845 +1596 +2971 +10483 +8508 +6543 +10484 +284 +741 +77 +10485 +10486 +179 +10487 +213 +10488 +10489 +7806 +10490 +337 +10491 +10463 +586 +3660 +337 +10492 +9 +5780 +15 +4032 +1912 +2804 +1710 +10493 +415 +303 +43 +10494 +10495 +15 +282 +446 +859 +67 +286 +305 +10496 +10497 +7968 +10498 +769 +2015 +77 +179 +317 +10499 +10500 +3842 +5990 +3978 +155 +1364 +8338 +225 +590 +5439 +60 +10501 +10502 +2397 +176 +936 +248 +10503 +32 +10504 +10505 +5869 +10506 +10507 +10508 +10509 +1234 +2577 +10510 +7908 +10511 +10512 +176 +1956 +1932 +10513 +10514 +2406 +284 +10515 +10516 +1853 +32 +10517 +354 +2653 +809 +10518 +10519 +10520 +43 +683 +10521 +286 +1605 +10522 +10523 +242 +10524 +10525 +10526 +10527 +248 +10528 +80 +10529 +14 +10530 +10531 +1251 +861 +10532 +303 +10533 +284 +5717 +176 +10534 +248 +10535 +10536 +57 +10537 +331 +10538 +910 +10539 +248 +10540 +32 +2 +10541 +736 +10542 +10543 +1808 +10544 +9148 +2988 +8392 +9 +317 +10545 +176 +10546 +10547 +10548 +1580 +10549 +3709 +6122 +10550 +10551 +303 +10552 +278 +10553 +10554 +646 +38 +14 +4631 +820 +10555 +10556 +10557 +201 +6110 +10558 +10559 +57 +964 +874 +5006 +5797 +10560 +4075 +10561 +10562 +2577 +10563 +10564 +5316 +10565 +10566 +286 +57 +48 +14 +2768 +7357 +10567 +317 +10568 +12 +10569 +10570 +1529 +10571 +10572 +25 +1021 +10573 +3660 +10574 +10575 +331 +10576 +282 +10577 +1100 +671 +270 +142 +10578 +566 +586 +1382 +10579 +10580 +1291 +10581 +10582 +1364 +5261 +10583 +10584 +10585 +301 +10586 +10587 +10588 +15 +5880 +10589 +10590 +6317 +931 +32 +34 +10591 +9395 +5629 +12 +10592 +1083 +10593 +1234 +10594 +10595 +10596 +8532 +10597 +741 +2347 +32 +586 +188 +213 +10598 +213 +155 +10599 +32 +5291 +10600 +19 +337 +98 +10601 +745 +303 +10602 +493 +10603 +1481 +77 +10604 +248 +6822 +369 +19 +10605 +10606 +10607 +10608 +32 +10609 +464 +10610 +10611 +10612 +4 +10613 +5153 +4856 +10614 +10615 +10616 +10617 +10618 +10619 +2197 +10620 +357 +1533 +92 +936 +10621 +514 +2035 +10622 +303 +3447 +185 +48 +10623 +861 +303 +354 +7419 +3523 +540 +357 +1775 +10624 +2804 +10625 +943 +19 +5145 +14 +10626 +10627 +694 +10628 +3546 +10629 +1401 +1012 +10630 +14 +3055 +8685 +10631 +17 +10632 +10633 +10634 +10635 +10636 +10637 +10638 +57 +10639 +4624 +48 +873 +10640 +10641 +10642 +10643 +947 +10644 +10645 +19 +10646 +10647 +15 +1364 +10648 +3964 +10649 +10650 +2 +284 +10651 +279 +4606 +2195 +9 +10652 +34 +10653 +2743 +3067 +363 +10654 +10655 +552 +99 +14 +213 +34 +70 +10656 +10657 +10658 +3406 +8853 +10659 +10660 +10661 +3978 +14 +6343 +337 +10662 +484 +4491 +249 +478 +104 +10663 +43 +10664 +3369 +5326 +10665 +10666 +70 +10667 +4269 +22 +10668 +3484 +10669 +10670 +57 +10671 +10672 +248 +10673 +5780 +10674 +14 +43 +9497 +10675 +32 +10676 +2764 +5803 +6507 +10677 +2733 +10678 +303 +10679 +57 +10680 +598 +10681 +10682 +4982 +10683 +10684 +10685 +286 +10686 +484 +10687 +303 +357 +237 +271 +10688 +4278 +10689 +10690 +305 +10691 +10692 +89 +10693 +8555 +4 +4388 +15 +10694 +57 +10695 +70 +8208 +10696 +4018 +248 +10697 +284 +165 +10698 +2314 +10699 +1364 +284 +10700 +1021 +10701 +337 +10702 +10703 +10704 +303 +10705 +66 +436 +10706 +10707 +3601 +10708 +4820 +10709 +3902 +2135 +10710 +32 +10711 +10712 +10713 +10714 +10715 +10716 +10717 +5946 +7014 +10718 +10719 +10720 +10721 +10722 +48 +10723 +354 +10724 +10725 +10726 +10727 +48 +701 +1710 +10728 +7137 +10729 +345 +10730 +10731 +10732 +10733 +10734 +10735 +10736 +155 +3764 +10737 +15 +10717 +9718 +237 +10738 +845 +8200 +10739 +10740 +10741 +677 +17 +694 +10742 +10743 +15 +10744 +10745 +43 +5217 +10746 +10747 +1244 +10748 +10749 +48 +10750 +1021 +713 +10751 +10752 +10753 +34 +10754 +10755 +4402 +1531 +910 +305 +7137 +1559 +10756 +1356 +22 +10757 +115 +15 +15 +10758 +2 +10759 +936 +411 +10760 +10761 +10762 +10763 +10764 +10765 +3553 +286 +10766 +9 +10767 +137 +741 +1021 +2052 +10768 +3599 +57 +284 +337 +7600 +10769 +284 +3645 +10770 +5202 +1107 +213 +10771 +1513 +10772 +345 +10773 +3 +10774 +2415 +10775 +10776 +10777 +179 +417 +931 +10778 +10779 +1745 +10780 +797 +10781 +213 +10782 +8142 +827 +10783 +10784 +201 +7137 +10785 +32 +331 +43 +10786 +10787 +10788 +10789 +778 +10790 +10791 +9 +10792 +10793 +703 +15 +155 +286 +10794 +7032 +10795 +10796 +10797 +2043 +10798 +15 +10799 +10800 +10801 +10802 +176 +10803 +669 +10286 +10804 +10805 +9201 +5022 +1710 +20 +1301 +337 +10806 +10807 +10808 +10809 +6420 +29 +43 +3492 +10810 +4812 +736 +22 +4461 +22 +10811 +10075 +1991 +10812 +337 +10813 +337 +10814 +648 +9 +6011 +1502 +354 +10815 +15 +10816 +917 +10 +10817 +10818 +10819 +1912 +1091 +1716 +10820 +112 +10821 +10822 +10823 +10824 +10825 +213 +10826 +32 +10827 +10828 +10829 +10830 +20 +7860 +10831 +1203 +10832 +15 +77 +14 +10833 +10834 +2811 +104 +10835 +10836 +10837 +10838 +1870 +237 +20 +3186 +43 +2058 +10839 +2197 +5860 +10840 +10841 +14 +43 +10842 +2777 +15 +10843 +10844 +5662 +43 +10845 +317 +10846 +10847 +10848 +2253 +10849 +10850 +10851 +43 +43 +10852 +6833 +5249 +476 +9395 +464 +10853 +89 +845 +730 +269 +10854 +10855 +10856 +57 +3 +10857 +20 +10858 +10859 +10860 +10861 +17 +10862 +764 +10863 +10864 +10865 +741 +10866 +10867 +952 +10868 +10869 +2009 +3055 +4631 +337 +10870 +284 +3976 +5326 +10871 +331 +10872 +357 +3842 +6010 +10873 +915 +1862 +5340 +4278 +179 +648 +10874 +284 +10875 +705 +10876 +248 +7137 +10877 +10878 +7811 +10879 +10880 +10881 +1502 +464 +2809 +493 +10882 +10883 +25 +8803 +10884 +665 +10 +237 +2762 +3908 +1745 +10885 +10886 +7801 +16 +57 +10887 +2849 +5561 +152 +10888 +10889 +10235 +12 +10890 +10891 +10892 +2406 +10893 +25 +10894 +10895 +4441 +1853 +10896 +610 +10897 +10898 +6317 +10899 +317 +10900 +10901 +10902 +10903 +10904 +1018 +10905 +284 +10906 +284 +337 +10907 +1817 +9504 +2202 +9560 +10908 +10909 +10910 +10911 +740 +936 +10912 +10913 +57 +10914 +10915 +10916 +43 +8050 +10917 +3472 +822 +1824 +57 +1808 +10918 +10919 +519 +10920 +2347 +10921 +10922 +10923 +10924 +10925 +10926 +2427 +1343 +10927 +10928 +43 +10929 +16 +10930 +43 +10 +707 +10931 +10932 +10933 +710 +10934 +10935 +10936 +15 +10 +10937 +10938 +10939 +14 +7543 +10940 +5780 +164 +910 +4906 +10 +3546 +677 +4023 +19 +8255 +1244 +10941 +10942 +10943 +10944 +10945 +201 +10946 +10947 +2040 +10948 +19 +613 +10782 +25 +4905 +10949 +10950 +10951 +43 +10952 +10953 +188 +10954 +10955 +357 +12 +115 +10956 +303 +70 +1307 +14 +213 +32 +10957 +303 +10958 +10959 +10960 +284 +43 +337 +10961 +10962 +10963 +15 +554 +286 +10964 +303 +10965 +43 +7480 +10966 +248 +14 +1710 +337 +10967 +249 +286 +10968 +464 +10969 +7137 +43 +1013 +10970 +1870 +201 +8342 +10971 +5553 +2083 +8994 +1224 +32 +4491 +10972 +415 +10973 +10974 +10975 +10976 +10977 +10978 +10979 +10980 +10981 +1047 +10982 +20 +6732 +16 +3332 +305 +10983 +301 +2213 +10984 +10985 +10986 +10987 +67 +378 +225 +10988 +10989 +712 +201 +10990 +16 +188 +10757 +10991 +10992 +10993 +4532 +10994 +10995 +501 +1109 +10996 +10997 +10998 +415 +5780 +10999 +43 +178 +1637 +11000 +14 +11001 +1912 +936 +210 +3354 +11002 +1867 +11003 +7283 +6303 +7137 +7357 +11004 +53 +3417 +11005 +11006 +4 +7104 +590 +1245 +11007 +15 +11008 +11009 +3732 +179 +11010 +815 +25 +11011 +11012 +11013 +248 +303 +2415 +11014 +11015 +15 +8583 +11016 +11017 +53 +11018 +11019 +2446 +671 +11020 +11021 +248 +337 +402 +337 +493 +193 +11022 +6741 +613 +11023 +11024 +104 +11025 +7683 +9738 +2476 +11026 +411 +11027 +11028 +104 +1739 +303 +305 +11029 +9 +11030 +11031 +11032 +11033 +861 +397 +11034 +11035 +48 +11036 +11037 +9796 +11038 +32 +11039 +11040 +15 +493 +140 +11041 +43 +5869 +11042 +11043 +703 +12 +11044 +11045 +11046 +176 +11047 +304 +2924 +11048 +11049 +11050 +11051 +8110 +11052 +398 +11053 +15 +10535 +5623 +1623 +11054 +11055 +1710 +11056 +11057 +303 +11058 +284 +10849 +11059 +2302 +284 +11060 +11061 +14 +11062 +11063 +43 +892 +1232 +11064 +9449 +248 +10621 +11065 +77 +11066 +32 +2136 +11067 +11068 +11069 +11070 +317 +398 +831 +11071 +3059 +6350 +19 +11072 +11073 +4075 +586 +5817 +11074 +2310 +11075 +11076 +11077 +11078 +11079 +43 +11080 +11081 +15 +11082 +416 +99 +11083 +176 +11084 +1345 +5780 +11085 +1382 +11086 +11087 +19 +317 +11088 +2382 +1705 +11089 +11090 +53 +11091 +11092 +11093 +11094 +6341 +9465 +10500 +564 +2537 +506 +317 +11095 +2591 +201 +8244 +533 +77 +8460 +345 +1647 +11096 +10720 +114 +11097 +11098 +11099 +11100 +11101 +11102 +2428 +345 +989 +2081 +1300 +14 +8755 +16 +2410 +286 +11103 +11104 +2776 +66 +11105 +11106 +5780 +11107 +11108 +11109 +9449 +5797 +11110 +457 +11111 +11112 +11113 +11114 +9660 +6294 +1514 +11115 +11116 +3470 +210 +331 +284 +9766 +4789 +11117 +286 +5540 +11118 +11119 +248 +11120 +337 +11121 +11122 +11123 +11124 +11125 +1083 +2045 +11126 +11127 +2135 +11128 +15 +15 +11129 +11130 +11131 +10947 +57 +249 +10338 +11132 +11133 +416 +11134 +1066 +1889 +1637 +11135 +10835 +11136 +11137 +305 +11138 +11139 +179 +11140 +170 +11141 +11142 +201 +77 +11143 +176 +11144 +11145 +671 +11146 +331 +9578 +648 +4116 +11147 +25 +11148 +228 +11149 +11150 +11151 +11152 +4 +7097 +19 +2040 +11153 +48 +11154 +11155 +19 +4793 +11156 +11157 +11158 +32 +11159 +11160 +57 +6341 +337 +11161 +9617 +48 +536 +2314 +11162 +11163 +11164 +1021 +887 +11165 +284 +11166 +11167 +3598 +11168 +222 +11169 +5523 +11170 +14 +11171 +11172 +142 +11173 +11174 +4031 +11175 +32 +11176 +15 +11177 +11178 +10016 +35 +3186 +1531 +20 +694 +11179 +11180 +358 +453 +646 +11181 +20 +11182 +11183 +15 +237 +2287 +11184 +1896 +4202 +5780 +14 +7137 +11185 +8724 +1824 +272 +11186 +11187 +331 +25 +11188 +188 +11189 +586 +43 +484 +11190 +11191 +43 +32 +188 +11192 +2 +11193 +11194 +554 +11195 +11196 +8718 +233 +3287 +11197 +11198 +11199 +10016 +11200 +12 +11201 +342 +337 +1739 +11202 +4855 +5324 +11203 +248 +11204 +386 +48 +446 +188 +57 +8297 +164 +2409 +11205 +11206 +11207 +11208 +11209 +286 +48 +14 +6012 +10016 +15 +11210 +11211 +248 +5438 +10393 +11212 +11213 +1066 +15 +43 +11214 +11215 +11216 +11217 +11218 +11219 +11220 +19 +11221 +43 +286 +22 +1812 +10822 +7357 +11222 +11223 +3 +11224 +4637 +11225 +8183 +3 +4028 +11226 +5601 +11227 +11228 +43 +11229 +11230 +11231 +11232 +11233 +11234 +11235 +32 +1232 +176 +11236 +586 +4765 +11237 +11238 +19 +15 +193 +11239 +11240 +11241 +1514 +43 +11242 +11243 +11244 +10280 +112 +10 +9293 +201 +9372 +25 +11245 +77 +5344 +248 +248 +5314 +11246 +11247 +19 +616 +11248 +11249 +1021 +11250 +11251 +11252 +248 +10359 +11253 +11148 +35 +231 +15 +1655 +11254 +11255 +4 +703 +1048 +249 +869 +5080 +15 +11256 +201 +11257 +1200 +11258 +9928 +9948 +19 +11259 +11260 +560 +11261 +11262 +11263 +4990 +703 +9020 +2195 +286 +11264 +11265 +398 +11266 +10993 +11267 +323 +11268 +11269 +48 +11270 +1224 +286 +1425 +2476 +2560 +5898 +493 +11271 +6284 +713 +11272 +178 +11273 +1017 +694 +15 +7137 +11274 +11275 +15 +11276 +317 +7031 +11277 +3 +559 +11278 +11279 +11280 +11281 +1291 +11282 +345 +8230 +272 +9913 +11283 +11284 +337 +11285 +11286 +1374 +730 +1232 +25 +11287 +15 +806 +11288 +53 +11289 +11290 +11291 +11292 +845 +11293 +60 +43 +8249 +114 +11294 +11295 +11296 +11297 +3732 +2882 +11298 +11299 +11300 +3867 +11301 +11302 +201 +4 +11303 +11304 +2700 +11305 +317 +3626 +19 +305 +11306 +11307 +1655 +32 +322 +11308 +11309 +15 +10 +11310 +11311 +11312 +305 +342 +2700 +11313 +11314 +11315 +3059 +345 +11316 +11317 +11318 +11319 +99 +66 +11320 +11321 +19 +11322 +11323 +914 +354 +178 +11324 +25 +11325 +5022 +19 +576 +205 +11326 +11327 +15 +11328 +11329 +43 +11330 +15 +11331 +1262 +1224 +11332 +402 +2769 +11333 +3828 +3055 +11334 +284 +11335 +464 +213 +11336 +11337 +11338 +11339 +11340 +270 +2134 +14 +176 +11341 +259 +4730 +11342 +57 +11343 +200 +11344 +11345 +15 +11346 +9313 +57 +11347 +305 +32 +11348 +5045 +6181 +11349 +15 +11350 +4364 +9066 +5780 +1559 +10 +20 +6894 +11351 +11352 +164 +11353 +11354 +357 +11355 +1291 +14 +11356 +11357 +11358 +345 +1604 +213 +112 +60 +11359 +11148 +11360 +19 +2804 +11361 +15 +11362 +213 +305 +11363 +11364 +11365 +11366 +11367 +11368 +11369 +646 +11370 +337 +286 +11371 +248 +237 +57 +1169 +11372 +11373 +155 +2728 +6994 +11374 +11375 +11376 +528 +11377 +2 +7739 +11378 +11379 +19 +11380 +272 +4278 +32 +11381 +5780 +11382 +6006 +192 +11383 +707 +11384 +11385 +10 +11386 +11387 +665 +11388 +647 +1169 +11389 +11390 +1790 +11391 +11392 +1048 +331 +19 +11393 +11394 +11395 +11396 +11397 +15 +11398 +22 +11399 +11400 +4304 +7502 +11401 +861 +1109 +11402 +3644 +11403 +354 +11404 +11405 +2836 +305 +364 +284 +11406 +1011 +4713 +1169 +11407 +11408 +10 +9713 +11409 +4028 +303 +566 +11410 +11411 +357 +137 +11412 +4192 +11413 +11414 +8042 +32 +11415 +11416 +11417 +299 +11418 +11419 +11420 +11421 +14 +11422 +764 +11423 +11424 +349 +11425 +11426 +11427 +11428 +11429 +11430 +11431 +43 +57 +2008 +11428 +43 +11432 +4677 +11433 +9112 +11434 +11435 +57 +11436 +989 +15 +11437 +11438 +11439 +11440 +11441 +14 +11442 +11443 +872 +11444 +303 +11148 +11445 +11446 +15 +11447 +10256 +9298 +11448 +11449 +3239 +20 +11450 +11451 +11452 +11453 +616 +11454 +412 +11455 +892 +11456 +323 +11457 +11458 +11459 +9 +11460 +11461 +1585 +11462 +305 +1232 +48 +11463 +9114 +10 +114 +11464 +156 +11465 +11466 +11467 +11468 +11469 +11470 +66 +11471 +7575 +4033 +213 +11472 +317 +8096 +11473 +11474 +1823 +43 +11475 +11476 +11477 +43 +11148 +3225 +11478 +4364 +11479 +11480 +4 +11481 +137 +11482 +686 +1513 +2537 +648 +3 +665 +369 +373 +43 +11483 +194 +4963 +484 +279 +1912 +659 +57 +425 +22 +57 +738 +10909 +11484 +1262 +11485 +228 +11486 +11487 +20 +48 +4808 +11488 +3066 +493 +11489 +11490 +11491 +484 +4116 +1655 +1224 +9560 +11492 +11493 +96 +5022 +286 +10583 +11494 +16 +11495 +60 +10946 +9939 +11496 +11497 +11498 +213 +11499 +7418 +11500 +2260 +2561 +2966 +11501 +11502 +205 +337 +11503 +11504 +303 +1169 +11505 +1425 +286 +188 +11506 +11507 +11508 +11509 +11510 +303 +242 +5993 +11511 +11512 +11513 +11514 +20 +286 +274 +873 +11515 +11516 +8257 +398 +1662 +11517 +11518 +11519 +19 +822 +11520 +791 +11521 +11522 +270 +1364 +11523 +11524 +19 +11525 +8427 +809 +11526 +19 +3599 +464 +11527 +3119 +305 +5649 +845 +533 +671 +11528 +11148 +19 +1425 +11529 +11530 +77 +1232 +791 +357 +11531 +11532 +11533 +11534 +11535 +349 +4028 +11536 +32 +11537 +15 +11538 +201 +11539 +11540 +9254 +11541 +11542 +5792 +11543 +11544 +11545 +815 +11546 +248 +48 +11547 +11548 +286 +284 +493 +4918 +25 +11549 +337 +284 +11550 +11551 +11552 +303 +9396 +11553 +11554 +3213 +1018 +11555 +323 +373 +11556 +11557 +11558 +11559 +11560 +11561 +43 +8783 +323 +2764 +11562 +11563 +11564 +11565 +8950 +11566 +11567 +48 +11568 +11188 +11321 +736 +373 +48 +14 +11569 +11570 +11571 +137 +11572 +822 +931 +11573 +11574 +1870 +11575 +11576 +11577 +11578 +11579 +11580 +5075 +11581 +11582 +15 +228 +201 +1531 +66 +1604 +11583 +8682 +11114 +11584 +213 +11585 +11586 +11587 +931 +248 +8832 +5229 +365 +11588 +464 +11589 +11590 +11591 +11592 +272 +11593 +3105 +916 +11594 +11595 +11596 +11597 +11598 +6439 +34 +358 +11599 +11600 +11601 +11602 +11603 +11604 +11605 +11606 +11607 +11608 +464 +11609 +11610 +11611 +11612 +11613 +1128 +11614 +2309 +11615 +15 +11616 +11617 +11598 +493 +554 +2406 +845 +48 +11618 +43 +11619 +201 +828 +15 +11620 +11621 +11622 +7071 +464 +114 +43 +1229 +48 +32 +15 +2591 +11623 +1364 +8263 +11624 +2770 +464 +955 +11625 +153 +694 +11626 +11627 +43 +14 +11628 +11629 +11114 +11630 +213 +2577 +179 +11631 +11632 +248 +2042 +357 +1508 +3944 +11633 +11114 +11634 +345 +15 +11635 +11636 +528 +16 +11637 +57 +99 +155 +303 +11638 +10318 +11639 +3 +6728 +11640 +741 +2195 +11641 +11642 +11643 +707 +11644 +11645 +11646 +237 +11647 +77 +11648 +305 +354 +11649 +43 +5080 +2 +1425 +5601 +11650 +11651 +11652 +11653 +736 +11654 +10 +11655 +3768 +2264 +6344 +11656 +11657 +5561 +11658 +11321 +11659 +19 +4684 +11660 +305 +15 +11661 +11662 +11663 +179 +21 +11664 +11665 +15 +11666 +2944 +5361 +6869 +248 +11667 +11668 +11669 +11670 +104 +11671 +573 +11672 +861 +379 +77 +11673 +11674 +493 +11675 +11676 +10 +873 +3 +11677 +11678 +3485 +11321 +179 +176 +17 +493 +4 +11679 +238 +665 +4538 +2733 +11680 +583 +665 +11681 +11682 +11683 +11684 +43 +43 +11685 +11686 +32 +11687 +8798 +11688 +11689 +9 +2619 +3559 +11690 +305 +586 +32 +9967 +4600 +2314 +11691 +11692 +11693 +11694 +1636 +528 +2513 +284 +11695 +3367 +11696 +586 +11697 +11698 +337 +11699 +11700 +2135 +11701 +11702 +11703 +11704 +11705 +9 +284 +11706 +303 +77 +12 +11707 +11708 +3569 +11709 +43 +109 +416 +104 +8297 +8210 +2935 +286 +11710 +11711 +9898 +2043 +519 +11712 +6110 +48 +284 +2882 +178 +11713 +29 +2015 +1889 +11714 +1605 +11715 +11716 +11717 +2 +822 +25 +1870 +8751 +15 +14 +43 +4023 +11718 +14 +357 +11719 +43 +4980 +2308 +3976 +284 +6106 +8255 +11188 +11720 +11721 +11722 +11723 +142 +11724 +11725 +32 +11726 +11727 +210 +43 +11728 +11729 +464 +11730 +5769 +11731 +9132 +11732 +11733 +11148 +15 +11734 +15 +11735 +11736 +6099 +11737 +915 +11738 +11739 +11740 +11741 +303 +248 +1013 +2 +11742 +11743 +11744 +493 +3316 +48 +15 +6915 +98 +11745 +272 +11746 +11747 +4081 +11748 +464 +8367 +11749 +2006 +11750 +1655 +337 +11751 +11752 +11753 +274 +1090 +354 +11754 +927 +2804 +3 +22 +11755 +5792 +5976 +201 +11756 +15 +11757 +484 +416 +11758 +11148 +11759 +554 +1956 +11760 +11761 +11762 +66 +11763 +11764 +3521 +11765 +3055 +248 +11766 +958 +248 +11767 +8724 +345 +11768 +337 +248 +34 +11769 +213 +8447 +5780 +11762 +14 +2213 +11770 +303 +11771 +11772 +11773 +11774 +11775 +1449 +11776 +2577 +989 +5912 +9 +9 +647 +2330 +624 +53 +11777 +11778 +2015 +11779 +11780 +14 +11781 +11782 +1091 +286 +11783 +25 +1674 +11784 +3354 +1604 +4182 +12 +305 +43 +9026 +11785 +3976 +2406 +528 +1112 +2045 +11786 +11787 +2787 +1026 +354 +9910 +32 +11788 +11789 +11790 +11791 +11792 +213 +6258 +6935 +741 +11793 +11794 +2 +11795 +11796 +770 +11797 +11798 +2136 +11799 +5627 +3317 +3406 +11800 +11114 +11801 +9526 +6507 +11802 +11803 +3553 +11804 +2477 +11805 +2029 +11806 +284 +48 +262 +5877 +586 +114 +11807 +1048 +11808 +237 +7891 +597 +713 +464 +57 +11419 +11809 +11810 +11811 +2042 +80 +11812 +5780 +2733 +11813 +34 +11814 +1169 +11815 +11816 +11817 +248 +286 +646 +248 +11818 +486 +66 +43 +11819 +411 +67 +1011 +1364 +11820 +337 +1232 +1291 +11821 +1169 +14 +15 +1458 +137 +809 +11822 +11823 +11824 +915 +11825 +11826 +48 +345 +11827 +213 +43 +11828 +11522 +14 +4907 +11829 +11830 +11831 +648 +1026 +32 +15 +2213 +11832 +11833 +11834 +5920 +11835 +2157 +48 +3172 +745 +11836 +345 +1674 +11837 +22 +48 +345 +11838 +6175 +11839 +11678 +6173 +11840 +1364 +4056 +826 +155 +2015 +11841 +10807 +213 +402 +11842 +4028 +15 +305 +983 +286 +7134 +11843 +179 +11844 +43 +11845 +741 +11846 +5747 +11847 +11848 +11849 +2314 +11850 +1679 +11851 +11852 +11853 +11854 +11855 +2561 +11856 +32 +11857 +1291 +791 +3213 +8042 +43 +11858 +286 +11859 +48 +222 +1013 +11860 +11861 +11862 +1364 +5 +286 +11863 +11864 +11865 +11866 +11867 +11868 +11869 +43 +11870 +176 +19 +11871 +10 +11872 +115 +11873 +464 +48 +11676 +4624 +15 +480 +11874 +345 +11875 +11876 +1514 +11877 +2 +57 +11878 +1684 +11879 +11880 +10256 +6310 +9 +5446 +11881 +11882 +11883 +11884 +11885 +1208 +11886 +1710 +1091 +11887 +305 +284 +8783 +11888 +11889 +665 +2403 +11890 +213 +11891 +11892 +11893 +493 +11894 +11895 +2561 +6035 +337 +331 +11734 +331 +11896 +11897 +3914 +1423 +357 +10500 +11898 +11899 +11900 +317 +4905 +46 +284 +11901 +11902 +284 +11903 +11904 +8297 +9289 +11905 +656 +11906 +11907 +10 +76 +1870 +11908 +11909 +942 +152 +57 +11910 +11911 +11912 +11913 +11914 +11915 +48 +5418 +8219 +213 +11916 +1091 +1013 +213 +11917 +11918 +248 +484 +11919 +1956 +11920 +648 +6661 +303 +213 +17 +9757 +11921 +11922 +1710 +11923 +354 +11924 +284 +188 +11925 +11926 +10973 +11927 +76 +1100 +11928 +11929 +11930 +11931 +11932 +4855 +11933 +19 +11934 +11935 +11936 +717 +2289 +11937 +2792 +11938 +2338 +11939 +11940 +104 +11941 +484 +11670 +104 +11942 +15 +179 +11943 +155 +11944 +9156 +11945 +317 +43 +11946 +10 +14 +77 +11947 +11948 +303 +10 +48 +14 +5041 +11949 +10117 +48 +11148 +43 +11148 +43 +4805 +11950 +11951 +11952 +5780 +317 +48 +11587 +11953 +5344 +77 +11954 +19 +25 +11955 +11956 +286 +1577 +11957 +16 +284 +6249 +11958 +1559 +11959 +42 +9 +11960 +11961 +11962 +3334 +11963 +284 +196 +741 +11964 +2314 +11965 +284 +842 +11966 +337 +281 +7483 +3978 +337 +1051 +464 +11967 +2537 +413 +48 +3852 +11968 +11969 +11970 +713 +14 +10363 +1956 +11971 +11972 +11973 +11974 +11975 +237 +11976 +3059 +57 +337 +43 +11977 +11978 +11979 +43 +284 +11980 +11981 +11982 +11983 +305 +11984 +11985 +339 +11986 +624 +184 +185 +10049 +11987 +48 +11988 +1232 +11989 +19 +9402 +9948 +11990 +11991 +249 +11992 +11993 +25 +11994 +43 +11995 +185 +11996 +15 +12 +11997 +11998 +11999 +12000 +12001 +12002 +12003 +12004 +12005 +57 +12006 +345 +12007 +317 +12008 +17 +12009 +12010 +817 +12011 +12012 +19 +179 +12013 +4 +7615 +12014 +12015 +12016 +43 +2314 +12017 +12018 +5186 +12019 +20 +12020 +12021 +12022 +48 +12023 +12024 +7291 +12025 +35 +11434 +14 +48 +14 +15 +554 +493 +12026 +12027 +213 +12028 +43 +4637 +12029 +248 +554 +12030 +213 +8230 +12031 +12032 +9 +12033 +12034 +12035 +439 +12036 +286 +337 +43 +12037 +12038 +213 +12039 +12040 +12041 +286 +12042 +357 +12043 +4278 +9 +14 +43 +15 +12044 +4855 +12045 +3978 +12046 +357 +12047 +1907 +43 +2 +12048 +12049 +415 +43 +104 +2561 +440 +464 +12050 +48 +12051 +12052 +12053 +10156 +457 +11822 +2330 +12054 +12055 +2136 +12056 +2213 +12057 +12058 +892 +337 +1154 +1112 +323 +9942 +1992 +963 +12059 +12060 +12061 +764 +303 +15 +1823 +1889 +284 +43 +12062 +19 +305 +4169 +7697 +12063 +303 +12064 +11808 +12065 +15 +43 +12066 +1423 +48 +34 +12067 +12068 +12069 +12070 +12071 +12072 +10 +576 +12073 +493 +1442 +9 +736 +137 +12074 +764 +8367 +398 +12075 +284 +104 +8261 +1082 +659 +284 +48 +12076 +558 +5543 +12077 +19 +14 +4012 +12078 +5791 +337 +8996 +12079 +12080 +12081 +12082 +10 +12083 +12084 +4217 +12085 +12086 +178 +12087 +12088 +12089 +1779 +12090 +25 +12091 +12092 +323 +12093 +12094 +12095 +43 +12096 +237 +12097 +7381 +12098 +284 +12099 +213 +12100 +12101 +43 +12102 +12103 +174 +12104 +964 +12105 +12106 +3503 +12107 +1889 +2356 +12108 +152 +3553 +12109 +486 +1311 +12110 +764 +43 +12111 +12112 +12113 +12114 +5208 +11942 +4964 +668 +2 +12115 +2911 +25 +12116 +2315 +305 +12117 +12118 +48 +1013 +3354 +48 +2260 +677 +12119 +4278 +12120 +990 +12121 +12122 +43 +12123 +873 +89 +12124 +5780 +12125 +6612 +4053 +1232 +2264 +12126 +12127 +1061 +12128 +12129 +8784 +213 +12130 +337 +11762 +4766 +12131 +43 +11963 +464 +299 +48 +12132 +12133 +12134 +12135 +12136 +104 +3252 +233 +12137 +7908 +303 +12138 +12139 +232 +12140 +184 +12141 +12142 +12143 +12144 +12145 +1056 +2 +10087 +12146 +15 +12147 +12148 +331 +43 +12149 +5253 +1559 +6480 +12150 +15 +303 +12151 +12152 +12153 +10 +12154 +12155 +345 +32 +12156 +12157 +14 +43 +12158 +892 +12159 +188 +12160 +284 +12161 +25 +12162 +354 +70 +6850 +103 +439 +1172 +43 +337 +12163 +248 +213 +373 +12164 +10767 +4285 +12165 +872 +213 +12166 +10300 +48 +14 +736 +104 +12167 +12168 +12169 +12170 +12171 +5780 +114 +12172 +8853 +11328 +14 +12173 +12174 +1172 +861 +11421 +12175 +345 +20 +514 +10933 +12176 +12177 +12178 +12179 +3989 +237 +12180 +249 +1513 +12181 +12182 +11321 +10136 +12183 +12184 +15 +14 +12185 +707 +12186 +43 +12187 +9402 +202 +2501 +5415 +501 +12188 +12189 +12190 +317 +12191 +12192 +12193 +2234 +915 +12194 +12195 +2135 +12196 +5561 +12197 +12198 +12199 +237 +337 +14 +213 +12200 +9465 +12201 +519 +2500 +112 +12202 +12203 +178 +554 +32 +4278 +5963 +8935 +12204 +12205 +12206 +272 +286 +237 +4364 +12207 +12208 +10614 +1291 +57 +554 +4278 +8789 +237 +15 +317 +43 +77 +12209 +11804 +12210 +12211 +213 +493 +12212 +12213 +43 +12214 +99 +12215 +12216 +12217 +4317 +248 +19 +12218 +237 +248 +2243 +4028 +7451 +303 +12219 +12220 +12221 +12222 +5319 +337 +12223 +10 +764 +337 +2433 +554 +1300 +286 +12224 +397 +12225 +12226 +8297 +2 +9 +12227 +12228 +1688 +4855 +12229 +12230 +1425 +12231 +12232 +12233 +237 +43 +140 +12234 +12235 +2298 +12236 +12237 +2697 +2799 +12238 +15 +232 +12239 +11 +12240 +184 +12241 +6341 +317 +12242 +305 +12243 +1465 +43 +1021 +720 +12244 +10313 +12245 +248 +10638 +19 +2308 +12246 +12247 +12248 +43 +12249 +14 +1384 +365 +10880 +11483 +12250 +17 +43 +12251 +5797 +1692 +10769 +936 +12252 +12253 +12254 +12255 +12256 +12257 +3743 +66 +12258 +14 +248 +12259 +12260 +48 +12261 +892 +6939 +4144 +12262 +48 +12263 +10516 +12264 +12265 +14 +4028 +3213 +9497 +12266 +3354 +3 +317 +10450 +43 +12267 +12268 +209 +12269 +12270 +12271 +210 +6483 +20 +48 +12272 +12273 +12274 +2501 +12275 +2865 +12276 +12277 +14 +48 +12278 +493 +399 +12279 +12280 +12281 +12282 +345 +345 +12283 +12284 +12285 +19 +11148 +12286 +12287 +12288 +493 +9245 +228 +12289 +48 +354 +2770 +12290 +12291 +1203 +282 +12292 +48 +12293 +4806 +12294 +4153 +12295 +12296 +892 +12297 +12298 +12299 +12300 +38 +43 +730 +12301 +12302 +22 +12303 +5601 +3337 +12304 +12305 +12306 +12307 +12189 +15 +464 +5912 +1124 +9582 +1236 +19 +12308 +345 +43 +6616 +12309 +12310 +12311 +8053 +12312 +237 +12313 +345 +12314 +179 +12315 +12316 +12317 +741 +12318 +12319 +12320 +60 +1364 +4 +12321 +357 +2 +12322 +12323 +1157 +12324 +12325 +9 +19 +12326 +12327 +12328 +1966 +12329 +12330 +3599 +377 +1961 +12331 +48 +1605 +53 +12332 +213 +12333 +25 +284 +12334 +185 +12335 +12336 +43 +809 +12337 +554 +12338 +303 +14 +1889 +345 +1655 +2234 +342 +14 +337 +12339 +15 +12340 +3626 +12 +12341 +12342 +12343 +48 +10179 +694 +1542 +1234 +15 +32 +12344 +2919 +43 +12345 +12346 +15 +43 +12347 +491 +10470 +6173 +38 +32 +2728 +12348 +519 +12349 +12350 +12351 +528 +12352 +43 +10256 +12353 +12354 +57 +8889 +354 +12355 +1224 +825 +8798 +7134 +12356 +19 +1927 +12357 +12358 +12359 +104 +12360 +43 +12361 +2136 +237 +12362 +12363 +815 +188 +2197 +12364 +2318 +12365 +464 +12366 +12367 +12368 +2694 +53 +57 +2841 +11675 +12369 +201 +43 +48 +1100 +12370 +8460 +2 +12371 +12372 +12373 +3 +519 +12374 +48 +12375 +1912 +12376 +14 +286 +12377 +140 +12378 +12379 +14 +12380 +1514 +10880 +6214 +48 +15 +464 +12381 +12382 +12383 +12384 +14 +11600 +12385 +4684 +12386 +12387 +12388 +3999 +519 +2446 +48 +12005 +10356 +12389 +14 +12390 +12391 +12392 +12393 +910 +12394 +43 +12395 +2135 +12396 +12397 +12398 +14 +12399 +656 +12400 +48 +188 +12401 +736 +12402 +11185 +12403 +48 +35 +12404 +77 +12405 +12406 +12407 +12408 +48 +1425 +12409 +12410 +2 +12411 +12412 +703 +12413 +12414 +12415 +11224 +12416 +12417 +1852 +12418 +12419 +12420 +76 +12421 +305 +12422 +12423 +43 +586 +2 +323 +411 +665 +43 +12424 +12425 +2035 +3908 +12426 +12427 +736 +554 +12428 +7522 +272 +140 +12429 +12430 +12431 +12432 +3003 +692 +12433 +12434 +12435 +58 +43 +12436 +12437 +3310 +232 +12438 +12439 +12440 +370 +1051 +8849 +305 +12441 +5780 +449 +14 +701 +12442 +12443 +12444 +272 +413 +48 +1232 +12445 +671 +12446 +436 +12447 +413 +12448 +12449 +249 +12450 +66 +286 +12451 +48 +43 +286 +152 +12452 +2650 +12453 +2847 +2694 +11148 +12454 +12455 +15 +12456 +1425 +12457 +491 +43 +12458 +14 +237 +12459 +12460 +57 +1604 +43 +12461 +12462 +764 +1047 +213 +303 +12463 +303 +6209 +12464 +345 +12465 +12466 +12467 +12468 +12469 +114 +98 +12470 +35 +12471 +12472 +5780 +57 +12473 +12474 +1442 +12475 +43 +9832 +12476 +586 +57 +11046 +1112 +16 +861 +249 +12477 +38 +12478 +12479 +12480 +12481 +48 +8020 +12482 +43 +703 +15 +8779 +12483 +12484 +2471 +9 +179 +12485 +12486 +12487 +12488 +122 +176 +12489 +12490 +12491 +12492 +12493 +237 +12494 +155 +12495 +357 +2260 +6479 +1727 +196 +48 +4803 +12496 +48 +1559 +12497 +12498 +185 +12499 +4055 +12500 +30 +12501 +137 +14 +248 +178 +43 +2988 +399 +303 +7624 +305 +12502 +12477 +2919 +2202 +12503 +66 +12504 +12505 +12506 +12507 +345 +12508 +3468 +12509 +12510 +1870 +586 +357 +573 +4187 +12511 +1546 +43 +80 +12512 +12513 +43 +2043 +493 +5780 +369 +7 +12514 +10299 +9363 +12515 +12516 +188 +12517 +5839 +904 +43 +43 +464 +12518 +11754 +12519 +12520 +12521 +12522 +12523 +12524 +703 +12525 +4430 +337 +6877 +880 +12526 +12527 +14 +179 +12528 +707 +4081 +48 +9 +694 +7208 +8724 +6398 +286 +1605 +12529 +10560 +43 +2409 +14 +2804 +1112 +2012 +1082 +12530 +10883 +12531 +671 +358 +9603 +10600 +14 +48 +493 +12532 +12533 +861 +48 +3287 +12534 +12535 +12536 +20 +14 +12537 +12538 +11551 +12539 +721 +12540 +12541 +12542 +10151 +305 +272 +10657 +12543 +1716 +12544 +12545 +345 +14 +140 +1364 +188 +1536 +453 +1224 +12546 +3711 +43 +12547 +2694 +8961 +12548 +12549 +32 +12550 +12551 +3543 +1543 +12552 +2064 +12553 +11353 +10880 +2042 +8037 +12554 +12555 +12556 +12557 +8779 +12558 +185 +1812 +12559 +12560 +12561 +12562 +12563 +43 +12564 +5808 +237 +12565 +43 +10310 +12566 +464 +305 +12567 +12568 +1165 +213 +213 +248 +9417 +12569 +12570 +14 +4606 +12571 +12572 +12573 +213 +43 +14 +12574 +12575 +12576 +12577 +303 +2499 +176 +1232 +764 +15 +4053 +3 +12578 +12579 +12580 +43 +12581 +357 +12 +736 +12582 +2093 +2764 +12583 +112 +3984 +25 +5990 +12584 +12585 +12586 +3 +11762 +464 +613 +6090 +12587 +12588 +10 +12589 +5577 +12590 +12591 +12592 +1244 +98 +12593 +12594 +12595 +43 +286 +12596 +12597 +19 +43 +12598 +6505 +2804 +12599 +12600 +12601 +11762 +12602 +12603 +3842 +2790 +284 +15 +201 +647 +12604 +43 +12605 +7045 +357 +331 +12606 +11754 +19 +237 +345 +43 +12607 +11483 +1942 +12034 +10 +1817 +12608 +337 +12609 +270 +12610 +4278 +12611 +2790 +303 +7276 +12612 +8724 +12613 +1048 +12614 +12615 +12616 +4 +12617 +12618 +12619 +272 +8297 +12620 +7855 +12621 +2764 +16 +12622 +12623 +2035 +12624 +43 +6527 +12625 +12626 +12627 +590 +3978 +237 +12628 +12629 +12630 +15 +57 +114 +32 +12631 +12632 +14 +12633 +3743 +12634 +48 +1251 +3238 +15 +57 +1169 +11960 +12635 +12636 +764 +12466 +8468 +4855 +10 +14 +12637 +114 +19 +32 +12638 +12639 +12640 +114 +3 +12641 +48 +43 +2 +12642 +15 +43 +12643 +57 +2234 +42 +12644 +2 +12645 +12646 +228 +43 +12647 +12648 +12649 +14 +12650 +345 +12651 +14 +713 +12652 +12653 +651 +29 +12654 +12655 +286 +12656 +48 +12657 +345 +12658 +155 +12241 +19 +1295 +2136 +12659 +43 +5418 +6480 +248 +12660 +12661 +12662 +209 +14 +5080 +6507 +337 +12663 +12664 +12665 +4116 +12666 +15 +12667 +213 +1157 +12668 +12669 +12203 +12670 +1665 +11966 +1696 +48 +12671 +12672 +647 +5990 +15 +12673 +12674 +12675 +493 +237 +12676 +12677 +2561 +4441 +12678 +12679 +185 +48 +12680 +179 +12681 +4 +12682 +484 +43 +242 +176 +12683 +67 +2975 +2 +11728 +25 +958 +4855 +12684 +14 +19 +736 +43 +1584 +12685 +6518 +1812 +970 +7357 +790 +4123 +43 +554 +2 +12686 +222 +12687 +12688 +19 +3543 +12689 +892 +12690 +3 +616 +57 +98 +43 +12691 +6741 +1049 +188 +5780 +464 +12692 +1812 +2 +12693 +137 +14 +10 +237 +331 +337 +10 +12694 +10 +12695 +43 +12696 +48 +9798 +303 +12697 +228 +14 +337 +12698 +12699 +248 +12700 +284 +446 +245 +48 +12701 +12702 +8867 +4 +741 +12703 +398 +484 +48 +3385 +12704 +2 +2406 +1626 +12705 +12706 +48 +9 +12707 +1224 +12708 +12709 +915 +12710 +43 +7291 +10 +12711 +9988 +12712 +20 +12713 +11754 +12714 +12715 +43 +342 +12716 +12717 +12718 +237 +10 +6054 +7855 +19 +2042 +48 +19 +1314 +12719 +12720 +12721 +178 +12722 +493 +12723 +8392 +822 +15 +1105 +12724 +12725 +9738 +12726 +12031 +12727 +12728 +12729 +12730 +4 +12351 +12731 +12732 +11822 +12733 +43 +248 +872 +7666 +12734 +12735 +284 +1100 +12736 +8098 +1251 +12737 +1232 +4075 +2320 +39 +272 +237 +12738 +1425 +12739 +12740 +12741 +12742 +14 +1203 +764 +10699 +10592 +3543 +12743 +12744 +5169 +12745 +48 +12746 +20 +43 +43 +12747 +12748 +12749 +14 +12750 +20 +14 +2061 +43 +72 +48 +43 +12751 +12752 +12753 +20 +369 +1217 +12754 +12755 +12756 +6839 +12757 +12758 +8163 +12759 +12760 +6106 +9 +2356 +12761 +12762 +43 +12763 +554 +6306 +491 +12764 +12765 +12716 +795 +12766 +20 +484 +12767 +43 +112 +1684 +379 +338 +12768 +237 +1533 +12769 +2865 +12770 +12771 +10557 +7521 +9497 +12772 +12773 +533 +12774 +286 +12775 +282 +12776 +43 +10 +12777 +741 +12778 +12779 +12780 +12781 +155 +286 +707 +12782 +809 +48 +1082 +12783 +3944 +3 +484 +12784 +42 +12785 +12786 +1082 +1220 +12787 +1710 +12788 +12789 +2 +12790 +10750 +2865 +43 +2239 +12791 +357 +1012 +43 +231 +12792 +2197 +43 +1605 +8517 +671 +196 +12793 +12794 +237 +43 +1224 +12795 +14 +12796 +12797 +7522 +736 +12798 +142 +915 +417 +3239 +9345 +14 +12799 +12800 +12801 +19 +12802 +970 +12803 +12804 +12805 +12806 +3 +11480 +12807 +12808 +43 +736 +457 +3 +12795 +338 +2488 +249 +12809 +1364 +12810 +1716 +286 +43 +25 +48 +12811 +3594 +365 +237 +12812 +14 +12813 +1829 +12814 +493 +12815 +43 +43 +9095 +4 +249 +210 +15 +1011 +12816 +646 +12817 +12818 +12819 +12820 +12821 +8724 +11489 +12822 +48 +2566 +1696 +671 +104 +357 +15 +12823 +4038 +12824 +12402 +12825 +6382 +12826 +48 +4487 +305 +12827 +19 +7259 +286 +112 +12828 +373 +14 +554 +373 +12543 +12829 +12830 +12831 +12832 +337 +32 +14 +12833 +12834 +1244 +12835 +12761 +12836 +43 +12837 +43 +12838 +2004 +4745 +4441 +12839 +12840 +1688 +10727 +43 +12841 +12842 +57 +12843 +6468 +12844 +3603 +3660 +12845 +12846 +48 +659 +2018 +12847 +12848 +12795 +12849 +14 +3172 +11754 +8896 +12850 +373 +4313 +11822 +12851 +12852 +647 +12853 +1955 +6701 +12854 +4441 +12855 +11400 +5601 +14 +12824 +4269 +446 +464 +12856 +12857 +12426 +14 +7355 +10 +12858 +176 +2239 +12859 +12110 +1503 +1817 +12860 +1425 +493 +12861 +12862 +12863 +48 +12864 +48 +12865 +12866 +12867 +12868 +284 +14 +43 +12869 +12795 +741 +564 +43 +12870 +12871 +337 +48 +1655 +213 +48 +286 +12872 +14 +48 +48 +12873 +237 +12874 +12875 +286 +8015 +43 +10418 +12876 +12877 +2694 +5650 +12878 +188 +12879 +6335 +12880 +43 +43 +43 +2459 +12881 +43 +2694 +12882 +14 +1765 +2064 +1710 +3543 +3 +237 +6400 +43 +12883 +12884 +11601 +141 +707 +6076 +48 +11762 +12885 +48 +5134 +317 +12886 +1001 +11482 +12887 +12888 +12889 +720 +12890 +209 +1547 +12891 +12892 +2064 +12893 +1262 +12894 +12895 +12896 +4002 +43 +9617 +9082 +284 +12897 +1425 +713 +3343 +12898 +265 +12899 +12900 +12901 +5627 +12902 +3239 +5751 +2593 +12903 +43 +11822 +12904 +12905 +4144 +8458 +12906 +10 +10 +10 +4483 +15 +19 +9 +8041 +12907 +32 +12908 +237 +188 +12909 +12910 +5293 +5780 +248 +237 +12911 +48 +6871 +12912 +1149 +14 +2 +12913 +14 +12914 +12915 +12916 +48 +283 +12917 +6618 +1364 +12621 +1817 +8249 +12918 +14 +43 +790 +3519 +1049 +12919 +3553 +89 +2 +12920 +11963 +12921 +2042 +12922 +548 +3317 +4028 +12923 +1956 +104 +2577 +12924 +1232 +14 +12925 +9999 +43 +1160 +12926 +237 +43 +10880 +43 +12927 +11762 +12928 +48 +5089 +59 +19 +12929 +12930 +616 +1011 +12931 +10 +12932 +12933 +14 +48 +2577 +43 +11085 +12934 +1232 +5134 +12935 +10908 +4899 +12936 +2686 +665 +11808 +12937 +1082 +12938 +12939 +237 +12940 +7836 +12941 +7945 +2356 +12942 +19 +2202 +12943 +1745 +12944 +436 +2 +16 +43 +915 +2577 +12945 +15 +43 +1223 +12946 +1082 +5614 +12947 +12948 +12949 +12950 +4125 +274 +272 +5410 +12951 +43 +14 +12952 +10880 +12953 +286 +12954 +4352 +379 +12955 +12956 +48 +48 +12957 +1451 +2804 +7357 +155 +1091 +5791 +12958 +12959 +12960 +43 +1513 +12961 +5860 +3755 +12962 +536 +6537 +272 +12963 +12964 +43 +185 +5963 +12965 +352 +12966 +12967 +12968 +48 +12969 +2264 +12970 +1051 +48 +114 +1425 +1090 +7419 +19 +12971 +12972 +12973 +9 +12974 +43 +12975 +379 +1749 +1154 +5769 +12976 +48 +12977 +493 +14 +12978 +554 +10880 +12979 +165 +12980 +12981 +12982 +9849 +12983 +12984 +12985 +12986 +12987 +12988 +2561 +15 +9749 +12989 +43 +12990 +647 +357 +12991 +2 +12992 +12993 +810 +576 +12994 +12995 +12067 +12996 +3743 +6285 +12997 +2009 +35 +272 +12998 +286 +809 +272 +1012 +2919 +1716 +237 +12999 +66 +357 +8297 +2314 +269 +586 +1425 +13000 +10 +365 +872 +13001 +13002 +13003 +13004 +272 +13005 +13006 +15 +43 +6718 +14 +13007 +2302 +48 +13008 +554 +1112 +13009 +13010 +493 +13011 +4789 +13012 +1655 +1051 +13013 +14 +5627 +13014 +155 +337 +13015 +13016 +13017 +13018 +2314 +13019 +213 +43 +13020 +357 +48 +13021 +4907 +13022 +43 +13023 +13024 +15 +13025 +32 +13026 +13027 +12067 +43 +317 +155 +184 +286 +13028 +48 +13029 +741 +12402 +1765 +2260 +13030 +2330 +305 +213 +4963 +10 +12684 +13031 +303 +13032 +43 +2764 +48 +13033 +764 +14 +43 +2314 +209 +491 +13034 +14 +712 +13035 +13036 +2045 +736 +13037 +2 +13038 +43 +48 +595 +7053 +13039 +2 +13040 +48 +14 +13041 +13042 +2463 +13043 +2459 +13044 +2499 +764 +13045 +2561 +5418 +13046 +13047 +237 +14 +5780 +99 +303 +43 +357 +13048 +13049 +43 +48 +13050 +13051 +707 +48 +974 +13052 +13053 +12195 +15 +13054 +14 +48 +13055 +13056 +10930 +13057 +286 +713 +12067 +13058 +14 +89 +788 +13059 +1961 +30 +60 +13060 +11787 +13061 +43 +303 +501 +237 +13062 +2957 +1437 +13063 +3 +13064 +13065 +13066 +210 +554 +13067 +237 +11754 +13068 +13069 +13070 +13071 +115 +13072 +13073 +237 +5780 +10 +9784 +237 +7256 +13074 +13075 +1051 +43 +13076 +13077 +43 +155 +13078 +43 +12005 +3561 +13079 +9395 +14 +13080 +13081 +349 +43 +14 +48 +1502 +48 +7208 +13082 +15 +6480 +13083 +6870 +13084 +13085 +4756 +48 +10 +286 +13086 +142 +3546 +13087 +5780 +19 +14 +3553 +48 +5679 +3546 +13088 +12987 +3480 +13089 +491 +13090 +13091 +349 +1364 +3553 +2314 +13092 +554 +2619 +4028 +1961 +1533 +19 +192 +16 +13093 +43 +10 +9713 +43 +48 +13094 +357 +19 +3 +48 +13095 +1021 +13096 +1018 +4982 +491 +43 +989 +2 +48 +416 +2395 +13097 +13098 +14 +2019 +349 +13099 +13100 +1901 +237 +9987 +13101 +694 +3543 +140 +13102 +13103 +4765 +2310 +14 +493 +13104 +1513 +43 +13105 +647 +19 +665 +4028 +188 +1817 +13106 +8249 +57 +13107 +303 +13108 +66 +13109 +13110 +12 +43 +13111 +2 +284 +741 +5780 +48 +237 +34 +14 +872 +48 +984 +57 +13112 +48 +2181 +974 +48 +1423 +13113 +2 +43 +1605 +13114 +13115 +13116 +13117 +48 +2 +872 +13118 +35 +613 +554 +48 +77 +4380 +13119 +15 +201 +11224 +14 +12987 +43 +13120 +13121 +35 +6484 +13122 +43 +13123 +48 +13124 +712 +6251 +137 +13125 +13126 +48 +32 +1765 +35 +12987 +14 +11702 +13127 +43 +13128 +43 +13129 +13130 +13131 +493 +5293 +1738 +13132 +12987 +77 +237 +13133 +13134 +13135 +225 +2733 +43 +48 +13011 +13136 +249 +13137 +4960 +2561 +13138 +237 +43 +2513 +13139 +13140 +9 +597 +13141 +43 +303 +10 +3 +13142 +13143 +411 +19 +303 +8867 +377 +305 +13144 +13145 +1232 +13146 +616 +13147 +13148 +1364 +43 +13149 +892 +13150 +43 +554 +13151 +43 +2463 +4461 +43 +13152 +317 +1612 +48 +1013 +14 +13153 +11498 +1224 +43 +14 +43 +14 +178 +13154 +13155 +188 +43 +2733 +13156 +849 +10365 +13157 +686 +936 +43 +13158 +43 +201 +13159 +13160 +464 +48 +13161 +13162 +13163 +13164 +5827 +48 +13165 +13166 +2697 +12893 +20 +13167 +13168 +13169 +5318 +196 +13170 +13171 +7449 +13172 +13173 +1051 +872 +13174 +13175 +13176 +89 +8248 +14 +1214 +13177 +13178 +1356 +2577 +5659 +48 +6595 +13179 +305 +741 +1384 +48 +43 +43 +13180 +43 +13181 +13182 +373 +1377 +2035 +11762 +13183 +13184 +13185 +13186 +13187 +348 +13188 +112 +13189 +14 +13190 +2 +13191 +741 +2064 +13192 +13193 +43 +1232 +13194 +9 +1823 +242 +11822 +1051 +13195 +20 +13196 +13197 +2356 +13198 +1120 +2835 +13199 +155 +13200 +13201 +13202 +741 +48 +464 +2239 +13203 +13204 +2593 +13205 +8849 +2239 +13206 +13207 +1335 +13208 +9232 +13209 +14 +13210 +4730 +2064 +209 +13211 +77 +13212 +741 +15 +13213 +13214 +12203 +10262 +3 +7595 +11428 +13215 +9 +2577 +43 +13216 +98 +20 +43 +1612 +286 +397 +13217 +14 +14 +6341 +5780 +13218 +46 +13219 +48 +13220 +3059 +5169 +13221 +13222 +4980 +35 +57 +692 +1559 +736 +13223 +32 +491 +13224 +7137 +13225 +845 +43 +13226 +13227 +1655 +43 +11482 +13228 +13229 +1428 +554 +99 +13230 +2 +5780 +1244 +14 +1229 +98 +915 +13231 +13232 +13233 +201 +1169 +13234 +872 +2919 +13235 +554 +48 +13236 +323 +13237 +13238 +13239 +13240 +48 +16 +13241 +741 +13242 +13243 +2414 +4536 +48 +12807 +554 +2 +11762 +32 +43 +11593 +13244 +3709 +13245 +13246 +13247 +13248 +12203 +35 +5833 +77 +13249 +35 +286 +13250 +14 +2131 +2042 +13251 +10 +250 +1559 +13252 +1296 +13253 +13254 +1091 +13255 +13256 +12987 +1018 +48 +13257 +14 +13258 +354 +13259 +13260 +43 +43 +43 +13261 +2064 +13262 +13263 +6874 +480 +5780 +5212 +1612 +590 +8367 +2769 +528 +104 +43 +13264 +692 +1013 +14 +209 +13265 +6123 +613 +13266 +43 +209 +13267 +248 +7855 +6732 +9 +14 +176 +13268 +213 +323 +43 +13269 +736 +48 +66 +373 +13270 +7032 +13271 +13272 +13273 +13274 +11754 +13275 +10239 +13276 +5780 +272 +48 +13277 +13278 +13279 +11754 +13280 +1817 +13281 +303 +14 +873 +4 +1217 +13282 +13283 +13284 +13285 +13286 +4851 +155 +185 +13287 +13288 +13289 +13290 +13291 +13292 +43 +32 +13293 +286 +5992 +48 +13294 +13295 +48 +185 +2865 +849 +155 +237 +736 +6400 +13296 +1310 +11754 +1425 +13297 +13162 +13298 +411 +14 +48 +13299 +248 +13300 +13301 +13302 +358 +48 +13303 +8297 +13304 +13305 +10 +15 +5806 +13306 +43 +14 +13307 +43 +10362 +13308 +13309 +13310 +188 +13311 +13312 +13313 +13314 +13315 +554 +13316 +13317 +13318 +2035 +8076 +2697 +303 +13307 +48 +43 +3480 +764 +13319 +43 +349 +770 +9364 +13320 +13321 +13322 +1376 +13323 +915 +13324 +19 +5169 +741 +13325 +12460 +48 +43 +357 +13326 +13327 +19 +284 +1251 +14 +155 +286 +2 +57 +43 +43 +43 +13328 +13329 +741 +9 +13330 +416 +13331 +2804 +22 +1112 +11961 +5316 +554 +10 +13332 +43 +13333 +13334 +558 +4441 +305 +647 +741 +337 +48 +1051 +43 +13335 +12987 +598 +3546 +43 +13336 +13337 +13338 +13339 +13340 +971 +13341 +13342 +1082 +43 +48 +48 +13343 +13344 +6877 +13345 +13346 +237 +13347 +2733 +13348 +43 +14 +1710 +48 +11607 +13175 +707 +822 +2 +3995 +286 +13349 +3543 +323 +686 +1743 +32 +10 +13350 +237 +1107 +13351 +13352 +2 +1107 +13353 +210 +80 +2 +1234 +13354 +19 +48 +13355 +13356 +48 +616 +3425 +1745 +1693 +112 +176 +210 +43 +13357 +188 +554 +1300 +13358 +8946 +13359 +13360 +1232 +10 +554 +425 +13361 +13362 +48 +7226 +9402 +13248 +13363 +14 +13364 +2561 +1927 +13365 +19 +43 +13366 +19 +707 +6950 +13367 +48 +2591 +237 +48 +22 +9237 +13368 +1542 +3546 +14 +530 +2 +2804 +1889 +43 +13369 +15 +13370 +1082 +741 +5192 +1232 +9 +48 +13371 +43 +6441 +13372 +1531 +43 +89 +13373 +155 +1287 +795 +13374 +10 +248 +13375 +1716 +43 +43 +13376 +15 +2591 +284 +3251 +19 +213 +7945 +176 +10899 +48 +48 +8392 +43 +43 +647 +13223 +19 +4963 +43 +2012 +43 +48 +303 +248 +66 +57 +1232 +13377 +48 +2804 +43 +43 +1371 +13378 +12402 +5781 +416 +13379 +1141 +14 +13380 +185 +1232 +48 +20 +2 +13381 +13382 +197 +13383 +741 +13384 +14 +6484 +2768 +13385 +6940 +22 +13386 +647 +286 +11754 +13387 +317 +2 +13388 +1920 +237 +13389 +13390 +13391 +13392 +13393 +43 +43 +1514 +48 +1335 +43 +13394 +13395 +741 +13396 +15 +1543 +13397 +7998 +736 +13398 +3 +3284 +1710 +32 +5211 +43 +13399 +13400 +201 +15 +9451 +12807 +12563 +222 +237 +12987 +13401 +13402 +13403 +43 +8448 +13404 +32 +13405 +11330 +284 +48 +1011 +13406 +13407 +15 +43 +13408 +19 +286 +13409 +13410 +2347 +240 +178 +32 +14 +13411 +9 +35 +188 +48 +741 +8151 +13412 +13413 +13414 +872 +13415 +590 +13416 +32 +1817 +13417 +3279 +2804 +13418 +10356 +13419 +14 +5022 +13420 +5065 +13421 +13422 +48 +590 +1051 +806 +282 +13423 +284 +5080 +464 +3406 +7739 +1384 +14 +2084 +13424 +8367 +43 +272 +1425 +1112 +13425 +43 +9258 +43 +13426 +43 +13427 +155 +13428 +560 +2 +1010 +13429 +12807 +13430 +13195 +13431 +13432 +13433 +13434 +13435 +209 +13436 +286 +3317 +48 +13437 +5780 +4055 +48 +323 +201 +13438 +22 +7855 +13439 +2 +13440 +13441 +3452 +13442 +13443 +5780 +342 +13444 +48 +486 +286 +13445 +171 +770 +13446 +13447 +2550 +48 +13448 +1577 +1399 +13449 +13450 +43 +1226 +13451 +48 +1051 +209 +43 +10 +989 +7836 +48 +48 +13452 +13453 +279 +13454 +286 +13455 +560 +43 +13456 +13457 +39 +3546 +13458 +4388 +12402 +3546 +1203 +109 +2330 +188 +179 +13459 +13460 +43 +4963 +15 +32 +13461 +13462 +4747 +736 +13463 +43 +2944 +1716 +13464 +13465 +5933 +491 +11817 +13466 +12372 +13467 +13468 +13469 +115 +19 +13470 +1847 +13471 +13472 +1232 +19 +971 +48 +32 +4257 +13473 +13474 +13475 +892 +10 +583 +590 +12926 +43 +14 +13476 +7208 +13477 +3066 +13478 +13479 +13480 +4806 +13481 +13482 +647 +13483 +2029 +13484 +13485 +48 +48 +13486 +13487 +13488 +13489 +11762 +1920 +8893 +32 +14 +43 +13490 +13491 +554 +43 +1112 +13492 +5318 +13493 +13494 +13394 +2 +43 +43 +1048 +13495 +7053 +13496 +13497 +1384 +188 +13498 +4716 +4313 +5659 +43 +13499 +13500 +13501 +11593 +13502 +13503 +13504 +179 +48 +48 +4020 +13505 +13506 +1765 +38 +4125 +2865 +13507 +13508 +1566 +43 +14 +10 +3546 +4934 +13509 +13510 +3 +10 +1425 +48 +13511 +13512 +13513 +237 +1481 +13514 +2165 +2427 +188 +464 +13515 +237 +13516 +13517 +13518 +1617 +188 +43 +13519 +13520 +58 +13521 +1232 +13522 +8244 +1562 +590 +13523 +13524 +1454 +484 +11238 +1244 +4 +4313 +13525 +36 +89 +19 +2896 +13526 +13527 +12310 +43 +286 +43 +4388 +13528 +48 +1021 +6990 +32 +1632 +43 +11822 +1696 +5780 +13529 +46 +2 +13530 +648 +43 +379 +2019 +4388 +7544 +379 +2593 +13531 +597 +184 +13532 +358 +13533 +13534 +13535 +13536 +193 +13537 +13538 +13539 +13540 +8188 +2136 +13541 +43 +10 +13542 +13543 +2577 +464 +66 +13544 +48 +13545 +2314 +677 +13546 +2913 +13547 +5780 +13548 +11483 +167 +13549 +1710 +13550 +284 +13551 +13552 +43 +248 +13553 +872 +14 +1559 +48 +3546 +14 +705 +14 +2463 +1107 +43 +733 +14 +48 +13554 +13555 +10280 +493 +13556 +1529 +13557 +2944 +4806 +284 +13558 +5009 +936 +155 +1425 +43 +13559 +272 +13560 +25 +213 +13561 +43 +13361 +13562 +2550 +3546 +43 +872 +13563 +48 +13564 +43 +32 +13565 +13566 +13567 +770 +10028 +2 +43 +10950 +237 +19 +13568 +13569 +43 +464 +8102 +13570 +799 +1901 +43 +14 +16 +13571 +12093 +13572 +112 +43 +210 +13573 +14 +790 +13574 +14 +1612 +48 +29 +1044 +484 +196 +770 +32 +155 +3408 +9948 +13575 +9 +13576 +2911 +10 +646 +13577 +1013 +12808 +13578 +57 +13579 +237 +2 +1415 +564 +8460 +11039 +184 +665 +43 +48 +43 +209 +13580 +13581 +3759 +736 +13582 +43 +13583 +5837 +14 +13584 +4762 +13585 +13586 +19 +48 +13587 +474 +209 +6188 +286 +1765 +48 +647 +43 +12372 +43 +210 +13588 +13589 +6776 +13590 +222 +7887 +13591 +13592 +43 +13593 +931 +828 +1514 +279 +6671 +647 +13594 +13595 +741 +13596 +48 +13597 +13598 +13599 +48 +2 +3354 +43 +2591 +13600 +13601 +14 +13602 +13603 +13604 +1920 +14 +13605 +369 +8230 +9633 +2053 +13606 +13607 +29 +4764 +43 +1100 +43 +15 +14 +13608 +1157 +43 +13609 +12788 +237 +13610 +248 +32 +13611 +397 +4677 +13612 +13613 +13614 +13615 +13616 +4028 +337 +13617 +14 +2 +11754 +13618 +11754 +6595 +13619 +48 +284 +2 +13620 +48 +736 +12299 +8569 +13621 +2919 +7048 +2251 +43 +13622 +303 +48 +13623 +20 +3732 +3546 +48 +13624 +237 +1655 +647 +48 +2954 +13625 +2213 +13626 +13627 +13628 +333 +8614 +13629 +708 +48 +13630 +272 +13631 +2560 +9560 +13632 +48 +188 +43 +6874 +4900 +66 +1870 +13633 +13634 +13635 +13636 +19 +48 +237 +3 +13637 +99 +48 +43 +13638 +2093 +188 +13639 +13640 +57 +13641 +13642 +6720 +3745 +533 +16 +646 +3546 +13643 +13644 +20 +397 +1529 +1961 +2040 +14 +15 +48 +48 +399 +13645 +14 +415 +188 +7291 +665 +13646 +13647 +1566 +13648 +13649 +201 +13650 +13651 +2577 +5780 +301 +14 +2 +9 +48 +13652 +4028 +13653 +13654 +1684 +13030 +10003 +48 +19 +1425 +14 +554 +741 +13655 +10880 +96 +1502 +1992 +3546 +43 +13656 +1765 +43 +13657 +13658 +13659 +7517 +13660 +48 +14 +13661 +1234 +19 +13662 +272 +43 +13663 +6214 +13664 +379 +13665 +13666 +201 +13667 +43 +48 +13668 +11482 +13669 +13670 +2790 +3546 +43 +13671 +13672 +14 +491 +4684 +13673 +13674 +3546 +13675 +13676 +3546 +354 +48 +13677 +13678 +764 +43 +4963 +3507 +13679 +48 +873 +13680 +10 +13681 +13682 +4028 +4028 +13683 +13684 +12987 +13685 +1559 +13686 +13687 +13688 +13689 +1538 +237 +1011 +2865 +861 +142 +13690 +1082 +616 +13691 +155 +13692 +43 +357 +5005 +1310 +13693 +4174 +32 +5577 +2260 +14 +616 +784 +13694 +11754 +12999 +12824 +2804 +185 +43 +48 +399 +9 +1364 +305 +1049 +286 +13179 +13695 +43 +11754 +1335 +48 +237 +13696 +48 +1066 +6095 +13697 +13698 +12479 +286 +2309 +43 +415 +13699 +1203 +764 +48 +155 +554 +13700 +4364 +861 +46 +15 +13701 +13702 +57 +14 +13703 +2804 +533 +104 +3546 +19 +48 +13390 +155 +48 +12987 +13704 +486 +13705 +19 +155 +6214 +3908 +10649 +13706 +14 +13707 +43 +11754 +13708 +14 +13709 +13710 +43 +493 +373 +13711 +57 +1578 +13712 +13713 +2 +43 +48 +1428 +13714 +2 +286 +13715 +286 +1655 +19 +564 +13716 +4313 +13717 +43 +13718 +13719 +19 +140 +1232 +2537 +3546 +13720 +2668 +3 +13721 +32 +48 +155 +13722 +317 +1765 +357 +13282 +13723 +11508 +13724 +13725 +43 +6950 +13726 +872 +77 +13727 +13728 +6222 +13729 +741 +17 +13730 +3354 +12987 +13731 +48 +48 +237 +1604 +13732 +80 +1562 +1577 +873 +32 +13733 +48 +9112 +554 +13734 +13735 +377 +43 +1920 +13566 +1514 +764 +12397 +13736 +13737 +13738 +13739 +13740 +3842 +892 +13741 +2769 +13742 +13743 +1013 +13744 +13745 +43 +2064 +48 +13746 +616 +2733 +8102 +13747 +650 +2 +43 +13748 +13749 +4 +1612 +142 +1051 +12067 +13750 +323 +188 +1425 +43 +13751 +19 +13752 +13733 +15 +237 +13753 +155 +13754 +2302 +7053 +19 +13755 +1091 +10 +703 +286 +13756 +13757 +13758 +2804 +4357 +3546 +14 +13759 +7276 +43 +43 +1026 +225 +33 +791 +13760 +4522 +286 +178 +11762 +13761 +13762 +13763 +7431 +9 +43 +237 +13764 +13760 +3546 +13765 +43 +13766 +13767 +13768 +943 +57 +11593 +14 +13769 +98 +43 +1112 +20 +179 +43 +1961 +464 +13770 +13771 +13772 +43 +13773 +3768 +43 +554 +176 +2309 +13774 +13775 +12932 +48 +13776 +13777 +13778 +1051 +2253 +13779 +958 +13780 +43 +13781 +13782 +1091 +12590 +98 +237 +616 +13783 +2 +13784 +13785 +13786 +464 +741 +13787 +185 +13788 +13789 +13790 +237 +7960 +13791 +43 +5780 +43 +20 +12407 +484 +13792 +13793 +13794 +7328 +5780 +43 +43 +3395 +237 +13795 +1543 +112 +915 +1154 +286 +286 +13796 +48 +22 +13797 +11362 +13798 +439 +13799 +1090 +228 +13800 +13801 +43 +25 +736 +35 +185 +1100 +9705 +12987 +3546 +43 +13311 +14 +13205 +741 +29 +1465 +13802 +237 +6182 +2 +57 +13803 +13804 +14 +13805 +237 +13806 +213 +48 +19 +13566 +13260 +237 +7855 +13807 +13808 +1012 +13809 +13810 +13811 +13812 +248 +2804 +1870 +13813 +48 +2310 +13814 +6915 +13802 +13815 +13816 +915 +2 +13817 +5438 +13818 +2 +337 +43 +4217 +305 +32 +1425 +12159 +248 +13819 +13820 +12596 +152 +213 +13393 +13821 +13822 +9 +13823 +14 +4943 +48 +6638 +13824 +13825 +43 +1920 +13826 +152 +43 +112 +14 +13827 +13828 +48 +13829 +2 +5780 +11158 +703 +4745 +1287 +43 +201 +13830 +20 +248 +13831 +48 +11670 +29 +554 +13832 +43 +554 +286 +7891 +13833 +13834 +13835 +3546 +5418 +13836 +249 +13837 +2 +13838 +15 +274 +7855 +36 +399 +13839 +402 +1217 +19 +7960 +741 +48 +358 +14 +12746 +8418 +209 +13840 +43 +13841 +13842 +2919 +13843 +43 +13844 +11754 +13845 +1224 +564 +48 +57 +12220 +6371 +13846 +554 +13847 +2 +43 +43 +43 +1384 +2804 +13848 +13849 +13850 +43 +13851 +13852 +152 +411 +237 +915 +13853 +48 +237 +13854 +13855 +2334 +286 +237 +7137 +43 +14 +188 +19 +22 +2694 +104 +14 +11762 +616 +213 +2697 +48 +4055 +10 +13856 +13857 +13858 +48 +237 +48 +4634 +14 +13859 +13643 +303 +10 +1224 +248 +397 +48 +12600 +237 +13860 +303 +554 +5780 +1112 +48 +13861 +13459 +32 +303 +303 +48 +13862 +137 +13863 +13864 +13865 +13866 +13867 +43 +13868 +590 +13869 +1502 +736 +554 +2029 +14 +13870 +13871 +1719 +13872 +915 +3546 +13873 +357 +43 +176 +13874 +43 +1224 +915 +3546 +13875 +13876 +13877 +13878 +1051 +13879 +1232 +13880 +915 +237 +3546 +13881 +3546 +1115 +77 +12642 +2 +495 +1442 +104 +2762 +19 +13882 +13883 +32 +13884 +13885 +286 +14 +7208 +2414 +11762 +827 +3066 +13886 +970 +323 +13887 +13888 +4963 +13889 +57 +13890 +13891 +14 +13892 +3415 +3003 +20 +48 +3 +822 +152 +1112 +57 +13893 +48 +13894 +32 +48 +3546 +13895 +43 +1513 +43 +155 +1011 +20 +13896 +155 +1700 +13897 +43 +16 +13898 +104 +720 +5601 +13899 +13900 +13901 +13902 +357 +13903 +13904 +13201 +13905 +286 +48 +13906 +10287 +2579 +35 +11800 +43 +13907 +741 +694 +32 +1517 +13908 +13909 +237 +237 +13910 +358 +20 +13911 +13912 +13913 +1716 +331 +647 +2314 +13914 +13915 +48 +13916 +8826 +14 +13917 +19 +13918 +48 +13919 +13920 +22 +1364 +1051 +43 +349 +13921 +104 +43 +1091 +13922 +1224 +554 +14 +624 +15 +299 +13923 +272 +14 +13924 +13925 +1091 +647 +2 +3546 +48 +13926 +616 +43 +11762 +13927 +13928 +188 +13929 +369 +1100 +13930 +13931 +19 +8392 +13932 +19 +13933 +3553 +8378 +14 +3973 +155 +14 +185 +13934 +43 +2430 +14 +8098 +43 +19 +1153 +13935 +13936 +373 +13937 +799 +237 +13938 +3546 +13939 +11907 +686 +13940 +13941 +3570 +43 +43 +33 +13942 +1753 +13943 +1514 +495 +590 +6505 +13944 +13945 +13946 +286 +1817 +13947 +13948 +4963 +165 +373 +3323 +155 +13949 +12120 +13950 +5202 +13951 +48 +1920 +57 +48 +13952 +13953 +13954 +15 +1229 +13955 +2463 +66 +5990 +43 +10642 +209 +43 +13956 +7855 +36 +13957 +48 +13958 +3546 +13959 +14 +7991 +48 +43 +1082 +1920 +333 +2694 +155 +43 +48 +13960 +13961 +13962 +1232 +43 +14 +1632 +6877 +1109 +43 +12267 +13963 +13964 +10 +11754 +398 +416 +13965 +13966 +13967 +13968 +19 +13969 +43 +2414 +13970 +3382 +583 +43 +43 +209 +12180 +48 +13733 +8867 +13971 +741 +14 +13972 +188 +13973 +43 +915 +2577 +13974 +14 +13975 +43 +6741 +12913 +43 +13976 +237 +48 +112 +2 +3439 +13977 +13978 +5601 +2314 +13979 +10880 +3421 +2 +13980 +13981 +13982 +5344 +14 +10 +14 +188 +13983 +13984 +14 +305 +10 +11341 +15 +13985 +13986 +1790 +43 +13987 +2561 +677 +25 +2 +12987 +14 +13988 +13989 +1513 +2213 +9738 +3546 +13990 +9 +13991 +57 +13992 +11754 +6785 +11308 +2733 +104 +237 +12987 +2891 +958 +1229 +11754 +1208 +14 +112 +46 +259 +13993 +237 +13179 +48 +48 +554 +14 +48 +1765 +4364 +188 +48 +13994 +7336 +112 +152 +13995 +3 +1232 +13996 +13997 +3916 +237 +286 +14 +43 +741 +13998 +554 +11762 +6766 +5973 +43 +13999 +278 +14000 +66 +1696 +365 +14001 +152 +14002 +10 +9739 +14003 +14004 +43 +14005 +14006 +43 +3279 +19 +14007 +1612 +14008 +2 +14 +14009 +2446 +48 +57 +15 +352 +14010 +14011 +48 +13464 +286 +14 +48 +1817 +42 +14012 +2 +43 +19 +14013 +14014 +14015 +2 +2 +1224 +14016 +14 +14017 +14018 +2733 +48 +741 +5780 +1203 +48 +14019 +14020 +14021 +13935 +14 +237 +4411 +2 +32 +323 +14022 +2457 +3406 +3250 +112 +43 +48 +751 +14023 +13935 +14024 +3546 +19 +6950 +13336 +2012 +48 +14025 +13325 +188 +14026 +14 +1224 +11754 +14027 +3452 +152 +1560 +379 +736 +14028 +610 +4227 +14029 +14030 +286 +741 +48 +48 +14031 +14032 +48 +14033 +3989 +14034 +14035 +7799 +13179 +9 +14036 +14037 +14038 +14039 +14040 +14041 +53 +430 +14042 +8512 +14043 +345 +1870 +286 +14044 +707 +13929 +989 +12402 +19 +237 +14 +19 +2153 +554 +14045 +14046 +14047 +6463 +278 +14048 +14049 +57 +14 +272 +43 +1364 +286 +446 +14050 +14051 +3958 +14052 +5981 +14053 +14054 +43 +14055 +15 +554 +14056 +1637 +439 +11471 +2944 +14057 +14058 +36 +971 +237 +237 +14059 +14060 +14061 +6054 +14062 +14063 +43 +3546 +14064 +14065 +14066 +14067 +5780 +48 +19 +14068 +305 +3484 +15 +3546 +14069 +19 +10230 +14070 +14071 +1012 +138 +10230 +14072 +5780 +104 +1991 +20 +43 +764 +14073 +57 +14074 +14075 +14076 +648 +3546 +14077 +48 +7835 +48 +2042 +2058 +14078 +43 +137 +14079 +3 +48 +14080 +2197 +14081 +14 +16 +14082 +349 +14083 +14084 +14085 +14086 +14 +13452 +2 +6518 +5627 +43 +590 +14087 +2694 +48 +48 +9410 +554 +3310 +57 +910 +137 +9543 +48 +14088 +14089 +43 +486 +14090 +14091 +14092 +17 +14093 +741 +43 +8727 +6776 +286 +648 +14094 +764 +3546 +4398 +5780 +872 +3 +196 +14 +43 +1220 +43 +3239 +176 +14095 +14096 +745 +14097 +245 +14098 +43 +14099 +14100 +14101 +1232 +14102 +1559 +142 +14103 +2577 +14104 +140 +14105 +2314 +354 +14106 +43 +14107 +14108 +14 +237 +14109 +237 +13843 +323 +4855 +14110 +14111 +2804 +1112 +14112 +14113 +1203 +14114 +14 +1821 +305 +43 +237 +14115 +286 +10880 +1100 +2430 +14 +4971 +14116 +13772 +57 +237 +14117 +12404 +14 +14118 +397 +137 +1566 +19 +12893 +1056 +14119 +19 +317 +43 +237 +373 +48 +491 +2988 +14120 +14121 +77 +14122 +7357 +764 +14123 +887 +1374 +14124 +495 +209 +1800 +14125 +5192 +20 +3287 +14126 +179 +11754 +14127 +5041 +19 +14128 +48 +7855 +14129 +1232 +14130 +5556 +14131 +28 +286 +48 +14132 +13913 +43 +14133 +14134 +13349 +14 +19 +14135 +683 +14 +14136 +43 +989 +57 +14137 +272 +14138 +237 +237 +2804 +354 +194 +2 +14139 +14140 +13282 +4461 +194 +3543 +53 +48 +19 +3 +43 +14141 +14142 +14 +48 +9400 +13842 +32 +14143 +210 +14144 +14145 +416 +19 +48 +5780 +14146 +66 +14147 +14148 +14149 +4963 +14150 +237 +8733 +43 +13390 +14151 +11754 +14152 +1011 +768 +8460 +14 +1710 +14153 +736 +14154 +136 +48 +43 +142 +20 +3546 +14155 +1229 +48 +14156 +14157 +536 +2035 +6341 +38 +14158 +185 +14159 +43 +3052 +317 +317 +2197 +3 +43 +2577 +43 +14160 +14161 +14162 +12555 +43 +14163 +19 +4990 +48 +35 +14164 +14165 +43 +1181 +14166 +548 +14167 +720 +14168 +14169 +178 +4278 +14170 +14171 +20 +14172 +1166 +43 +19 +43 +14173 +43 +12067 +379 +25 +2769 +14174 +3546 +14175 +14176 +284 +14177 +98 +14178 +827 +2015 +554 +284 +48 +1300 +8566 +43 +14179 +5780 +14180 +225 +14181 +14182 +48 +48 +1425 +1376 +9 +32 +9410 +213 +14183 +14174 +14 +237 +349 +48 +272 +188 +14 +12477 +958 +14184 +14185 +647 +6480 +10 +14186 +554 +14187 +201 +48 +7045 +2 +14188 +176 +915 +14189 +14190 +138 +14191 +14192 +19 +43 +14193 +10622 +57 +9688 +14194 +14195 +1287 +48 +4028 +14196 +5435 +2791 +48 +4634 +764 +43 +48 +971 +14197 +14198 +14199 +12456 +14200 +14201 +7817 +43 +237 +14202 +14203 +14204 +590 +14205 +6950 +20 +3066 +4028 +13685 +11421 +20 +3279 +14206 +14207 +14208 +20 +237 +3546 +14209 +7137 +213 +303 +1124 +20 +2804 +14210 +14211 +284 +43 +237 +57 +14212 +14001 +358 +48 +14213 +12987 +14214 +14215 +137 +7014 +155 +2316 +89 +14216 +15 +14217 +5169 +48 +3239 +286 +8994 +5780 +14218 +43 +19 +1175 +1010 +6950 +43 +14219 +48 +5949 +225 +14220 +14221 +22 +32 +14222 +733 +237 +14223 +43 +14 +14224 +303 +2 +1090 +14225 +14226 +14227 +14228 +9705 +14229 +14230 +14231 +14232 +48 +33 +14233 +286 +14234 +1927 +712 +720 +14235 +9 +4 +14236 +4730 +286 +736 +14237 +43 +323 +14238 +19 +536 +1870 +705 +12746 +305 +14239 +19 +43 +14240 +14241 +4852 +357 +14242 +14243 +14244 +248 +478 +13543 +8566 +7855 +112 +32 +14245 +2 +43 +14246 +14247 +14248 +14249 +286 +14 +647 +12937 +7256 +14250 +14251 +14252 +14253 +14254 +9 +14001 +13150 +14255 +6214 +14256 +14257 +272 +7855 +14258 +14259 +2841 +48 +4963 +14 +286 +43 +14260 +14261 +22 +14262 +536 +14263 +14264 +284 +14265 +248 +14266 +48 +337 +14267 +248 +3 +14268 +14 +248 +4263 +14269 +14270 +2600 +4053 +14271 +14272 +43 +14273 +19 +43 +201 +14 +14274 +16 +741 +14275 +14276 +14277 +1049 +2121 +1765 +2406 +2561 +337 +248 +43 +699 +342 +14278 +14279 +1710 +5582 +14 +14280 +14281 +32 +9918 +1224 +48 +8297 +14282 +48 +4570 +2316 +14283 +826 +4075 +57 +14284 +2 +14285 +14286 +14287 +1765 +14 +1604 +248 +48 +14288 +43 +48 +1425 +48 +14289 +14290 +1200 +1172 +14291 +822 +14292 +12402 +14293 +14 +19 +5243 +1992 +43 +286 +14294 +14295 +873 +14296 +48 +14297 +14 +1559 +14298 +2040 +14299 +14300 +14301 +6087 +2 +43 +14302 +14303 +43 +323 +14304 +1013 +152 +721 +14305 +10583 +5209 +425 +14306 +2349 +286 +237 +14307 +14 +14308 +14309 +14310 +14311 +14312 +14313 +14314 +57 +14315 +237 +48 +14316 +647 +8033 +14317 +1364 +14318 +736 +4226 +398 +14 +14319 +14320 +14321 +43 +165 +14322 +14323 +48 +408 +745 +915 +810 +14324 +155 +48 +43 +14325 +764 +14326 +72 +43 +9472 +48 +176 +14327 +14328 +14329 +590 +271 +43 +14330 +14331 +741 +5344 +12466 +3 +14332 +14333 +3546 +1655 +741 +14334 +14335 +2804 +19 +554 +155 +14 +14336 +1513 +14337 +14338 +20 +3546 +822 +43 +43 +64 +14339 +286 +6121 +5080 +14340 +775 +14 +4306 +14341 +2804 +14342 +8566 +14343 +3546 +3 +155 +10 +1385 +424 +14344 +14345 +14346 +720 +8428 +43 +14347 +14348 +14349 +2 +14350 +14351 +1013 +2314 +19 +12363 +43 +4637 +14 +1454 +14 +14352 +13748 +304 +14353 +29 +14354 +14355 +8554 +1228 +237 +43 +8188 +14356 +6363 +10 +14357 +764 +14 +123 +14358 +32 +4278 +9 +14359 +1415 +14360 +48 +15 +936 +14361 +14362 +14363 +14364 +14365 +741 +14366 +14367 +554 +3546 +14368 +6766 +15 +14369 +14370 +237 +14 +14371 +237 +248 +248 +14372 +19 +22 +14373 +32 +7522 +14374 +19 +14375 +4441 +9 +248 +14376 +14377 +303 +12343 +2804 +712 +11176 +43 +616 +3147 +14378 +3055 +14379 +155 +14380 +19 +19 +284 +9939 +823 +14381 +138 +14382 +19 +3743 +713 +14383 +14384 +14385 +3005 +14386 +43 +12013 +14387 +286 +1234 +14388 +140 +43 +155 +43 +305 +14389 +1203 +3546 +14390 +5770 +10 +554 +3886 +14391 +43 +14392 +14393 +19 +14394 +32 +14395 +11822 +1454 +741 +104 +5627 +8010 +14396 +14397 +14398 +2469 +14399 +3732 +14400 +14401 +14 +2324 +14402 +14403 +13823 +43 +14404 +14 +14405 +4192 +14406 +14407 +6728 +48 +14408 +14409 +3488 +14410 +720 +14411 +14412 +4388 +43 +14413 +57 +19 +48 +1696 +2308 +14414 +1343 +1524 +14415 +14416 +590 +14417 +89 +14418 +32 +647 +14419 +14420 +14421 +155 +590 +43 +9 +2847 +14422 +1465 +11966 +741 +14423 +14424 +770 +14425 +831 +4790 +14426 +14427 +474 +741 +282 +3546 +14428 +14 +14429 +14430 +1817 +5780 +14431 +14432 +1100 +5483 +48 +43 +14433 +1961 +5648 +2045 +14434 +14435 +14436 +48 +14437 +184 +43 +14 +13307 +48 +43 +14438 +11483 +14439 +14440 +14441 +140 +14442 +14443 +14444 +32 +14445 +286 +14446 +1540 +2463 +14447 +4020 +14448 +14449 +3711 +2 +196 +3546 +14450 +7176 +590 +14451 +14452 +1559 +14 +185 +137 +48 +764 +14453 +14454 +12404 +188 +48 +14455 +14456 +12746 +14457 +48 +14458 +1234 +57 +48 +14459 +337 +14460 +19 +14461 +14 +14462 +48 +3 +6970 +4765 +14463 +43 +14464 +590 +3976 +293 +104 +48 +14465 +4247 +14363 +43 +32 +57 +14466 +43 +286 +379 +590 +43 +14467 +57 +3216 +14 +12987 +14468 +14469 +19 +43 +12093 +43 +32 +60 +14470 +14471 +14472 +13798 +14473 +14 +7835 +14474 +13961 +13361 +286 +43 +3296 +2097 +19 +6294 +1258 +14475 +3757 +43 +4 +48 +1471 +14476 +647 +43 +590 +1051 +112 +1018 +14477 +14478 +14479 +5408 +237 +590 +36 +14480 +6595 +2944 +323 +43 +201 +3030 +19 +272 +14481 +188 +14482 +13566 +14483 +14484 +14485 +11762 +14486 +12479 +19 +712 +14487 +2561 +4917 +14488 +188 +48 +14489 +2561 +1559 +286 +14490 +357 +98 +9481 +436 +2561 +1425 +43 +1425 +32 +7283 +14491 +14477 +48 +6331 +14492 +155 +1710 +14493 +573 +764 +14494 +5483 +705 +14495 +14496 +14497 +554 +590 +57 +14 +57 +3543 +14 +48 +14498 +14499 +155 +397 +14500 +14501 +43 +11966 +14502 +5963 +2 +14503 +14 +14504 +14505 +3768 +43 +14506 +11762 +493 +14507 +14508 +3353 +3976 +2835 +11817 +43 +859 +10764 +2042 +14 +57 +1049 +12987 +12351 +3239 +48 +14509 +736 +196 +554 +1385 +14510 +14511 +712 +7183 +20 +14512 +8994 +14513 +2064 +14514 +14515 +1823 +43 +5739 +1617 +14278 +14363 +19 +14516 +19 +1859 +14517 +14518 +14519 +614 +29 +14520 +14521 +665 +1829 +810 +14522 +48 +14523 +14524 +14525 +43 +14526 +14527 +38 +845 +2 +14528 +286 +57 +14529 +428 +14530 +1154 +9112 +4808 +14531 +4028 +14532 +536 +43 +43 +8205 +349 +14533 +14534 +19 +112 +14535 +1051 +13508 +3808 +10 +1013 +14536 +1637 +1109 +43 +14537 +14538 +2039 +43 +590 +43 +14539 +3546 +14540 +14541 +6011 +14 +1011 +43 +14 +11740 +349 +14542 +590 +14543 +33 +20 +484 +48 +2459 +5318 +14544 +14 +1021 +872 +14545 +14546 +1710 +14547 +707 +14548 +112 +286 +48 +14549 +8263 +1051 +3 +48 +10137 +43 +12013 +1901 +13361 +14550 +152 +554 +5780 +48 +770 +14551 +14552 +48 +14553 +2064 +14554 +2882 +14555 +14556 +14557 +14558 +14559 +14560 +2550 +14561 +14562 +745 +10789 +358 +7471 +8297 +3034 +43 +446 +322 +14563 +32 +958 +14564 +4918 +4364 +178 +14565 +14566 +493 +590 +14567 +14568 +741 +349 +14569 +48 +13361 +14570 +14571 +8566 +915 +14572 +590 +1291 +1154 +14573 +43 +14574 +14575 +43 +14363 +14576 +48 +14577 +590 +155 +14 +6439 +104 +14578 +5080 +14579 +590 +872 +7855 +140 +14580 +14 +412 +14581 +9 +11762 +19 +6468 +48 +2 +14582 +1425 +48 +14583 +2463 +142 +14584 +7276 +323 +14585 +3546 +12987 +14586 +14587 +590 +14588 +14589 +14590 +14591 +14592 +14593 +3546 +352 +14 +14594 +5780 +76 +14595 +14 +14596 +14597 +20 +590 +14598 +155 +3252 +14599 +14600 +14515 +12987 +24 +14601 +8249 +14602 +43 +14603 +286 +12214 +915 +14604 +137 +3 +590 +14605 +8392 +43 +14606 +14607 +43 +14 +14 +14608 +14609 +14610 +14611 +43 +14612 +43 +14613 +3317 +188 +48 +11483 +6950 +14 +12987 +19 +14614 +14615 +647 +14616 +665 +1369 +692 +57 +19 +14617 +14618 +365 +9783 +14619 +14620 +14621 +14622 +14623 +590 +14624 +590 +3546 +14625 +188 +14626 +5162 +14627 +5601 +286 +849 +10993 +493 +14628 +14629 +2129 +286 +357 +12274 +14630 +14631 +14632 +9115 +590 +286 +1765 +1220 +8188 +48 +14633 +286 +43 +2040 +14634 +14 +14635 +43 +237 +11822 +14636 +140 +8218 +8457 +8297 +20 +8392 +43 +14637 +14638 +354 +7379 +14639 +20 +14640 +590 +1503 +14641 +379 +14642 +14643 +43 +155 +464 +286 +14644 +14645 +14646 +155 +764 +358 +20 +14647 +155 +237 +354 +14648 +10 +2035 +43 +57 +1605 +48 +14649 +741 +1217 +2 +14650 +19 +14651 +8740 +8896 +14652 +10 +14653 +14274 +14654 +2804 +13223 +14655 +14656 +2446 +12577 +590 +14657 +286 +43 +736 +14658 +14659 +43 +272 +964 +14660 +14661 +927 +5601 +3599 +14662 +46 +155 +14663 +14 +541 +554 +1716 +48 +7137 +43 +12661 +43 +1232 +3546 +741 +14664 +29 +48 +736 +590 +43 +338 +9900 +354 +14665 +14185 +12987 +14666 +2 +14667 +720 +8566 +2577 +14668 +5780 +9 +6499 +1765 +10 +590 +57 +249 +43 +14669 +155 +57 +1604 +14670 +14671 +14672 +14673 +14674 +14675 +14676 +1100 +3421 +14677 +741 +6439 +2828 +1617 +14678 +14679 +29 +7855 +12684 +12600 +43 +20 +4713 +19 +2577 +2577 +14680 +188 +14681 +14682 +19 +43 +3546 +14683 +354 +590 +9300 +2042 +788 +14684 +43 +19 +14685 +19 +323 +2476 +14686 +14687 +7341 +188 +284 +14363 +14688 +7653 +2430 +14689 +14690 +1637 +14 +85 +9210 +43 +14691 +14692 +48 +301 +14693 +14694 +11995 +4747 +12987 +14695 +140 +51 +66 +43 +10 +14696 +586 +2 +14 +284 +4963 +57 +20 +305 +303 +286 +703 +955 +1214 +14697 +10993 +48 +14698 +57 +43 +14699 +2324 +14604 +1082 +14700 +9 +43 +14701 +1056 +4873 +1612 +14702 +14703 +14704 +6809 +11428 +14705 +43 +14706 +2540 +48 +3553 +8297 +6903 +171 +48 +48 +14 +43 +43 +14001 +1066 +9078 +14707 +14708 +936 +137 +745 +7855 +14709 +14604 +14710 +14711 +590 +590 +3034 +14712 +13774 +590 +57 +19 +2042 +14713 +32 +590 +1232 +9278 +48 +13205 +647 +43 +1139 +12600 +11224 +48 +14714 +2197 +3 +43 +43 +590 +14715 +1220 +14716 +14717 +14718 +14719 +253 +19 +3546 +14720 +14721 +1696 +57 +48 +720 +554 +57 +14 +586 +14532 +2721 +14 +152 +14722 +5780 +14723 +14724 +48 +14725 +259 +14 +14691 +625 +770 +745 +3491 +4963 +43 +305 +2260 +6499 +8024 +14726 +764 +43 +5780 +43 +14727 +1229 +43 +14728 +2 +249 +14729 +14477 +2349 +14730 +1716 +1513 +590 +32 +3 +764 +1224 +14731 +671 +14477 +14732 +14 +2804 +237 +14733 +4227 +48 +251 +33 +155 +741 +14734 +14735 +590 +6011 +14736 +14737 +43 +554 +590 +14738 +14739 +14740 +14741 +14 +14742 +6741 +14743 +379 +14744 +57 +14745 +43 +14746 +14747 +14748 +373 +14749 +14750 +43 +736 +14751 +14752 +140 +741 +43 +3553 +7032 +14753 +1442 +14754 +9 +284 +6096 +10 +14755 +7897 +14756 +14757 +14758 +14759 +14760 +590 +1885 +484 +3553 +1049 +764 +9194 +14761 +14762 +4028 +1154 +533 +2287 +14763 +415 +19 +14764 +14765 +14766 +741 +9946 +13387 +43 +14767 +2577 +5134 +1051 +48 +8685 +590 +1425 +590 +2315 +14768 +1883 +14769 +2944 +720 +2859 +197 +272 +14770 +14771 +14 +14772 +590 +8188 +284 +379 +713 +14773 +590 +1415 +104 +14774 +209 +10 +9440 +303 +14775 +14695 +43 +14776 +2136 +14777 +14 +14778 +14779 +14780 +14477 +14781 +14782 +152 +43 +13375 +14494 +43 +188 +14 +14783 +9913 +14784 +14785 +20 +1232 +14786 +43 +48 +6106 +14787 +1115 +14788 +14789 +2 +2035 +14790 +14791 +741 +14363 +3543 +14792 +6766 +3764 +14793 +14794 +1716 +1181 +3553 +13223 +14795 +554 +43 +43 +14796 +484 +3484 +14797 +14798 +14799 +14800 +3 +2269 +14801 +1753 +1154 +14802 +14803 +14804 +138 +4518 +43 +14805 +14806 +1465 +536 +1013 +647 +14807 +14808 +14809 +14810 +14811 +14812 +14813 +1798 +14814 +10120 +590 +14815 +14816 +57 +14 +14817 +59 +14818 +14819 +12614 +1082 +358 +43 +9 +14820 +11696 +14821 +11754 +573 +8789 +5931 +3546 +14822 +14823 +11593 +14824 +2724 +42 +14825 +14826 +14827 +14828 +14829 +8297 +14830 +6341 +823 +14831 +43 +3251 +736 +14 +14015 +14832 +1107 +14833 +736 +1198 +14834 +14835 +14836 +14 +98 +19 +43 +57 +14837 +14838 +2 +1115 +14839 +14840 +48 +14841 +43 +155 +14842 +14843 +3844 +590 +14844 +43 +196 +14845 +14846 +19 +14847 +14848 +14849 +6917 +4532 +8217 +8116 +57 +14850 +305 +14851 +2593 +1051 +1547 +35 +14852 +14853 +352 +554 +2790 +152 +3842 +14854 +43 +14855 +778 +5601 +14856 +4088 +2164 +8566 +14857 +741 +13361 +11963 +590 +14858 +14859 +14860 +14861 +48 +11522 +32 +48 +32 +1817 +404 +80 +14862 +1824 +10 +43 +20 +6915 +590 +14863 +14864 +12404 +14415 +14865 +48 +10 +43 +14866 +736 +14867 +14868 +14869 +48 +14870 +14871 +14872 +554 +32 +1056 +43 +14873 +14874 +48 +2 +14875 +14876 +14877 +590 +1124 +14878 +14879 +14880 +12120 +14881 +14882 +1514 +43 +8610 +14883 +590 +14884 +3546 +1112 +14885 +12093 +43 +14886 +2859 +2764 +14000 +48 +590 +9922 +484 +43 +286 +915 +43 +1882 +4153 +14066 +14887 +155 +14888 +14 +590 +14889 +20 +48 +14890 +2733 +2243 +14891 +12987 +14892 +1369 +48 +590 +14893 +14894 +12005 +43 +14895 +43 +14896 +14897 +14 +14898 +14899 +1018 +590 +399 +14900 +237 +43 +590 +827 +14901 +14902 +14903 +14904 +14905 +14906 +14668 +201 +3 +10028 +3476 +14907 +397 +14908 +20 +10 +14477 +14909 +1261 +155 +14910 +48 +137 +14911 +14912 +14913 +14477 +10156 +2314 +43 +14914 +14 +464 +48 +14915 +185 +14916 +2865 +554 +14917 +11762 +43 +14918 +43 +14919 +286 +1232 +14 +155 +14920 +14921 +14922 +14923 +3 +142 +14924 +43 +14925 +10 +286 +14926 +14927 +48 +14928 +342 +9 +19 +14929 +14930 +2 +12246 +14931 +14932 +14933 +43 +14934 +7176 +2 +14935 +14936 +3546 +14 +2 +1732 +48 +14937 +32 +14938 +14939 +14940 +2804 +48 +19 +43 +3908 +14941 +14942 +14604 +14943 +14 +11822 +402 +5659 +554 +1228 +14944 +590 +11754 +7014 +8024 +7137 +122 +14945 +14946 +5650 +48 +11754 +14947 +48 +201 +869 +48 +10590 +43 +14948 +590 +48 +13985 +1920 +1891 +14949 +12055 +3546 +48 +14950 +14951 +43 +14952 +14953 +936 +14954 +4396 +15 +2308 +14955 +14956 +43 +590 +155 +14185 +43 +43 +590 +13349 +14957 +7509 +14958 +14959 +14960 +3546 +57 +14961 +1817 +892 +43 +14962 +14963 +14964 +19 +5080 +48 +11754 +43 +14634 +138 +14965 +14966 +14967 +14968 +736 +14969 +14970 +2764 +286 +14 +14971 +9 +2561 +1465 +14972 +12600 +14973 +14974 +286 +210 +142 +14975 +14976 +1226 +32 +1249 +3494 +14977 +1920 +590 +43 +14978 +554 +2463 +152 +20 +43 +32 +43 +11754 +590 +14979 +43 +14980 +32 +12600 +2577 +14981 +14982 +14983 +15 +14984 +590 +745 +1688 +14 +43 +2561 +2790 +14985 +43 +155 +3546 +3842 +3546 +14 +39 +14986 +43 +2029 +3949 +915 +590 +14987 +590 +286 +14988 +13361 +764 +1604 +43 +57 +14989 +104 +13570 +14332 +43 +1905 +14990 +10583 +4 +237 +849 +14991 +2 +14992 +4764 +872 +14993 +14994 +14995 +14996 +590 +1612 +19 +43 +14997 +112 +11762 +14998 +43 +590 +14999 +15000 +590 +2135 +9 +3546 +484 +10 +43 +590 +2035 +590 +15001 +15002 +155 +15003 +590 +590 +15004 +19 +43 +4028 +15005 +1804 +15006 +2125 +2047 +14 +15007 +15008 +10 +15009 +736 +48 +15010 +15011 +15012 +8512 +185 +32 +15013 +185 +13566 +43 +15014 +1513 +1229 +15015 +43 +15016 +14 +12987 +2 +3 +15017 +2804 +13576 +15018 +1716 +14 +15019 +15020 +12987 +15021 +2 +14001 +8098 +15022 +15023 +15024 +15025 +4760 +1364 +15026 +43 +2 +15027 +1578 +185 +323 +1244 +590 +15028 +43 +201 +590 +10356 +15029 +1232 +32 +7137 +213 +213 +15030 +15031 +6439 +15032 +14629 +15 +19 +15033 +305 +3546 +3743 +14 +15034 +32 +15035 +1244 +15036 +213 +3546 +1508 +15037 +2804 +286 +10147 +8896 +2 +48 +1112 +15038 +590 +590 +15039 +22 +337 +590 +764 +15040 +15041 +15042 +32 +140 +3 +590 +188 +15043 +9 +15044 +19 +15045 +597 +15046 +43 +4278 +2 +286 +43 +590 +741 +48 +20 +2 +15047 +43 +14327 +201 +3732 +112 +590 +48 +14477 +43 +14477 +15048 +14477 +15049 +1807 +43 +8188 +554 +15050 +15051 +13566 +354 +8220 +590 +1049 +3546 +15052 +590 +12605 +2064 +2 +11754 +2804 +43 +15053 +3546 +15054 +15055 +849 +12622 +590 +15056 +43 +43 +1889 +43 +590 +15057 +43 +14 +3546 +736 +6776 +43 +15058 +303 +15059 +764 +15060 +19 +1223 +491 +14 +15061 +1051 +720 +10222 +248 +48 +823 +5080 +286 +373 +764 +98 +590 +15062 +15063 +15064 +43 +15065 +14105 +35 +4760 +1578 +15066 +15067 +1745 +43 +6121 +43 +15068 +14973 +337 +32 +15069 +2 +15070 +197 +4487 +15071 +6950 +7291 +15072 +9705 +15073 +15074 +12600 +3546 +823 +500 +66 +43 +15075 +32 +15076 +15077 +13325 +3546 +1107 +15078 +4650 +15079 +15080 +15081 +13393 +15082 +15083 +43 +323 +15084 +15085 +48 +665 +1961 +1612 +13598 +15086 +15087 +6582 +15088 +13390 +32 +48 +15089 +1765 +17 +2314 +15090 +15091 +15092 +22 +137 +464 +590 +15093 +15094 +15095 +5041 +15096 +2 +15097 +2 +15098 +15099 +2 +43 +15100 +15101 +12862 +14 +647 +3543 +15102 +3553 +104 +2561 +29 +19 +15103 +12987 +3732 +15104 +57 +720 +15105 +15106 +43 +15107 +1524 +15108 +66 +1051 +15109 +104 +15110 +337 +616 +1716 +2314 +1920 +349 +15111 +9 +6950 +15112 +3546 +809 +22 +15113 +32 +15114 +15115 +15116 +15117 +98 +15118 +15119 +15120 +504 +15121 +15122 +15123 +14846 +15124 +14485 +736 +14610 +3546 +155 +155 +15125 +764 +15126 +43 +14 +15127 +597 +15128 +740 +15129 +15130 +14477 +1051 +15131 +5582 +705 +15 +15132 +57 +791 +10 +48 +213 +1051 +15133 +11321 +3470 +590 +2243 +15134 +1768 +11593 +8297 +8762 +14819 +15135 +349 +915 +15136 +1465 +15137 +15138 +176 +1377 +15139 +272 +3546 +590 +15140 +57 +3421 +15141 +15142 +6263 +48 +15143 +15144 +845 +15145 +48 +15146 +48 +15147 +14448 +15148 +2 +713 +6305 +9664 +15149 +590 +48 +4760 +15150 +15151 +745 +3626 +48 +12987 +590 +15152 +15153 +286 +48 +590 +57 +15154 +15155 +14 +665 +15156 +43 +2537 +3421 +284 +4518 +15157 +1870 +590 +15158 +764 +15159 +15160 +15161 +1604 +15162 +15163 +9766 +15164 +1208 +590 +20 +284 +2026 +14477 +286 +48 +12987 +43 +66 +15165 +14 +1617 +155 +2 +20 +647 +43 +15166 +15167 +411 +3546 +4116 +15168 +15169 +231 +48 +14571 +77 +48 +647 +15170 +12005 +15171 +1559 +19 +720 +15172 +19 +15173 +1578 +2042 +43 +590 +15174 +15175 +43 +1604 +707 +15176 +491 +14 +3 +15177 +15178 +15179 +20 +35 +790 +201 +14668 +464 +2728 +14185 +20 +15180 +1013 +6504 +15181 +647 +104 +4028 +2 +2 +1437 +14 +15182 +349 +48 +15183 +20 +15184 +178 +15185 +15186 +213 +12013 +5627 +57 +2882 +196 +6011 +222 +19 +15187 +15188 +9617 +15189 +5271 +590 +2064 +15190 +2260 +15191 +43 +155 +15192 +48 +493 +13387 +15193 +1712 +43 +15194 +14343 +43 +15195 +3594 +155 +48 +43 +15196 +2790 +15197 +57 +15198 +15199 +15200 +19 +15201 +15202 +15203 +14 +15204 +43 +15205 +15206 +259 +15207 +80 +98 +411 +15208 +15 +43 +705 +415 +22 +14509 +15209 +14 +15210 +2 +11754 +15211 +5780 +30 +48 +2975 +43 +1961 +861 +11754 +15212 +15213 +48 +2 +1578 +349 +823 +873 +19 +15214 +155 +141 +15215 +48 +43 +349 +15063 +19 +15216 +48 +1716 +2561 +15217 +15218 +1262 +741 +14 +15219 +15220 +1465 +8338 +245 +8230 +8392 +15221 +14 +15222 +11537 +66 +3317 +2239 +1765 +11482 +15223 +15224 +10659 +15225 +286 +15226 +15227 +15228 +43 +32 +14 +1091 +272 +15229 +43 +14219 +209 +43 +15230 +57 +48 +14603 +35 +15231 +15232 +541 +196 +1696 +15018 +48 +141 +286 +272 +155 +15233 +15234 +15235 +5614 +15236 +43 +32 +15237 +286 +5344 +201 +43 +15238 +369 +15239 +15240 +112 +15241 +15242 +15243 +15244 +15 +5271 +15245 +1696 +15246 +5627 +15247 +43 +15248 +3080 +274 +15249 +1870 +15250 +3553 +48 +720 +365 +15251 +155 +15252 +15253 +43 +10946 +3470 +15254 +15255 +48 +14957 +493 +1280 +15256 +9 +554 +7855 +48 +15257 +15258 +2 +15259 +169 +15260 +15261 +15262 +14 +15263 +397 +32 +15264 +15265 +13929 +57 +590 +15266 +1425 +15267 +43 +15268 +554 +15269 +590 +15270 +15271 +349 +43 +736 +155 +10 +9543 +15272 +1508 +15273 +590 +958 +15274 +15275 +3684 +15276 +741 +2790 +7855 +590 +3546 +43 +141 +342 +15277 +15278 +15279 +1508 +15280 +1612 +15 +48 +43 +3 +15281 +15282 +19 +15283 +15 +1013 +19 +15284 +14 +2064 +648 +43 +14603 +1942 +3732 +14 +25 +15285 +15286 +15287 +8357 +317 +1817 +736 +694 +15 +15288 +15289 +8297 +14770 +15290 +10574 +32 +15291 +722 +43 +5614 +15292 +6950 +590 +3546 +48 +305 +1013 +1011 +15293 +9 +60 +43 +15294 +15295 +15 +48 +9460 +15296 +9454 +3252 +14 +2446 +7855 +1612 +8188 +15297 +286 +764 +14 +57 +8188 +478 +3330 +823 +15298 +14888 +7977 +15299 +15300 +15301 +14604 +15302 +43 +15303 +3480 +48 +2804 +48 +15304 +13364 +43 +736 +19 +3915 +2042 +15305 +10933 +13961 +15306 +57 +15307 +484 +590 +286 +4028 +15308 +1870 +11428 +15309 +15220 +791 +2135 +12987 +48 +19 +43 +15310 +7356 +15311 +15312 +15313 +48 +15314 +29 +15315 +15316 +10 +590 +1091 +1027 +15317 +590 +12819 +15318 +15319 +15320 +4411 +15321 +12987 +9739 +8103 +19 +104 +554 +140 +590 +590 +15322 +1214 +15323 +720 +15324 +286 +590 +15325 +3546 +764 +15326 +15327 +5780 +19 +8566 +286 +741 +4406 +32 +1559 +48 +22 +14 +15328 +57 +210 +14 +15329 +590 +13248 +80 +647 +9472 +5683 +15330 +2410 +1051 +493 +104 +15331 +15332 +665 +155 +43 +36 +43 +15333 +1021 +15334 +43 +3546 +15335 +1655 +9 +89 +15336 +13913 +15337 +15338 +10 +590 +5780 +665 +11482 +48 +43 +590 +6624 +1765 +43 +14 +342 +14573 +1465 +15 +57 +14 +15339 +15340 +15341 +349 +15342 +11762 +15343 +286 +15344 +736 +2919 +20 +15345 +15346 +15347 +15348 +2804 +6915 +5764 +15349 +15350 +15351 +590 +32 +43 +15352 +15353 +43 +4088 +416 +1013 +15354 +590 +209 +2 +2499 +2430 +15355 +590 +528 +15 +15356 +48 +14957 +12987 +2804 +15357 +15358 +5780 +15359 +15360 +1234 +138 +15361 +15362 +495 +15363 +15364 +48 +2832 +15365 +15366 +3544 +15367 +14 +20 +3669 +48 +12987 +15368 +12402 +736 +2 +14001 +1116 +8297 +155 +887 +741 +9245 +4979 +104 +4278 +19 +1543 +112 +5561 +349 +9160 +272 +15369 +2 +15370 +10 +5415 +43 +19 +323 +4487 +8320 +15371 +12987 +48 +2865 +548 +15372 +15373 +138 +43 +15374 +590 +19 +554 +446 +155 +14 +14204 +1961 +2058 +15375 +15376 +1012 +14825 +43 +137 +19 +43 +24 +57 +15377 +43 +15378 +1648 +43 +9913 +15220 +12479 +15379 +6439 +301 +15380 +15381 +19 +286 +35 +15382 +9163 +6480 +15383 +5780 +15384 +15385 +1157 +286 +32 +5253 +4028 +2577 +9543 +3291 +373 +402 +15386 +736 +15387 +15388 +19 +15389 +278 +10356 +43 +1513 +15390 +1529 +15391 +14477 +3251 +15392 +48 +15393 +15394 +8566 +15395 +1991 +15396 +823 +15397 +48 +15398 +48 +2561 +15399 +19 +25 +164 +48 +48 +15400 +15401 +14 +14001 +112 +15402 +15403 +249 +15404 +1612 +2015 +4028 +43 +19 +43 +14 +57 +192 +373 +590 +15405 +57 +590 +15406 +3 +15407 +1326 +3559 +1376 +11822 +15408 +15409 +15410 +2550 +6671 +1011 +1091 +3105 +15411 +15412 +1153 +665 +15413 +15414 +19 +15415 +10230 +823 +15416 +15417 +892 +43 +15418 +14363 +15419 +15420 +15421 +15422 +3489 +48 +15423 +349 +1013 +2202 +7855 +7032 +15424 +12330 +15425 +12402 +48 +43 +15426 +1415 +1048 +19 +358 +57 +15427 +155 +2 +2314 +14477 +3546 +590 +1021 +104 +15428 +648 +764 +7215 +590 +15429 +2 +43 +4752 +354 +155 +19 +43 +43 +7154 +15430 +16 +764 +15431 +2769 +15432 +770 +13150 +48 +2 +590 +15433 +1606 +5963 +6874 +1870 +15434 +14 +80 +14 +15435 +138 +15436 +15437 +2476 +43 +590 +9 +15438 +15439 +736 +1870 +2 +15440 +1503 +15441 +48 +14 +48 +48 +15442 +12987 +3061 +2314 +3 +3417 +19 +1513 +1051 +15443 +590 +140 +6928 +1458 +554 +15444 +5204 +1091 +48 +15445 +14066 +590 +152 +15446 +493 +15447 +15448 +736 +6275 +14 +15449 +15450 +1310 +15451 +14477 +15452 +2764 +15453 +352 +5780 +8967 +1310 +15454 +15455 +872 +15456 +14604 +13045 +15457 +6965 +15458 +4821 +14816 +1013 +6776 +43 +43 +13566 +10 +4396 +48 +1716 +15459 +19 +201 +48 +15460 +15461 +10791 +19 +3842 +8205 +57 +15462 +15463 +5327 +377 +188 +15464 +15465 +15466 +48 +4897 +15467 +15468 +15469 +1364 +15470 +15471 +2056 +2029 +286 +6950 +15472 +15473 +2029 +48 +1425 +43 +43 +13424 +286 +32 +57 +590 +13904 +15474 +15475 +1013 +590 +10123 +8255 +9598 +12832 +873 +8244 +43 +5908 +15476 +736 +272 +9910 +15477 +237 +7855 +20 +15 +2197 +15478 +349 +1637 +8428 +6400 +43 +15479 +10306 +15480 +337 +1655 +14473 +248 +378 +14001 +104 +14 +237 +3066 +48 +1051 +201 +19 +15481 +48 +15482 +10 +15 +15483 +349 +590 +887 +2064 +98 +99 +14604 +15484 +15485 +15486 +15487 +8891 +15488 +337 +2769 +1232 +3 +15489 +15490 +43 +15491 +4056 +286 +286 +286 +15492 +286 +349 +379 +6145 +142 +514 +15493 +48 +104 +14477 +764 +14 +15494 +1021 +590 +13208 +10246 +15495 +15496 +14957 +14327 +2213 +492 +209 +15497 +48 +5833 +15498 +19 +15499 +43 +248 +14477 +15500 +43 +15501 +43 +15502 +15503 +1605 +741 +11762 +12987 +15504 +14477 +1612 +1566 +590 +2 +12936 +80 +15505 +1716 +15506 +15507 +137 +15508 +272 +15509 +686 +15510 +43 +286 +14647 +19 +15511 +741 +48 +15512 +15513 +3546 +14 +6817 +3906 +6054 +1765 +3119 +15514 +43 +15515 +15217 +29 +15516 +736 +3491 +12987 +1011 +3546 +10673 +43 +15517 +10 +736 +112 +15518 +8566 +14 +15519 +15520 +1889 +15521 +2457 +554 +201 +736 +43 +741 +1047 +1768 +15522 +66 +15523 +303 +43 +15524 +15525 +112 +286 +1612 +887 +15526 +15527 +15528 +669 +892 +48 +1912 +590 +15529 +66 +15530 +15531 +15532 +14 +2 +19 +188 +15533 +9 +15534 +15535 +104 +15536 +10723 +5780 +15537 +15538 +590 +1229 +43 +32 +48 +48 +213 +15539 +3 +5083 +590 +736 +15540 +323 +43 +15 +590 +15541 +736 +8269 +66 +15542 +2 +43 +12094 +15543 +15544 +15545 +8351 +872 +15546 +185 +15547 +15548 +4218 +15549 +4907 +15550 +554 +14 +590 +15551 +1011 +861 +5197 +14 +4752 +15552 +15553 +15554 +15555 +11369 +5496 +15556 +3034 +337 +528 +15557 +345 +272 +15558 +14 +155 +15559 +4747 +15560 +112 +14 +57 +13364 +590 +48 +357 +8566 +590 +14604 +2356 +1710 +15406 +15561 +4684 +1696 +1232 +15562 +15563 +15564 +11762 +2 +590 +15565 +14 +590 +14 +12987 +19 +14 +13781 +15566 +48 +112 +15567 +48 +736 +15568 +15569 +15570 +15571 +1465 +15572 +15573 +1508 +15574 +590 +14 +15575 +621 +14477 +248 +566 +15 +4414 +1243 +8053 +2260 +1992 +15576 +43 +15577 +48 +48 +736 +278 +14603 +647 +5162 +2356 +15578 +15579 +43 +2 +1154 +15580 +15581 +323 +98 +15582 +208 +15583 +11762 +7154 +15584 +1011 +48 +15585 +15586 +43 +32 +15384 +1423 +15587 +2463 +284 +1013 +15588 +13150 +15589 +8896 +736 +741 +2769 +15590 +10 +15591 +48 +440 +15592 +2281 +14 +14 +48 +48 +15593 +48 +2006 +15594 +14576 +286 +590 +590 +5304 +590 +15595 +10147 +2356 +15596 +15597 +46 +15598 +15599 +15600 +15601 +11176 +10 +1181 +15602 +5074 +590 +15603 +15604 +5089 +378 +2764 +13566 +15605 +15606 +14 +43 +14 +10 +6499 +14239 +46 +15607 +4963 +19 +647 +3543 +2 +15608 +14 +36 +2790 +15609 +3546 +13802 +15610 +3546 +15611 +48 +33 +15612 +19 +15613 +533 +5803 +15614 +48 +15615 +15616 +8460 +464 +13913 +43 +15617 +8297 +15618 +677 +14363 +15619 +155 +43 +448 +99 +1612 +14947 +2064 +12267 +15620 +176 +13361 +15621 +14816 +15622 +3 +15623 +15624 +15625 +43 +14 +3251 +15626 +15627 +15628 +15629 +15630 +43 +15631 +845 +1217 +15632 +43 +43 +15633 +1885 +15634 +15635 +590 +15636 +29 +43 +15637 +15638 +15639 +590 +7544 +15640 +43 +43 +43 +188 +741 +32 +3546 +2318 +43 +15641 +4302 +43 +699 +57 +10993 +6513 +590 +14416 +43 +3381 +4463 +14 +15642 +15643 +349 +15644 +514 +2330 +15645 +3598 +15646 +43 +15647 +15648 +15649 +14 +272 +10318 +15446 +379 +112 +15650 +104 +15651 +721 +8249 +2561 +590 +14 +3546 +48 +3546 +15652 +43 +15653 +15654 +13038 +1612 +590 +15655 +14896 +112 +554 +10016 +590 +20 +1049 +15656 +32 +12005 +299 +15657 +48 +155 +15658 +15659 +15660 +15661 +43 +11085 +9560 +11754 +15662 +3406 +15663 +464 +15664 +14 +764 +57 +15665 +48 +15666 +15667 +14185 +15668 +2561 +15669 +14 +590 +590 +8351 +15670 +48 +3546 +43 +43 +15671 +8789 +48 +201 +8916 +57 +188 +764 +15672 +48 +741 +2744 +15673 +15674 +1021 +152 +14434 +11754 +15675 +15676 +15677 +48 +11822 +526 +43 +15 +15678 +15679 +13760 +3546 +305 +3546 +9 +14477 +15680 +15681 +764 +57 +5420 +48 +590 +349 +196 +491 +43 +15682 +2409 +43 +15683 +43 +4341 +13361 +15684 +13807 +19 +971 +15445 +15685 +15306 +4341 +14477 +48 +15686 +43 +3546 +7276 +15687 +14 +15688 +15689 +358 +416 +155 +15690 +104 +43 +15691 +1961 +590 +15692 +15693 +15694 +13228 +249 +36 +573 +4376 +48 +43 +493 +48 +15695 +43 +1571 +352 +15696 +464 +6341 +19 +3 +1688 +736 +14001 +15697 +228 +15698 +5298 +15699 +15700 +1817 +15701 +2569 +15702 +11966 +15703 +722 +48 +2 +15704 +13150 +38 +14 +411 +15705 +10230 +15706 +286 +14660 +15707 +15708 +14604 +4411 +590 +15709 +15710 +8721 +15711 +845 +3553 +855 +415 +12987 +1870 +14 +14 +15712 +15713 +9 +15714 +15715 +10946 +43 +43 +590 +15716 +15717 +15718 +272 +590 +2804 +528 +14 +741 +43 +590 +48 +123 +12153 +43 +43 +15719 +15720 +5659 +3546 +15721 +286 +15722 +15723 +48 +14884 +15724 +13108 +3959 +15725 +15726 +14 +57 +1696 +1732 +4230 +43 +176 +15727 +15728 +15729 +14 +48 +15730 +822 +43 +15731 +15732 +11321 +931 +15733 +2 +1376 +10 +590 +15734 +554 +43 +15735 +349 +15736 +48 +15737 +15738 +590 +2 +5780 +155 +15739 +1060 +14604 +1542 +196 +14 +12077 +15740 +10 +2446 +741 +15741 +15742 +15743 +14477 +6400 +14604 +590 +3553 +14363 +32 +2859 +1112 +9994 +590 +349 +14363 +1444 +12987 +15744 +15745 +5438 +5305 +43 +590 +43 +2567 +19 +646 +15746 +15747 +590 +1514 +15748 +14 +19 +15749 +15750 +590 +15751 +15752 +19 +14 +4907 +249 +15753 +15754 +15755 +12202 +15756 +3849 +8867 +741 +764 +3842 +15757 +15622 +15758 +2 +1245 +15759 +3732 +741 +43 +57 +43 +15760 +2463 +15761 +590 +32 +14 +11483 +15762 +3291 +13271 +14 +1051 +15763 +15764 +3546 +15765 +2958 +590 +43 +7780 +12808 +14 +590 +32 +15766 +57 +3553 +590 +10 +7045 +43 +112 +259 +48 +43 +15767 +270 +15768 +3546 +43 +10 +15769 +43 +15770 +15771 +15772 +15773 +15774 +155 +15775 +48 +19 +15776 +15777 +43 +358 +19 +15778 +15779 +1637 +286 +1470 +590 +647 +286 +3353 +2700 +703 +358 +3546 +9 +15780 +140 +73 +14 +15781 +15782 +5627 +7291 +13528 +15783 +43 +5162 +14007 +14 +43 +15784 +43 +32 +43 +15785 +357 +48 +15786 +720 +7276 +15787 +303 +4790 +15788 +13208 +57 +2314 +13282 +15789 +15790 +2006 +14 +741 +11754 +5614 +19 +15791 +48 +15792 +15793 +5293 +14624 +736 +29 +3119 +20 +15794 +7137 +2 +213 +337 +590 +15795 +2009 +213 +3546 +15796 +4963 +249 +411 +5582 +284 +286 +5483 +15797 +15798 +1208 +1726 +12560 +14 +15799 +1066 +15800 +15801 +2064 +15802 +12 +7034 +15803 +13282 +5780 +7226 +15804 +15805 +1481 +2679 +1232 +15806 +5780 +15807 +15808 +4387 +15809 +1605 +2694 +15810 +14985 +15811 +983 +43 +8351 +15812 +2040 +15813 +15814 +10 +15815 +15816 +14532 +12013 +15817 +15818 +13508 +4808 +741 +14532 +15819 +43 +15820 +43 +14 +5780 +48 +15821 +15822 +1924 +14957 +15823 +15824 +590 +764 +13508 +48 +1765 +20 +43 +15825 +155 +155 +210 +741 +282 +43 +1291 +15156 +188 +15826 +379 +15827 +554 +15828 +19 +590 +15351 +15829 +349 +707 +48 +1751 +48 +15830 +29 +48 +3129 +554 +349 +13904 +15756 +43 +12807 +15831 +17 +57 +43 +15832 +292 +4907 +15833 +272 +4997 +15834 +15835 +15836 +3546 +1157 +15837 +48 +141 +15838 +15839 +337 +13913 +2804 +590 +15840 +554 +1251 +10117 +15841 +1524 +57 +14 +48 +48 +43 +9320 +48 +13282 +43 +15842 +15843 +15844 +764 +43 +358 +590 +1956 +15845 +15846 +43 +15847 +15848 +43 +14276 +48 +15849 +15850 +647 +12307 +509 +2600 +971 +15851 +1051 +15852 +9 +15756 +15853 +15854 +15855 +15856 +3 +1095 +32 +15857 +15858 +1300 +15859 +1232 +15860 +3484 +15861 +15862 +15863 +48 +590 +7014 +5088 +15864 +13492 +15865 +272 +20 +2197 +15866 +104 +43 +12621 +15867 +6518 +15868 +48 +15869 +15870 +8297 +349 +15871 +137 +155 +9418 +927 +15872 +6877 +48 +8701 +43 +15873 +3615 +286 +43 +14 +15874 +15875 +6741 +10 +1401 +15876 +43 +12987 +15877 +15878 +590 +14 +8566 +887 +12267 +349 +736 +15879 +15880 +43 +1234 +15881 +2064 +19 +15882 +15883 +15884 +15885 +3003 +20 +3546 +590 +11321 +11762 +15886 +13162 +741 +15887 +15888 +15889 +178 +43 +1224 +15890 +397 +1169 +15891 +590 +15892 +15699 +349 +1903 +99 +15893 +13361 +707 +43 +7601 +9 +1559 +15894 +43 +720 +9 +15895 +15896 +15897 +15898 +13150 +11754 +15899 +15900 +19 +15901 +1232 +32 +99 +1901 +1883 +10030 +15902 +19 +15903 +286 +14 +15904 +892 +7908 +1316 +13957 +15905 +176 +15906 +741 +15907 +15908 +590 +1465 +272 +43 +1912 +15909 +48 +15910 +48 +15911 +15912 +1917 +15913 +14 +2 +2 +15914 +15915 +15916 +11471 +590 +201 +112 +43 +5045 +60 +15917 +15918 +15428 +590 +15919 +7183 +57 +564 +15920 +29 +22 +22 +152 +14897 +2 +48 +1655 +80 +12534 +15921 +43 +15922 +720 +15923 +201 +15924 +15925 +5780 +15926 +14343 +1232 +15927 +19 +15928 +15929 +43 +32 +43 +48 +2459 +1385 +5344 +19 +209 +15930 +14 +286 +3546 +48 +43 +1465 +349 +4 +345 +155 +2476 +12120 +533 +2392 +15931 +13655 +15932 +43 +15933 +57 +1234 +19 +745 +1612 +2625 +14477 +12711 +43 +15934 +1961 +36 +2 +286 +15935 +14 +48 +317 +12772 +43 +590 +15936 +509 +493 +15937 +15938 +8733 +15939 +48 +2465 +4852 +590 +14 +590 +4230 +5827 +1169 +15940 +43 +3546 +15941 +15942 +15943 +15944 +3844 +1115 +15945 +1824 +590 +15946 +9 +15947 +14482 +590 +15948 +323 +43 +15949 +15950 +15951 +15952 +7236 +301 +5780 +15953 +15954 +15955 +15956 +15957 +14 +15958 +66 +1710 +590 +15959 +188 +15960 +1364 +415 +15327 +15961 +155 +15962 +15963 +15964 +48 +1234 +43 +15965 +20 +648 +15966 +5197 +3546 +48 +15967 +11483 +36 +15968 +15969 +1991 +15970 +155 +370 +48 +15971 +15972 +12329 +15973 +14 +1295 +2260 +286 +5780 +15974 +15975 +15976 +2029 +15977 +13361 +89 +15978 +15 +741 +7886 +1920 +590 +12987 +155 +141 +15979 +15980 +15981 +1223 +104 +43 +590 +15 +15982 +4179 +14553 +22 +15983 +14603 +15984 +5204 +19 +15985 +3546 +554 +9 +741 +15986 +142 +48 +15987 +9 +15988 +15989 +1154 +188 +15990 +736 +590 +590 +2 +48 +15991 +15992 +15993 +43 +43 +590 +536 +272 +6011 +15994 +43 +590 +1013 +152 +209 +6764 +48 +2 +272 +590 +9713 +8907 +15995 +1047 +15996 +5780 +478 +14185 +15997 +5344 +15998 +11321 +15999 +9 +6741 +12005 +16000 +1089 +16001 +16002 +16003 +764 +43 +8787 +14477 +16004 +16005 +10 +16006 +6764 +272 +16007 +14369 +112 +14 +20 +138 +48 +3417 +282 +2600 +4425 +286 +10 +590 +48 +3546 +2 +272 +720 +453 +14604 +707 +14477 +43 +11483 +1870 +286 +16008 +2762 +16009 +16010 +1578 +16011 +1295 +15699 +16012 +11762 +3546 +19 +16013 +16014 +3546 +1232 +13929 +16015 +15 +16016 +528 +1901 +349 +4928 +322 +43 +16017 +3546 +16018 +43 +43 +647 +16019 +16020 +20 +9 +16021 +16022 +11593 +2733 +16023 +16024 +1547 +16025 +16026 +112 +1449 +741 +16027 +1889 +720 +57 +43 +12397 +9 +16028 +16029 +11882 +736 +43 +20 +14 +19 +4524 +16030 +3610 +48 +5780 +43 +1371 +10 +16031 +1051 +15989 +16032 +188 +2577 +16033 +16034 +590 +15449 +6668 +19 +16035 +3 +16036 +48 +32 +213 +2694 +16037 +11762 +14 +7835 +16038 +14690 +16039 +13655 +12987 +16040 +16041 +16042 +152 +57 +536 +349 +1166 +3546 +14 +16043 +43 +14477 +14 +349 +19 +7357 +43 +43 +13282 +48 +16044 +16045 +8566 +1529 +35 +16046 +2117 +16047 +915 +16048 +590 +14843 +16049 +89 +2577 +16050 +2124 +16051 +19 +286 +43 +317 +751 +495 +707 +4961 +43 +57 +5208 +9965 +845 +16052 +48 +3976 +13973 +14 +43 +5780 +3417 +337 +10 +43 +2459 +16053 +2 +14884 +6287 +514 +1569 +4820 +597 +16054 +2286 +5119 +6950 +14 +272 +590 +16055 +3546 +16056 +3546 +1232 +5243 +2415 +399 +15778 +16057 +303 +16058 +2514 +13108 +274 +16059 +16060 +286 +43 +155 +16061 +5080 +16062 +48 +43 +16063 +3546 +11256 +16064 +16065 +12620 +43 +14 +16066 +16067 +8249 +2 +15 +2040 +5418 +16068 +16069 +305 +16070 +48 +4765 +16071 +185 +14 +583 +16072 +35 +16073 +155 +15 +16074 +16075 +16076 +8295 +16077 +509 +5351 +272 +16078 +272 +32 +590 +12987 +16079 +8351 +19 +495 +590 +11301 +14 +152 +140 +3546 +14 +6950 +397 +4280 +337 +286 +16064 +16080 +43 +2 +16081 +48 +43 +342 +57 +16082 +16083 +590 +19 +152 +3546 +16084 +694 +104 +3317 +12778 +5088 +16085 +16086 +16087 +43 +137 +16088 +16089 +8249 +775 +201 +9 +1082 +32 +3543 +16090 +14341 +16091 +16092 +57 +16093 +12560 +1012 +16094 +16095 +16096 +57 +210 +43 +533 +590 +16097 +43 +415 +29 +16098 +337 +3546 +14 +590 +14901 +43 +16099 +104 +5820 +16100 +239 +2035 +665 +16101 +16102 +1915 +14369 +590 +12987 +14363 +16103 +43 +16104 +209 +10003 +16105 +590 +1508 +590 +9 +16106 +16107 +3546 +3546 +586 +43 +48 +1232 +4982 +48 +16108 +16109 +152 +16110 +10004 +16102 +43 +16111 +10031 +16112 +48 +2042 +16113 +48 +16114 +1013 +349 +9 +16115 +16054 +16116 +6766 +43 +10 +16117 +16118 +3546 +872 +16119 +248 +1765 +19 +12996 +16120 +5780 +16121 +14 +16122 +2769 +16123 +16124 +590 +9583 +6766 +6214 +2316 +464 +15 +16125 +13282 +16126 +16127 +2764 +9 +323 +11211 +590 +3128 +647 +2550 +1425 +48 +16128 +22 +16129 +32 +16130 +16131 +349 +12277 +2356 +736 +15797 +590 +14 +5837 +4803 +16132 +14 +4982 +14 +16133 +16134 +8943 +16135 +6950 +16136 +349 +3546 +1021 +14 +20 +16137 +761 +16138 +16139 +16140 +1021 +764 +590 +43 +590 +16141 +16142 +213 +3368 +345 +248 +48 +647 +590 +14477 +16143 +16144 +16145 +16146 +13566 +16147 +590 +16148 +3638 +16149 +16150 +43 +14604 +1112 +736 +1765 +2 +14483 +12402 +16151 +16152 +13959 +15756 +57 +1107 +19 +12220 +20 +16153 +16154 +1765 +16155 +9 +583 +16156 +3 +16157 +43 +32 +16158 +16159 +872 +8351 +43 +16160 +2694 +16161 +647 +8758 +16162 +1559 +415 +14843 +11754 +16163 +686 +16164 +16165 +16166 +16167 +16168 +20 +43 +2 +12987 +16169 +1026 +43 +16170 +16171 +10 +16172 +43 +16173 +493 +142 +43 +10163 +16174 +349 +43 +43 +823 +16175 +13566 +13225 +15592 +43 +342 +12987 +16176 +16177 +14 +16178 +98 +16179 +10583 +16180 +13223 +32 +16181 +14604 +16182 +16183 +89 +1710 +9 +1214 +14 +4855 +16184 +222 +3139 +16185 +115 +48 +3546 +16186 +6950 +648 +48 +14 +38 +671 +16187 +1217 +16188 +349 +16189 +303 +16190 +16191 +16192 +16193 +10 +16194 +14604 +373 +16195 +1300 +286 +43 +20 +43 +741 +48 +16196 +3546 +640 +272 +12987 +828 +43 +16197 +16198 +3 +741 +5751 +2038 +48 +16199 +29 +16200 +14 +48 +134 +43 +16201 +2314 +155 +764 +16202 +3546 +16203 +823 +9514 +43 +16204 +647 +32 +2493 +48 +823 +16205 +14 +43 +9 +10 +590 +16206 +188 +6214 +13988 +286 +10979 +3598 +19 +43 +274 +417 +333 +12987 +6950 +378 +1217 +16207 +48 +16208 +590 +19 +10 +16209 +112 +3546 +14 +43 +16210 +43 +1310 +1295 +8864 +1224 +616 +43 +16211 +43 +6209 +4927 +16212 +736 +14532 +48 +3075 +201 +2 +8724 +5647 +286 +286 +590 +14 +16213 +43 +6744 +57 +16214 +3906 +16215 +9 +20 +43 +554 +379 +16216 +16217 +14 +1716 +16218 +15953 +16219 +16220 +14 +16221 +5220 +19 +1172 +15914 +16222 +48 +14 +13756 +16223 +13282 +16224 +43 +616 +554 +10 +16225 +6075 +57 +379 +16226 +16227 +57 +41 +14827 +16228 +16229 +1245 +13566 +16230 +16231 +2260 +1287 +9 +286 +43 +5780 +1013 +15 +590 +861 +369 +1012 +140 +43 +1314 +3 +590 +345 +16232 +48 +16233 +764 +16234 +1356 +915 +43 +98 +16235 +6068 +16236 +16237 +16238 +1013 +736 +554 +16239 +379 +48 +16240 +16241 +16242 +16243 +590 +80 +5299 +10 +349 +13321 +12807 +16244 +16245 +4028 +43 +1112 +791 +14 +16246 +10 +647 +16247 +16248 +16249 +16250 +16251 +3546 +43 +3546 +349 +16252 +16253 +16254 +3546 +29 +16255 +16256 +868 +7855 +14477 +16257 +1018 +16258 +16259 +16260 +16261 +16262 +16263 +2 +43 +32 +53 +736 +1217 +43 +3546 +590 +5332 +16264 +272 +13576 +16265 +43 +12457 +9 +14666 +42 +10 +15914 +242 +222 +668 +2039 +16266 +2314 +16267 +14693 +4824 +15975 +43 +16268 +14 +11522 +9583 +34 +16269 +14 +1181 +137 +112 +16270 +8593 +16271 +554 +16272 +16273 +16274 +43 +16275 +16276 +590 +354 +10 +16277 +14594 +4747 +8566 +16278 +16279 +43 +14 +2882 +3546 +8188 +16280 +178 +16281 +6736 +282 +16282 +590 +548 +9595 +43 +38 +590 +48 +48 +3369 +32 +1696 +16283 +16284 +5561 +16285 +16286 +15720 +3546 +115 +14 +16287 +53 +39 +5731 +16288 +16289 +9103 +16290 +7137 +14477 +616 +590 +43 +16291 +152 +14363 +16292 +3546 +5340 +15 +8566 +16293 +648 +16294 +16295 +48 +48 +15718 +8255 +115 +286 +573 +48 +16296 +16297 +16298 +43 +16299 +1100 +16300 +16301 +379 +398 +665 +701 +48 +13790 +16302 +12987 +14 +16303 +272 +16304 +16305 +2694 +16306 +16307 +528 +3546 +15504 +536 +222 +1172 +16308 +7379 +16309 +16310 +43 +2281 +16311 +1912 +11754 +16312 +3546 +16313 +210 +694 +16314 +16315 +349 +10727 +19 +989 +43 +1514 +16316 +210 +16317 +43 +16318 +16319 +16320 +3546 +16321 +16322 +379 +11754 +15 +16323 +6095 +590 +16324 +2957 +4752 +14420 +6950 +43 +16325 +358 +14477 +11408 +57 +590 +14477 +12560 +1566 +741 +3546 +16326 +7137 +16327 +16328 +849 +590 +1578 +2975 +15756 +16329 +16330 +16331 +3119 +416 +272 +8566 +14 +1107 +35 +16332 +48 +16333 +12987 +14 +16334 +43 +16335 +16336 +389 +1743 +4028 +57 +3066 +19 +16337 +590 +36 +15718 +1563 +16338 +43 +590 +43 +11762 +1300 +16339 +412 +5410 +48 +4293 +3 +16340 +16341 +112 +14477 +16342 +32 +6877 +14 +11754 +1232 +16343 +16344 +3119 +2811 +16345 +48 +590 +16346 +3546 +16347 +5344 +35 +3452 +201 +16348 +16349 +1048 +301 +15718 +16350 +140 +188 +16351 +16352 +3546 +13492 +210 +15 +2053 +1232 +377 +53 +1684 +16353 +16354 +1991 +3849 +155 +1961 +16355 +32 +48 +8724 +16060 +16356 +48 +3 +32 +16357 +59 +8297 +16230 +1991 +3355 +3275 +10993 +16358 +1149 +1559 +15718 +188 +10356 +20 +222 +16359 +16360 +14477 +16361 +43 +16362 +48 +4963 +22 +19 +16363 +13566 +9 +2787 +16364 +14477 +43 +14871 +3546 +250 +1817 +349 +170 +16365 +1082 +736 +16366 +16367 +14 +13296 +16368 +16369 +272 +16370 +16371 +48 +1049 +16372 +823 +4 +14866 +590 +185 +8188 +1987 +15797 +14 +3182 +1217 +16373 +35 +736 +16374 +16090 +201 +14679 +2925 +16375 +13582 +3334 +43 +14 +48 +13365 +16376 +16377 +16378 +16379 +7855 +152 +14 +14886 +60 +16380 +1470 +16381 +15 +16382 +16383 +43 +338 +16384 +43 +16385 +741 +590 +590 +14 +16386 +43 +34 +3546 +7137 +16387 +43 +14 +16388 +2434 +1181 +196 +1382 +4387 +43 +11341 +6877 +4155 +16389 +16390 +1083 +12987 +14 +15 +22 +16391 +43 +53 +123 +43 +6950 +1531 +16392 +43 +12987 +15756 +16393 +16394 +9402 +590 +112 +286 +207 +99 +6341 +16395 +16396 +155 +43 +16397 +12798 +16398 +2243 +5780 +48 +43 +12166 +16399 +43 +19 +16400 +43 +317 +607 +4907 +16401 +16402 +3546 +15 +14477 +12987 +736 +14001 +14603 +43 +1853 +1442 +705 +16403 +16404 +122 +16405 +43 +14604 +16406 +3317 +736 +16407 +16408 +43 +4717 +16409 +16410 +16411 +14814 +43 +14 +10389 +16412 +1160 +1018 +284 +16413 +16414 +213 +1604 +12560 +10 +8279 +16415 +1559 +16416 +16417 +2859 +57 +188 +43 +1013 +16418 +15744 +16419 +16420 +16421 +38 +16422 +8171 +303 +989 +9 +16190 +3353 +3546 +3546 +4179 +16423 +16424 +242 +43 +16425 +16426 +9 +14477 +16427 +284 +16428 +272 +16429 +16430 +16431 +358 +16432 +16433 +284 +48 +43 +2 +741 +20 +16434 +16435 +971 +16436 +16437 +1051 +16438 +16439 +15810 +6877 +11966 +48 +16440 +29 +16441 +57 +16442 +43 +337 +284 +16443 +48 +16444 +11539 +43 +16445 +16446 +10230 +342 +48 +16447 +16448 +1244 +43 +14689 +48 +16348 +19 +337 +15 +48 +43 +48 +315 +5688 +48 +43 +1013 +933 +849 +7259 +48 +12987 +16449 +323 +20 +16450 +16451 +1800 +16452 +16453 +1961 +16454 +2 +2136 +16258 +16455 +14363 +43 +1203 +398 +209 +1232 +12005 +558 +286 +16456 +590 +2577 +590 +16457 +14604 +3546 +16458 +12987 +16459 +32 +43 +16437 +6950 +16460 +16461 +43 +736 +590 +286 +284 +720 +16462 +16205 +741 +16463 +14957 +19 +16464 +16465 +14 +7283 +16466 +16467 +57 +14663 +2958 +16468 +248 +16469 +3353 +9 +1542 +14 +349 +16470 +10 +16471 +564 +590 +43 +16472 +16473 +15718 +16474 +15406 +16475 +14 +16476 +16477 +48 +14 +8367 +272 +16478 +16479 +11808 +16480 +1232 +397 +16481 +43 +16482 +590 +249 +3492 +16483 +43 +112 +1011 +16484 +16485 +16486 +303 +16487 +590 +6950 +16488 +2 +590 +16489 +16490 +3 +16491 +16492 +16493 +16494 +3546 +16495 +590 +2734 +590 +43 +5780 +7137 +16496 +7855 +590 +225 +671 +16497 +57 +16498 +646 +16499 +43 +48 +1157 +16500 +590 +8988 +5780 +48 +48 +16440 +1765 +19 +16096 +3034 +8005 +16501 +3435 +16502 +38 +16503 +8744 +15718 +16504 +16505 +29 +509 +16506 +1232 +16507 +15718 +14001 +2260 +16508 +14 +16509 +349 +3546 +16510 +286 +16511 +57 +16512 +43 +16513 +16514 +5217 +373 +153 +16515 +16516 +14 +43 +16517 +16518 +720 +14001 +43 +16519 +16520 +14 +16521 +22 +137 +2253 +196 +2006 +16522 +15384 +16523 +590 +590 +16524 +590 +43 +16525 +16526 +284 +16527 +457 +484 +16437 +16528 +5627 +188 +112 +155 +16529 +15718 +6915 +14 +16530 +16531 +35 +16532 +60 +16533 +16534 +15718 +337 +16535 +2733 +971 +1220 +16536 +43 +16537 +213 +14 +7960 +15 +16538 +14957 +14603 +590 +16539 +16540 +16541 +14 +43 +16542 +284 +2260 +43 +745 +48 +16543 +188 +43 +16544 +43 +12185 +8566 +16545 +323 +43 +16546 +590 +35 +43 +9461 +14477 +2561 +16547 +16548 +32 +323 +8297 +16549 +3546 +3598 +43 +43 +6121 +2254 +322 +14 +16550 +16551 +736 +142 +9617 +10 +16437 +2577 +16552 +14 +2772 +1738 +15824 +16553 +2733 +248 +5780 +590 +14 +16554 +16555 +43 +16556 +16557 +16558 +1991 +32 +43 +16559 +1563 +303 +16560 +16561 +16562 +1229 +16563 +349 +16564 +14 +14 +12351 +9 +16565 +192 +16566 +1524 +16567 +210 +16568 +17 +11207 +16569 +16570 +16437 +137 +3546 +16571 +16572 +14 +16573 +647 +272 +248 +16574 +16575 +43 +823 +43 +16576 +16577 +248 +16578 +57 +16579 +43 +20 +590 +5438 +43 +3546 +6950 +16580 +43 +248 +43 +5780 +16581 +9705 +16582 +16583 +590 +210 +43 +152 +597 +15 +1787 +2921 +349 +16584 +15718 +647 +16585 +741 +16586 +48 +16587 +32 +16588 +16589 +14916 +1799 +7917 +43 +2243 +29 +2 +590 +8392 +32 +648 +1013 +16590 +1437 +14604 +16591 +16592 +2 +1465 +16593 +48 +872 +286 +736 +19 +12987 +14546 +48 +16594 +357 +16595 +43 +22 +16596 +12987 +12483 +43 +16597 +16598 +349 +590 +2561 +15718 +14215 +541 +9681 +3546 +554 +286 +3553 +1559 +3546 +16334 +92 +14 +19 +16599 +1912 +1415 +16600 +29 +16601 +16602 +16603 +16604 +43 +16605 +3546 +16606 +16607 +9560 +16608 +14 +3546 +286 +272 +16609 +16610 +16611 +12936 +14 +11754 +16612 +448 +14 +1082 +43 +19 +43 +43 +2 +1208 +16613 +305 +16614 +20 +43 +1232 +1013 +16615 +19 +16616 +35 +16617 +16618 +16437 +16619 +43 +736 +15718 +464 +317 +790 +1542 +16620 +14 +89 +286 +16621 +16491 +5561 +495 +16622 +19 +38 +14695 +2 +272 +741 +16623 +5780 +14693 +16624 +16625 +10230 +10961 +849 +12987 +16626 +16627 +16628 +15 +6121 +43 +14477 +16629 +13361 +14 +3 +3508 +5601 +16630 +188 +349 +790 +16631 +43 +16632 +43 +9 +80 +6595 +16633 +16634 +4113 +692 +16635 +16636 +16637 +16638 +16639 +590 +19 +15694 +16640 +16641 +16642 +16643 +38 +16644 +11754 +5803 +554 +43 +16645 +16646 +14001 +5780 +14816 +3546 +647 +12605 +711 +16647 +16648 +16649 +2804 +5601 +43 +43 +16650 +20 +14594 +13954 +2540 +16651 +1425 +6595 +3055 +16652 +16653 +5088 +48 +16654 +16655 +249 +16656 +48 +16657 +12402 +16658 +48 +14 +13902 +2 +416 +48 +16659 +14179 +736 +16660 +845 +152 +16661 +16662 +16663 +43 +3491 +16664 +770 +14420 +4278 +15718 +16665 +16666 +16667 +16668 +349 +16669 +3484 +6950 +155 +1013 +178 +25 +43 +16670 +11176 +686 +43 +14 +16671 +16672 +399 +16673 +16674 +16675 +1018 +16150 +16676 +12 +7553 +48 +2 +358 +2245 +4907 +16171 +16677 +819 +16678 +11247 +43 +915 +16679 +446 +16680 +671 +554 +11754 +16681 +16682 +14 +152 +15 +590 +590 +16683 +590 +1157 +770 +19 +16684 +1047 +48 +43 +16685 +4028 +1765 +16686 +8244 +16687 +11483 +16688 +141 +89 +16689 +12987 +16690 +16691 +10259 +12 +16692 +43 +16693 +751 +3310 +648 +16694 +32 +590 +1425 +1154 +16695 +155 +16696 +590 +43 +16697 +14759 +19 +2577 +15718 +16698 +10720 +3546 +16699 +1021 +43 +3546 +7123 +11321 +59 +736 +16437 +43 +349 +2324 +16700 +13271 +554 +15718 +43 +16584 +9 +828 +16701 +76 +4790 +43 +16702 +11005 +1232 +16703 +13279 +48 +14 +16704 +12067 +32 +12434 +16705 +9849 +1364 +13803 +1364 +14546 +15718 +43 +16706 +16707 +5041 +1991 +16708 +1425 +14 +16709 +736 +15718 +16710 +15595 +590 +1012 +15472 +16711 +16712 +43 +16713 +39 +16714 +590 +1232 +32 +16715 +736 +231 +3408 +349 +9 +16716 +13150 +1295 +16717 +188 +48 +8046 +16718 +741 +16719 +253 +80 +14 +16720 +741 +3546 +8050 +16721 +43 +16722 +14603 +16723 +19 +1208 +16724 +16725 +16726 +16727 +16728 +16729 +12185 +57 +16730 +16731 +14001 +11762 +16732 +10 +16733 +16734 +16735 +16736 +16737 +48 +773 +16437 +16738 +16739 +16740 +48 +590 +19 +43 +14363 +38 +13484 +16741 +2012 +16742 +16634 +155 +665 +16743 +6877 +823 +14477 +14553 +9262 +2476 +590 +48 +16744 +554 +3 +19 +647 +554 +15054 +10737 +14 +16745 +2882 +43 +16746 +16747 +16748 +14 +14523 +48 +936 +272 +464 +415 +16749 +1013 +16750 +16751 +533 +16752 +209 +57 +43 +16753 +16754 +32 +2930 +16755 +8566 +25 +16756 +43 +286 +48 +2733 +48 +188 +16757 +14274 +16758 +16759 +7855 +13464 +16760 +6794 +6214 +590 +16761 +16762 +15718 +43 +1109 +210 +713 +2446 +112 +5780 +16763 +16764 +16765 +6341 +12402 +349 +2537 +43 +209 +16766 +3575 +11762 +16767 +3542 +15 +16768 +6939 +13754 +48 +43 +286 +16769 +647 +12987 +2537 +16770 +5969 +16413 +1232 +16437 +16771 +43 +349 +4717 +15718 +16772 +15718 +6741 +16773 +43 +16774 +590 +43 +43 +590 +16775 +590 +14 +1765 +16776 +16118 +16777 +14 +323 +14 +927 +2577 +464 +48 +10 +16778 +22 +8100 +57 +590 +43 +43 +14363 +16437 +16779 +16780 +15 +3546 +16781 +1051 +14 +16782 +2314 +48 +12402 +48 +1446 +736 +2314 +43 +16783 +1529 +554 +16784 +3546 +16785 +209 +590 +14 +43 +16786 +7923 +590 +16787 +43 +736 +16788 +16437 +16789 +16790 +1217 +3546 +16791 +16792 +3330 +19 +20 +669 +15384 +16793 +8685 +1961 +57 +15498 +16794 +1364 +16171 +15718 +16795 +349 +16035 +3491 +48 +16796 +16797 +16798 +16799 +19 +16800 +6950 +2015 +9 +16801 +16802 +3546 +590 +16803 +1082 +16804 +155 +15039 +16805 +14 +16806 +22 +2064 +15819 +48 +16807 +647 +16808 +16809 +3546 +590 +2253 +188 +849 +741 +358 +2769 +16810 +590 +16811 +16284 +112 +13179 +4118 +3481 +15718 +16812 +2136 +19 +15718 +741 +873 +16813 +48 +16814 +13666 +16815 +16816 +16817 +16818 +16819 +560 +5780 +872 +2012 +3768 +16820 +590 +16821 +12560 +13279 +16822 +1905 +15649 +48 +15 +9 +16823 +14 +14 +43 +11762 +305 +1181 +193 +16824 +16825 +43 +16826 +48 +16827 +34 +14363 +16828 +590 +7137 +15718 +16829 +89 +1524 +16830 +15718 +16831 +397 +16832 +286 +188 +2 +43 +16833 +16834 +595 +104 +16835 +1912 +849 +14007 +16836 +16837 +16838 +14477 +14 +14 +764 +13897 +8867 +43 +16839 +3546 +43 +5582 +14537 +590 +16840 +14 +16841 +2790 +48 +16842 +554 +16843 +16844 +1013 +16845 +3546 +590 +16846 +16847 +140 +16848 +16849 +16850 +8362 +16851 +15718 +5614 +823 +16852 +16853 +16468 +16854 +16855 +16856 +16857 +19 +16858 +188 +736 +11301 +16859 +3119 +48 +188 +112 +15718 +16437 +2195 +16860 +2804 +4388 +19 +16861 +43 +15718 +16437 +16862 +845 +10 +3768 +16863 +16864 +48 +67 +10079 +16865 +16866 +1765 +3546 +6736 +2042 +57 +491 +554 +9 +7137 +4606 +57 +16867 +16868 +590 +16869 +48 +19 +19 +16870 +16871 +16872 +48 +43 +16873 +76 +741 +32 +16874 +48 +16205 +13131 +36 +16875 +1082 +3546 +16876 +43 +2260 +43 +1513 +16877 +29 +16878 +14477 +1847 +1425 +770 +14477 +16879 +19 +736 +16880 +16881 +15 +43 +3105 +16882 +16883 +20 +16884 +16885 +286 +43 +16437 +16886 +48 +11762 +48 +15810 +43 +43 +357 +5318 +9 +5780 +741 +14477 +57 +650 +3543 +16887 +16888 +8758 +16889 +16890 +14 +43 +590 +16891 +16892 +48 +80 +379 +831 +9 +1542 +43 +16437 +48 +29 +15797 +7855 +8994 +3546 +7521 +179 +5990 +590 +15 +286 +11822 +2064 +16893 +3978 +2 +16894 +14477 +13484 +20 +1224 +16895 +5451 +14276 +2254 +16896 +48 +20 +342 +209 +5075 +16897 +349 +9 +14 +48 +43 +3546 +2121 +16898 +16899 +197 +647 +19 +16900 +15914 +16901 +1992 +16902 +43 +14 +6095 +3546 +3228 +16903 +16904 +566 +1316 +155 +16905 +11301 +16906 +16907 +43 +3546 +3546 +44 +2550 +5973 +1559 +2006 +1465 +43 +590 +590 +112 +16908 +16909 +16910 +16911 +1080 +16912 +1425 +43 +590 +16913 +1808 +2694 +16914 +12 +16915 +16916 +16917 +188 +43 +5190 +16656 +590 +10 +22 +1234 +155 +16918 +554 +741 +16919 +741 +20 +206 +43 +14185 +493 +16920 +14477 +16921 +14 +48 +16922 +5963 +29 +14420 +1120 +16923 +2404 +16924 +16925 +1458 +16926 +16927 +13760 +20 +16928 +6720 +16929 +6915 +590 +16930 +16931 +16932 +4684 +16933 +2117 +16934 +6741 +2764 +16437 +3546 +491 +2790 +35 +790 +16935 +1859 +354 +43 +14 +590 +12621 +48 +48 +286 +48 +19 +3553 +201 +16936 +43 +1169 +43 +8351 +14 +16937 +43 +14477 +1765 +2764 +43 +14957 +286 +14363 +15486 +3546 +48 +11321 +43 +16938 +16939 +16940 +4717 +554 +2769 +29 +3546 +8188 +3546 +2202 +14363 +1012 +43 +16941 +16942 +16437 +16943 +16944 +16945 +43 +1011 +4 +16946 +439 +16947 +16948 +16949 +16950 +13150 +16951 +43 +19 +48 +43 +16145 +19 +590 +14 +4278 +16952 +14 +43 +16953 +9 +15356 +286 +5416 +16954 +16955 +16881 +12987 +16956 +16957 +43 +16958 +16959 +741 +48 +16960 +616 +887 +590 +554 +3546 +16961 +7215 +16962 +16963 +7137 +1154 +16964 +7855 +741 +10958 +16965 +16966 +4278 +48 +48 +43 +590 +1077 +57 +1765 +2314 +16967 +595 +53 +16968 +1688 +48 +590 +16491 +16969 +12907 +12987 +16970 +16437 +19 +48 +474 +16971 +43 +2561 +16972 +43 +16973 +9 +16974 +112 +16975 +201 +14001 +16976 +43 +48 +16977 +590 +43 +1437 +16978 +48 +19 +9739 +15 +48 +16979 +15718 +845 +42 +80 +16980 +286 +741 +590 +155 +13566 +16981 +1992 +14 +16982 +1912 +16983 +16437 +43 +16984 +16985 +379 +43 +16986 +9 +1559 +57 +16987 +272 +210 +16988 +16989 +303 +29 +616 +16990 +16991 +16992 +48 +16993 +16994 +16995 +16996 +14 +613 +11522 +213 +16437 +48 +286 +2879 +16997 +357 +43 +14909 +16998 +358 +14477 +43 +19 +16999 +17000 +1054 +3546 +590 +43 +14185 +17001 +17002 +43 +43 +17003 +57 +337 +397 +333 +14 +2 +17004 +349 +14185 +17005 +590 +9 +17006 +17007 +15820 +43 +286 +14185 +1901 +16981 +15 +17008 +17009 +17010 +17011 +17012 +30 +43 +15 +48 +590 +14 +16437 +17013 +6301 +17014 +590 +590 +1361 +14477 +17011 +446 +590 +17015 +17016 +14 +17017 +736 +13555 +89 +17018 +4963 +337 +795 +15718 +19 +17019 +357 +5119 +104 +1502 +17020 +4388 +705 +6499 +5780 +14373 +736 +3546 +590 +11483 +3546 +80 +19 +17021 +89 +17022 +17023 +509 +17024 +536 +43 +1524 +2732 +17025 +971 +48 +17026 +201 +1228 +11321 +17027 +2650 +3192 +590 +2577 +3546 +1920 +152 +736 +14 +14853 +17028 +8255 +2594 +17029 +6950 +2514 +17030 +48 +5418 +17031 +1577 +57 +17032 +11754 +17033 +43 +32 +17034 +17035 +22 +48 +17036 +590 +17037 +14814 +17038 +1066 +4116 +17039 +43 +5218 +17040 +248 +43 +17041 +373 +3764 +16437 +43 +17042 +2349 +17043 +12891 +104 +5780 +17044 +17045 +17046 +1465 +32 +2409 +745 +7855 +3546 +17047 +17048 +48 +1011 +15220 +6106 +17049 +15855 +14 +17050 +736 +14 +590 +17051 +7276 +17052 +6072 +825 +590 +5780 +9705 +17053 +17054 +17055 +15718 +48 +17056 +2040 +17057 +17058 +493 +43 +17059 +3548 +3546 +358 +2694 +570 +15720 +2804 +17060 +17061 +188 +590 +17062 +57 +188 +3546 +17063 +11046 +137 +14363 +349 +13405 +17064 +17065 +17066 +16437 +17067 +43 +35 +5780 +2015 +17068 +48 +17069 +14 +15183 +17070 +1168 +14 +4934 +16826 +222 +17071 +17072 +9 +43 +19 +2260 +2009 +48 +15026 +17073 +17074 +17075 +14 +1612 +17076 +7962 +43 +15183 +8566 +15 +17077 +1021 +14 +17078 +17079 +43 +8392 +2593 +4808 +14 +17080 +590 +17081 +17082 +222 +9942 +17083 +3546 +17084 +17085 +48 +3216 +4056 +59 +701 +15718 +14 +893 +2457 +4026 +17086 +14477 +823 +736 +9444 +2009 +14 +43 +736 +17087 +8961 +3546 +17088 +43 +43 +17089 +11995 +48 +43 +179 +590 +3546 +8566 +15718 +32 +17090 +43 +14603 +10 +16488 +17091 +43 +1444 +43 +43 +17092 +14 +43 +14477 +17093 +48 +1153 +3626 +3317 +17094 +17095 +11727 +17096 +17097 +16491 +9649 +17098 +1364 +19 +17099 +17100 +5387 +16014 +9 +1817 +315 +13361 +317 +7176 +17101 +17102 +379 +17103 +17104 +17105 +17106 +20 +17107 +2864 +43 +484 +43 +7522 +17108 +17109 +6950 +349 +17110 +249 +17111 +43 +48 +43 +8668 +2577 +17112 +2769 +6048 +20 +17113 +48 +14 +5435 +17114 +17115 +17116 +14343 +17117 +533 +15989 +17118 +20 +17119 +43 +721 +8188 +17120 +17121 +1559 +14 +861 +590 +590 +19 +43 +17122 +17123 +15275 +17124 +17125 +17126 +3330 +741 +9 +590 +17127 +17128 +2979 +12987 +48 +590 +11754 +43 +43 +17129 +14477 +399 +43 +14 +19 +1051 +17130 +32 +25 +17131 +15718 +590 +17132 +6776 +17133 +9184 +5780 +12987 +17134 +15718 +1508 +764 +1992 +48 +8994 +4691 +12674 +15718 +590 +10 +11647 +11762 +17135 +590 +2318 +17136 +1287 +6741 +15442 +17042 +533 +1606 +17137 +43 +352 +188 +34 +15 +48 +17138 +358 +1612 +209 +19 +15975 +17139 +15240 +17140 +2316 +32 +17141 +16826 +17142 +46 +17143 +736 +14594 +11754 +53 +16741 +43 +286 +9 +48 +14911 +590 +43 +43 +17144 +736 +43 +7137 +5022 +17145 +3546 +2694 +17146 +17147 +1425 +379 +43 +179 +17148 +493 +43 +17149 +17150 +1559 +17151 +14 +377 +17152 +17153 +188 +3546 +14186 +583 +43 +17154 +17155 +15718 +694 +43 +17156 +590 +17157 +398 +1696 +647 +3546 +1765 +736 +495 +14477 +17158 +15645 +19 +683 +17159 +11483 +17160 +17161 +3546 +17162 +17163 +17164 +5601 +57 +590 +17165 +22 +4055 +137 +3335 +16197 +5067 +17166 +43 +17167 +48 +1232 +323 +9578 +823 +17168 +17169 +57 +10 +554 +17170 +618 +17171 +15914 +48 +17172 +2410 +14477 +16437 +43 +16589 +10147 +6950 +9427 +533 +201 +43 +17173 +931 +76 +17174 +19 +12987 +17175 +17176 +16826 +845 +17177 +17178 +17179 +15718 +17180 +14660 +286 +1612 +17181 +586 +43 +48 +17182 +16866 +17183 +17184 +17185 +3546 +2872 +2260 +17186 +17187 +17188 +17189 +114 +286 +3546 +270 +16436 +2260 +17190 +590 +43 +5409 +17191 +1513 +48 +14363 +17192 +9103 +15718 +16640 +48 +43 +48 +43 +17193 +15718 +48 +17194 +43 +17195 +4760 +14 +17196 +17197 +989 +43 +14825 +17198 +736 +57 +17199 +365 +17200 +17201 +17202 +43 +741 +590 +17203 +17204 +8668 +5582 +17205 +14185 +17136 +48 +17206 +4364 +3546 +43 +48 +2260 +43 +14 +14 +17011 +15718 +43 +6518 +1606 +209 +43 +1870 +1048 +32 +14 +17207 +17208 +17209 +12267 +16437 +1011 +14 +17210 +43 +5785 +9 +17211 +17212 +43 +1291 +17213 +2787 +89 +791 +17214 +1232 +10 +25 +14538 +17215 +14 +4803 +6505 +17216 +647 +17217 +188 +17218 +48 +17219 +399 +3999 +564 +317 +590 +188 +17220 +17221 +1912 +1924 +17222 +3553 +17223 +17224 +17225 +415 +17226 +694 +17227 +17228 +17229 +48 +474 +17230 +2 +178 +560 +17231 +17232 +17233 +5675 +17234 +2560 +22 +17235 +43 +2430 +17236 +17237 +17238 +17239 +2790 +10 +4908 +19 +17240 +48 +17241 +17242 +17243 +1232 +99 +10 +19 +1577 +43 +48 +17244 +17245 +14477 +736 +17246 +17247 +9 +43 +17248 +43 +844 +5344 +17249 +8566 +43 +14048 +1222 +17250 +112 +3417 +14185 +265 +736 +17251 +43 +8566 +17252 +48 +57 +2733 +590 +17253 +15824 +17254 +1154 +4028 +17255 +590 +16092 +17256 +17257 +9 +17258 +590 +6341 +286 +2316 +17259 +14 +5080 +7872 +48 +14 +1765 +57 +5780 +17260 +365 +17261 +22 +17262 +17263 +48 +1172 +17264 +43 +48 +48 +17265 +272 +43 +17266 +1765 +590 +155 +17267 +2577 +17268 +17269 +17270 +209 +48 +17271 +17272 +17273 +43 +43 +57 +7835 +14 +14185 +17274 +17275 +286 +2728 +16014 +590 +1529 +17276 +43 +17277 +43 +8994 +17278 +17279 +17280 +9410 +1224 +1961 +43 +1531 +5119 +17281 +43 +9784 +398 +5780 +2550 +14 +152 +736 +17282 +1051 +32 +14604 +647 +48 +201 +43 +17283 +2476 +1615 +12402 +48 +14 +17284 +48 +9 +17285 +1559 +17286 +17287 +17288 +5192 +595 +9705 +823 +17289 +707 +3050 +823 +1924 +17290 +16437 +48 +48 +17291 +43 +17292 +12404 +1154 +17293 +349 +14477 +358 +17294 +665 +17295 +17296 +43 +14 +741 +17297 +14 +43 +1376 +35 +1300 +14 +11286 +11757 +14001 +17298 +48 +15718 +17299 +736 +17300 +3599 +2697 +9 +12220 +17301 +17302 +19 +17303 +228 +590 +2577 +76 +17304 +12966 +4028 +43 +590 +590 +17305 +17306 +16437 +3543 +741 +17307 +14 +713 +14 +1232 +4313 +48 +14 +17308 +17309 +48 +48 +3546 +8301 +14871 +228 +17310 +5169 +48 +1115 +14 +1817 +3546 +1855 +736 +822 +3480 +17311 +15718 +741 +590 +43 +286 +1889 +17312 +365 +17313 +155 +22 +17314 +43 +15426 +12 +15718 +17315 +15 +6732 +1862 +17316 +5780 +17317 +17318 +17319 +48 +590 +17320 +15975 +43 +17321 +17322 +14 +17323 +17324 +5175 +43 +1605 +76 +43 +416 +17325 +17326 +17327 +349 +17328 +17329 +43 +17330 +14 +323 +17331 +17332 +1249 +97 +209 +17333 +17334 +3546 +17335 +17336 +32 +17337 +13307 +17338 +112 +17339 +17340 +14185 +17341 +43 +48 +2035 +17055 +22 +17342 +43 +10789 +17343 +17344 +17345 +17346 +17347 +17348 +17349 +32 +278 +15026 +17350 +10 +17351 +1524 +17352 +1229 +1615 +17353 +15718 +32 +736 +446 +2577 +17354 +491 +1612 +590 +17355 +43 +564 +2833 +1013 +3546 +43 +15718 +3546 +14 +9 +3484 +17356 +17357 +554 +17358 +17359 +590 +17360 +2733 +17361 +17362 +14 +493 +15 +17363 +122 +2913 +573 +4028 +17364 +17365 +12 +4963 +590 +22 +3417 +464 +8188 +17366 +1157 +43 +9 +17367 +1907 +323 +17368 +17369 +2117 +10230 +12987 +12534 +17370 +17371 +2202 +15586 +17372 +22 +17373 +1051 +17374 +17375 +17376 +17377 +16640 +358 +590 +14477 +43 +14 +590 +17378 +17379 +43 +14 +17380 +17381 +17382 +17073 +15718 +1232 +12351 +12005 +16437 +17383 +1287 +590 +14477 +1090 +17384 +272 +17385 +43 +20 +17386 +14477 +4684 +1287 +2577 +8249 +11471 +11593 +6776 +17387 +554 +17388 +17389 +20 +13913 +15718 +17390 +379 +17391 +17392 +9 +17235 +3546 +989 +720 +349 +2035 +741 +1502 +43 +6518 +20 +17393 +17394 +17395 +43 +3546 +17396 +112 +14 +17397 +4765 +17398 +9 +14 +5920 +5381 +501 +590 +3546 +17399 +17400 +671 +3546 +17401 +2577 +17402 +823 +17403 +17404 +19 +2286 +17405 +1542 +17406 +1051 +6294 +2349 +5627 +196 +1234 +17407 +10 +1021 +17408 +590 +2410 +16826 +284 +10673 +17409 +86 +17410 +2476 +17411 +12120 +14001 +43 +17412 +4765 +17413 +17414 +1369 +17415 +17416 +14001 +57 +15122 +17417 +16089 +1232 +2064 +17413 +17418 +616 +17419 +17420 +597 +2739 +358 +43 +248 +43 +43 +736 +3790 +17421 +17422 +8566 +16437 +19 +590 +11762 +15718 +17423 +9 +736 +43 +29 +5920 +17424 +17425 +16604 +3546 +14868 +17426 +3287 +349 +17427 +17428 +17429 +48 +286 +15 +2009 +43 +14 +1578 +2389 +17430 +43 +736 +176 +3034 +17431 +17432 +201 +17433 +12299 +43 +349 +11754 +17434 +43 +764 +484 +17435 +19 +17436 +683 +19 +188 +5611 +14 +14 +14 +179 +1112 +2308 +17437 +11685 +141 +17438 +14603 +17439 +590 +43 +17440 +13974 +17441 +337 +15718 +284 +349 +4521 +17442 +16604 +17443 +646 +17413 +17444 +2324 +17356 +3546 +43 +17445 +590 +43 +17446 +16102 +14067 +16437 +17447 +416 +43 +17448 +17449 +17450 +17451 +590 +17452 +17453 +2315 +17454 +43 +17455 +43 +590 +17456 +46 +48 +13529 +4153 +590 +15 +17457 +12062 +349 +2 +2849 +354 +14161 +1543 +640 +17458 +15824 +590 +3546 +17459 +590 +284 +2577 +48 +17460 +48 +6468 +17461 +17462 +590 +590 +17463 +30 +6950 +736 +17464 +14477 +17465 +17466 +17467 +43 +892 +13325 +188 +14846 +3330 +9 +17468 +1688 +15308 +677 +14532 +17469 +1154 +3330 +32 +17470 +349 +9 +337 +713 +17471 +736 +1465 +696 +43 +213 +590 +286 +48 +17472 +1743 +17473 +17474 +17475 +17476 +6171 +152 +8367 +112 +14 +1232 +2 +16003 +590 +48 +48 +48 +43 +554 +15217 +43 +48 +48 +77 +17477 +14001 +9 +43 +17478 +17479 +213 +6505 +1605 +17480 +48 +17481 +590 +3080 +43 +9 +590 +17482 +13030 +8188 +22 +17483 +17484 +14477 +14 +43 +15 +6617 +123 +17485 +713 +4028 +57 +17486 +1013 +849 +17487 +43 +17488 +1920 +22 +971 +16866 +17489 +9842 +43 +17490 +1605 +7276 +43 +736 +590 +17491 +2 +10 +17492 +138 +17493 +17494 +17495 +17496 +43 +48 +43 +1637 +5446 +57 +48 +741 +13430 +48 +284 +9 +17497 +286 +48 +694 +17470 +17498 +17499 +57 +2009 +6406 +1047 +17500 +43 +3072 +179 +43 +32 +887 +13569 +286 +15951 +14 +43 +3546 +822 +694 +48 +17501 +1442 +349 +2655 +5908 +17228 +15583 +155 +17502 +17503 +48 +1056 +590 +17504 +16190 +17505 +48 +4441 +17506 +17507 +1513 +3546 +8668 +6877 +17508 +155 +17509 +17510 +17511 +9259 +17512 +43 +17513 +1716 +590 +5627 +15797 +16981 +15881 +3743 +8469 +17514 +8188 +32 +14 +590 +14 +14841 +17515 +137 +112 +5080 +17516 +17517 +354 +48 +17518 +915 +17519 +17229 +99 +213 +17520 +213 +745 +17521 +17522 +4081 +17523 +17524 +141 +17525 +337 +1508 +17526 +43 +14189 +12013 +213 +14 +17527 +17528 +17529 +29 +736 +19 +17530 +8849 +564 +416 +17531 +17532 +209 +17533 +1364 +17534 +11483 +9 +17535 +17536 +8994 +43 +29 +43 +17537 +43 +115 +17538 +17539 +48 +16437 +12005 +17540 +2 +2356 +533 +17541 +7208 +1961 +2 +590 +958 +17542 +19 +14363 +337 +2864 +46 +475 +248 +43 +17543 +6214 +17544 +3546 +43 +17545 +14 +17546 +337 +17547 +17548 +17549 +17550 +17551 +484 +57 +282 +19 +17552 +17553 +14477 +17554 +13985 +590 +19 +14 +15718 +15592 +3415 +43 +3330 +741 +43 +48 +11995 +43 +57 +3034 +43 +77 +16102 +98 +1364 +17555 +17556 +971 +10 +8297 +17557 +272 +2260 +11483 +57 +14477 +17558 +13466 +284 +17559 +15718 +12120 +17560 +43 +17561 +15718 +17562 +17563 +4306 +647 +17564 +337 +48 +17565 +15334 +48 +14947 +1637 +337 +7154 +272 +213 +16437 +8392 +43 +337 +16437 +15718 +15 +10 +14 +17566 +17567 +558 +17568 +14 +3491 +8076 +48 +17569 +43 +1727 +4963 +3546 +590 +43 +17570 +17571 +5304 +303 +1112 +590 +17572 +17573 +17055 +17574 +17575 +590 +2577 +3546 +15718 +43 +736 +16437 +17576 +303 +19 +43 +17577 +57 +14363 +43 +112 +17578 +248 +11995 +17579 +17580 +14 +305 +590 +17581 +43 +286 +60 +12807 +20 +15718 +741 +1924 +46 +15718 +3626 +17582 +17583 +6058 +474 +4677 +15001 +188 +17584 +491 +48 +1799 +958 +43 +17585 +3329 +5627 +823 +424 +3553 +10757 +34 +19 +286 +17586 +14 +48 +11600 +43 +48 +43 +104 +11475 +17587 +17588 +17589 +17590 +1716 +12722 +14 +17591 +2136 +8297 +10843 +3572 +3546 +8670 +15718 +17592 +17593 +590 +19 +17594 +2042 +3553 +17595 +17596 +17597 +11754 +17598 +694 +590 +20 +17599 +17600 +17601 +8249 +17602 +10 +17603 +48 +43 +43 +9 +2035 +10356 +137 +14 +17604 +48 +17605 +9 +17606 +2006 +590 +14477 +358 +43 +17607 +17608 +20 +590 +17609 +14 +16437 +17610 +57 +17611 +17612 +3310 +14 +20 +12987 +286 +1051 +822 +15 +416 +14 +17613 +1524 +48 +5299 +17614 +188 +9118 +1513 +14 +17615 +5267 +43 +872 +17616 +196 +17617 +17618 +122 +17619 +14 +1912 +17620 +17621 +17622 +5780 +872 +8849 +43 +43 +66 +323 +17623 +155 +188 +1716 +17624 +736 +286 +1082 +43 +17625 +286 +17626 +43 +1423 +17627 +17628 +1992 +209 +590 +17629 +791 +17630 +1696 +17631 +17632 +42 +9 +17262 +17633 +17634 +15649 +15654 +17635 +17636 +770 +590 +43 +48 +14 +17637 +155 +2 +13492 +4313 +11522 +17638 +43 +48 +1172 +2525 +17639 +554 +189 +17640 +8867 +43 +11754 +590 +14 +170 +14102 +17151 +48 +17641 +590 +349 +790 +707 +3546 +43 +286 +17642 +238 +19 +17643 +349 +8566 +19 +17644 +990 +15 +14 +958 +8428 +67 +14189 +720 +15718 +648 +3546 +17645 +20 +16437 +17646 +822 +5085 +790 +161 +17647 +17648 +11817 +286 +17649 +17650 +32 +17651 +32 +17652 +17653 +16437 +15761 +500 +4441 +17654 +66 +16981 +417 +536 +48 +7855 +43 +14477 +590 +6214 +17655 +14 +17656 +5080 +19 +112 +554 +14604 +17657 +48 +3546 +17658 +43 +2975 +554 +9 +6011 +155 +48 +17659 +17596 +17660 +16437 +48 +48 +4313 +17136 +1648 +17661 +19 +4963 +9 +15718 +9 +7154 +1287 +48 +17662 +17663 +17664 +7783 +590 +176 +8668 +16437 +2769 +17665 +17666 +10 +15118 +17667 +2314 +764 +15718 +17668 +48 +43 +43 +43 +349 +6468 +48 +15320 +14604 +590 +17669 +694 +140 +17670 +19 +2769 +57 +15718 +15718 +1051 +48 +6571 +66 +112 +15 +1808 +112 +2 +1745 +3072 +10 +1112 +11754 +14604 +19 +13566 +554 +17671 +48 +17672 +43 +17673 +1330 +48 +140 +4808 +1710 +3484 +17674 +15 +9 +1961 +1232 +48 +5217 +17675 +554 +17676 +17677 +590 +57 +590 +15 +10 +16437 +14363 +15683 +97 +671 +590 +48 +613 +48 +1817 +14604 +3944 +17678 +17679 +365 +647 +17680 +17681 +17682 +17683 +5780 +17684 +12120 +15 +17685 +12987 +17686 +1203 +17687 +43 +17688 +1018 +379 +17689 +2577 +12864 +8208 +272 +17097 +1612 +12600 +915 +17690 +2865 +16437 +43 +17691 +17692 +736 +17693 +13711 +17694 +17695 +2697 +3546 +43 +17696 +43 +17697 +1384 +17698 +590 +15054 +590 +17699 +14 +14185 +872 +4278 +17700 +402 +2260 +19 +7860 +15 +491 +17701 +17702 +2202 +2577 +14 +11754 +43 +22 +16437 +2694 +536 +1401 +17703 +323 +5088 +19 +1066 +590 +43 +43 +7580 +17704 +7253 +12202 +17705 +1927 +115 +14 +10 +590 +7812 +17706 +17707 +17708 +17709 +17710 +17711 +210 +17712 +17713 +43 +17714 +352 +590 +16305 +10993 +17715 +89 +15 +741 +138 +22 +736 +590 +17716 +590 +17717 +533 +15493 +2253 +17718 +43 +48 +720 +4684 +48 +17719 +17720 +2733 +17721 +17722 +35 +3005 +60 +17723 +17724 +15824 +17725 +2 +1134 +8188 +17726 +4929 +17727 +17728 +3546 +17729 +1437 +3653 +17730 +17731 +17732 +11754 +1559 +323 +15718 +17733 +17734 +17735 +17736 +17737 +1203 +17738 +665 +17739 +48 +6900 +17740 +14 +590 +48 +179 +17741 +736 +16437 +669 +464 +1013 +16150 +17742 +1578 +15853 +1514 +17743 +43 +16844 +17744 +12404 +14 +152 +1765 +48 +14477 +17745 +11321 +43 +11754 +16719 +14477 +2314 +5403 +17746 +15718 +1559 +14007 +1425 +19 +17747 +17748 +736 +4760 +80 +48 +3544 +17749 +80 +573 +15718 +2537 +892 +17750 +57 +17751 +554 +10 +17752 +14079 +5780 +17753 +17754 +43 +10028 +17755 +43 +1021 +1847 +1091 +17756 +17757 +14 +1425 +5780 +12987 +17758 +13375 +17759 +1112 +19 +17760 +14 +17761 +17762 +43 +3546 +14477 +13349 +48 +13282 +17763 +43 +2619 +1442 +413 +12402 +1559 +17764 +66 +2577 +349 +817 +43 +16443 +14957 +2941 +43 +1612 +3077 +3034 +17765 +2561 +48 +16024 +9 +17766 +817 +42 +48 +48 +17767 +17768 +17769 +1169 +17770 +17771 +17772 +14679 +17773 +17774 +12987 +736 +17775 +15718 +1049 +14 +1425 +590 +43 +8208 +1384 +17776 +43 +17777 +1992 +14935 +541 +17778 +15148 +2577 +349 +349 +17779 +17780 +17781 +17782 +17783 +19 +305 +428 +665 +17784 +48 +17785 +17786 +15928 +17787 +17788 +3546 +3546 +14 +11593 +48 +17789 +647 +533 +17790 +286 +17791 +590 +14 +17792 +4963 +76 +193 +17793 +272 +17794 +741 +1011 +1808 +590 +4269 +17795 +12 +15718 +2392 +104 +16927 +17796 +647 +5041 +14 +17797 +590 +4196 +48 +647 +12241 +17466 +17798 +15 +1232 +17799 +66 +17800 +3279 +764 +14693 +2764 +8263 +43 +48 +34 +14477 +590 +2336 +3546 +305 +15989 +5780 +178 +17801 +17802 +17803 +17804 +1442 +15718 +32 +140 +17805 +590 +17806 +590 +2476 +13209 +17807 +16437 +11593 +17808 +17809 +10946 +43 +17810 +590 +17811 +15718 +590 +13179 +48 +14 +17812 +2 +48 +17813 +15718 +705 +17814 +3546 +1181 +2000 +98 +1232 +14 +152 +17815 +17816 +14604 +43 +17817 +17818 +185 +5780 +590 +738 +12684 +12722 +4808 +17819 +17820 +17821 +15 +17822 +17823 +6804 +17824 +14 +14 +17825 +817 +338 +1793 +60 +14 +17826 +14 +57 +736 +17827 +2769 +17828 +17829 +17830 +3546 +43 +741 +590 +14363 +590 +17831 +4963 +10789 +17602 +971 +9 +15874 +17832 +14 +13528 +17833 +3546 +16437 +736 +17834 +14 +3172 +1559 +17835 +17836 +16640 +9 +43 +14 +48 +590 +3 +17837 +415 +43 +9660 +155 +17838 +17839 +17840 +9 +590 +17841 +43 +17842 +15718 +17843 +11733 +32 +48 +201 +43 +17844 +43 +14477 +9 +57 +554 +16180 +48 +17845 +554 +14 +1091 +6953 +17846 +9945 +14872 +14603 +15718 +17847 +17848 +590 +15718 +2477 +209 +43 +17849 +112 +35 +8214 +225 +2064 +17850 +17381 +648 +17851 +15718 +17852 +17853 +6950 +17854 +155 +478 +43 +17855 +48 +14082 +357 +590 +57 +1090 +14 +17856 +861 +17857 +3546 +1563 +43 +17858 +14 +17859 +358 +2594 +17860 +17861 +1425 +17862 +2982 +17863 +6776 +155 +48 +19 +590 +17864 +19 +1356 +17865 +17866 +16437 +17867 +17868 +2035 +17869 +43 +17870 +590 +3316 +910 +15308 +736 +717 +32 +370 +109 +349 +17871 +9119 +2043 +17872 +16020 +14 +2 +48 +17873 +17874 +2 +8188 +17875 +13566 +15 +349 +14604 +43 +17876 +17877 +17878 +14 +286 +17879 +493 +17880 +4524 +48 +17881 +17882 +11754 +14 +17883 +17884 +15 +590 +43 +1154 +15797 +17885 +17886 +14603 +533 +15718 +484 +17887 +43 +43 +14560 +2804 +11483 +590 +43 +48 +14603 +19 +17888 +1157 +17889 +57 +9 +17890 +6537 +48 +10642 +4128 +7624 +3543 +17891 +8188 +48 +17892 +686 +17893 +17894 +17895 +14 +57 +17770 +17896 +4650 +43 +17897 +1295 +590 +590 +20 +48 +14477 +16413 +17898 +48 +43 +849 +17899 +849 +17900 +15 +155 +248 +736 +17901 +2721 +17902 +17903 +17904 +6785 +43 +10 +4963 +43 +17905 +20 +17906 +48 +155 +188 +213 +17907 +155 +3546 +188 +303 +16927 +17908 +17909 +17910 +14604 +17911 +43 +741 +416 +590 +17912 +3546 +1425 +3546 +14 +597 +349 +3546 +43 +16128 +48 +286 +873 +736 +17913 +19 +43 +345 +349 +22 +15 +17914 +554 +2029 +5169 +17915 +43 +17916 +17917 +590 +1612 +48 +337 +17918 +1716 +43 +16464 +14 +17919 +43 +17920 +17921 +12158 +13307 +15718 +155 +2314 +17922 +17923 +17924 +17 +248 +48 +17925 +14363 +1696 +17926 +32 +17927 +17928 +6935 +35 +43 +17929 +17930 +13150 +590 +1680 +17931 +10028 +11966 +16696 +323 +2804 +590 +736 +17932 +17933 +11754 +155 +43 +1232 +590 +43 +17934 +3546 +2035 +20 +8685 +20 +11593 +8610 +2318 +7239 +66 +43 +6214 +43 +43 +137 +17935 +17936 +2804 +647 +17937 +48 +590 +43 +3546 +3553 +16437 +861 +17938 +736 +823 +17939 +286 +1465 +14 +13375 +2791 +1222 +823 +554 +17940 +736 +1559 +17941 +8297 +16826 +7137 +286 +2733 +1902 +13282 +10356 +89 +936 +17942 +1181 +17943 +14406 +17944 +17945 +17946 +647 +17947 +17948 +32 +17949 +17950 +17951 +32 +43 +43 +17952 +284 +15 +17953 +464 +22 +80 +3330 +736 +9 +5780 +43 +17954 +17955 +17956 +17957 +17958 +32 +155 +8668 +13317 +399 +43 +17959 +2593 +3546 +736 +2567 +11762 +48 +19 +1082 +1011 +15 +17960 +3059 +43 +6765 +769 +1817 +17872 +17663 +15 +248 +5027 +17961 +590 +42 +36 +13484 +5601 +741 +3034 +12722 +17962 +17963 +17964 +17965 +43 +17966 +48 +17967 +43 +43 +572 +48 +19 +16844 +736 +43 +43 +13484 +17968 +1513 +17969 +43 +5780 +48 +1139 +17970 +17971 +303 +17972 +303 +17973 +17974 +17975 +736 +17976 +17977 +17978 +9 +48 +357 +11762 +17979 +17980 +43 +17981 +17982 +43 +12560 +397 +17983 +1920 +17984 +284 +17985 +17986 +213 +48 +478 +17987 +6114 +48 +48 +3546 +248 +20 +286 +14 +248 +736 +7448 +4963 +4963 +19 +14 +865 +590 +365 +17988 +17989 +323 +248 +43 +736 +17990 +764 +955 +17991 +22 +13459 +32 +4461 +152 +48 +48 +188 +17992 +14 +11176 +1051 +213 +736 +17993 +17994 +43 +3546 +1577 +736 +15718 +10510 +17995 +823 +17996 +17997 +17998 +590 +16696 +590 +43 +43 +14477 +15718 +16239 +17999 +18000 +18001 +18002 +18003 +18004 +3460 +18005 +43 +18006 +873 +17412 +18007 +5601 +19 +18008 +18009 +18010 +43 +18011 +48 +721 +286 +13807 +5780 +3546 +14001 +18012 +6400 +18013 +18014 +19 +2591 +4684 +155 +18015 +18016 +5780 +2258 +18017 +18018 +18019 +14981 +3491 +12319 +9 +18020 +18021 +188 +2314 +286 +18022 +18023 +18024 +13431 +18025 +18012 +18026 +286 +286 +18027 +1287 +554 +2045 +707 +155 +18028 +9 +43 +18029 +18030 +3353 +14 +18012 +3546 +1091 +590 +209 +18031 +790 +18032 +32 +98 +43 +18033 +32 +770 +18034 +13730 +18035 +15031 +18036 +18037 +18038 +14 +18039 +14477 +18040 +358 +18041 +7137 +18042 +18043 +43 +6883 +19 +3 +741 +1107 +19 +14693 +18044 +201 +18045 +14 +112 +3546 +18046 +43 +18047 +12397 +18048 +43 +365 +18049 +13466 +10 +32 +18050 +43 +43 +188 +15720 +528 +48 +7978 +20 +11762 +18051 +201 +98 +18052 +590 +18053 +209 +6531 +3546 +18054 +18055 +1013 +915 +647 +616 +18056 +17370 +554 +18057 +8218 +3546 +286 +209 +57 +554 +18058 +48 +18059 +14604 +18060 +18061 +18062 +2314 +2026 +111 +48 +1824 +3732 +18063 +48 +48 +43 +15285 +931 +43 +4028 +18064 +3546 +14 +18065 +18066 +12989 +3546 +43 +18067 +18068 +590 +19 +43 +18069 +18070 +15718 +338 +8668 +590 +18071 +48 +15268 +3287 +43 +349 +736 +18072 +3447 +15718 +1247 +323 +17728 +18073 +43 +18074 +17675 +180 +349 +112 +18075 +43 +18076 +590 +1437 +3546 +43 +3034 +14604 +7137 +18077 +18078 +18079 +15 +16937 +17480 +11483 +1048 +16014 +18080 +349 +3598 +554 +18081 +18082 +57 +43 +43 +14 +590 +764 +18083 +15 +48 +16437 +188 +4 +138 +1481 +349 +18084 +9 +9 +741 +5780 +18085 +789 +18086 +5780 +17228 +18087 +14477 +18088 +15718 +10 +48 +10117 +4411 +18089 +178 +1300 +845 +18090 +19 +272 +349 +18091 +32 +1048 +14 +188 +10287 +77 +736 +11762 +1542 +80 +48 +18092 +43 +18093 +9371 +741 +18094 +554 +4070 +48 +349 +15718 +18095 +48 +18096 +201 +14 +694 +3944 +18097 +2 +9 +2762 +286 +112 +590 +18098 +3553 +18099 +43 +15718 +13599 +349 +18100 +18101 +18102 +1446 +1547 +250 +590 +2 +18103 +19 +5188 +18104 +18105 +46 +14 +18106 +10 +3 +18107 +43 +8053 +1955 +590 +18108 +11762 +15 +8320 +18109 +18110 +14871 +43 +48 +18111 +18112 +16180 +18113 +3976 +286 +1710 +1870 +590 +18114 +15 +18115 +43 +43 +6950 +43 +3351 +18116 +19 +14420 +48 +6950 +18117 +590 +222 +19 +1232 +7451 +43 +18118 +1991 +16437 +286 +647 +18119 +15718 +13150 +18120 +2476 +736 +18121 +18122 +18123 +14 +272 +5780 +14604 +18124 +48 +1868 +9 +18125 +12344 +2287 +647 +43 +18126 +18127 +2591 +18128 +3546 +554 +590 +18129 +13179 +16437 +18130 +15718 +18131 +122 +5650 +2459 +1364 +18132 +2035 +1502 +1310 +536 +66 +1989 +3546 +590 +16014 +14 +7537 +14604 +112 +1824 +16437 +48 +18133 +1912 +554 +18134 +18135 +66 +18136 +4315 +152 +647 +18137 +10 +13913 +18138 +14 +1112 +349 +3546 +6766 +43 +12987 +13566 +590 +18139 +4441 +32 +554 +18140 +18141 +18142 +647 +18143 +16102 +18144 +43 +98 +18145 +2 +14186 +18146 +43 +590 +18147 +694 +18148 +1425 +18149 +590 +736 +18150 +286 +17749 +590 +48 +32 +46 +43 +1465 +411 +3462 +32 +18151 +18152 +14001 +2892 +349 +14386 +15540 +18153 +57 +13179 +48 +18154 +18155 +14616 +11283 +286 +18156 +788 +2325 +48 +66 +112 +18157 +2975 +1912 +15 +2410 +323 +18158 +14102 +249 +7624 +16437 +3546 +11860 +14477 +19 +48 +3546 +18159 +48 +18160 +18161 +12013 +119 +15530 +18162 +573 +60 +18163 +18164 +48 +18165 +1648 +741 +18166 +18167 +817 +48 +15820 +305 +249 +18168 +1112 +18169 +43 +18170 +249 +349 +18171 +18172 +32 +3 +15 +18173 +18174 +1513 +590 +1021 +9 +18175 +15718 +18176 +48 +32 +43 +20 +14 +43 +18177 +137 +590 +18178 +18179 +76 +57 +43 +717 +18180 +13150 +590 +18181 +1060 +18182 +703 +18183 +18184 +18185 +18186 +18187 +18188 +48 +18189 +18190 +18191 +18192 +9 +1011 +89 +9 +8367 +915 +15718 +18193 +43 +18194 +18195 +349 +13150 +958 +18196 +43 +590 +18197 +17303 +18198 +3034 +43 +18199 +4160 +43 +48 +5780 +5990 +14363 +7747 +43 +14007 +1920 +19 +3546 +3546 +6457 +18200 +10 +18201 +4793 +15877 +8392 +18202 +18203 +18204 +5623 +3546 +305 +18205 +7137 +176 +22 +18206 +15718 +13343 +201 +18207 +590 +15720 +43 +18208 +18209 +18210 +18211 +18212 +3546 +18213 +48 +11754 +18045 +18214 +1907 +6874 +18215 +15718 +16437 +11312 +349 +2 +1612 +3546 +18216 +18217 +18218 +286 +15647 +18219 +15718 +590 +14 +48 +823 +412 +3546 +48 +18220 +18221 +18222 +18223 +1481 +18224 +6834 +18225 +18226 +8297 +1919 +17055 +18227 +18228 +416 +18229 +140 +228 +43 +18230 +2166 +2164 +18231 +1090 +1047 +18232 +10848 +16966 +18233 +20 +48 +18234 +89 +349 +12402 +13484 +43 +18235 +10356 +1361 +18236 +1912 +18237 +541 +492 +18238 +373 +43 +20 +613 +15718 +18239 +18240 +18241 +18012 +5780 +11754 +43 +18242 +430 +18243 +590 +14 +18244 +4820 +57 +849 +138 +1612 +4174 +590 +18245 +46 +18246 +370 +18247 +19 +16437 +989 +99 +18248 +14 +2 +18249 +14916 +43 +554 +736 +2260 +17033 +32 +1716 +16788 +18250 +7137 +43 +18251 +18252 +18253 +827 +8668 +18254 +77 +1790 +13375 +18255 +18256 +18257 +2694 +18258 +43 +14007 +13282 +18259 +18260 +18261 +18262 +18263 +9 +24 +18264 +18265 +43 +590 +14477 +18266 +14612 +18267 +590 +18268 +18269 +2476 +18270 +15989 +22 +18271 +18272 +14 +18273 +18274 +286 +3338 +3 +18275 +2197 +43 +18276 +57 +43 +18277 +590 +5007 +75 +18278 +18279 +18280 +333 +14 +18281 +18282 +590 +18283 +4677 +399 +18284 +1437 +112 +155 +970 +112 +18285 +19 +10979 +25 +15778 +18286 +8351 +18287 +43 +16329 +43 +18288 +19 +18289 +6214 +18290 +590 +18291 +349 +18292 +745 +18293 +43 +12845 +18294 +1013 +18295 +18296 +1425 +14 +10583 +14 +958 +2769 +14 +6883 +665 +18297 +18298 +6499 +18064 +259 +349 +18299 +18300 +18301 +764 +18302 +48 +14 +43 +590 +66 +18303 +18304 +18305 +14 +43 +301 +18306 +18307 +18308 +16656 +43 +342 +32 +18309 +193 +12247 +736 +18310 +18311 +1502 +18312 +12120 +11480 +18313 +279 +14 +736 +6785 +1578 +14693 +15718 +18314 +18315 +18316 +4001 +915 +358 +43 +18317 +18318 +286 +17698 +16437 +18319 +18320 +18321 +12005 +18322 +43 +349 +1901 +18323 +14 +19 +17557 +15718 +1232 +495 +24 +16 +1517 +11762 +2 +379 +12404 +18324 +18325 +1942 +43 +358 +13126 +18045 +12913 +279 +43 +6316 +1228 +13150 +18326 +6766 +18327 +43 +201 +3354 +188 +3546 +18328 +333 +3546 +9 +9 +14 +43 +18329 +19 +1212 +16437 +4028 +155 +9 +286 +43 +43 +18330 +272 +6950 +1258 +80 +18331 +11754 +15718 +13664 +14 +14240 +18332 +18333 +43 +22 +1364 +188 +677 +14604 +1637 +18334 +18335 +32 +18336 +13459 +48 +18337 +3976 +590 +14 +509 +736 +590 +272 +10 +20 +1013 +626 +18338 +17868 +155 +18339 +188 +2000 +2577 +915 +6766 +18340 +16180 +2 +48 +15718 +286 +1604 +18341 +18342 +3 +43 +554 +18343 +43 +48 +18344 +14 +18345 +14420 +18346 +590 +8188 +18347 +18348 +18349 +18350 +18351 +3546 +222 +17868 +15718 +18352 +18353 +9 +43 +647 +14604 +10 +18354 +1992 +43 +14 +6794 +14477 +43 +14604 +1012 +20 +48 +43 +48 +18355 +18356 +548 +18357 +1236 +18358 +17635 +185 +14 +11306 +349 +19 +18359 +19 +2 +16437 +1765 +18360 +590 +48 +32 +2260 +4963 +48 +15718 +2430 +3066 +18361 +18362 +317 +9 +18363 +464 +4023 +18364 +43 +12987 +16437 +20 +155 +4077 +18365 +379 +14477 +18012 +745 +2314 +15718 +48 +2476 +6950 +17 +14 +2 +178 +112 +590 +43 +48 +349 +43 +5780 +1961 +188 +1234 +533 +18366 +18367 +22 +9 +15 +18368 +18369 +155 +18370 +18371 +155 +18372 +14 +14374 +18373 +19 +1920 +736 +12372 +554 +48 +3546 +18374 +18375 +18376 +286 +17253 +18377 +286 +15586 +590 +18378 +244 +48 +12404 +349 +18379 +18380 +590 +6776 +228 +2769 +18381 +6915 +16511 +18382 +43 +2 +5780 +3546 +18383 +3546 +155 +18384 +114 +2258 +736 +209 +3546 +3491 +474 +18045 +18385 +1655 +18386 +43 +43 +349 +590 +11670 +18387 +736 +145 +18388 +18389 +6011 +1502 +19 +12907 +43 +43 +1425 +18390 +590 +22 +13648 +2957 +927 +19 +14 +1531 +491 +11762 +16656 +736 +18391 +18392 +43 +43 +6400 +590 +20 +15 +15931 +20 +11822 +1817 +18393 +19 +18394 +141 +17136 +18395 +554 +18396 +18397 +7048 +5178 +138 +18398 +14710 +18399 +15718 +18400 +386 +1683 +18401 +16981 +18402 +17370 +17653 +613 +18403 +590 +1232 +18404 +18405 +5773 +19 +18406 +14477 +11480 +14 +18407 +272 +14 +99 +43 +1109 +14363 +958 +14001 +18408 +15951 +2 +43 +19 +8015 +560 +1047 +14645 +15586 +48 +16230 +48 +12178 +14856 +43 +43 +4155 +66 +15 +19 +18409 +57 +18410 +18411 +349 +1738 +18412 +48 +17119 +48 +14 +14477 +18413 +1765 +18414 +179 +17698 +286 +18415 +18416 +18417 +6344 +18418 +18419 +18420 +590 +2 +741 +14 +495 +5780 +18421 +349 +1716 +18422 +15 +16437 +301 +15486 +18423 +18424 +1976 +1991 +18425 +2197 +19 +222 +17602 +18426 +18427 +14515 +1924 +18428 +18429 +9 +43 +48 +18430 +2430 +590 +18431 +14 +6950 +18343 +57 +18432 +18433 +2694 +349 +18434 +358 +1021 +9 +3546 +590 +18435 +13566 +48 +8218 +32 +18436 +15819 +97 +48 +2733 +2324 +18437 +1566 +48 +1559 +809 +19 +43 +43 +14363 +10 +22 +373 +14532 +590 +18438 +43 +74 +17670 +43 +1364 +18439 +10485 +323 +10 +112 +16944 +19 +19 +5415 +18440 +18441 +8758 +18442 +6621 +18443 +18444 +18445 +18446 +12404 +1021 +18447 +152 +590 +18448 +590 +18449 +1223 +43 +764 +43 +764 +14 +14 +13393 +6874 +48 +18450 +398 +43 +14477 +14 +18451 +43 +18452 +15 +284 +18453 +5421 +11607 +18454 +32 +20 +18455 +18456 +43 +48 +554 +18457 +491 +14 +43 +5925 +18458 +213 +18459 +4028 +15718 +15 +18460 +17303 +4820 +18461 +14 +18462 +18463 +6243 +15718 +179 +2577 +284 +18464 +22 +18465 +43 +3546 +14477 +14 +18466 +18467 +32 +18468 +18469 +284 +19 +12907 +337 +18470 +590 +595 +43 +38 +18471 +14871 +1012 +4594 +12466 +18472 +590 +18473 +1426 +303 +736 +18474 +1612 +18475 +6950 +3655 +10028 +2525 +99 +741 +16014 +18476 +43 +9402 +349 +5780 +590 +18477 +18478 +741 +12258 +18479 +43 +1425 +10642 +590 +590 +4083 +14 +18406 +5469 +3546 +15718 +337 +16925 +18480 +18481 +18482 +365 +5780 +18483 +15718 +18484 +5264 +11341 +6669 +3546 +554 +613 +17046 +18485 +48 +337 +18486 +18487 +188 +38 +369 +18488 +19 +18489 +89 +3052 +18490 +18491 +14 +18492 +4285 +989 +43 +14604 +15718 +43 +18493 +3640 +18494 +590 +43 +18495 +1295 +590 +590 +736 +590 +48 +138 +18496 +1066 +48 +1356 +11754 +99 +43 +12005 +18497 +284 +18498 +286 +18499 +18500 +721 +18501 +14 +8668 +14 +18502 +19 +18503 +17385 +9389 +18504 +18505 +188 +43 +13913 +5409 +11822 +6518 +155 +736 +48 +349 +1738 +48 +415 +43 +18506 +18507 +284 +43 +19 +3130 +188 +18508 +18509 +18510 +16118 +18511 +16342 +3767 +845 +46 +18512 +43 +4151 +18513 +18514 +590 +3417 +248 +18002 +18515 +6214 +11754 +17941 +32 +18516 +12798 +57 +18012 +57 +18517 +18518 +2264 +18519 +16437 +18520 +48 +18521 +14 +19 +43 +14 +9 +18522 +9 +14693 +18523 +18524 +590 +5659 +541 +17871 +19 +1364 +58 +48 +18525 +14603 +2 +18526 +9649 +590 +3301 +18527 +19 +18528 +373 +6004 +18529 +19 +18530 +1013 +873 +18531 +665 +9 +286 +43 +32 +18532 +18533 +3546 +736 +18534 +18535 +16437 +18536 +493 +554 +155 +18537 +6011 +18538 +18539 +20 +18540 +18541 +736 +18542 +286 +111 +495 +201 +7053 +18543 +11321 +19 +415 +48 +43 +2971 +3 +48 +10 +48 +10601 +597 +18544 +48 +16944 +2707 +19 +354 +43 +18545 +18546 +48 +2593 +3546 +18547 +19 +19 +43 +18548 +12603 +43 +1749 +12 +43 +18549 +19 +18550 +349 +1021 +16527 +18551 +17 +18552 +18553 +80 +18554 +286 +43 +43 +5169 +9 +590 +1226 +43 +248 +349 +18555 +18556 +15 +35 +741 +2567 +286 +19 +18155 +14 +43 +43 +764 +15830 +18557 +48 +43 +2 +736 +43 +18558 +14603 +18559 +18560 +7379 +736 +2446 +11995 +18561 +18562 +872 +3546 +650 +48 +43 +43 +18563 +248 +18564 +446 +18565 +18566 +15718 +1310 +18567 +48 +18568 +152 +9979 +10 +4387 +9 +2348 +4083 +11593 +3 +7048 +464 +19 +19 +18569 +80 +18570 +19 +18571 +11762 +18572 +7964 +18573 +18574 +48 +138 +10 +18575 +736 +590 +43 +2042 +48 +17228 +590 +213 +284 +18576 +8098 +18577 +11571 +647 +764 +18578 +1559 +43 +18579 +18580 +2309 +590 +15718 +3 +3 +490 +16437 +4028 +213 +12722 +18581 +8098 +18582 +18583 +11822 +1112 +18584 +14477 +17173 +18585 +590 +10 +248 +18586 +2476 +48 +1425 +10262 +14 +4693 +18587 +5780 +18588 +18589 +15782 +378 +5438 +1847 +18590 +155 +18591 +12365 +8994 +18592 +18593 +2733 +18594 +18595 +18596 +18597 +18598 +5780 +18599 +286 +18600 +18601 +213 +14 +18602 +349 +1157 +303 +2325 +1157 +590 +123 +18603 +43 +18604 +741 +13282 +18605 +1013 +112 +11754 +9 +15683 +18606 +12987 +18607 +1157 +5438 +248 +1169 +18608 +554 +3944 +18609 +18610 +89 +43 +18611 +1018 +11762 +10930 +10262 +18612 +303 +43 +1870 +590 +1208 +48 +18613 +18614 +48 +713 +303 +349 +18615 +12621 +18616 +48 +18617 +18618 +3546 +99 +736 +43 +2026 +18619 +32 +286 +18620 +18621 +5253 +2577 +60 +590 +18622 +43 +741 +18623 +17670 +213 +43 +19 +18624 +6068 +18625 +736 +11011 +10 +222 +2577 +16437 +1912 +18626 +484 +337 +1688 +18627 +2029 +201 +669 +8351 +43 +18628 +18629 +741 +43 +18630 +583 +11963 +32 +18631 +10727 +11330 +3546 +2859 +3546 +16437 +18632 +48 +43 +57 +18633 +18634 +931 +736 +11537 +2694 +18635 +10 +13167 +18636 +9945 +1723 +11762 +43 +18637 +736 +5837 +18638 +123 +19 +18639 +18640 +14 +18641 +18642 +18643 +3546 +43 +155 +48 +3543 +18644 +11762 +7137 +14 +11364 +14886 +736 +18645 +14 +590 +18646 +18647 +12225 +8103 +18648 +18649 +201 +18650 +15 +22 +18651 +32 +18652 +14 +2281 +10028 +1961 +2577 +16180 +18653 +12661 +213 +152 +15718 +19 +18654 +9 +18655 +18656 +9 +43 +1310 +13150 +16637 +18657 +18658 +16117 +48 +1384 +48 +18659 +18660 +18661 +1112 +18662 +18663 +9 +43 +18664 +248 +18665 +1513 +18666 +590 +17557 +48 +651 +349 +201 +6950 +43 +18667 +48 +415 +32 +18668 +3 +533 +48 +5243 +43 +14 +1533 +18669 +764 +722 +1437 +18670 +18671 +12746 +43 +11483 +16981 +18672 +1907 +18673 +18674 +18675 +349 +19 +590 +590 +18676 +18677 +1612 +861 +14604 +2764 +80 +323 +18678 +349 +989 +18679 +19 +18680 +43 +1648 +4477 +18681 +18682 +43 +4364 +18683 +8992 +18684 +533 +18685 +286 +18686 +32 +18687 +201 +10 +269 +43 +736 +43 +7137 +18688 +18689 +1529 +48 +18690 +18691 +1749 +19 +1232 +48 +9 +15720 +18692 +2728 +18693 +1356 +18694 +57 +18695 +4028 +18696 +18697 +18698 +14477 +823 +14520 +48 +18699 +18700 +14771 +48 +8566 +18701 +14 +32 +8249 +155 +10028 +18702 +10 +272 +18703 +11321 +8280 +3546 +9 +48 +18695 +20 +12600 +18704 +519 +43 +3548 +48 +590 +278 +17859 +14 +16437 +4055 +16089 +18705 +18706 +1234 +2318 +2944 +736 +590 +741 +14515 +3408 +3 +48 +18707 +590 +590 +12304 +16925 +14363 +18708 +32 +34 +590 +248 +590 +18709 +43 +337 +1696 +8218 +2140 +15718 +1100 +18710 +3484 +18711 +18712 +286 +19 +647 +18713 +2672 +13228 +1889 +2724 +9 +8188 +15216 +14335 +2694 +18714 +12987 +15724 +590 +3546 +18715 +15 +18716 +6877 +57 +6952 +43 +18717 +18718 +18719 +1902 +48 +4364 +9 +1224 +18720 +48 +18721 +48 +48 +18722 +122 +14604 +18723 +4212 +286 +188 +5780 +32 +2672 +6950 +18724 +43 +14363 +18725 +12913 +57 +823 +1082 +18726 +18727 +18728 +141 +1605 +373 +2577 +2577 +18729 +1810 +18730 +18731 +6214 +18732 +43 +22 +4803 +18733 +736 +6463 +80 +18734 +48 +18735 +18736 +18737 +48 +18738 +18739 +305 +8297 +43 +2040 +5426 +3546 +590 +815 +5599 +823 +17571 +18740 +12832 +272 +18741 +18742 +464 +18743 +18744 +286 +43 +286 +18745 +5908 +18746 +3 +18747 +11754 +3 +43 +3553 +18748 +349 +18749 +1011 +18750 +43 +3155 +20 +18751 +48 +554 +48 +5627 +242 +48 +18752 +14567 +18753 +4907 +48 +14 +43 +15989 +1245 +43 +2919 +14 +14 +18754 +713 +18755 +18756 +18757 +18758 +18759 +1115 +349 +6877 +80 +349 +12003 +3546 +43 +18760 +18761 +616 +18762 +43 +14477 +1612 +43 +1091 +590 +22 +1244 +323 +18763 +2202 +43 +18764 +12013 +18765 +18766 +15718 +18767 +4278 +43 +887 +5316 +349 +3546 +9 +18768 +764 +4116 +14 +3546 +533 +18769 +20 +352 +18770 +152 +48 +590 +323 +57 +18771 +15541 +22 +18772 +18773 +18774 +18775 +2939 +647 +48 +18776 +18777 +12120 +915 +32 +1615 +11013 +2314 +18778 +48 +6916 +590 +12120 +43 +18779 +11754 +155 +15718 +842 +1604 +18780 +48 +18781 +14 +201 +18782 +741 +48 +43 +18783 +349 +18784 +43 +18785 +5780 +18786 +48 +16881 +9 +16909 +590 +13599 +48 +18787 +2260 +741 +9 +5780 +18788 +1169 +3543 +1013 +741 +1051 +142 +18789 +18345 +8512 +845 +18790 +4814 +18791 +3391 +43 +18792 +48 +286 +48 +48 +18793 +14 +18794 +1912 +250 +18795 +349 +43 +43 +18796 +1559 +18797 +20 +357 +3476 +14001 +590 +15718 +18798 +18799 +43 +18800 +18801 +77 +665 +14 +48 +823 +188 +20 +43 +2430 +2325 +586 +18802 +411 +272 +2806 +18803 +57 +791 +13961 +14 +18804 +18805 +791 +18806 +1765 +590 +18807 +18808 +18809 +1181 +48 +7053 +18810 +201 +14 +3546 +823 +137 +18811 +14162 +155 +43 +4155 +5438 +16383 +3334 +13570 +18045 +18812 +16303 +18813 +823 +20 +43 +9 +318 +14 +590 +18814 +138 +17228 +399 +18815 +887 +349 +43 +821 +16437 +18816 +9543 +590 +18045 +222 +7215 +15384 +137 +2879 +18817 +286 +4963 +514 +349 +18818 +590 +6883 +6950 +2410 +14001 +3546 +32 +19 +43 +13656 +3252 +18819 +1560 +2561 +18037 +19 +9 +188 +764 +48 +32 +15054 +18820 +14477 +14 +647 +16234 +8668 +14603 +1226 +15442 +14 +9 +2577 +18821 +1232 +1425 +6987 +18822 +32 +18823 +43 +48 +3239 +286 +18824 +12987 +3078 +3543 +14 +19 +3546 +18825 +43 +14 +12402 +14477 +14 +48 +18826 +14240 +18827 +48 +18828 +12936 +18553 +18829 +18830 +18831 +736 +17508 +14 +13929 +18832 +43 +43 +349 +18833 +18834 +514 +764 +18835 +2577 +2260 +590 +32 +18836 +13710 +19 +18837 +15718 +18838 +17326 +43 +18839 +18840 +736 +590 +5780 +2129 +18841 +9543 +18842 +14001 +4313 +6950 +9784 +736 +18843 +18844 +736 +18597 +14 +590 +18845 +18846 +18847 +1743 +57 +12404 +48 +48 +18848 +11822 +12792 +18849 +18850 +1716 +11787 +4752 +5908 +16205 +19 +18851 +671 +112 +11593 +18852 +9254 +1559 +249 +18853 +18854 +5161 +18855 +301 +5966 +14203 +15398 +282 +3546 +590 +18856 +18857 +647 +1013 +2865 +18858 +18859 +14 +43 +365 +18860 +15572 +9 +15058 +18861 +48 +3546 +5780 +12479 +15718 +201 +18862 +2 +48 +6950 +18863 +1115 +590 +647 +22 +590 +1955 +18864 +18865 +18866 +9 +2042 +12308 +590 +595 +48 +18867 +18868 +48 +57 +18869 +18870 +48 +18871 +43 +9 +8253 +14477 +14603 +48 +18872 +18873 +665 +590 +16591 +17515 +18874 +736 +1300 +18875 +18876 +48 +15718 +18877 +43 +14 +16 +590 +42 +2896 +60 +3440 +18878 +112 +1149 +9 +349 +18879 +2023 +1612 +18880 +14 +7053 +2537 +18881 +2197 +43 +16437 +208 +18882 +18883 +2260 +18524 +7935 +48 +1566 +9 +3543 +18884 +18885 +43 +18886 +18887 +12987 +53 +18888 +15718 +5438 +1011 +43 +1674 +18889 +19 +18890 +738 +18891 +18892 +188 +18893 +14 +18894 +209 +18895 +57 +349 +18896 +18897 +43 +272 +9396 +10960 +43 +18898 +4414 +18899 +5920 +5188 +349 +18900 +18901 +536 +18902 +20 +18903 +43 +18904 +155 +18905 +18906 +10 +15718 +5169 +349 +19 +2274 +554 +5650 +9125 +1172 +2117 +12560 +397 +1559 +18907 +18908 +18909 +16788 +2372 +770 +590 +43 +1100 +13466 +18910 +323 +18911 +18912 +14 +18913 +9 +18914 +286 +16436 +1169 +18429 +155 +12661 +89 +18915 +8297 +11754 +2471 +3519 +15583 +18916 +323 +349 +18917 +18918 +18919 +11335 +18920 +18921 +1765 +590 +18922 +18923 +48 +3546 +18924 +14 +590 +43 +3 +18925 +3546 +18695 +18926 +17174 +1637 +18927 +18928 +3546 +3 +18929 +48 +7183 +48 +18930 +18931 +17571 +1442 +18932 +3353 +2253 +16981 +15989 +3958 +18933 +15054 +18934 +14 +2733 +43 +18935 +18936 +18937 +43 +18938 +18939 +9 +548 +18940 +18941 +14 +590 +43 +736 +736 +32 +43 +18942 +43 +48 +736 +770 +1100 +4616 +6877 +16437 +43 +3546 +2 +7117 +48 +15718 +590 +18943 +15907 +590 +3440 +590 +18944 +18945 +18946 +8668 +18947 +29 +19 +14 +18948 +3353 +989 +286 +20 +14 +18949 +18950 +2314 +6958 +18951 +616 +14477 +2728 +18952 +43 +18953 +18954 +1217 +18955 +9339 +43 +741 +18956 +14477 +18957 +7703 +18958 +14843 +284 +9 +18959 +370 +18960 +736 +18961 +2320 +323 +43 +18962 +2577 +48 +18963 +18964 +9 +115 +18965 +15718 +18966 +892 +9 +5791 +18967 +15026 +1950 +648 +2733 +18159 +3546 +18968 +18969 +19 +18970 +18971 +18972 +2697 +18973 +590 +77 +18974 +13205 +14 +12404 +155 +5217 +30 +284 +590 +18975 +18976 +35 +5755 +9 +842 +18977 +10 +13361 +18978 +7521 +7233 +1992 +15 +18979 +14666 +32 +590 +43 +17144 +286 +18980 +11754 +18981 +2035 +43 +18695 +18982 +14363 +6518 +18983 +11762 +43 +18984 +18985 +15068 +18986 +18987 +19 +616 +1291 +590 +1232 +10 +18988 +18989 +18990 +222 +268 +18991 +18992 +18993 +17 +303 +7053 +14 +19 +573 +2694 +25 +18980 +18994 +18995 +19 +18996 +18997 +248 +18998 +18999 +213 +2040 +12185 +48 +19000 +1562 +9465 +48 +43 +6499 +19001 +11754 +34 +19002 +9 +6915 +43 +39 +19003 +13529 +9 +707 +19004 +2 +3546 +248 +14604 +19005 +590 +17571 +1870 +3196 +4388 +6543 +22 +48 +9 +19006 +19007 +48 +19008 +155 +48 +19009 +19010 +19011 +3546 +19012 +196 +677 +22 +18695 +19013 +379 +10789 +19014 +19015 +10 +19016 +17177 +989 +19 +13848 +43 +19017 +19018 +77 +57 +19019 +19020 +155 +19021 +5469 +554 +3 +590 +48 +19022 +19023 +48 +590 +284 +1765 +201 +19024 +14 +19025 +19026 +1992 +43 +142 +3059 +6258 +19027 +3546 +19028 +19029 +15 +19030 +213 +1011 +1956 +19031 +43 +188 +188 +15718 +1013 +3926 +751 +533 +14 +7137 +2311 +11754 +19032 +677 +736 +590 +18695 +19033 +379 +19034 +15308 +19035 +19036 +43 +29 +43 +590 +48 +48 +25 +19 +14 +15 +3546 +19037 +13430 +8566 +19038 +3491 +19039 +19040 +9 +8392 +951 +1765 +286 +19041 +19042 +43 +19043 +9 +19044 +43 +694 +13375 +19045 +19046 +14 +19009 +16560 +2733 +19047 +303 +48 +5780 +5780 +5004 +736 +1738 +19048 +536 +19049 +14 +43 +1232 +1529 +48 +19050 +43 +1364 +8668 +48 +15 +19051 +533 +2398 +10 +19052 +17136 +19053 +1181 +19054 +19055 +14001 +15 +19056 +590 +2744 +8351 +19057 +19058 +19059 +19 +303 +5963 +3553 +19060 +48 +2 +19061 +14 +19062 +2019 +19063 +646 +19064 +19065 +3546 +3546 +284 +16 +14 +647 +9144 +770 +12397 +500 +590 +19066 +18045 +5662 +19067 +1434 +19068 +1100 +11762 +19069 +16437 +11283 +1559 +10933 +17801 +3407 +1765 +207 +43 +19070 +3411 +1217 +4803 +19071 +358 +2316 +43 +17871 +590 +19072 +13361 +1049 +19073 +19074 +15718 +19075 +9994 +590 +272 +590 +720 +14 +10 +10 +19076 +19077 +19 +272 +16092 +32 +15718 +19078 +3546 +19079 +19080 +19081 +15718 +9462 +741 +48 +19082 +1961 +16437 +19083 +284 +48 +19084 +19085 +19086 +19087 +155 +19088 +34 +372 +19089 +43 +19090 +57 +16205 +19091 +48 +303 +2019 +14477 +9688 +48 +10 +13361 +19092 +19093 +11822 +19094 +17136 +43 +9 +17653 +272 +48 +349 +209 +19095 +19096 +14477 +19097 +9 +43 +3239 +14 +14 +34 +10 +536 +19098 +19099 +646 +10094 +66 +5601 +7183 +19100 +57 +19101 +7752 +248 +7053 +19102 +112 +19103 +19104 +19 +9 +196 +155 +1051 +11971 +57 +17380 +1481 +43 +19105 +3546 +43 +7032 +43 +815 +19106 +817 +720 +98 +284 +1112 +1013 +19107 +48 +764 +19108 +1232 +20 +112 +19109 +19110 +671 +1745 +9 +19111 +19112 +14 +11321 +303 +19113 +464 +12260 +349 +19114 +201 +24 +2593 +1617 +43 +17698 +19115 +15718 +1559 +43 +179 +15718 +19116 +337 +736 +19117 +16437 +5579 +19118 +19119 +2865 +18896 +19120 +19121 +3353 +915 +554 +2476 +12746 +648 +188 +19122 +19123 +19124 +1223 +19125 +16437 +1562 +17868 +590 +1885 +19126 +1513 +936 +14025 +7053 +272 +19127 +188 +19128 +19046 +990 +736 +43 +19129 +647 +15 +15718 +18951 +19130 +19131 +536 +19132 +19133 +13648 +19134 +19135 +43 +19136 +19137 +19138 +19139 +8249 +19140 +590 +43 +179 +196 +43 +18869 +2430 +19141 +19142 +11321 +19143 +18325 +43 +43 +19144 +3546 +48 +3484 +19145 +284 +1869 +19146 +2577 +736 +2790 +32 +379 +19147 +2042 +19148 +683 +19149 +18940 +448 +15718 +19150 +474 +19151 +590 +32 +19152 +57 +3546 +19153 +823 +17752 +19154 +32 +1310 +19 +43 +43 +19155 +832 +19156 +19157 +19158 +2944 +2694 +19159 +19160 +6766 +32 +590 +43 +3546 +57 +19161 +19162 +19163 +104 +12987 +18334 +19164 +1710 +554 +19165 +11762 +43 +590 +19166 +8553 +43 +19167 +19168 +19 +6950 +1012 +43 +77 +1048 +284 +5391 +19169 +4803 +19170 +2 +286 +5217 +20 +48 +14 +19171 +2197 +741 +19172 +1385 +7137 +19173 +48 +5780 +3546 +43 +43 +284 +19174 +19 +590 +48 +43 +43 +1332 +8668 +19175 +19176 +14189 +19177 +15718 +43 +2694 +1852 +19178 +19179 +720 +6317 +284 +1562 +19180 +1637 +3875 +19181 +845 +43 +590 +349 +9 +7053 +337 +19182 +19 +303 +19183 +19184 +19185 +14363 +1012 +48 +613 +9 +19 +14477 +5344 +19186 +19187 +736 +286 +3546 +1082 +646 +142 +43 +19188 +6250 +155 +13955 +5780 +43 +3544 +683 +1972 +1559 +32 +13375 +3546 +19189 +19190 +12 +155 +19191 +19192 +12158 +2187 +19193 +19 +19194 +11697 +19195 +19196 +590 +1797 +915 +6994 +19197 +3067 +19 +14477 +3095 +4907 +43 +19198 +48 +9 +43 +736 +18928 +48 +19199 +18120 +17698 +20 +80 +104 +19 +3034 +19200 +48 +3 +14215 +19201 +5791 +19202 +18045 +43 +19203 +5204 +19204 +43 +10 +9 +19 +590 +707 +19205 +822 +17920 +19206 +741 +7137 +19207 +14477 +19208 +19209 +19210 +14 +19211 +590 +48 +8249 +19212 +19213 +590 +43 +2329 +48 +10381 +3906 +14 +1920 +19 +197 +19214 +14240 +4166 +17173 +8351 +19215 +377 +19216 +3546 +1823 +9 +14 +14 +18982 +19217 +48 +18695 +5041 +647 +19218 +19 +19219 +554 +3546 +11762 +249 +19 +19220 +19221 +43 +9 +11321 +19222 +19223 +764 +358 +12158 +19224 +48 +19225 +19226 +32 +43 +15718 +9 +19227 +48 +14066 +842 +590 +533 +43 +15001 +286 +19228 +19229 +14515 +411 +19230 +8668 +19231 +19232 +15718 +1559 +286 +155 +48 +48 +16349 +48 +19233 +19234 +19235 +18980 +590 +19236 +11754 +19237 +8807 +1384 +1605 +16437 +573 +38 +17206 +19238 +554 +57 +43 +19239 +3981 +573 +19240 +48 +1425 +19241 +3546 +19242 +43 +43 +19243 +19244 +19245 +48 +19246 +43 +32 +12807 +286 +2314 +590 +1765 +43 +1425 +7747 +19247 +19248 +1232 +19 +43 +5148 +19249 +286 +590 +5344 +19250 +9913 +1107 +736 +43 +13140 +646 +736 +19251 +15123 +19252 +16437 +2804 +4028 +104 +209 +22 +19253 +5780 +7137 +19254 +32 +19255 +5601 +9 +43 +14 +43 +19256 +7053 +19 +15718 +19257 +19258 +349 +43 +155 +155 +19259 +665 +19260 +155 +5623 +43 +3 +14 +19261 +19228 +14435 +19262 +19263 +19264 +1109 +179 +736 +14 +828 +43 +15649 +4634 +14 +19265 +15 +590 +201 +9 +736 +29 +155 +15718 +18980 +1082 +19266 +32 +19267 +20 +155 +14604 +19268 +9 +14957 +9 +19269 +590 +19270 +13807 +2577 +809 +286 +43 +176 +32 +736 +286 +12497 +19271 +43 +19272 +14 +1817 +736 +19273 +18869 +19274 +6143 +720 +33 +6531 +2 +48 +590 +17144 +19275 +19276 +1224 +1217 +155 +554 +677 +590 +14001 +18695 +14604 +5780 +19277 +669 +43 +590 +19278 +647 +14 +14 +683 +3 +9 +2721 +647 +43 +17093 +43 +80 +19279 +19280 +43 +6513 +19281 +1896 +140 +12987 +8131 +16951 +1961 +19282 +3484 +19283 +5808 +206 +19284 +647 +338 +43 +19285 +14 +764 +2187 +46 +3546 +1765 +197 +19286 +18300 +15718 +43 +1765 +19287 +17670 +1224 +19288 +19289 +590 +554 +19290 +43 +14477 +8244 +1668 +19291 +3376 +19292 +19293 +4388 +19294 +14 +19 +32 +590 +1376 +19295 +2287 +317 +48 +48 +19296 +14 +15718 +412 +19297 +43 +19298 +57 +19299 +5780 +19300 +13569 +19301 +19302 +19303 +19304 +1870 +43 +14 +5780 +43 +349 +43 +10592 +43 +272 +2 +228 +317 +19305 +2042 +286 +6877 +2463 +822 +19306 +5627 +19307 +19308 +590 +19309 +7053 +19310 +19 +590 +272 +2988 +736 +671 +16437 +48 +1991 +19311 +16437 +20 +19312 +15718 +14 +14916 +9400 +19313 +7053 +14 +13973 +1224 +8668 +286 +9 +4684 +14102 +4387 +16589 +590 +286 +19314 +1154 +19315 +225 +741 +1364 +2287 +19316 +19317 +4234 +14 +19318 +3546 +1352 +43 +46 +17571 +1352 +2064 +14 +15718 +1991 +19319 +19320 +43 +5391 +5168 +5780 +43 +43 +10 +19321 +1927 +19322 +533 +19323 +1559 +19324 +9 +19325 +12185 +38 +19 +19326 +590 +19327 +19328 +19329 +19330 +19331 +4053 +19332 +19333 +19334 +38 +15718 +29 +5007 +43 +43 +19335 +514 +14 +48 +112 +6766 +8566 +1543 +19336 +12987 +6950 +32 +19337 +19338 +272 +11762 +48 +48 +140 +18969 +14 +2724 +7208 +554 +48 +14 +2197 +19339 +19340 +19341 +14 +1107 +43 +286 +57 +15718 +19342 +19343 +19344 +1612 +14660 +48 +14 +14 +19345 +14962 +9 +19346 +14477 +19347 +19348 +43 +19349 +19350 +14 +19351 +19352 +19353 +2770 +616 +19354 +823 +19355 +19356 +736 +13943 +19357 +3546 +19358 +2287 +19359 +19360 +2865 +586 +5780 +20 +43 +48 +19361 +1524 +9 +590 +19362 +15718 +237 +19363 +155 +18846 +19364 +354 +415 +17112 +491 +19365 +397 +7253 +43 +19366 +8668 +9400 +19367 +43 +4963 +14477 +12923 +13566 +3421 +683 +43 +19368 +16012 +19369 +43 +19370 +112 +19371 +104 +1100 +19372 +19373 +43 +1696 +18954 +7053 +19374 +155 +493 +19 +1989 +43 +590 +3213 +43 +349 +349 +495 +19375 +9 +19376 +19377 +19378 +19 +15 +13532 +19379 +19380 +19381 +4 +43 +19382 +19383 +152 +19384 +19199 +17042 +48 +19385 +18299 +18982 +17602 +19386 +1012 +286 +12987 +48 +19387 +1886 +43 +237 +19388 +823 +19389 +12462 +43 +19390 +1920 +7053 +14 +19391 +2577 +19392 +14 +8508 +19393 +18951 +19394 +15718 +17027 +15 +19395 +2 +13769 +1232 +14689 +43 +19396 +322 +270 +19397 +36 +10500 +19398 +13807 +14 +13656 +16437 +2314 +19399 +14 +14527 +19400 +19401 +19402 +14 +43 +2446 +19 +6776 +597 +19403 +14884 +19404 +19405 +48 +590 +48 +19406 +745 +8218 +19407 +1655 +19408 +138 +736 +12907 +19409 +19410 +19411 +19 +43 +14102 +18045 +43 +2042 +19412 +514 +19413 +43 +16180 +8220 +19414 +19415 +15718 +398 +19416 +4963 +155 +2260 +15 +19417 +19418 +2197 +32 +18448 +43 +233 +18846 +1232 +19419 +19420 +19421 +14477 +19422 +43 +3875 +2035 +19423 +3546 +19424 +19425 +57 +14 +16240 +720 +6054 +43 +590 +14 +57 +19426 +34 +43 +2 +43 +19427 +14856 +19 +19 +8444 +38 +13182 +48 +89 +554 +19428 +14477 +19404 +19429 +19430 +14 +2577 +5088 +250 +1116 +3546 +19431 +188 +590 +9 +43 +19432 +43 +19404 +4918 +1051 +6341 +11210 +19433 +19434 +19435 +18045 +43 +5827 +19436 +536 +43 +720 +19437 +764 +19438 +286 +9396 +19439 +14599 +9024 +19 +5780 +14 +15 +14 +19440 +12807 +17608 +201 +48 +185 +19441 +9039 +12647 +155 +1976 +43 +19 +19442 +176 +823 +349 +3546 +15718 +14 +7117 +14363 +4963 +43 +19443 +583 +671 +16681 +299 +18695 +19444 +3569 +19445 +8668 +5217 +6766 +19446 +19447 +3553 +19448 +590 +140 +8668 +8855 +19167 +736 +10356 +15718 +15 +19449 +19450 +19451 +741 +43 +19452 +2882 +19453 +15718 +19454 +416 +19455 +19 +43 +19 +19456 +19457 +6400 +19458 +32 +3297 +18869 +19459 +6249 +8787 +12987 +19460 +1790 +43 +1051 +15975 +19461 +19462 +112 +720 +11963 +7053 +6766 +17508 +3546 +2 +19463 +19404 +1251 +19 +164 +1889 +19464 +823 +4803 +590 +2 +590 +19465 +8668 +736 +57 +11483 +19466 +19467 +43 +3484 +590 +2 +9 +19468 +188 +19469 +19470 +1912 +590 +12987 +43 +2577 +9 +3546 +140 +19471 +19472 +19473 +19474 +19475 +13361 +155 +48 +823 +16640 +22 +22 +478 +19476 +19477 +11646 +17043 +19478 +18980 +1091 +19479 +19480 +14603 +741 +2117 +554 +1444 +1120 +14604 +98 +11158 +19481 +11754 +43 +19482 +155 +155 +9 +19483 +19484 +19485 +53 +19486 +19487 +17281 +19488 +19489 +1817 +19490 +19491 +19492 +3546 +19493 +15718 +19494 +597 +43 +14804 +2 +2561 +6468 +19495 +19496 +13848 +19497 +590 +43 +43 +15718 +19105 +809 +2983 +57 +19498 +19499 +19500 +19501 +1798 +43 +19502 +707 +18163 +14 +18980 +14604 +11301 +43 +19503 +19504 +19505 +19 +17433 +43 +2121 +590 +19506 +6776 +19507 +15718 +19508 +19404 +19509 +9 +19510 +19511 +1011 +349 +16085 +15718 +7053 +17799 +13663 +14477 +464 +19512 +286 +57 +8392 +19513 +861 +249 +17730 +19514 +1559 +19 +8041 +19515 +8460 +43 +9259 +5208 +19516 +8367 +11428 +57 +19517 +15718 +14 +19518 +1912 +18695 +5298 +13954 +19519 +43 +590 +17635 +19520 +13375 +491 +43 +19521 +43 +5780 +14 +19522 +19523 +19524 +1578 +1542 +590 +286 +18695 +14 +4050 +5780 +19525 +16387 +19526 +19527 +43 +823 +590 +57 +9688 +43 +18982 +19 +10 +1021 +57 +14770 +18503 +19 +1561 +554 +14467 +10500 +2040 +19528 +616 +745 +19529 +43 +11754 +19530 +19531 +590 +43 +19532 +17972 +19 +514 +9 +43 +4803 +9 +13798 +209 +17314 +1524 +48 +43 +349 +43 +1244 +43 +19533 +19534 +19535 +137 +370 +958 +19536 +2 +3034 +16092 +19537 +19538 +188 +10 +13150 +590 +19539 +464 +8188 +15324 +590 +14 +373 +3484 +10287 +19540 +3030 +19541 +4907 +43 +138 +19542 +590 +19543 +354 +15572 +1817 +8895 +19 +18980 +19544 +19545 +19 +19546 +590 +19547 +196 +19 +19548 +197 +7855 +15 +19549 +613 +8668 +19550 +19551 +625 +19552 +14 +8220 +43 +18951 +8110 +4963 +1765 +4963 +19553 +736 +155 +19554 +19555 +2415 +20 +2804 +590 +19556 +32 +16118 +16283 +13915 +2406 +19557 +19558 +493 +19559 +13361 +19560 +43 +19404 +19561 +19562 +5561 +43 +22 +590 +736 +19563 +349 +19564 +43 +155 +43 +3876 +1481 +1100 +19565 +398 +19566 +715 +1471 +3546 +1710 +19567 +15874 +6950 +19568 +19569 +14 +590 +19570 +3251 +19571 +14843 +19572 +514 +112 +9 +19573 +15718 +19 +19 +155 +11593 +16437 +249 +19574 +42 +301 +43 +6086 +9 +590 +971 +3546 +19575 +809 +19576 +536 +19577 +1810 +19578 +3546 +349 +7053 +4028 +590 +5314 +3417 +736 +14 +19 +43 +14843 +8392 +14527 +15 +17342 +2624 +19579 +19580 +3492 +342 +122 +19581 +43 +19582 +5489 +43 +493 +43 +2561 +43 +19583 +19584 +19585 +19586 +19587 +15989 +43 +1112 +3546 +590 +19588 +4 +9 +2733 +19199 +19 +19589 +19590 +590 +19591 +19592 +3546 +48 +19593 +19 +1648 +339 +3546 +19594 +57 +19404 +19595 +590 +19596 +38 +19597 +19598 +741 +3546 +19599 +16329 +25 +18577 +1470 +15718 +5207 +19600 +5415 +43 +5780 +1502 +43 +590 +19601 +14477 +1481 +196 +19602 +43 +43 +1765 +4806 +15718 +9 +8668 +43 +12953 +19603 +19604 +19605 +827 +4821 +19606 +19607 +19335 +8668 +19608 +19609 +3944 +14 +19610 +19404 +19611 +548 +12777 +4411 +19612 +43 +19 +3546 +19 +6837 +19404 +43 +14477 +2 +19613 +19614 +541 +15 +590 +19615 +590 +4084 +19616 +89 +20 +19304 +35 +19617 +20 +19618 +14 +14 +8297 +1961 +647 +15718 +770 +5780 +19619 +19 +13466 +19620 +19 +365 +15718 +14477 +10 +19621 +19 +19622 +43 +6122 +2006 +736 +19623 +16437 +19624 +2035 +113 +155 +2260 +18774 +19625 +2260 +57 +13205 +284 +10 +19626 +19627 +590 +19628 +1295 +5780 +89 +358 +8392 +19618 +19629 +164 +19630 +19631 +16527 +89 +1232 +19 +5371 +19632 +19633 +19634 +15718 +9 +12987 +2859 +18695 +1688 +7110 +43 +1300 +19635 +14 +590 +15669 +1013 +19 +6883 +19 +48 +19 +13279 +19636 +43 +19637 +18742 +98 +17919 +2804 +43 +7377 +14 +57 +292 +19638 +43 +590 +19639 +43 +1604 +303 +19640 +15220 +19641 +14527 +736 +19642 +19643 +17032 +43 +286 +19644 +3519 +10899 +286 +19404 +137 +19056 +19618 +19645 +19646 +16437 +14240 +18100 +19647 +19648 +19649 +19650 +19651 +19652 +2672 +9567 +19653 +19404 +16866 +19654 +5169 +19655 +19656 +590 +134 +1870 +11762 +32 +349 +19657 +248 +248 +590 +1517 +19658 +2577 +337 +19659 +5211 +1765 +19660 +1768 +4905 +19661 +1696 +590 +3546 +19662 +3488 +19663 +1385 +14477 +736 +19664 +43 +19665 +533 +8355 +1901 +8244 +18980 +43 +3330 +18982 +12245 +15718 +13566 +446 +19666 +8853 +349 +284 +590 +7053 +337 +15737 +19667 +13465 +707 +14 +590 +1961 +15881 +19668 +373 +188 +14175 +352 +17941 +155 +19669 +43 +19670 +7328 +4722 +590 +1442 +349 +19432 +19671 +286 +9163 +357 +19672 +18045 +19673 +14477 +14 +9 +2197 +9 +19674 +9 +19675 +19676 +19677 +19678 +3546 +5188 +2029 +249 +8255 +3559 +349 +3546 +43 +16092 +19679 +17698 +337 +19680 +19 +14 +590 +590 +1104 +248 +19681 +19618 +19682 +9474 +19683 +19684 +15 +19685 +10 +533 +15054 +3546 +1228 +1606 +8953 +19686 +15 +7137 +15718 +11762 +303 +764 +823 +19687 +15924 +7137 +19688 +19689 +736 +823 +155 +19690 +3353 +19691 +19692 +17085 +19693 +3330 +3546 +286 +19694 +3546 +43 +209 +15 +590 +19695 +19696 +19697 +19698 +19699 +19 +337 +43 +19700 +19701 +704 +19702 +2593 +43 +57 +16102 +19703 +19704 +14342 +14660 +1605 +590 +19705 +19706 +19707 +19708 +19709 +19 +1090 +19710 +19 +43 +4684 +10 +32 +286 +7137 +152 +10356 +19711 +2051 +19712 +9 +317 +286 +2762 +20 +1310 +3546 +14 +2042 +57 +19713 +19714 +1112 +17608 +19715 +18982 +2593 +155 +14477 +16981 +3 +19 +2412 +19716 +19717 +24 +1955 +19718 +14185 +43 +6058 +19719 +19720 +590 +32 +19 +16866 +19721 +19722 +2356 +9400 +19655 +19723 +19724 +14369 +6095 +590 +736 +14 +43 +5267 +38 +707 +19725 +155 +8716 +155 +19726 +19727 +213 +19728 +19729 +665 +4793 +43 +7053 +18980 +590 +19730 +19731 +19732 +15718 +736 +286 +2804 +286 +19733 +19734 +286 +533 +19735 +19736 +19737 +19738 +9 +19739 +2310 +14527 +19655 +155 +1018 +43 +19740 +15 +2009 +19741 +9 +373 +286 +14477 +19199 +14 +12534 +19 +19742 +19743 +112 +2804 +2 +14477 +42 +19744 +491 +15718 +7053 +448 +137 +770 +1513 +590 +15718 +19745 +284 +6595 +22 +14 +19746 +19747 +19748 +19749 +484 +11970 +43 +19750 +5267 +19 +19751 +13343 +2314 +57 +19097 +19752 +18980 +91 +19753 +19754 +19755 +284 +1131 +19756 +19370 +19 +3546 +213 +16437 +9 +19757 +43 +19758 +822 +42 +19759 +43 +5410 +19760 +76 +3546 +16437 +15647 +19761 +43 +15718 +19762 +1514 +43 +272 +19763 +19764 +3275 +1710 +19765 +7053 +19766 +19092 +43 +3472 +11762 +19655 +19767 +19768 +19769 +6518 +16437 +8610 +19 +4411 +19770 +43 +19771 +19772 +19773 +188 +57 +8849 +8392 +249 +286 +1559 +9 +15384 +19774 +137 +15718 +19775 +3546 +35 +19776 +19777 +142 +19618 +3546 +19618 +43 +286 +3546 +590 +7291 +19778 +554 +3546 +14 +19779 +5080 +1812 +19 +590 +19780 +19781 +112 +1961 +9184 +3546 +9402 +18045 +9102 +6565 +971 +142 +7053 +12363 +377 +19618 +379 +19782 +19783 +19784 +10527 +9 +19785 +19786 +19 +16826 +19787 +19655 +16437 +15649 +19788 +1920 +19789 +19618 +6766 +13282 +12067 +19790 +19791 +3546 +3995 +19 +19618 +16272 +18321 +43 +14604 +13841 +188 +19792 +647 +19793 +19794 +590 +19795 +19796 +19797 +6504 +19798 +14 +14 +3546 +19799 +683 +10311 +1364 +464 +19800 +1765 +317 +5780 +201 +554 +7137 +19801 +19792 +15989 +19802 +19803 +1226 +19804 +19805 +823 +19806 +19807 +827 +1559 +19808 +349 +1013 +19809 +3310 +19810 +36 +19811 +19792 +19812 +19813 +705 +43 +19 +590 +19814 +6950 +1514 +13985 +19815 +18176 +57 +32 +10946 +19816 +8351 +17865 +19404 +19817 +19 +19818 +286 +9 +305 +19819 +4487 +284 +823 +155 +989 +5101 +590 +11483 +19820 +8721 +303 +7855 +213 +19821 +9 +248 +1513 +188 +43 +19822 +213 +411 +14 +4502 +19823 +6877 +337 +249 +34 +14 +19824 +19825 +19826 +20 +19827 +377 +16126 +14 +19828 +20 +19829 +303 +861 +284 +20 +13150 +1428 +213 +3546 +19830 +19831 +12101 +286 +14604 +248 +5780 +19832 +15718 +3353 +1011 +564 +19833 +303 +1425 +19655 +8392 +15886 +19834 +14 +19835 +3546 +19836 +6335 +5780 +4274 +3050 +19837 +10 +16437 +19618 +19838 +20 +15718 +19839 +736 +43 +19840 +4174 +14 +379 +2314 +7053 +19841 +19218 +2694 +15718 +1224 +286 +19806 +152 +9 +517 +18695 +19842 +19843 +1310 +8351 +2029 +19618 +19 +5780 +14477 +2006 +48 +9245 +19844 +14477 +14 +19618 +1560 +19845 +19846 +19042 +19847 +16437 +19848 +1924 +19849 +29 +19850 +19851 +19806 +2164 +57 +3790 +188 +1444 +8444 +349 +1502 +18120 +18695 +19 +19852 +286 +19853 +248 +958 +286 +19854 +14483 +19855 +19856 +19857 +16826 +19858 +720 +19 +19859 +13150 +13913 +14603 +19860 +14 +43 +823 +19861 +4550 +19862 +19863 +19864 +5791 +19439 +19 +590 +19865 +15 +3497 +4 +111 +57 +15718 +349 +43 +12005 +19866 +43 +4801 +554 +19867 +19491 +4406 +1090 +1386 +815 +225 +2 +5344 +19618 +19868 +14 +19 +3546 +9 +248 +18896 +19869 +155 +19870 +19871 +19872 +16024 +1234 +1369 +590 +43 +736 +19655 +2446 +7053 +19873 +19 +19874 +3491 +323 +8779 +586 +7137 +19875 +14 +19806 +16445 +19876 +43 +155 +19877 +15406 +590 +590 +3842 +19878 +19879 +8244 +19880 +19618 +19618 +10729 +19881 +13959 +32 +19882 +2 +19883 +2561 +2356 +36 +790 +14363 +19884 +19885 +861 +19886 +19887 +15718 +19806 +12807 +188 +15718 +19888 +827 +155 +4398 +19889 +989 +286 +112 +1444 +484 +7137 +19890 +827 +7053 +2234 +19 +2032 +1513 +19891 +741 +2259 +14477 +590 +590 +18695 +15285 +1083 +16190 +10381 +19892 +19893 +2040 +1013 +573 +14363 +6741 +590 +736 +19894 +3546 +19895 +14 +19896 +19897 +9 +12067 +736 +1013 +915 +19618 +790 +2849 +286 +14 +213 +5780 +5088 +19898 +1563 +323 +16466 +2117 +554 +2047 +19899 +736 +19900 +286 +1051 +15087 +33 +1083 +17320 +590 +3034 +7923 +19901 +2 +12913 +12093 +19902 +19618 +19903 +112 +1944 +16310 +4278 +14604 +19904 +5791 +19905 +19906 +16183 +43 +19907 +16437 +19908 +3491 +9 +19909 +3546 +19910 +19911 +736 +17604 +188 +3546 +11966 +32 +43 +19912 +9410 +19913 +19914 +43 +14 +19915 +7419 +19916 +112 +19917 +736 +2446 +48 +1139 +19918 +104 +43 +349 +19919 +18771 +188 +7032 +19920 +18891 +15 +1051 +6363 +19921 +3251 +18684 +1907 +19922 +823 +3427 +43 +14 +13375 +19923 +14477 +19404 +19618 +2415 +2314 +189 +5249 +398 +19924 +19925 +19926 +19927 +500 +3546 +18561 +5283 +554 +20 +1559 +35 +19928 +19929 +4634 +16437 +12247 +284 +14846 +43 +19930 +1559 +8566 +10 +13848 +15718 +140 +14770 +19931 +16121 +15592 +19932 +19933 +213 +19934 +213 +284 +19935 +19936 +14 +19 +647 +1112 +19937 +14363 +590 +19938 +10503 +19 +284 +18503 +11870 +19939 +19618 +19940 +32 +15718 +19941 +14 +349 +1559 +19942 +43 +736 +736 +19943 +3546 +99 +19646 +19618 +15718 +17698 +7260 +19944 +14 +14 +48 +18683 +19945 +970 +1566 +188 +13656 +19946 +303 +19947 +13566 +19 +4083 +15718 +19948 +1529 +19949 +19950 +19951 +119 +8566 +3635 +1157 +7053 +248 +19952 +19953 +176 +1021 +9 +4747 +19954 +303 +5623 +7987 +7208 +19 +10 +13179 +4196 +337 +1889 +19404 +19955 +19956 +19957 +2577 +19958 +19959 +2260 +19 +19960 +284 +19961 +19962 +17903 +19963 +19964 +9 +43 +276 +3 +1992 +11321 +19965 +17698 +1234 +1013 +228 +19966 +303 +14 +7137 +1244 +77 +713 +4963 +19967 +19404 +827 +19968 +11754 +15 +19969 +6741 +3546 +823 +19970 +1051 +590 +379 +19971 +19972 +19439 +19973 +745 +13282 +9 +7053 +19974 +16 +3546 +16855 +349 +1688 +19975 +671 +19976 +19289 +43 +770 +9 +19 +1517 +14 +19977 +19978 +8566 +13140 +15054 +5627 +14 +60 +1364 +19979 +13279 +19980 +597 +590 +19981 +19982 +12987 +19983 +32 +178 +12973 +19 +19984 +1236 +25 +19985 +17920 +1224 +2476 +10094 +19655 +60 +303 +14523 +6766 +19986 +19987 +15718 +19988 +8460 +140 +14143 +43 +43 +19806 +188 +19989 +19990 +9 +1051 +17774 +15384 +7836 +15 +19991 +19992 +19993 +19 +19994 +213 +5623 +12479 +19995 +98 +43 +16375 +19996 +248 +957 +19 +19997 +349 +8668 +590 +19998 +19999 +20000 +1415 +1013 +20001 +590 +15718 +19 +20002 +736 +137 +20003 +1920 +20004 +20005 +1574 +19 +16014 +1222 +7799 +14422 +20006 +19806 +286 +20007 +188 +20008 +590 +1300 +5561 +2 +303 +19404 +20009 +10003 +20010 +2577 +323 +5022 +20011 +19 +32 +19404 +17541 +20012 +4966 +7276 +5963 +20013 +590 +20014 +57 +790 +20015 +10 +20016 +20017 +827 +8685 +20018 +20019 +1229 +736 +20020 +554 +20021 +20022 +2166 +20023 +7609 +1817 +5582 +613 +14477 +20024 +57 +20025 +20026 +2694 +14020 +14 +14 +20027 +20028 +590 +9 +4227 +3172 +20029 +22 +19404 +20030 +249 +29 +1912 +20031 +20032 +43 +1765 +2764 +7855 +20033 +20034 +15080 +20035 +16831 +19404 +17661 +20036 +3546 +19655 +9 +98 +14 +651 +11483 +155 +20037 +19 +20038 +3743 +20039 +583 +4 +16437 +20040 +7053 +9 +20041 +19404 +11762 +19806 +16165 +286 +590 +19618 +6565 +2577 +20042 +15584 +19917 +20043 +3546 +16437 +20044 +43 +20045 +3546 +14977 +500 +5438 +16437 +15718 +209 +30 +20046 +20047 +20048 +4278 +20049 +536 +519 +20050 +3507 +19 +29 +20051 +22 +19381 +20052 +20053 +20054 +10381 +8668 +20055 +1013 +10310 +20056 +16866 +22 +16798 +590 +317 +20057 +1107 +20058 +16437 +13908 +1224 +20059 +80 +1870 +20060 +57 +43 +20061 +358 +14 +373 +20062 +19618 +6915 +20063 +20064 +20065 +20066 +14 +14429 +20067 +20068 +20069 +1212 +20070 +20071 +20072 +20073 +20074 +20075 +3958 +20076 +3256 +19 +20077 +3470 +20078 +201 +647 +4088 +2550 +1091 +486 +6505 +764 +38 +286 +16437 +43 +17374 +20079 +36 +20080 +20081 +20082 +20083 +20084 +19618 +554 +20085 +20086 +10028 +43 +373 +20087 +1112 +6214 +11762 +20088 +20089 +57 +936 +568 +11298 +17229 +20090 +286 +43 +3546 +16925 +20091 +1437 +20092 +20093 +3546 +20094 +597 +3698 +99 +15718 +137 +20095 +20 +20096 +1779 +7053 +19009 +9 +201 +20097 +14 +20098 +736 +20099 +20100 +20101 +823 +20 +138 +1047 +576 +11762 +15718 +43 +20102 +20103 +22 +20104 +590 +457 +10 +14603 +2770 +1107 +6395 +20105 +8668 +286 +57 +20106 +764 +3546 +20107 +20108 +19 +20109 +14 +19618 +5297 +20110 +16640 +20111 +20112 +2733 +823 +20113 +17555 +18539 +2577 +32 +42 +43 +20 +14 +20114 +20115 +7815 +1716 +590 +19 +14603 +7516 +6741 +712 +22 +20116 +16866 +43 +10356 +14 +20117 +20118 +43 +7137 +5627 +20119 +4765 +936 +915 +20120 +8218 +14 +20121 +8110 +590 +415 +18325 +7137 +11754 +201 +647 +14299 +15718 +20122 +14 +872 +20123 +20124 +19806 +11321 +16925 +9 +10 +7419 +16437 +15810 +1013 +13150 +2637 +20125 +7137 +20126 +20127 +590 +43 +11389 +20128 +1013 +3546 +736 +201 +274 +19806 +1230 +20 +18852 +15718 +19404 +4165 +19091 +10500 +9 +43 +1513 +20129 +14 +2164 +11754 +20130 +1574 +15 +1578 +15718 +835 +43 +19618 +1316 +13713 +647 +7379 +20131 +20132 +20133 +4426 +20134 +14973 +349 +1115 +5144 +57 +15718 +3 +20135 +19404 +20136 +20137 +20138 +35 +736 +19618 +764 +188 +20139 +873 +22 +411 +3236 +15718 +9738 +323 +9 +2561 +20140 +20141 +43 +9 +249 +179 +5670 +2197 +20142 +20143 +20144 +20145 +20146 +15718 +20147 +43 +14148 +20148 +11341 +15925 +20149 +19404 +1012 +2264 +15655 +1051 +1013 +20150 +19618 +20151 +15351 +20152 +1765 +20153 +20154 +14604 +20155 +20156 +20157 +19806 +201 +2517 +20158 +2349 +19 +43 +2594 +9 +20159 +19852 +19 +20160 +20161 +14 +14 +16881 +43 +14477 +590 +9 +349 +12404 +14148 +9194 +20162 +140 +665 +19404 +2 +590 +7379 +20163 +2476 +9 +3 +9713 +554 +80 +827 +5316 +739 +20164 +12620 +20165 +19 +20166 +20167 +272 +20168 +2 +536 +20169 +20170 +3546 +590 +19091 +20171 +286 +20172 +18145 +20173 +20174 +15186 +20175 +616 +3546 +590 +20176 +1249 +48 +1048 +6217 +20177 +20178 +20179 +14477 +3794 +20180 +16028 +2804 +16310 +20181 +1912 +20182 +14816 +1253 +20183 +20184 +20185 +12957 +15718 +736 +20186 +20187 +20188 +286 +4907 +19792 +8809 +20189 +2577 +14 +20190 +1012 +80 +11976 +2884 +6058 +19618 +67 +4313 +823 +2 +9 +13566 +358 +43 +43 +1082 +1425 +20 +20191 +1542 +20192 +1148 +14947 +20193 +5522 +736 +365 +20194 +2577 +20195 +20196 +3635 +43 +373 +19335 +16798 +20197 +20198 +9363 +7053 +20199 +3543 +20200 +35 +590 +48 +20201 +20202 +9688 +9 +20203 +590 +1013 +9 +20204 +20205 +20206 +10117 +13137 +1244 +20207 +19 +14 +20208 +14 +9 +3553 +20209 +20210 +16242 +20211 +15018 +20212 +646 +1107 +20213 +20214 +5080 +2577 +17698 +19 +20215 +17571 +736 +19618 +736 +9 +18283 +590 +15718 +20216 +20217 +349 +20218 +14961 +1051 +286 +20219 +20220 +20221 +286 +9 +20222 +1276 +105 +19 +20223 +3236 +10 +832 +20224 +245 +970 +20225 +3546 +448 +20226 +8188 +14 +3329 +20227 +20228 +9 +20229 +3546 +15718 +20230 +188 +43 +19618 +2430 +286 +14066 +20231 +590 +9440 +5791 +20232 +20233 +43 +15533 +43 +272 +43 +3105 +25 +20234 +209 +14 +20235 +20236 +178 +345 +15718 +185 +5837 +19404 +43 +178 +4963 +1105 +6341 +590 +15541 +57 +192 +248 +349 +5755 +349 +15158 +2330 +43 +18579 +19618 +13279 +20237 +43 +20238 +20239 +18154 +20240 +2129 +915 +20241 +15718 +20242 +6364 +20243 +586 +6028 +13566 +3213 +4126 +20244 +60 +11087 +20245 +736 +9 +11762 +12005 +8668 +43 +16014 +286 +8188 +1956 +4765 +20246 +10946 +20247 +8668 +16981 +20248 +736 +20249 +14 +369 +2804 +20250 +14343 +822 +411 +590 +20251 +365 +11762 +590 +19618 +20 +16925 +20252 +20253 +20254 +20255 +5990 +10 +20256 +19618 +1710 +20257 +19806 +8853 +20258 +9 +14420 +5438 +12555 +1991 +20259 +16656 +2561 +20260 +411 +14 +1107 +274 +590 +20261 +10 +20262 +5920 +20263 +20264 +590 +20265 +43 +80 +14 +20266 +20267 +20268 +20269 +2694 +2314 +3546 +20270 +1927 +10038 +1083 +20271 +14 +15 +1765 +14148 +3553 +590 +831 +14215 +823 +9 +736 +20272 +20273 +2790 +590 +5080 +17821 +20274 +20275 +2577 +6776 +14 +20276 +305 +20277 +9 +20278 +736 +19939 +736 +1364 +10004 +707 +9396 +14 +32 +20279 +15649 +43 +20280 +19 +2577 +323 +5803 +43 +4963 +736 +15718 +18951 +590 +20281 +613 +15595 +20282 +2896 +43 +501 +1154 +19 +14127 +14185 +7032 +20283 +3546 +2770 +509 +3 +19 +43 +15744 +20284 +43 +20285 +20286 +20287 +20288 +8668 +32 +1382 +5820 +282 +2694 +2476 +20289 +32 +590 +57 +20290 +554 +14 +20291 +15925 +9 +6924 +20292 +20293 +20294 +1112 +1444 +10094 +20295 +14026 +20296 +20297 +17112 +2577 +17338 +9 +2561 +1234 +20298 +736 +10946 +590 +20299 +43 +1295 +20300 +20301 +1612 +20302 +15 +9 +1578 +20303 +9 +11966 +9 +20304 +861 +14216 +6011 +20305 +286 +272 +590 +20306 +11822 +20307 +201 +286 +352 +14 +4547 +20308 +20309 +15193 +14 +17635 +20310 +20311 +19655 +14 +3546 +20312 +15647 +20313 +1051 +20314 +14 +305 +2459 +20315 +20316 +20317 +20318 +20319 +2835 +861 +19618 +590 +668 +2 +43 +15 +19 +14363 +14868 +14 +20320 +19404 +32 +20321 +98 +20322 +176 +43 +19 +13349 +491 +349 +18661 +14477 +3732 +20323 +1560 +19618 +20324 +20325 +411 +20326 +842 +17920 +15718 +20327 +20328 +20329 +20330 +20331 +20332 +15718 +20333 +192 +2 +19 +19 +22 +19618 +19806 +20334 +20335 +590 +4952 +155 +3546 +17872 +20336 +20 +20337 +11321 +3909 +540 +20338 +2577 +20339 +20340 +20341 +536 +22 +20342 +7053 +20343 +20344 +1091 +2794 +1013 +196 +2577 +11482 +20345 +20346 +616 +590 +379 +20347 +349 +32 +20348 +20349 +43 +5659 +43 +5780 +20350 +13179 +2325 +12397 +43 +57 +14666 +10356 +20351 +36 +20352 +20353 +18956 +14477 +188 +8100 +20354 +20355 +1245 +2971 +7053 +19618 +20356 +20357 +274 +19618 +19618 +9 +7328 +14 +20358 +20359 +12397 +19618 +20360 +936 +1536 +20361 +821 +32 +20362 +20363 +20364 +15141 +14 +14131 +4506 +7048 +20365 +20366 +20367 +7701 +15718 +823 +15718 +590 +43 +12987 +20368 +9 +20369 +14 +1716 +18503 +272 +20370 +20371 +20372 +20373 +10230 +20374 +20 +19 +2253 +590 +677 +955 +20375 +15589 +751 +20376 +20377 +209 +20378 +20379 +20380 +12241 +8367 +861 +20381 +20382 +20383 +20384 +18982 +20385 +19655 +19404 +1738 +20386 +1942 +2463 +707 +20387 +11230 +209 +43 +4023 +20388 +14604 +20389 +20390 +20391 +20392 +3 +20393 +18695 +20394 +19 +19618 +650 +19618 +2410 +1217 +590 +20395 +20396 +20397 +5780 +3546 +15824 +19618 +1019 +222 +2561 +20398 +20399 +19 +683 +20400 +20401 +20402 +707 +155 +32 +43 +43 +19 +20403 +20404 +20405 +2064 +20406 +9 +590 +16437 +19618 +20407 +15586 +59 +736 +2316 +2316 +164 +541 +13257 +201 +20408 +20409 +43 +98 +14 +610 +9 +20410 +7053 +20411 +20412 +19618 +590 +20413 +19618 +8297 +916 +20414 +18951 +3546 +6766 +20415 +15718 +10163 +736 +22 +415 +20416 +155 +20417 +20418 +20419 +15384 +2144 +8392 +5780 +20420 +286 +1169 +20421 +12231 +1738 +57 +20422 +15654 +19 +10 +19618 +379 +1513 +1224 +19655 +20423 +20424 +20425 +19618 +20426 +20427 +19404 +4126 +20428 +20429 +9526 +89 +590 +20430 +20431 +20432 +6095 +20433 +20434 +20435 +57 +20436 +14299 +349 +1011 +20437 +20438 +20439 +20440 +373 +20441 +20442 +7477 +20443 +7045 +20444 +10287 +20445 +2593 +1696 +865 +32 +46 +764 +590 +590 +9 +19618 +43 +590 +1765 +19917 +20446 +20447 +369 +20448 +20449 +16205 +18045 +20450 +18100 +9497 +19 +14 +19797 +2733 +14 +20451 +19618 +43 +8668 +155 +4961 +15718 +17482 +8188 +15718 +20452 +12987 +439 +20453 +19 +14 +20454 +18798 +1716 +20455 +20456 +20457 +20458 +3353 +20459 +20460 +707 +3034 +7053 +20461 +155 +4963 +20462 +345 +14001 +20463 +57 +7912 +14 +20464 +5780 +1316 +20465 +15 +20466 +20467 +9 +20468 +1529 +12987 +736 +20469 +14477 +4684 +20470 +20471 +2 +43 +20472 +209 +590 +1082 +20473 +1965 +1013 +20474 +57 +17084 +9 +43 +138 +20475 +20476 +7253 +20477 +20478 +20479 +8188 +6518 +7536 +20480 +720 +1912 +16925 +20481 +20482 +20483 +6571 +20484 +20485 +14477 +20486 +15 +20487 +20488 +14148 +20489 +20490 +1166 +5773 +20491 +20492 +29 +865 +720 +3317 +12304 +8882 +20493 +379 +3546 +2009 +20 +43 +14 +20494 +20495 +19655 +20496 +32 +18956 +19655 +20497 +15718 +19618 +1566 +4028 +915 +590 +282 +20498 +590 +20499 +845 +19742 +9 +43 +2260 +14 +13582 +345 +20500 +20501 +19 +9 +43 +14001 +32 +20502 +20503 +2260 +590 +20504 +1991 +20505 +647 +35 +20506 +5438 +8882 +590 +19806 +590 +20507 +5780 +19618 +43 +19618 +8255 +4565 +245 +188 +8367 +12013 +20508 +20509 +20510 +20511 +1307 +272 +590 +590 +446 +5197 +349 +20512 +20513 +2314 +201 +155 +20514 +11315 +155 +66 +2832 +8188 +155 +7053 +464 +15654 +345 +20515 +19618 +14 +14 +1612 +20 +4441 +196 +188 +20516 +15718 +19618 +4141 +20517 +345 +14 +43 +590 +2064 +554 +440 +20518 +17151 +20519 +397 +1520 +43 +20520 +349 +20521 +22 +43 +20522 +17228 +20523 +20524 +590 +20525 +20526 +19618 +14 +213 +590 +2035 +20527 +3546 +9 +13807 +5314 +3546 +14477 +10 +14 +14 +1809 +4918 +9801 +20528 +20529 +53 +14 +20530 +155 +3 +155 +15718 +484 +1765 +20531 +19404 +20532 +89 +770 +1224 +3067 +823 +5217 +345 +14562 +19218 +272 +590 +590 +19 +19 +4775 +20533 +1287 +20534 +19618 +20535 +20536 +590 +16205 +2561 +12987 +20537 +20538 +20539 +19 +155 +20 +43 +20540 +590 +20541 +20542 +20543 +18283 +736 +12402 +7521 +43 +20544 +17834 +595 +17670 +3421 +10 +20545 +272 +2260 +20546 +14604 +15315 +14260 +89 +20547 +20548 +2029 +20549 +3546 +345 +379 +20550 +20551 +1442 +20552 +15718 +18956 +10 +213 +3417 +20553 +558 +18683 +751 +17698 +20554 +2 +20555 +16844 +15718 +2975 +345 +20 +20556 +80 +14477 +209 +20557 +5438 +3546 +16437 +13854 +20558 +6441 +20559 +9 +20560 +1224 +20561 +3546 +43 +20562 +1559 +647 +20563 +1230 +19 +192 +249 +3546 +20564 +713 +6071 +20565 +20435 +20566 +20567 +12987 +20558 +736 +20568 +736 +1112 +43 +4313 +20569 +14 +19091 +14363 +648 +9941 +12827 +20570 +20571 +16844 +1157 +15308 +57 +20572 +2790 +9898 +20573 +20574 +20 +3546 +3546 +713 +590 +80 +112 +1920 +20575 +20576 +349 +20577 +20578 +2694 +736 +19618 +4028 +13539 +20579 +20388 +6741 +5052 +7364 +915 +20580 +349 +736 +20581 +20582 +20583 +20584 +20585 +20586 +20587 +354 +20588 +272 +43 +5117 +7176 +745 +1698 +745 +7137 +647 +20589 +20590 +35 +20591 +20592 +15267 +20593 +736 +20594 +14342 +7053 +1727 +9 +683 +20595 +12832 +1508 +647 +32 +43 +20596 +14 +19 +590 +20597 +15718 +43 +4341 +590 +19 +13959 +38 +2865 +8256 +417 +32 +13566 +19197 +9 +15001 +7379 +14 +32 +15718 +736 +20598 +6741 +2125 +823 +3353 +20599 +20600 +10880 +10574 +3546 +15718 +20601 +9 +20602 +16437 +14 +22 +20603 +20604 +7053 +32 +16743 +1710 +6701 +20605 +590 +15 +19 +3435 +20606 +57 +14603 +2844 +12480 +349 +8149 +19618 +20607 +18798 +9320 +1889 +20608 +77 +11995 +19 +8015 +20609 +323 +20610 +18503 +14 +20611 +20612 +915 +14 +20613 +5601 +32 +18951 +286 +3546 +14477 +19618 +18045 +5333 +19618 +590 +17920 +647 +3546 +188 +20614 +19 +3407 +209 +20615 +19404 +6420 +3 +14477 +16437 +15 +1208 +185 +590 +20616 +19618 +20617 +14477 +17247 +720 +1569 +493 +590 +1212 +17872 +3213 +18862 +20 +20618 +13307 +213 +20619 +20620 +3546 +272 +20621 +43 +20622 +590 +20623 +8967 +377 +736 +20624 +286 +178 +590 +736 +20555 +20625 +20626 +3050 +19 +2314 +1251 +791 +590 +34 +18951 +357 +5780 +1013 +20627 +16389 +20628 +20629 +713 +761 +20630 +533 +1013 +5542 +10 +1442 +646 +20631 +3 +20632 +5780 +20633 +20634 +337 +590 +20635 +16927 +3999 +20636 +590 +17698 +7743 +1217 +1385 +2925 +6741 +20637 +20638 +57 +18052 +590 +6294 +20639 +1688 +10230 +20640 +20641 +2517 +20642 +20643 +32 +842 +20644 +19 +3059 +1870 +3546 +284 +3546 +20645 +20646 +20647 +20648 +9 +222 +18695 +20649 +3 +519 +2697 +20650 +20651 +7053 +20652 +13945 +6028 +533 +493 +504 +1208 +20653 +284 +43 +613 +9 +43 +20654 +3480 +2872 +43 +9 +590 +20655 +6950 +8668 +590 +20656 +3 +19618 +8668 +20141 +14363 +188 +3976 +20657 +20658 +1056 +791 +20659 +19618 +3546 +2804 +590 +17602 +4441 +20660 +20661 +20662 +3067 +1517 +1051 +741 +20663 +20664 +20665 +43 +4 +20666 +188 +4196 +19 +8996 +3546 +1013 +1912 +6571 +713 +20667 +2260 +205 +57 +3546 +20 +20668 +1765 +15718 +1716 +8999 +590 +3559 +20669 +188 +3546 +20670 +2035 +18455 +10 +248 +303 +20671 +20672 +323 +20673 +764 +736 +1710 +20674 +20 +2694 +20675 +713 +10 +20 +3252 +188 +8218 +19042 +4441 +19 +964 +736 +13370 +736 +5904 +411 +6354 +209 +14 +12987 +14363 +323 +286 +15 +20676 +19618 +590 +13127 +17545 +590 +20677 +3546 +18814 +20678 +20679 +2129 +1100 +1961 +1013 +10787 +20680 +89 +1300 +155 +917 +20681 +20682 +20683 +20684 +19576 +248 +2316 +464 +20685 +20686 +29 +590 +736 +20687 +20688 +20689 +1738 +5780 +10 +15718 +19618 +20690 +20691 +20692 +19618 +6205 +19 +20693 +8351 +20694 +32 +2775 +7053 +18025 +20695 +2537 +20696 +20697 +590 +20698 +15649 +43 +2 +155 +10 +1847 +20699 +4907 +14 +20700 +3546 +2243 +19 +43 +38 +20701 +590 +2550 +20702 +9 +274 +213 +20703 +1465 +35 +6877 +155 +284 +213 +3994 +43 +11762 +20704 +1559 +274 +1870 +590 +8668 +19 +4081 +248 +43 +20705 +19806 +590 +16991 +20706 +20707 +12936 +20708 +20709 +8218 +9 +647 +345 +736 +19806 +19 +43 +20710 +790 +20711 +14127 +10 +248 +745 +112 +22 +20712 +590 +20713 +20714 +43 +337 +474 +590 +3317 +357 +665 +43 +43 +14 +278 +20715 +8668 +18695 +3546 +20716 +9 +13045 +10 +15 +15540 +209 +18954 +19618 +176 +20717 +647 +19323 +137 +20700 +248 +1013 +590 +32 +10038 +872 +155 +20718 +14363 +20719 +20720 +20721 +19 +20722 +478 +5601 +9 +345 +12788 +188 +20723 +20724 +554 +15718 +8351 +19618 +736 +12987 +14 +20725 +155 +20726 +13375 +20727 +20728 +48 +971 +3732 +14 +25 +15 +20729 +19618 +2476 +3546 +20730 +590 +20731 +20732 +14604 +519 +16472 +590 +286 +7053 +3546 +3476 +616 +823 +2593 +19618 +19 +14 +24 +586 +20 +1208 +12584 +20733 +20734 +6364 +20735 +590 +20736 +20737 +20 +3546 +12768 +18128 +286 +286 +2121 +20738 +3417 +19618 +155 +590 +590 +19624 +648 +32 +2694 +209 +15718 +19 +1018 +6785 +9400 +14 +3543 +358 +19806 +43 +20739 +18552 +501 +3944 +823 +3599 +38 +20740 +533 +20741 +20742 +20743 +20744 +20745 +590 +20746 +349 +286 +17467 +8566 +590 +14001 +43 +795 +20747 +14477 +1208 +1018 +3376 +7053 +1817 +20748 +10 +9 +5601 +13375 +99 +590 +16 +14 +1021 +20749 +201 +20750 +20751 +43 +15496 +89 +345 +19792 +5099 +2637 +3743 +14 +11618 +20752 +20753 +15718 +18178 +2356 +20754 +20755 +29 +20756 +155 +4144 +6571 +20757 +20758 +554 +20759 +573 +20760 +12987 +17356 +720 +20761 +20762 +20 +14 +20763 +8668 +1764 +20764 +2 +1575 +20765 +14477 +14 +20766 +317 +20767 +274 +20768 +20769 +683 +286 +20770 +18283 +339 +970 +152 +20771 +20772 +14 +3546 +20773 +43 +112 +39 +4717 +554 +155 +20774 +286 +1091 +345 +4581 +3546 +20775 +9 +3546 +5441 +20776 +2577 +2253 +665 +20777 +20778 +20779 +14 +20780 +20781 +20 +16305 +971 +57 +3553 +20782 +20783 +14477 +720 +20784 +20785 +3695 +5689 +2415 +849 +20786 +1437 +12333 +3353 +13474 +10706 +20787 +826 +14 +66 +590 +20788 +20789 +20790 +9 +2 +1109 +16672 +8668 +20791 +43 +16437 +2 +19 +19404 +2164 +20792 +20793 +20 +1655 +20794 +20795 +15718 +12987 +20 +15744 +12254 +1684 +970 +80 +19655 +9 +272 +590 +1310 +20796 +9 +764 +15718 +5316 +474 +11073 +137 +188 +20499 +20797 +279 +20798 +411 +20799 +20800 +43 +10439 +5208 +19618 +10 +2446 +1229 +647 +4174 +109 +1742 +736 +7855 +32 +1100 +20801 +20802 +15975 +57 +18816 +14689 +213 +16941 +379 +349 +13279 +3330 +60 +286 +19618 +20803 +4485 +648 +20804 +554 +20805 +43 +349 +20806 +19618 +43 +12893 +20807 +1011 +19618 +15 +20808 +13543 +1738 +20809 +38 +1559 +29 +20810 +213 +18695 +15535 +11321 +20811 +827 +345 +5780 +20812 +519 +349 +18896 +1559 +20813 +20814 +4084 +6571 +20815 +43 +20816 +43 +20817 +20818 +491 +4820 +20819 +20820 +20821 +345 +20822 +17 +15649 +10028 +152 +1423 +20823 +20824 +20825 +1927 +20826 +625 +2694 +9314 +43 +20827 +736 +19618 +20828 +3546 +590 +32 +590 +19404 +20829 +19618 +17602 +18683 +1630 +19618 +590 +57 +464 +8392 +8351 +20830 +179 +20831 +18982 +20832 +20833 +20834 +19618 +9796 +19404 +10 +14 +207 +14 +284 +20835 +1082 +20836 +6140 +3059 +20837 +20838 +43 +10621 +15718 +2015 +20839 +3546 +20840 +57 +16012 +20841 +20842 +13138 +2254 +19 +827 +155 +349 +415 +20843 +7799 +9 +20844 +2832 +20845 +20846 +2694 +20847 +20848 +20849 +20850 +20851 +20852 +20 +53 +590 +3 +19618 +20853 +43 +137 +20854 +20855 +365 +20856 +20174 +185 +20857 +20858 +554 +19 +20859 +43 +15820 +248 +17670 +20860 +12397 +43 +20861 +2314 +6441 +399 +5418 +2260 +823 +16437 +20 +20862 +20863 +213 +7379 +823 +20864 +19 +2197 +14916 +3408 +2694 +3 +20865 +736 +12996 +20 +43 +554 +7908 +20866 +20867 +248 +20868 +1234 +354 +3548 +57 +14152 +20869 +14274 +3546 +20 +595 +303 +32 +201 +20870 +20871 +1112 +15583 +19618 +209 +20872 +3491 +19 +19618 +590 +7328 +155 +16375 +1605 +248 +2015 +20873 +20874 +20875 +323 +9 +4230 +20876 +2770 +4441 +4230 +20877 +1859 +14 +19 +15699 +293 +495 +9 +971 +446 +4118 +20878 +20879 +14680 +8297 +823 +20880 +345 +38 +20881 +791 +1100 +20161 +2804 +590 +14 +18054 +14 +1384 +248 +209 +554 +20882 +20883 +1961 +20884 +43 +590 +20885 +140 +305 +20886 +2577 +1091 +20887 +20888 +20889 +20890 +20891 +10993 +20892 +13666 +3192 +20893 +1425 +18257 +2197 +20894 +20895 +4963 +19 +20896 +32 +3546 +20897 +155 +19 +5780 +1100 +736 +5582 +141 +5632 +1066 +1157 +13908 +13943 +2260 +43 +16696 +2 +20898 +248 +573 +20899 +20900 +15694 +16437 +20901 +14477 +284 +19478 +12560 +736 +20902 +349 +13149 +43 +20428 +20903 +20904 +1013 +20905 +519 +43 +345 +20906 +2577 +32 +43 +590 +9 +519 +9 +43 +3335 +17356 +1765 +57 +20907 +14082 +10 +842 +14 +20908 +809 +43 +20909 +13528 +43 +1912 +20910 +32 +20911 +665 +736 +8668 +20912 +20913 +14 +43 +20914 +192 +3546 +1508 +736 +20915 +201 +2064 +19404 +16927 +20916 +791 +286 +20917 +9 +20918 +20919 +20920 +20921 +20922 +3291 +57 +17247 +1090 +19618 +5804 +14 +20923 +20924 +20925 +18372 +3546 +20926 +20927 +20928 +20929 +2029 +20930 +20931 +519 +1927 +35 +15718 +19 +398 +9485 +4544 +2 +19 +3553 +43 +590 +7027 +17112 +10487 +20932 +20 +20933 +20934 +872 +20935 +590 +19655 +286 +736 +20936 +349 +1559 +11715 +2314 +2316 +554 +19618 +14 +14603 +4269 +66 +20937 +1961 +59 +349 +20938 +14 +20939 +12642 +43 +13976 +20940 +13361 +720 +20941 +20942 +2694 +16826 +20943 +3296 +20944 +19965 +352 +43 +5344 +19404 +20945 +3752 +19 +2919 +201 +11808 +12987 +12987 +10 +323 +20946 +3546 +20947 +1566 +43 +20948 +2197 +412 +43 +11754 +286 +20572 +1924 +18695 +20949 +20950 +20951 +22 +9 +1502 +683 +20952 +7053 +17635 +20953 +14 +20954 +20955 +43 +20956 +590 +20957 +7053 +1864 +20958 +694 +19 +345 +17083 +89 +14538 +14477 +19304 +14603 +20959 +249 +20960 +20961 +20962 +228 +222 +20963 +20964 +17251 +15718 +43 +6121 +32 +20965 +4752 +12202 +616 +20966 +8351 +14388 +20967 +4544 +736 +2577 +10031 +20968 +4963 +20969 +1051 +20970 +20971 +736 +20972 +20973 +9 +20448 +10 +19 +155 +8255 +5823 +1559 +448 +155 +358 +4364 +20974 +7145 +20975 +286 +16981 +20976 +12005 +1442 +849 +20977 +17872 +20978 +20979 +590 +736 +20980 +764 +736 +20981 +402 +20982 +20983 +3546 +20984 +12005 +20985 +13807 +20986 +11087 +209 +809 +20987 +11335 +43 +1465 +20988 +292 +2459 +20989 +7053 +715 +18951 +4766 +19 +43 +20990 +18956 +1817 +19 +590 +20991 +1716 +14 +155 +20572 +20992 +15718 +14477 +20993 +20994 +20 +20995 +20996 +19655 +14477 +3543 +20997 +5267 +590 +20998 +20999 +35 +3995 +21000 +647 +2733 +823 +7238 +21001 +683 +21002 +595 +826 +2577 +155 +19618 +2330 +3546 +34 +14527 +823 +43 +155 +3421 +21003 +815 +548 +164 +694 +21004 +6251 +369 +155 +2790 +43 +21005 +21006 +971 +357 +21007 +25 +18982 +21008 +14 +397 +21009 +43 +20326 +188 +21010 +21011 +43 +1364 +21012 +21013 +17571 +11995 +21014 +1314 +2029 +16535 +21015 +10439 +38 +12067 +2804 +1090 +590 +665 +14 +6095 +21016 +57 +9 +21017 +11754 +272 +32 +21018 +21019 +13874 +21020 +21021 +21022 +15744 +14001 +12743 +3095 +21023 +14 +1048 +349 +349 +2804 +677 +915 +13564 +21024 +8743 +349 +2124 +19618 +3978 +21021 +43 +9 +272 +1112 +18120 +19 +3546 +21025 +10004 +21026 +2314 +590 +43 +21027 +21028 +21029 +2314 +19 +3546 +21030 +19 +286 +21031 +6095 +21032 +15718 +2314 +14 +21033 +590 +21034 +21035 +14 +21036 +19655 +554 +590 +17635 +736 +20 +399 +21037 +2164 +21038 +736 +21039 +155 +14351 +21040 +3484 +417 +9 +5533 +4029 +3546 +21041 +21042 +14 +736 +196 +15718 +21043 +647 +1226 +43 +21044 +13039 +16788 +3546 +3316 +4387 +21045 +21046 +43 +123 +4278 +21047 +20555 +16240 +21048 +2314 +15193 +1566 +21049 +7537 +21050 +21051 +155 +21052 +21053 +21054 +554 +10 +1168 +21055 +21056 +21057 +3239 +57 +671 +15809 +21058 +14 +3119 +399 +597 +21059 +43 +14363 +14770 +21060 +201 +43 +11274 +1013 +21061 +3546 +19 +3546 +2859 +58 +21062 +345 +21063 +21064 +15718 +19618 +201 +43 +14 +21065 +20206 +43 +19 +19618 +1013 +21066 +21067 +18100 +14 +823 +21068 +345 +2476 +21069 +8210 +1824 +3239 +21070 +345 +20774 +20 +519 +21071 +43 +590 +12761 +3743 +514 +21072 +590 +19618 +6950 +827 +21073 +554 +788 +736 +16437 +15 +12203 +21074 +21075 +554 +15845 +7053 +568 +823 +14 +21076 +14 +6732 +21077 +21078 +104 +345 +736 +43 +19655 +12987 +14 +201 +21079 +21080 +19792 +3546 +7137 +6617 +21081 +5344 +486 +155 +20 +17082 +19 +104 +21082 +2733 +647 +43 +21083 +57 +21084 +21085 +21086 +201 +21087 +21088 +43 +19695 +15718 +21089 +21090 +286 +21091 +21092 +19792 +590 +16437 +21093 +1991 +21094 +21095 +21096 +21097 +345 +21098 +21099 +21100 +18806 +20 +21101 +57 +4227 +43 +14604 +42 +9410 +21102 +3 +2459 +15592 +43 +18283 +16180 +21103 +21104 +12788 +21105 +43 +11483 +3236 +16681 +17670 +21106 +21107 +6283 +7815 +21108 +1051 +19404 +20737 +21109 +1889 +22 +21110 +3546 +21111 +2830 +155 +21112 +278 +21113 +590 +43 +18637 +32 +21114 +349 +11762 +32 +1870 +188 +57 +778 +21115 +14 +764 +349 +99 +21116 +2728 +43 +1310 +19752 +6571 +1961 +21117 +21118 +19618 +2019 +21119 +21120 +8967 +4126 +21121 +2260 +8214 +14 +7917 +5495 +5299 +14 +20343 +2042 +7053 +1508 +2009 +21122 +21123 +196 +17911 +21124 +2804 +4414 +21125 +827 +19806 +43 +15168 +736 +21126 +21127 +21128 +5601 +6441 +20773 +21129 +1992 +21130 +21131 +21132 +21133 +21134 +16790 +21135 +3406 +1765 +554 +1543 +21136 +7045 +14477 +43 +533 +11762 +1605 +155 +736 +21137 +21138 +155 +14477 +6571 +2657 +19 +286 +3772 +155 +5410 +21139 +43 +21140 +2260 +43 +21141 +4367 +21142 +4929 +4793 +20340 +21143 +3546 +14933 +4808 +765 +21144 +11087 +1716 +323 +141 +43 +3978 +1749 +155 +21145 +519 +35 +10439 +22 +5204 +2537 +5877 +21146 +1027 +13566 +16780 +9 +590 +21147 +21148 +59 +32 +21149 +20555 +590 +823 +590 +3559 +21150 +3546 +14240 +713 +21151 +823 +21152 +19806 +43 +21153 +137 +349 +21031 +7053 +185 +21154 +141 +597 +7146 +590 +21155 +21156 +14192 +5318 +21157 +887 +21158 +21159 +21160 +2944 +21161 +21162 +32 +21163 +7053 +13710 +21164 +10727 +15 +21165 +21166 +5908 +6776 +19618 +32 +21167 +21168 +9 +1648 +1224 +3546 +21169 +2356 +3354 +10 +349 +57 +1710 +43 +21170 +21171 +3476 +19 +21172 +20952 +14 +43 +4414 +8743 +11362 +21173 +590 +17879 +21174 +1091 +590 +104 +7053 +21175 +18047 +736 +10 +21176 +197 +736 +4682 +683 +19 +5027 +1021 +2694 +3 +15497 +13973 +345 +21177 +13974 +8380 +745 +1056 +345 +19618 +19618 +349 +155 +9934 +21178 +21179 +9123 +15824 +21180 +694 +21181 +104 +21182 +2260 +20384 +286 +20572 +1011 +14792 +9 +14 +21183 +8392 +2 +317 +245 +21184 +21185 +590 +736 +21186 +98 +823 +21187 +16890 +1222 +272 +736 +21188 +21189 +21190 +3546 +32 +13624 +16899 +13566 +155 +1961 +17635 +21191 +21192 +21193 +21194 +201 +21195 +16 +14844 +19404 +15406 +21196 +21197 +21198 +19 +155 +2285 +1655 +10 +9873 +19618 +18798 +21199 +823 +8210 +21200 +15561 +18951 +2318 +21201 +21202 +590 +6617 +43 +19271 +21203 +464 +14 +19618 +14797 +274 +21204 +17136 +21205 +21206 +12987 +5582 +66 +21207 +21208 +21209 +736 +377 +16437 +648 +1847 +21210 +823 +21211 +21212 +43 +8297 +869 +33 +3546 +21213 +379 +21214 +2476 +21215 +3995 +17947 +17981 +21216 +590 +21217 +5650 +2804 +21218 +823 +21219 +554 +16387 +14215 +20 +590 +21220 +19618 +197 +21221 +21222 +21223 +43 +21224 +21225 +9 +19439 +13484 +21226 +1224 +21227 +21228 +19618 +43 +1154 +1503 +14603 +19883 +14102 +2415 +1013 +19 +43 +21229 +809 +1965 +19 +21230 +7935 +10439 +11762 +16850 +21231 +21232 +1716 +2540 +209 +21233 +14 +21234 +21235 +3546 +554 +21236 +43 +590 +590 +1160 +970 +19918 +270 +590 +21237 +4812 +1160 +19 +21238 +43 +21239 +21240 +21241 +15718 +21242 +590 +286 +21232 +19655 +77 +5438 +14 +194 +286 +21243 +412 +32 +21244 +17670 +11702 +1224 +707 +19618 +20 +21245 +21246 +7379 +21247 +2879 +14 +21248 +21249 +1042 +43 +21250 +14 +57 +188 +736 +1502 +10356 +21251 +2 +21252 +21253 +730 +12067 +736 +21254 +3546 +43 +1716 +7053 +14 +1696 +6504 +21255 +317 +286 +21256 +1749 +21257 +1051 +20952 +19 +21258 +20 +15718 +19965 +1082 +57 +509 +1533 +20600 +536 +6571 +21259 +8270 +138 +4288 +647 +19404 +21260 +9 +14 +19618 +14477 +15718 +21261 +1107 +345 +14 +20291 +8512 +21262 +15595 +590 +7799 +6571 +39 +373 +21263 +21264 +21265 +18455 +19 +21266 +3546 +873 +21267 +15718 +5780 +21268 +20 +21269 +20657 +21270 +7855 +736 +3546 +21271 +21272 +155 +21273 +10 +19618 +21274 +14 +21275 +21276 +10439 +7270 +155 +5780 +828 +21277 +19 +4315 +6071 +32 +14 +286 +3546 +201 +14 +21278 +11754 +14524 +19 +14520 +21279 +19618 +590 +345 +21280 +533 +20 +12158 +15592 +21281 +21282 +21283 +21284 +2006 +590 +21285 +21286 +21287 +119 +3669 +9402 +2762 +12987 +533 +2593 +9 +20572 +21288 +3395 +669 +720 +21289 +19404 +21290 +590 +15592 +686 +21291 +590 +21292 +21293 +17473 +1559 +21294 +590 +19618 +185 +10117 +1090 +10303 +7137 +21295 +9162 +2577 +21296 +19 +274 +286 +15718 +209 +21297 +1696 +19618 +3546 +21298 +590 +761 +21299 +15971 +21300 +5203 +4 +140 +6533 +14 +21301 +11707 +9 +16589 +14477 +21302 +8249 +13569 +21303 +21304 +32 +15718 +19618 +345 +19 +11762 +21305 +12005 +21306 +21307 +4907 +590 +13801 +3990 +286 +345 +1517 +3341 +21308 +21309 +228 +379 +21310 +21311 +21312 +21313 +5780 +21314 +21315 +21316 +10 +13538 +5627 +155 +43 +15718 +19 +21317 +349 +21318 +14604 +2287 +21319 +1012 +1154 +12684 +9 +21320 +5780 +19 +6776 +17608 +20 +20 +1164 +21321 +16118 +21322 +14 +8668 +21323 +21324 +10230 +57 +17228 +1976 +21325 +9 +22 +21326 +155 +8789 +19852 +21327 +21328 +10 +18283 +21329 +13624 +764 +209 +21330 +14363 +19048 +5803 +1109 +590 +99 +338 +21331 +14 +720 +14001 +20127 +201 +19 +21332 +2 +21333 +514 +21334 +201 +1716 +12989 +21335 +21336 +1013 +21337 +14 +823 +14 +538 +222 +21338 +1442 +554 +19 +21339 +9 +10028 +21340 +43 +21341 +21342 +345 +21343 +21344 +21345 +21346 +19 +4118 +15 +21347 +590 +495 +554 +19 +323 +21348 +21349 +286 +21350 +14 +21351 +18919 +5601 +43 +29 +2550 +19618 +21352 +5803 +21353 +19 +4518 +21354 +3213 +21355 +21356 +21357 +14 +19 +7835 +21358 +16180 +228 +21359 +21360 +179 +1139 +595 +8249 +11754 +8301 +4278 +11754 +21361 +19 +21362 +764 +21363 +12987 +21364 +43 +4 +21365 +16437 +5803 +349 +4278 +21366 +21367 +15718 +43 +5627 +60 +21368 +21369 +43 +19404 +21370 +613 +568 +3839 +21371 +736 +21372 +11308 +495 +19618 +21373 +21374 +14 +21375 +16126 +18045 +43 +21376 +16437 +21377 +21378 +14 +21379 +12561 +15356 +286 +19618 +196 +873 +11362 +21380 +18095 +32 +21381 +14 +21382 +849 +14 +43 +1668 +286 +16883 +5582 +21383 +21384 +11483 +1157 +66 +3842 +21385 +1517 +21386 +10222 +7053 +887 +155 +15720 +20 +9 +21168 +590 +14 +647 +21387 +222 +7379 +21388 +21389 +1870 +736 +14 +2349 +2 +17670 +3978 +21390 +1559 +21391 +21392 +533 +21393 +2446 +19618 +21336 +286 +590 +1765 +43 +3546 +10236 +21394 +16437 +38 +21395 +99 +845 +736 +16437 +21396 +21397 +590 +43 +21398 +17144 +43 +13285 +1013 +1765 +345 +2134 +21399 +17571 +1208 +21400 +21401 +21402 +21403 +21404 +10699 +7896 +21405 +32 +20 +1013 +19 +19404 +14 +1012 +19655 +536 +286 +15054 +19618 +20941 +5780 +10 +346 +21088 +872 +176 +21406 +16437 +20702 +21407 +17119 +21408 +3484 +43 +20677 +21409 +21410 +21411 +19 +6877 +21412 +57 +8668 +10 +21413 +21414 +43 +21415 +12807 +43 +3546 +2733 +736 +21416 +10439 +21417 +8188 +1991 +21418 +21419 +21420 +3546 +583 +590 +14 +21421 +915 +5318 +590 +764 +21422 +104 +19618 +57 +21423 +18896 +21424 +21425 +345 +683 +21426 +9 +2694 +736 +18951 +21427 +138 +21428 +1465 +21429 +2018 +21430 +176 +2064 +16389 +21431 +19404 +3546 +9144 +9934 +21432 +398 +19 +35 +21433 +7653 +3251 +18047 +284 +7053 +21434 +248 +3353 +7536 +155 +21435 +21436 +21437 +736 +12185 +14 +21438 +21439 +1013 +8668 +827 +14 +48 +1051 +736 +213 +25 +18283 +16437 +21440 +8041 +14 +14 +19618 +17229 +21441 +15718 +21442 +21443 +872 +1870 +57 +21444 +21445 +19 +19 +15718 +213 +5211 +21446 +14 +248 +21447 +14603 +17519 +823 +21448 +1991 +21449 +1190 +248 +590 +21450 +21451 +21405 +21452 +1912 +19 +21453 +1696 +15718 +1425 +12987 +1224 +16640 +15 +21454 +14 +323 +3546 +590 +12404 +19404 +21455 +590 +248 +6439 +1612 +10640 +176 +5344 +590 +10230 +16437 +590 +21456 +201 +21457 +5134 +21458 +19404 +32 +823 +9 +21459 +14 +21460 +8668 +19618 +21461 +303 +1385 +36 +11762 +35 +14604 +823 +349 +345 +21462 +7231 +21463 +21464 +21465 +305 +9 +21466 +19 +21467 +20 +13230 +337 +21468 +21469 +2314 +1559 +16429 +21176 +14 +20 +43 +20 +14 +8249 +15975 +21470 +303 +104 +14 +736 +14 +21471 +196 +6571 +915 +155 +43 +21472 +21473 +3546 +337 +21474 +21475 +21476 +21477 +20803 +21478 +284 +18139 +21479 +21480 +19 +15718 +14020 +286 +713 +10 +13207 +21481 +43 +590 +590 +16437 +12321 +32 +21482 +590 +21483 +21484 +1415 +21485 +21486 +43 +21487 +21488 +21489 +303 +345 +2281 +16437 +19618 +5801 +9102 +3768 +43 +21490 +21491 +21492 +705 +14603 +1082 +19 +4023 +6496 +21050 +1912 +4916 +1168 +8668 +19 +770 +21493 +21494 +8208 +15718 +11754 +349 +720 +303 +1234 +9 +15718 +20794 +2537 +21495 +21496 +21497 +21498 +57 +14 +21499 +19404 +21500 +446 +19 +14 +21501 +665 +11754 +21502 +17698 +43 +19404 +21503 +248 +185 +21504 +5780 +21505 +4278 +564 +43 +21506 +590 +590 +21507 +590 +155 +4126 +21508 +305 +8280 +3978 +2243 +21509 +683 +15384 +22 +20181 +21510 +19618 +16887 +19918 +21511 +19 +21512 +19 +21513 +915 +21514 +554 +248 +43 +14 +21515 +590 +21516 +19 +112 +21517 +2790 +19618 +20 +8668 +21518 +21519 +1012 +8403 +1208 +21520 +3964 +21521 +647 +4907 +19618 +21522 +21523 +272 +21524 +337 +349 +21525 +248 +21526 +21527 +278 +155 +5592 +303 +18045 +21528 +12987 +8367 +21529 +21530 +345 +21531 +21532 +21533 +573 +3546 +4 +315 +21534 +21535 +323 +9410 +590 +284 +21536 +21537 +14604 +1047 +21538 +13364 +13913 +379 +10222 +237 +19 +659 +21539 +1655 +17136 +411 +21540 +19404 +21541 +43 +43 +21542 +19618 +20 +19 +57 +989 +21543 +43 +15718 +590 +18780 +21544 +1927 +9 +2841 +305 +3 +21545 +21546 +2412 +21547 +13111 +2310 +21548 +14 +43 +1559 +3546 +21549 +21550 +21551 +15720 +3601 +201 +15718 +8849 +14477 +19618 +3944 +13566 +21552 +21553 +9628 +43 +155 +43 +286 +21554 +2314 +137 +14 +21555 +155 +21556 +8392 +21557 +345 +464 +5211 +21558 +21559 +21560 +15 +495 +21561 +5780 +21562 +2463 +15 +5780 +43 +8098 +590 +2 +842 +1364 +21563 +21564 +823 +590 +21565 +43 +19456 +286 +19 +21566 +2286 +345 +10111 +14020 +21567 +21568 +21569 +14477 +536 +770 +21570 +21571 +21572 +12668 +103 +21573 +21574 +337 +14 +590 +21575 +19 +19404 +248 +137 +14 +15274 +21576 +19618 +21577 +323 +21578 +21579 +1382 +5725 +337 +21580 +21581 +2 +770 +25 +16511 +590 +10727 +19241 +9 +188 +9 +21582 +237 +14477 +17871 +736 +21583 +6096 +349 +21584 +99 +1119 +138 +21585 +286 +3546 +590 +14 +43 +18695 +57 +21586 +590 +19664 +21587 +21588 +17602 +178 +19618 +32 +11754 +16826 +741 +1153 +8188 +21589 +185 +3546 +77 +14 +21590 +540 +21591 +5780 +736 +3376 +196 +21592 +1991 +52 +6217 +21593 +242 +21594 +14420 +32 +21595 +21596 +14477 +21597 +21598 +21599 +21600 +4083 +2314 +5498 +14 +57 +6883 +21601 +89 +15 +2577 +21602 +736 +16991 +43 +10 +164 +43 +590 +25 +1090 +21603 +284 +21604 +18695 +21605 +21606 +14477 +21607 +21608 +21609 +915 +250 +736 +21610 +284 +21611 +286 +19655 +18047 +19838 +21612 +21613 +736 +349 +14477 +9 +15 +14 +345 +14523 +21614 +21615 +10591 +20600 +303 +21616 +12987 +536 +827 +21617 +19618 +9 +790 +21618 +80 +21619 +14 +21620 +213 +2004 +21621 +590 +3601 +21622 +43 +19618 +16461 +1559 +250 +437 +20576 +1310 +14 +21623 +15720 +12987 +20315 +21624 +21625 +357 +873 +21626 +22 +5780 +21627 +656 +21628 +3100 +248 +554 +284 +18045 +349 +21629 +286 +337 +21630 +345 +1013 +21631 +89 +554 +6363 +21632 +2135 +43 +21633 +21634 +21635 +11087 +21636 +1831 +440 +104 +823 +21637 +21638 +303 +554 +19460 +1011 +21639 +5780 +188 +2 +21640 +9 +14 +3480 +339 +21641 +21642 +114 +845 +115 +21643 +21644 +21645 +2 +305 +337 +21646 +248 +2 +21647 +21648 +21649 +21650 +57 +590 +736 +3546 +43 +15718 +286 +736 +21651 +14 +13361 +7053 +1648 +971 +21652 +16437 +358 +21653 +1961 +21654 +1531 +15718 +2832 +21655 +21656 +18283 +15718 +4606 +303 +21657 +21658 +21659 +21660 +21661 +19618 +21662 +21663 +21664 +21665 +155 +712 +21666 +43 +20952 +21667 +2476 +19618 +248 +10787 +43 +21668 +21669 +10439 +736 +21670 +1018 +3354 +823 +43 +2287 +13409 +21671 +3575 +205 +21672 +3546 +20 +8809 +2733 +21673 +21674 +248 +440 +9 +14 +665 +19 +286 +21675 +43 +10439 +15718 +177 +20383 +66 +4963 +17602 +12987 +665 +15592 +2121 +8188 +21676 +645 +57 +590 +21677 +9 +21678 +284 +21679 +21680 +21681 +19 +17372 +19618 +21682 +17834 +5208 +43 +43 +823 +16180 +373 +43 +823 +17608 +278 +365 +21683 +345 +715 +12987 +2 +736 +21684 +21685 +2029 +286 +21686 +2787 +21687 +21688 +10439 +791 +21689 +19618 +770 +3546 +17698 +2694 +18695 +21690 +3204 +19 +21691 +14 +590 +8297 +15718 +14 +19618 +1503 +736 +21692 +21693 +1382 +2414 +1316 +21694 +21695 +3546 +155 +21696 +270 +104 +19 +15349 +18695 +19 +21697 +536 +21698 +21699 +21700 +284 +21701 +3239 +14 +13566 +21276 +8668 +43 +21702 +21703 +21704 +15718 +17625 +1012 +491 +3369 +43 +10880 +590 +764 +21705 +5075 +3553 +590 +19218 +36 +21706 +1606 +43 +21707 +21708 +14 +2029 +21709 +21710 +10727 +2117 +17039 +4128 +2944 +43 +15971 +11754 +823 +15 +5169 +21711 +12479 +6341 +5117 +21712 +11822 +14 +19199 +16725 +823 +19618 +15275 +21713 +3546 +1385 +10439 +21714 +13375 +21715 +1817 +823 +43 +21716 +1224 +590 +770 +8297 +345 +14 +286 +845 +3546 +21717 +19618 +1382 +21718 +21719 +15054 +3435 +19 +19618 +590 +21720 +21721 +14 +249 +14 +48 +21722 +5387 +15989 +13973 +43 +373 +9 +20 +19 +2804 +21723 +1249 +7835 +43 +736 +18597 +692 +8508 +17698 +21724 +11762 +21725 +398 +13151 +2837 +19 +14363 +6627 +736 +21726 +3484 +19218 +6518 +21727 +15718 +720 +286 +1442 +43 +345 +19852 +21728 +6430 +9 +14079 +32 +377 +43 +213 +192 +2314 +21729 +736 +21730 +20 +19618 +21731 +14 +21732 +18283 +21733 +3546 +3045 +20 +46 +823 +15914 +736 +3546 +21734 +2197 +43 +43 +21735 +3546 +21736 +21737 +345 +19618 +971 +3995 +379 +21738 +2540 +6595 +7011 +178 +1157 +1047 +21739 +8501 +57 +4269 +21740 +38 +2 +7053 +21741 +21742 +21743 +19 +15718 +201 +590 +43 +21744 +21745 +21746 +176 +21747 +11995 +21748 +590 +21749 +1082 +16437 +21750 +9 +21751 +21752 +21753 +1224 +21754 +7137 +416 +7053 +188 +14 +2302 +21755 +13988 +21756 +19 +21757 +21758 +19 +80 +21759 +21760 +14986 +11762 +21761 +21762 +43 +665 +43 +21763 +21764 +424 +21765 +21766 +19618 +14 +21767 +2316 +21768 +19 +21769 +13266 +3324 +21770 +21771 +21772 +14477 +21773 +21774 +21775 +21776 +15220 +21777 +21778 +21779 +736 +3546 +5197 +21780 +21781 +15718 +14 +19585 +21782 +10913 +21783 +21784 +21785 +13150 +21786 +1107 +770 +13361 +1991 +21787 +21788 +15535 +21789 +21790 +19 +2734 +9 +16917 +2459 +4313 +21791 +11483 +16389 +3546 +317 +11754 +21792 +21793 +21794 +98 +9 +7045 +4185 +770 +21795 +19404 +21796 +5780 +3353 +21797 +21798 +21799 +21800 +21801 +21802 +14342 +3 +21803 +21804 +352 +21805 +1166 +21806 +155 +21807 +345 +155 +5169 +14 +16 +21350 +14 +4665 +21808 +21809 +155 +1578 +193 +7137 +6571 +18418 +21810 +583 +736 +19618 +19618 +3546 +15718 +415 +21811 +21812 +21813 +21814 +21815 +19304 +21816 +683 +1109 +590 +57 +3755 +2314 +22 +20586 +21817 +1542 +3546 +1021 +3546 +19404 +153 +20340 +188 +21818 +32 +9 +21819 +21820 +3546 +6095 +21821 +1961 +21822 +21823 +18047 +21824 +22 +213 +284 +19 +21825 +21826 +20 +76 +21827 +286 +21828 +21829 +35 +3546 +21830 +21831 +21832 +21833 +1612 +14856 +349 +21834 +43 +5438 +590 +21835 +21836 +19 +736 +10239 +6950 +1090 +155 +16619 +21837 +1817 +43 +35 +4414 +665 +18982 +19404 +248 +12118 +19 +18453 +19918 +20 +59 +21838 +809 +22 +8876 +8668 +349 +3546 +21839 +213 +16447 +21840 +2 +21841 +21842 +18695 +2039 +14 +21843 +20803 +164 +1208 +248 +303 +303 +15 +21844 +21845 +21846 +349 +1615 +21847 +155 +21848 +536 +21849 +43 +1384 +284 +21850 +14 +248 +3978 +345 +284 +21851 +14604 +14 +21852 +21853 +303 +19618 +178 +21854 +193 +15718 +3546 +590 +337 +337 +19 +21855 +736 +533 +209 +736 +213 +21856 +21857 +21858 +345 +179 +1364 +284 +21859 +19 +303 +213 +20888 +21860 +21861 +284 +1425 +590 +18695 +21862 +248 +21863 +21864 +1295 +1442 +3470 +5326 +21865 +4750 +491 +358 +9 +21866 +20 +3978 +10497 +21867 +34 +21868 +21869 +5083 +21870 +736 +21871 +5075 +14 +14 +15718 +6086 +322 +21872 +15939 +22 +11483 +21873 +21874 +248 +3216 +1481 +554 +590 +9 +590 +14660 +21875 +272 +21876 +222 +10 +14 +1529 +21877 +20952 +337 +21878 +1648 +16 +21879 +43 +270 +21880 +971 +21579 +3228 +7835 +4028 +21881 +1559 +43 +21882 +14240 +21883 +12864 +21884 +14299 +21885 +222 +15718 +21886 +21887 +21888 +590 +11482 +19413 +303 +14 +29 +1765 +12222 +651 +1217 +21889 +5755 +21890 +43 +21891 +5085 +6214 +138 +6841 +5561 +21892 +43 +21893 +21894 +20825 +80 +21895 +209 +21896 +12772 +13721 +99 +1066 +21897 +21898 +345 +21899 +10117 +21900 +646 +21901 +2804 +7137 +590 +21902 +14 +21903 +154 +1082 +21904 +21905 +21906 +17112 +21907 +21908 +21909 +21910 +21911 +823 +5780 +17136 +790 +57 +21912 +18683 +736 +19618 +57 +13721 +21913 +9804 +3858 +590 +57 +21914 +1566 +21915 +21916 +21917 +14369 +32 +13748 +21918 +1189 +21919 +21920 +345 +424 +21921 +14 +13721 +43 +21922 +3452 +1442 +155 +2655 +13721 +21923 +590 +21855 +9900 +2577 +16981 +1208 +9 +19119 +21924 +21925 +19655 +9 +8351 +21926 +10 +1056 +21927 +201 +25 +4414 +21928 +21929 +590 +19 +19 +19618 +590 +21930 +11683 +19 +21931 +21932 +21933 +13721 +15718 +345 +3546 +4651 +20 +21934 +43 +590 +10287 +8210 +2537 +43 +21935 +16437 +19404 +21936 +21937 +21938 +19618 +21939 +533 +15718 +21940 +14 +43 +21941 +770 +1559 +349 +18418 +13045 +112 +20 +21942 +646 +21943 +21944 +36 +21945 +573 +21946 +21947 +14 +201 +14 +651 +1765 +2314 +9 +32 +15718 +915 +21948 +4028 +14 +21949 +21950 +19852 +590 +1134 +1310 +6877 +19618 +20572 +590 +5719 +15141 +9 +250 +590 +1481 +21951 +2324 +19852 +823 +21952 +554 +21953 +19655 +286 +590 +21954 +13803 +15649 +21955 +115 +10 +7172 +17277 +373 +683 +21956 +1049 +21957 +14 +20 +21958 +21959 +1536 +6997 +21960 +57 +21961 +590 +2419 +13721 +21947 +5197 +21962 +5085 +4634 +2 +21963 +3546 +6950 +21964 +21965 +21966 +21967 +822 +21968 +18327 +13411 +21969 +317 +7053 +14629 +10 +3270 +7053 +19342 +20600 +6877 +21970 +21971 +21972 +57 +3086 +5839 +3095 +9837 +21973 +188 +21974 +17635 +2358 +21975 +19 +21976 +4873 +16437 +17749 +21689 +13570 +21947 +15718 +12053 +21977 +21978 +568 +19618 +19 +16437 +1508 +590 +14 +21979 +21980 +6341 +43 +21981 +19618 +345 +21982 +43 +19 +14 +868 +196 +19618 +1817 +209 +11471 +1612 +21983 +172 +2035 +736 +9 +345 +357 +155 +590 +349 +21373 +21984 +155 +19500 +21985 +21986 +345 +1912 +19618 +573 +3548 +9 +21987 +797 +21988 +10789 +21947 +14001 +21989 +15718 +286 +736 +4028 +1300 +8334 +2372 +3546 +2260 +21990 +21991 +736 +736 +2733 +43 +4364 +19 +21992 +5085 +14 +21993 +21994 +3546 +21995 +345 +21996 +155 +683 +14477 +38 +21997 +43 +21998 +19472 +21999 +736 +736 +7053 +14 +22000 +22001 +7032 +22002 +22003 +14 +686 +19 +22004 +648 +590 +43 +22005 +16437 +22006 +272 +22 +21631 +134 +1481 +22007 +9 +827 +5438 +3978 +22008 +345 +19 +3296 +22009 +10791 +19618 +21947 +43 +15461 +1542 +22010 +43 +22011 +9 +9 +12005 +22012 +887 +1765 +19404 +22013 +14 +14604 +21947 +22014 +57 +12788 +15220 +22015 +22016 +4 +21681 +11282 +19 +4 +12166 +2734 +22017 +3546 +590 +21698 +22018 +22019 +21776 +14 +22020 +13564 +345 +2 +22021 +155 +22022 +22023 +15595 +164 +22024 +57 +21088 +22025 +16205 +862 +9 +22026 +53 +22027 +3546 +22028 +57 +22029 +4388 +22030 +22031 +104 +8244 +1425 +22032 +22033 +22034 +80 +2289 +22035 +21689 +14363 +15718 +22036 +1604 +38 +823 +5083 +22037 +14 +21947 +22038 +2234 +21947 +22039 +19 +590 +936 +345 +2197 +6776 +22040 +22041 +15718 +17515 +16609 +32 +22042 +22043 +48 +22044 +137 +8307 +14 +590 +22045 +21315 +2935 +22046 +15718 +22047 +22048 +3546 +872 +22049 +554 +22050 +7717 +2 +590 +22051 +590 +22 +22052 +9688 +13721 +22053 +5780 +22054 +357 +1310 +22055 +4 +22056 +284 +19 +35 +19 +19 +519 +19 +248 +22057 +16437 +590 +22058 +14477 +2476 +1870 +20555 +3546 +22059 +22060 +13361 +11321 +1961 +2561 +16437 +19 +22061 +19 +13721 +22062 +22063 +16693 +21689 +1049 +58 +21947 +22064 +3546 +6741 +1696 +22065 +3598 +284 +248 +9 +590 +14 +14 +22066 +22067 +590 +13529 +1109 +22068 +21947 +22069 +590 +16484 +213 +22070 +22071 +4055 +22072 +22073 +22074 +19939 +22075 +20199 +590 +3546 +736 +22076 +19655 +17571 +22077 +303 +80 +13675 +22078 +11471 +8351 +7716 +9 +736 +22079 +1047 +14 +22080 +46 +18209 +22081 +7078 +3546 +303 +21947 +8668 +500 +590 +365 +4502 +20 +2804 +22082 +43 +2064 +14001 +14363 +337 +228 +22083 +22084 +22085 +1013 +3546 +201 +8226 +250 +22086 +2640 +474 +22087 +22088 +6496 +43 +22089 +19618 +21947 +1559 +3 +1425 +1066 +358 +11321 +22090 +22091 +8668 +22092 +9 +22093 +22094 +22095 +14603 +155 +681 +840 +15718 +1181 +22096 +10407 +209 +269 +9 +3317 +554 +14477 +21947 +22097 +213 +595 +701 +21947 +209 +2550 +22098 +354 +22099 +22100 +20305 +590 +22101 +5457 +436 +21947 +8668 +14 +248 +155 +15718 +16844 +16443 +13150 +15 +2733 +201 +19 +22102 +22103 +590 +22104 +22105 +209 +22106 +19 +1091 +20803 +22107 +1160 +10 +317 +590 +22108 +22109 +19618 +4056 +14 +14000 +22110 +823 +4752 +22111 +484 +43 +24 +4414 +22112 +22113 +22114 +11685 +2764 +9705 +21776 +15476 +22115 +1710 +22116 +22117 +5085 +22118 +22119 +19404 +22120 +57 +2577 +11762 +43 +3353 +1208 +22121 +22122 +1352 +736 +57 +15 +22123 +22124 +12987 +22125 +155 +22126 +2733 +3875 +3684 +14 +2139 +13721 +22127 +22128 +671 +22129 +19 +22130 +2577 +22131 +869 +15 +22132 +6571 +736 +171 +22133 +1384 +707 +1502 +22134 +43 +764 +3 +14 +43 +12603 +169 +22135 +22136 +29 +3546 +77 +5204 +22137 +22138 +43 +22139 +4055 +21947 +3220 +196 +22140 +22141 +22142 +8297 +14 +43 +14603 +1680 +16234 +22143 +22144 +21947 +155 +22145 +36 +2911 +12588 +22146 +21947 +22147 +1605 +9 +19 +22148 +6612 +1199 +22149 +21947 +22150 +1332 +43 +19404 +22151 +21947 +349 +16826 +22152 +4174 +7137 +1863 +3546 +22153 +1384 +14604 +2476 +1181 +22154 +22155 +3601 +8668 +13961 +20 +89 +22156 +20 +22157 +22158 +21338 +8234 +4979 +22159 +22160 +21947 +694 +665 +16450 +2410 +22161 +13721 +14 +22162 +345 +250 +22163 +1300 +19218 +22164 +22165 +19 +519 +14 +21745 +5976 +7053 +736 +22166 +22167 +38 +20952 +554 +15718 +286 +22168 +14 +21778 +22169 +3553 +22015 +22170 +22171 +345 +7855 +8566 +2577 +22172 +3546 +671 +1011 +21689 +19618 +22173 +22174 +286 +22175 +11754 +1326 +22176 +22177 +18695 +377 +554 +22178 +21869 +736 +22179 +11212 +13566 +43 +286 +14 +590 +22180 +98 +22181 +22182 +22183 +19209 +22184 +22185 +17011 +1316 +22186 +590 +22187 +169 +14 +22188 +15718 +20 +22189 +5209 +22190 +22191 +22192 +209 +14856 +3546 +22193 +22194 +22195 +22196 +4028 +43 +1864 +286 +14604 +5780 +22197 +22198 +237 +19618 +4552 +1090 +43 +22199 +8214 +7747 +576 +21904 +1181 +43 +19 +22200 +22201 +16826 +22202 +32 +22203 +22204 +22205 +13493 +699 +19635 +22 +21947 +22206 +11341 +22207 +646 +1742 +19 +22208 +1853 +19618 +5344 +43 +14 +22209 +591 +22210 +2260 +22211 +2561 +14477 +4450 +13721 +19519 +590 +22212 +2035 +22213 +9095 +12404 +7835 +19618 +823 +22214 +19618 +43 +22215 +1112 +22216 +22217 +15583 +3995 +57 +22218 +19 +22219 +3601 +448 +14363 +19844 +1112 +22220 +8255 +22221 +14477 +9 +736 +22222 +736 +10 +910 +14 +155 +10392 +21947 +725 +2872 +16822 +22223 +15586 +22224 +22225 +1425 +43 +1013 +22226 +22227 +22228 +764 +22229 +22230 +22231 +43 +21947 +13721 +22232 +19 +22233 +19 +590 +19404 +2577 +22234 +22235 +57 +22236 +22237 +18982 +2577 +3470 +43 +22238 +19618 +22239 +519 +345 +1154 +736 +6095 +22240 +3172 +13721 +20058 +19 +590 +22241 +12300 +22242 +22243 +17670 +29 +19618 +7053 +590 +4650 +10 +43 +15718 +3330 +2577 +19 +22244 +1134 +8936 +286 +21031 +14 +2830 +931 +14420 +15044 +3369 +142 +21999 +13355 +22245 +22246 +15718 +736 +22247 +20572 +14604 +3546 +20679 +19618 +2790 +17464 +8668 +2042 +8351 +7037 +22248 +22249 +1364 +22250 +14 +14102 +19618 +22251 +43 +22158 +2449 +1559 +22252 +209 +22253 +43 +22254 +19 +1425 +22255 +22 +22256 +2415 +9194 +22257 +22258 +22259 +590 +22260 +19852 +22261 +2928 +22262 +720 +22263 +19404 +713 +19655 +590 +7379 +21698 +554 +22264 +43 +8188 +8297 +3601 +185 +18695 +3546 +7516 +8037 +201 +1563 +22265 +3546 +21947 +22266 +14482 +22267 +22268 +590 +22269 +613 +57 +155 +3657 +625 +22270 +22271 +20 +1066 +22272 +764 +2561 +21947 +18798 +14 +196 +22273 +22274 +22275 +22276 +21947 +22277 +21947 +14 +22278 +5773 +22279 +155 +11762 +3 +22280 +4028 +167 +379 +14856 +6096 +57 +2065 +15718 +2 +22281 +14603 +21338 +2 +1100 +16589 +22282 +22283 +22284 +590 +345 +1912 +338 +22285 +22286 +764 +22287 +823 +590 +15569 +20 +13943 +57 +3546 +21088 +22288 +3546 +5438 +19342 +22289 +17687 +345 +21947 +14 +14 +286 +4441 +22290 +15 +22291 +185 +22292 +14 +22293 +20 +22294 +22295 +2764 +22296 +22297 +21947 +19404 +736 +15324 +22298 +13721 +873 +21947 +1115 +22299 +21947 +22300 +13566 +2 +11471 +345 +155 +11762 +21947 +179 +22301 +22302 +4075 +17602 +2733 +22303 +8188 +1508 +21947 +16102 +14 +7242 +736 +22304 +19655 +22305 +137 +43 +43 +22306 +2 +22307 +3546 +13111 +22308 +22309 +15229 +14 +3546 +22310 +80 +14 +286 +4502 +1095 +6335 +8668 +15 +43 +2121 +22311 +18503 +286 +412 +22312 +22313 +11966 +15 +286 +22314 +11341 +22315 +15054 +253 +15054 +14524 +43 +8367 +2019 +21947 +22316 +7053 +2629 +19 +22317 +22318 +22319 +178 +2537 +5773 +20555 +22320 +9 +22321 +22322 +22323 +8021 +20877 +736 +554 +22324 +22325 +3546 +21947 +21947 +21947 +89 +13721 +22326 +1533 +2882 +19 +272 +43 +3559 +22327 +22328 +22329 +6766 +22330 +22331 +3546 +22332 +20616 +22333 +12987 +22334 +19618 +22335 +677 +22336 +349 +22337 +21689 +707 +8668 +590 +7855 +22338 +1529 +345 +22339 +22340 +89 +6766 +9 +22341 +9 +20991 +22342 +22343 +1011 +15683 +590 +140 +1051 +176 +20952 +22344 +12696 +13721 +2287 +21947 +19472 +1529 +165 +21947 +8297 +22345 +22346 +22347 +3546 +22348 +7137 +677 +22349 +14 +7137 +2 +242 +1364 +9389 +67 +21947 +22350 +22351 +22352 +22353 +22354 +22355 +21689 +22356 +16340 +5085 +43 +43 +22357 +4502 +43 +8668 +22041 +345 +14 +248 +22358 +10793 +22359 +22360 +22361 +665 +1571 +13260 +14 +22362 +167 +22363 +823 +22364 +22365 +21947 +22366 +16453 +19852 +1208 +590 +43 +736 +1961 +7053 +14532 +16437 +21947 +1112 +22367 +22368 +17340 +345 +19797 +1013 +29 +43 +823 +46 +9 +21947 +7053 +22369 +8220 +22370 +19404 +43 +172 +14 +22371 +19404 +22372 +228 +21947 +12584 +3546 +22373 +677 +22374 +21777 +9 +8508 +22375 +5039 +22376 +9 +12404 +20803 +8297 +19404 +915 +21889 +43 +22377 +590 +9 +237 +495 +15308 +1961 +22378 +20876 +2593 +9 +22379 +22380 +43 +720 +22381 +34 +22382 +22383 +3775 +15 +7137 +554 +22384 +345 +43 +98 +7183 +7176 +14 +15718 +590 +345 +38 +22385 +22386 +286 +22387 +590 +5780 +1423 +22388 +22389 +983 +2310 +22390 +1316 +155 +1169 +4756 +6560 +19655 +1976 +22391 +14 +590 +9024 +22392 +22393 +22394 +7835 +14477 +7174 +22395 +22396 +22397 +590 +915 +1696 +1214 +22398 +19404 +21031 +515 +22399 +1307 +22400 +21507 +14524 +872 +12596 +22401 +21947 +22402 +2537 +15 +15718 +22403 +22404 +22405 +825 +590 +43 +22406 +7855 +8458 +22407 +22408 +379 +22409 +19618 +21947 +22410 +22411 +9 +22412 +3978 +22413 +22414 +209 +15 +16378 +3546 +2795 +22415 +32 +22416 +22417 +20199 +1091 +3546 +14363 +22418 +22419 +22420 +6095 +22421 +590 +21689 +22422 +43 +22423 +3353 +22424 +15238 +32 +2577 +14363 +22425 +22426 +22427 +22428 +7855 +1834 +13721 +176 +19655 +22429 +21947 +2019 +14 +22430 +20199 +22065 +19618 +14 +3546 +514 +22431 +22432 +22433 +22434 +590 +736 +22435 +20952 +18045 +6939 +22308 +22196 +665 +17277 +1316 +7835 +14689 +22436 +586 +29 +677 +22437 +17247 +22438 +2 +19057 +16609 +22439 +22440 +415 +13721 +22441 +590 +736 +22442 +17920 +19655 +13375 +19793 +14 +8465 +1765 +6950 +20819 +22443 +22444 +22307 +22445 +13030 +19655 +22446 +22447 +13721 +15718 +32 +22448 +193 +22449 +9410 +43 +590 +3553 +3251 +22450 +22451 +2314 +22452 +5780 +345 +533 +736 +15 +22453 +3546 +155 +2410 +66 +4313 +3546 +13721 +736 +19 +22454 +14 +178 +809 +22455 +22456 +736 +22457 +14604 +1688 +22458 +22459 +1112 +19 +22460 +2514 +21776 +11754 +10004 +17151 +598 +22461 +10381 +345 +14025 +284 +15718 +872 +155 +7053 +14 +1559 +22462 +22463 +22464 +1203 +22465 +22466 +22467 +5764 +5314 +13721 +9 +14001 +18184 +19 +22468 +1745 +286 +18823 +358 +15718 +22469 +12220 +13474 +21045 +22470 +8668 +57 +590 +22471 +22472 +12864 +303 +32 +2135 +14477 +22473 +22474 +2459 +22475 +22476 +11934 +22477 +248 +22478 +22479 +736 +349 +43 +22480 +22481 +22482 +590 +121 +22483 +22484 +22485 +14603 +19119 +14 +14 +20228 +22486 +14 +7987 +286 +3192 +1234 +14 +22487 +248 +21107 +3416 +22488 +568 +21947 +14477 +22489 +5387 +736 +11428 +9 +22490 +213 +3978 +14603 +17470 +5502 +32 +17277 +14603 +4747 +10 +22491 +213 +14 +13721 +22492 +76 +337 +22493 +21947 +16826 +17302 +213 +9 +3421 +337 +176 +21947 +22494 +22495 +2064 +2356 +22496 +22497 +22498 +20708 +18047 +736 +22499 +345 +3546 +21947 +21947 +22500 +4 +5420 +21947 +590 +22501 +345 +1961 +14 +15718 +43 +736 +43 +20 +3407 +590 +21947 +155 +43 +22502 +22308 +22503 +201 +22504 +1559 +22505 +158 +22506 +554 +22507 +9 +13721 +5441 +22508 +22509 +43 +22510 +43 +1038 +22511 +303 +22512 +823 +11754 +22513 +5780 +21031 +43 +17412 +22514 +22515 +7053 +1820 +17871 +8668 +22 +22516 +590 +22517 +32 +2577 +14 +22518 +22519 +19655 +13721 +1442 +21947 +13150 +22520 +8961 +22521 +22522 +1060 +590 +13495 +17911 +22523 +22524 +22525 +22526 +12117 +22527 +15356 +21947 +22528 +286 +52 +2 +14179 +286 +14363 +22529 +22530 +22308 +19 +1508 +1696 +16826 +22012 +22531 +7053 +22532 +8094 +22533 +15207 +22534 +6171 +19624 +17062 +19655 +3546 +936 +22535 +22536 +43 +590 +22537 +15718 +323 +2310 +590 +22538 +22539 +9 +3 +399 +13150 +22540 +57 +22541 +13913 +868 +22542 +3546 +19618 +590 +323 +19618 +13721 +286 +19939 +5780 +22420 +19618 +15718 +3546 +21947 +1508 +21947 +22543 +248 +22544 +15718 +14 +22545 +790 +9123 +1423 +4502 +345 +18045 +5085 +22546 +22547 +22548 +5344 +4 +22549 +22550 +153 +43 +4765 +2035 +7053 +14 +2593 +301 +22551 +22552 +2804 +22553 +1180 +43 +1514 +57 +99 +18882 +22554 +345 +57 +349 +19995 +22555 +5080 +5601 +57 +3978 +323 +22556 +665 +43 +22557 +1115 +15718 +22558 +43 +337 +21947 +22559 +22560 +35 +16258 +10 +22561 +13721 +1090 +345 +14079 +5908 +19618 +14343 +1961 +14 +272 +17608 +590 +411 +19618 +22562 +19 +16437 +22563 +19404 +19220 +22564 +22565 +2 +14 +20 +22566 +16437 +22567 +43 +10245 +15 +22568 +22569 +4403 +2851 +6468 +2818 +14808 +872 +2015 +713 +7991 +2579 +7291 +21947 +22570 +6372 +9 +597 +25 +2694 +22571 +586 +22572 +22573 +1666 +22268 +14856 +2577 +22574 +43 +22575 +14 +19852 +3546 +22576 +22577 +22578 +536 +22579 +22580 +22581 +19 +1364 +19 +22582 +22583 +19740 +46 +22584 +22585 +736 +14477 +9 +22586 +20555 +19618 +1048 +13721 +155 +18038 +19838 +3452 +13721 +22587 +22588 +222 +22589 +22 +398 +2446 +286 +22590 +8685 +22591 +3908 +823 +17136 +57 +303 +16992 +16443 +1415 +22592 +3491 +22593 +22594 +272 +14477 +19618 +22595 +12404 +6122 +201 +22596 +20765 +519 +1914 +303 +43 +2919 +15 +57 +22597 +398 +3484 +43 +590 +590 +14 +19618 +201 +22598 +5100 +14 +647 +21107 +16826 +17267 +18517 +823 +3553 +770 +10 +22599 +22600 +22601 +464 +225 +22602 +43 +1011 +57 +22603 +19 +22604 +1524 +284 +1224 +22605 +18503 +43 +284 +14 +43 +22606 +22607 +286 +22608 +345 +15718 +22609 +29 +7835 +14604 +22610 +286 +22611 +213 +17855 +22612 +14 +22613 +22614 +2316 +43 +16437 +1442 +22615 +22616 +4441 +22617 +22618 +303 +519 +22619 +43 +15845 +155 +736 +345 +9 +349 +22620 +677 +590 +22621 +12404 +22622 +10 +22623 +22624 +15881 +590 +16899 +590 +12858 +4907 +8668 +22625 +16798 +22626 +548 +17859 +345 +14 +18686 +1287 +647 +22627 +22628 +43 +21053 +22629 +399 +590 +22630 +10999 +4441 +22631 +22632 +13721 +21947 +15718 +2769 +22633 +22634 +823 +21947 +22635 +22636 +209 +2 +188 +345 +8981 +18978 +7577 +20575 +284 +303 +345 +1222 +22637 +19618 +22638 +18896 +22639 +6095 +22640 +22641 +22268 +15645 +2 +20 +179 +22642 +1048 +17136 +345 +14477 +22643 +21947 +43 +10318 +3546 +38 +8351 +8355 +19 +22644 +22645 +22308 +9 +6877 +1696 +2446 +22646 +590 +1823 +16975 +22647 +21947 +15951 +11822 +590 +22648 +1300 +349 +1605 +22649 +22650 +15718 +276 +15914 +21947 +14 +22651 +46 +22652 +22653 +14420 +21947 +590 +19404 +337 +2561 +22654 +21689 +22655 +201 +484 +2 +248 +22656 +19404 +10 +270 +22657 +22658 +6741 +279 +345 +14604 +22659 +22660 +22661 +345 +20555 +22662 +8351 +554 +6776 +19 +12404 +21947 +17404 +519 +13807 +43 +590 +1927 +22663 +1531 +22664 +9 +5117 +1226 +11321 +590 +2756 +22665 +22666 +57 +303 +345 +337 +22667 +22668 +43 +16947 +3491 +22669 +22670 +286 +43 +22671 +22672 +35 +2356 +9837 +436 +22673 +6505 +671 +22674 +286 +22675 +8668 +16322 +2015 +22676 +22677 +22678 +22679 +13700 +43 +538 +22680 +12684 +22681 +7053 +590 +19618 +5780 +2577 +43 +9 +16437 +9 +683 +21947 +22682 +740 +22683 +11762 +286 +5119 +18869 +43 +155 +1203 +22684 +5780 +22685 +7276 +60 +590 +22686 +1955 +32 +10230 +22687 +323 +22688 +303 +1423 +2768 +21889 +349 +20 +284 +22689 +590 +7379 +2 +1577 +22690 +823 +3546 +6096 +43 +736 +57 +541 +22028 +3546 +19618 +1013 +10782 +1739 +22691 +57 +196 +15718 +22692 +22693 +22694 +43 +6496 +1465 +2310 +1091 +15690 +20 +43 +18257 +22695 +20 +43 +2550 +358 +411 +448 +13721 +7053 +22696 +22697 +209 +284 +22698 +17956 +13721 +22699 +849 +495 +12152 +14 +345 +30 +22700 +14 +22701 +21694 +590 +345 +21947 +3 +8246 +22702 +9 +20 +22703 +20132 +9 +7585 +541 +22704 +5085 +373 +22705 +823 +155 +32 +272 +6950 +22706 +7855 +19 +16102 +13578 +22707 +22708 +22709 +98 +4827 +2035 +11762 +22710 +22711 +14477 +22712 +22713 +22714 +6496 +3546 +6114 +19136 +14 +22715 +6518 +14 +22716 +20572 +1637 +13452 +14 +22717 +57 +22718 +331 +22719 +22720 +21947 +43 +22721 +22722 +18792 +22723 +22724 +15718 +22725 +344 +2764 +57 +32 +77 +14604 +22726 +959 +823 +1765 +590 +19655 +22727 +14 +3866 +21947 +2577 +22728 +21689 +9 +19852 +21947 +9 +4502 +286 +22729 +22730 +14 +22731 +2 +2 +1082 +3601 +823 +19 +22732 +15 +22 +22268 +21947 +22733 +22734 +2260 +22735 +19618 +3546 +13721 +22268 +19655 +1720 +720 +25 +32 +1792 +286 +519 +22736 +22737 +21947 +21331 +22738 +2 +11482 +22739 +21947 +15718 +3601 +590 +590 +1364 +1648 +22740 +8668 +1203 +22741 +22742 +9738 +18064 +22743 +15718 +22744 +22745 +43 +10274 +9 +18695 +19266 +2009 +18798 +13721 +1765 +5791 +19618 +15720 +22746 +278 +22747 +9 +22748 +22749 +19229 +9563 +22750 +20499 +22308 +22751 +22752 +19618 +345 +19618 +22753 +22754 +22755 +790 +22756 +22757 +14856 +18484 +21947 +22758 +22759 +19618 +5267 +1559 +22760 +43 +10848 +7624 +9 +2790 +397 +1229 +18512 +5085 +20657 +19 +22761 +19618 +18896 +22762 +1991 +22763 +1524 +22764 +13801 +22765 +22766 +22767 +19970 +5489 +22768 +13405 +590 +9 +19618 +12230 +14477 +1234 +19491 +263 +22769 +3546 +1364 +22770 +21947 +22771 +358 +22772 +1571 +43 +22773 +249 +4684 +2744 +29 +22774 +60 +15914 +1559 +286 +8249 +22775 +10848 +265 +22776 +15167 +22777 +22778 +7046 +3546 +22599 +14 +19 +15618 +22779 +554 +13179 +20 +85 +2259 +286 +22780 +8668 +2577 +3978 +1352 +736 +2733 +397 +5438 +22781 +1051 +22782 +1423 +188 +5197 +5773 +22783 +22784 +22785 +15 +14079 +15031 +178 +736 +770 +22786 +519 +22787 +21947 +19655 +10790 +22788 +22789 +5299 +22790 +1107 +345 +2243 +137 +22791 +19 +22792 +21947 +19655 +1109 +19 +9 +16 +21947 +22793 +17973 +2 +21947 +22794 +22795 +35 +9837 +22796 +2 +43 +22797 +22798 +2697 +4125 +3546 +5085 +22799 +22800 +188 +1612 +11822 +22801 +13508 +9913 +22802 +590 +22803 +22804 +22805 +22806 +4765 +22807 +14 +22808 +736 +11509 +1423 +345 +14079 +22809 +15718 +4367 +22810 +22811 +57 +15914 +286 +21947 +22812 +19852 +373 +22813 +13721 +22814 +22815 +22816 +22817 +19160 +22818 +14 +19792 +822 +7835 +155 +349 +22819 +22820 +345 +22821 +10137 +32 +2040 +2577 +21947 +22822 +1553 +20 +18047 +22823 +155 +13721 +21947 +3067 +14 +155 +15 +22824 +22825 +1812 +22826 +345 +2577 +7451 +992 +22827 +22828 +22829 +1157 +10146 +590 +1214 +21947 +590 +22830 +80 +22831 +1112 +5650 +2042 +736 +22832 +21947 +22833 +22 +176 +21841 +22834 +22835 +13143 +7256 +21947 +18683 +32 +22836 +43 +6480 +590 +8508 +4990 +1109 +11029 +7053 +22837 +22838 +19618 +99 +22839 +345 +20 +15718 +22840 +936 +22841 +3978 +14524 +8999 +349 +22842 +345 +3546 +19618 +22843 +22844 +484 +597 +12194 +22845 +10031 +345 +137 +43 +22846 +19 +22847 +22308 +7855 +464 +3543 +43 +265 +32 +22 +22848 +22849 +13721 +15824 +22850 +22851 +14276 +22852 +19618 +16695 +22853 +17385 +16402 +915 +4906 +5599 +19618 +736 +6627 +59 +46 +43 +5326 +286 +2577 +22124 +22854 +22855 +22856 +590 +9143 +16437 +5649 +22857 +22858 +22859 +272 +14 +345 +22860 +43 +213 +213 +22861 +590 +21947 +22862 +15068 +736 +21947 +22863 +89 +22864 +10737 +2694 +14604 +9 +2410 +22865 +665 +22866 +18896 +21947 +713 +736 +22867 +19160 +21030 +345 +22868 +4227 +5780 +22869 +284 +286 +9 +22870 +22871 +22872 +8465 +2310 +14363 +213 +9 +22873 +17790 +3546 +20942 +22874 +19737 +22875 +915 +9 +22876 +138 +22877 +22878 +1559 +272 +823 +22879 +22420 +22880 +22881 +22882 +22883 +590 +1290 +22884 +2804 +14 +9 +2000 +22885 +484 +18951 +22886 +1090 +770 +248 +19 +22308 +22887 +22888 +22268 +6883 +13528 +21689 +115 +2415 +43 +7835 +22889 +14 +4313 +18798 +22890 +1901 +21947 +14 +22891 +22892 +22893 +14 +19618 +590 +22894 +14 +19618 +5837 +20572 +10 +9 +1091 +770 +538 +379 +19 +590 +20 +43 +22895 +4364 +22896 +19792 +22897 +11480 +5780 +22898 +19618 +13721 +22899 +736 +590 +19852 +57 +10256 +590 +8849 +22900 +15167 +13721 +8566 +14404 +14477 +22901 +345 +22902 +14477 +21947 +1385 +6950 +22903 +22904 +8393 +15718 +35 +845 +19618 +286 +4808 +22905 +3095 +3546 +2260 +694 +7231 +13721 +22906 +7364 +22907 +43 +22908 +22909 +2314 +155 +15718 +20 +345 +554 +22910 +10151 +3291 +1082 +22911 +533 +22912 +1012 +2804 +22865 +5791 +22913 +11754 +22914 +22915 +1920 +3544 +22916 +14477 +4414 +43 +43 +22917 +98 +22918 +22919 +14 +3435 +22920 +648 +20949 +736 +22921 +22922 +20803 +19 +3546 +9 +303 +22923 +22924 +19 +736 +3406 +138 +19618 +337 +12621 +22925 +17466 +22926 +5085 +590 +9156 +22927 +3546 +616 +8249 +22928 +3546 +22929 +9578 +14604 +43 +22930 +19404 +66 +20572 +22931 +22407 +15419 +22932 +22933 +590 +764 +53 +22934 +519 +22935 +365 +13721 +736 +5725 +18061 +284 +19478 +9410 +22936 +19 +32 +21947 +554 +590 +22937 +764 +19 +349 +14363 +24 +22938 +22939 +4441 +21947 +616 +22940 +22941 +19618 +2243 +18448 +590 +15914 +22942 +1437 +712 +22943 +22944 +286 +22945 +58 +712 +248 +8103 +14679 +1716 +21947 +1943 +22946 +114 +22947 +3546 +1606 +19 +11754 +22948 +4263 +15989 +19618 +16102 +22949 +22950 +19618 +22951 +19 +337 +1612 +19206 +19618 +8566 +17687 +3553 +22855 +43 +19618 +730 +2253 +15718 +1021 +22952 +17043 +22953 +274 +22954 +21693 +14 +1310 +345 +22955 +15973 +22956 +22957 +303 +14770 +196 +19 +19852 +22958 +7137 +21947 +17553 +3291 +44 +303 +21947 +22959 +22960 +1082 +4502 +10239 +5476 +22961 +13721 +2834 +3546 +19 +736 +14 +345 +29 +19655 +22962 +22963 +5215 +22964 +209 +590 +22965 +22409 +22966 +590 +222 +22967 +18345 +533 +4518 +32 +915 +14001 +22968 +4683 +1100 +1605 +22969 +736 +2419 +43 +22970 +7835 +533 +597 +15623 +1503 +14604 +19 +345 +873 +1289 +66 +57 +22971 +19 +4278 +22972 +19 +3626 +915 +9 +22973 +22974 +19797 +5764 +9986 +22975 +6883 +22976 +57 +19618 +14 +21947 +22977 +3546 +11321 +2926 +736 +500 +3546 +222 +21947 +21947 +16024 +22978 +22979 +3276 +17112 +8668 +736 +22980 +22981 +22982 +60 +22983 +22984 +22985 +22986 +22987 +9 +15718 +22988 +22989 +538 +22990 +7835 +20390 +22991 +14 +1115 +43 +29 +286 +19 +12743 +19924 +22992 +22993 +22994 +4441 +7053 +9 +18440 +22995 +761 +19489 +22996 +22997 +22998 +5780 +3626 +3546 +22999 +142 +23000 +23001 +23002 +286 +15 +3546 +23003 +23004 +14603 +286 +3491 +13721 +21947 +17799 +16437 +23005 +23006 +43 +303 +23007 +13168 +323 +3973 +379 +14477 +23008 +827 +23009 +22308 +23010 +1012 +23011 +1612 +665 +16826 +43 +23012 +2243 +720 +16981 +23013 +7835 +23014 +23015 +12916 +23016 +248 +284 +284 +1905 +46 +590 +590 +209 +2577 +23017 +23018 +19965 +23019 +19 +823 +590 +15718 +354 +412 +10338 +23020 +18882 +19 +15 +35 +21045 +15068 +1513 +23021 +19 +19618 +1688 +23022 +21947 +23023 +22 +15718 +23024 +2983 +337 +20280 +284 +19918 +11192 +13721 +284 +16477 +11274 +22268 +345 +12987 +8460 +3816 +671 +4808 +23025 +249 +286 +23026 +213 +6095 +14 +15513 +23027 +23028 +15 +23029 +1442 +19655 +19404 +23030 +1356 +1513 +23031 +12560 +6766 +32 +23032 +21947 +23033 +272 +9396 +23034 +23035 +338 +2459 +22922 +284 +7032 +14 +23036 +736 +1765 +337 +23037 +21947 +8255 +590 +248 +23038 +23039 +248 +2 +590 +23040 +250 +8566 +23041 +10781 +11762 +23042 +1870 +137 +23043 +590 +21947 +57 +16437 +32 +745 +5990 +10063 +7444 +2790 +2135 +43 +21947 +19965 +15718 +57 +3546 +23044 +9 +721 +23045 +213 +23046 +23047 +32 +19 +23048 +2 +13908 +15496 +11754 +3546 +98 +23049 +23050 +23051 +23052 +23053 +23054 +18695 +2197 +14 +19618 +23055 +286 +590 +23056 +15845 +19 +1698 +14477 +23057 +23058 +13570 +514 +23059 +23060 +23061 +7208 +23062 +1021 +23063 +23064 +43 +43 +23065 +286 +1559 +23066 +9 +13721 +8188 +9 +23067 +18744 +736 +7666 +23068 +155 +14 +345 +23069 +23070 +23071 +3551 +32 +286 +23072 +720 +5085 +23073 +736 +240 +2008 +23074 +2042 +19 +2476 +23075 +5119 +23076 +910 +1529 +21947 +23077 +1172 +349 +12337 +1100 +23078 +18695 +6449 +23079 +16 +9 +2260 +8188 +23080 +6786 +736 +23081 +23082 +590 +19 +23083 +13801 +23084 +15718 +109 +736 +19618 +23085 +23086 +43 +13721 +286 +14 +11283 +3601 +23087 +23088 +8668 +1090 +590 +23089 +12531 +9 +3546 +2561 +20 +18792 +823 +1386 +23090 +23091 +2561 +2026 +20087 +35 +14 +338 +23092 +345 +8297 +4441 +9 +345 +23093 +286 +21947 +32 +23094 +3601 +23095 +23096 +23097 +790 +11321 +1300 +713 +23098 +533 +20442 +23099 +17903 +4166 +9 +15 +2309 +21947 +23100 +23101 +10 +23102 +23103 +23104 +2 +3543 +23105 +1082 +22236 +14 +23106 +23063 +11762 +16178 +15720 +2260 +21947 +9 +2944 +23107 +764 +23108 +19618 +14343 +10163 +286 +23109 +23110 +23111 +1310 +4634 +554 +23112 +21947 +349 +1051 +586 +9788 +386 +3946 +18503 +23113 +23114 +12307 +18503 +1169 +398 +1051 +345 +590 +43 +19456 +23115 +345 +86 +590 +17360 +96 +250 +23116 +23117 +14477 +1181 +707 +23118 +13721 +43 +32 +137 +21689 +23119 +23120 +23121 +89 +21947 +21947 +7053 +23122 +274 +43 +915 +23123 +590 +23124 +519 +23125 +23126 +5611 +9 +53 +23127 +1524 +13754 +23128 +21947 +6571 +23129 +23130 +1425 +23131 +43 +1688 +349 +23132 +590 +1765 +19 +3546 +155 +179 +9410 +1190 +317 +9 +23133 +23134 +23135 +17670 +12402 +23136 +1356 +9577 +18807 +12479 +20952 +23137 +349 +23138 +645 +3978 +19618 +23139 +23140 +23141 +23142 +1559 +19 +11341 +10 +23143 +14 +5326 +23144 +23145 +5110 +12203 +23146 +23147 +14 +590 +23148 +15718 +3601 +3649 +20785 +155 +23149 +3544 +1605 +23150 +19 +3546 +868 +23151 +23152 +23153 +14477 +586 +1051 +23154 +23155 +1224 +6095 +14 +57 +590 +736 +3546 +23156 +8566 +57 +3546 +1095 +46 +19 +21947 +209 +23157 +9 +23158 +590 +23159 +23160 +3385 +23161 +23162 +683 +16826 +2 +18862 +23163 +1052 +23164 +590 +4677 +21689 +720 +19404 +23165 +23166 +2 +377 +5099 +19618 +736 +9 +23167 +2121 +590 +32 +736 +1382 +379 +3546 +14342 +274 +23168 +20803 +23169 +14 +178 +560 +23170 +23171 +18695 +23172 +19 +22 +1612 +590 +22474 +14604 +2414 +16437 +823 +3546 +43 +23173 +23174 +19 +2577 +7137 +8297 +14 +15810 +23175 +21031 +14693 +345 +23176 +19795 +18978 +209 +832 +20803 +2 +249 +14621 +23177 +590 +23178 +1310 +736 +23179 +23180 +3553 +43 +1710 +13721 +57 +9422 +14 +21947 +43 +23181 +16 +22 +1517 +23182 +7940 +9 +19095 +11522 +23183 +809 +23184 +23185 +23186 +23187 +32 +1593 +3034 +23188 +23189 +32 +736 +15914 +15 +23190 +3546 +23191 +23192 +20 +2 +23193 +9 +23194 +1149 +2 +21947 +5780 +23195 +23196 +32 +616 +22282 +23197 +23198 +1847 +286 +250 +23199 +201 +23200 +21947 +222 +23201 +12005 +790 +23202 +827 +23203 +14 +15471 +573 +11 +703 +23204 +43 +23205 +399 +19618 +9 +43 +23206 +736 +3559 +590 +2234 +2061 +16437 +18503 +823 +57 +23207 +272 +23208 +7208 +23209 +6480 +23210 +22057 +1812 +23211 +57 +345 +9 +155 +32 +590 +23212 +377 +23213 +8668 +365 +14 +23214 +5218 +4441 +20 +1698 +21947 +20555 +43 +21947 +23215 +272 +20373 +3546 +23216 +2476 +9 +19 +23217 +286 +20864 +9 +14814 +2550 +1332 +23218 +43 +8392 +18798 +15718 +14477 +23219 +35 +20616 +15718 +23220 +23221 +23222 +19 +7835 +370 +19404 +4816 +23223 +1517 +19618 +23224 +23225 +23226 +16102 +23227 +590 +14001 +18695 +3119 +16825 +9 +23228 +357 +23229 +14 +842 +43 +823 +323 +286 +32 +23230 +23231 +23232 +23233 +3 +345 +1992 +43 +13721 +43 +971 +15 +23234 +7945 +12120 +23235 +23208 +23236 +13721 +16437 +822 +43 +2 +23237 +23238 +1513 +23239 +9 +14477 +23240 +20085 +23241 +8392 +23242 +8476 +23243 +23244 +14 +19618 +13207 +23245 +22618 +23246 +19 +23247 +23248 +23249 +9 +23250 +23251 +7167 +14343 +11551 +23252 +3546 +9 +23103 +3 +23253 +23254 +23255 +18376 +1823 +19404 +19 +1051 +14 +23256 +286 +590 +613 +16121 +43 +23257 +23258 +2249 +23259 +19 +23260 +736 +19618 +23261 +14001 +683 +60 +21689 +5614 +9939 +43 +23262 +5757 +3546 +590 +43 +1867 +590 +35 +720 +13721 +23263 +11209 +21627 +19335 +5851 +13721 +23264 +23265 +13484 +23266 +13721 +23267 +14 +21947 +23268 +15 +558 +43 +13150 +19404 +22041 +23269 +23270 +15 +23271 +15914 +7962 +23272 +15541 +15167 +6354 +590 +15718 +23273 +23274 +17571 +23275 +1051 +23226 +349 +19618 +5022 +155 +142 +23276 +23277 +18778 +736 +9 +286 +155 +23278 +23279 +19143 +23280 +23281 +15718 +647 +23282 +23111 +10 +23283 +1716 +4775 +358 +201 +541 +265 +23284 +17698 +13638 +23285 +5780 +915 +23286 +23287 +5085 +23288 +43 +3546 +23289 +23290 +809 +21791 +23291 +23292 +14363 +23293 +1116 +9 +13375 +23294 +23295 +1100 +23296 +1739 +43 +21947 +23297 +14846 +23298 +3546 +23299 +736 +23300 +23301 +2577 +21535 +19 +20 +349 +2035 +23302 +23303 +19618 +9 +1765 +23304 +5085 +2625 +5820 +18914 +265 +12005 +3002 +20 +89 +2410 +5410 +19655 +23063 +43 +23305 +23306 +590 +3546 +23307 +5837 +23308 +23309 +3787 +345 +201 +23310 +23311 +201 +1559 +23312 +14 +23313 +349 +349 +21947 +23314 +3543 +23315 +19091 +590 +23316 +4765 +21947 +23317 +1332 +18003 +10791 +19618 +22276 +23318 +9 +5627 +23319 +23320 +38 +3546 +6533 +23321 +23322 +23323 +15595 +2260 +23324 +3325 +23325 +201 +736 +17571 +1834 +23326 +23327 +23328 +17815 +14122 +872 +21947 +590 +32 +122 +3 +1696 +12067 +23329 +20 +23330 +23331 +2 +222 +23332 +14 +4292 +13721 +736 +19618 +155 +23333 +23334 +23335 +23336 +23337 +21947 +23338 +23339 +286 +2243 +11735 +5085 +692 +23340 +23341 +23342 +5326 +342 +32 +10349 +23343 +23344 +23345 +35 +23346 +1012 +989 +3601 +15483 +590 +23347 +23348 +317 +23349 +32 +179 +3559 +538 +23350 +554 +14856 +43 +3546 +1056 +23351 +21947 +484 +357 +23352 +19 +19 +21689 +3598 +590 +13412 +23353 +823 +23354 +23355 +21947 +736 +23356 +6341 +20776 +23357 +43 +19965 +13721 +17380 +46 +23358 +23359 +3155 +23360 +10946 +23361 +1716 +43 +272 +23362 +10356 +23363 +155 +13361 +9591 +23364 +21947 +11364 +14846 +19 +22865 +19792 +1423 +23365 +14 +15 +89 +8149 +13721 +13721 +101 +736 +14 +57 +13721 +21669 +140 +23366 +19 +23367 +15914 +15442 +17871 +57 +19618 +23368 +23369 +14 +23370 +3958 +12359 +209 +9 +13721 +20 +23371 +21947 +4263 +590 +19404 +573 +23372 +23373 +23374 +12534 +19618 +3030 +13721 +13976 +23375 +23376 +4824 +7379 +21689 +2 +23377 +14604 +23378 +21947 +23379 +3759 +554 +586 +590 +3 +43 +10 +9 +21947 +23380 +23381 +23382 +23383 +3546 +21947 +23384 +21031 +23385 +8460 +3638 +19404 +14 +22688 +416 +14 +23386 +23387 +23388 +43 +17809 +23389 +424 +21947 +23390 +10 +23391 +9 +43 +89 +23392 +23393 +4775 +21947 +9 +19 +23394 +23395 +23396 +2243 +23397 +23398 +9 +1696 +4764 +23399 +15824 +3543 +23400 +185 +21947 +21199 +1038 +23401 +43 +4441 +2459 +19 +5271 +823 +21947 +8855 +20 +1566 +155 +14363 +19 +19 +8356 +23402 +23403 +23404 +23405 +4702 +23406 +349 +554 +14 +23407 +4741 +9953 +14 +1316 +23408 +590 +3492 +23409 +32 +20 +23410 +21947 +15718 +3446 +712 +14 +286 +736 +2694 +19 +23411 +9118 +14 +6877 +590 +13721 +20952 +23412 +9 +23413 +9210 +590 +23414 +29 +12987 +16981 +43 +286 +1157 +12067 +590 +590 +12987 +23415 +1559 +188 +640 +23416 +43 +14 +14 +533 +10 +7291 +1529 +155 +23417 +7137 +23418 +3553 +20185 +349 +14420 +21947 +18982 +23419 +1465 +3546 +19 +736 +23420 +46 +23421 +21947 +23422 +4824 +19 +23423 +2 +15718 +23424 +23425 +23426 +7032 +23427 +9630 +5041 +286 +23428 +590 +1716 +337 +112 +19 +23429 +32 +19091 +23430 +345 +22042 +21947 +3473 +590 +23431 +6430 +3005 +19618 +13721 +14 +23432 +57 +43 +1870 +8789 +23433 +809 +178 +323 +23434 +22420 +331 +19 +178 +23417 +21947 +23435 +2804 +23436 +379 +23437 +23438 +23439 +25 +7053 +23440 +3059 +19918 +12845 +23441 +590 +23442 +9871 +4441 +8849 +179 +936 +23443 +590 +23444 +736 +137 +23445 +13129 +23446 +590 +736 +22010 +23314 +23447 +9 +13343 +1559 +2042 +12934 +5085 +736 +23448 +671 +23449 +23450 +768 +4296 +43 +23451 +1107 +23452 +683 +23453 +6571 +15718 +17466 +23454 +57 +4544 +19984 +23063 +379 +3543 +19404 +23455 +23456 +19 +2975 +6766 +14 +10737 +12307 +176 +23457 +23458 +683 +19413 +9396 +7291 +5780 +23459 +23460 +23461 +137 +23462 +19 +6055 +736 +21947 +736 +20952 +22587 +21947 +3251 +7053 +23226 +9 +823 +23463 +34 +665 +23464 +5085 +23465 +19 +32 +18995 +23466 +23467 +16780 +23468 +23469 +286 +23470 +19618 +14 +23471 +23472 +13049 +11966 +23473 +764 +18045 +23474 +23475 +23476 +20245 +19 +23477 +1559 +20785 +9177 +43 +23478 +23479 +23480 +1090 +1316 +18956 +590 +14 +23481 +6038 +15718 +23482 +259 +19 +43 +19618 +13566 +12976 +1091 +104 +495 +23483 +23484 +23485 +164 +3034 +16437 +23486 +272 +35 +5973 +23487 +416 +823 +23488 +23489 +2 +23490 +43 +720 +21947 +14 +23491 +23492 +21947 +23493 +201 +6571 +849 +590 +23494 +10028 +222 +14 +16437 +21947 +1013 +57 +15039 +736 +11995 +23495 +23496 +6011 +23497 +23498 +19 +23499 +23500 +23501 +1082 +22 +250 +19 +19 +23502 +23503 +155 +936 +23504 +16437 +590 +23505 +345 +23506 +19404 +23507 +43 +23508 +23509 +23510 +865 +377 +23511 +23512 +647 +21947 +19404 +23513 +286 +104 +23514 +23515 +213 +23516 +23517 +23518 +284 +43 +370 +21027 +20 +590 +12033 +23519 +23520 +345 +23521 +141 +8668 +3228 +10 +349 +5071 +2770 +2537 +23522 +284 +590 +1529 +590 +18951 +23523 +1018 +23524 +21849 +23525 +18978 +23526 +23527 +9054 +23528 +21947 +12893 +2260 +23529 +21947 +989 +23530 +20 +411 +586 +286 +736 +14477 +19618 +23531 +2 +23532 +590 +43 +23533 +4693 +23534 +1688 +15718 +12757 +17495 +43 +590 +349 +1716 +14079 +43 +9497 +345 +188 +379 +23535 +12579 +42 +43 +23536 +23537 +20340 +13566 +23538 +23539 +378 +13721 +3492 +248 +66 +248 +23540 +3842 +15718 +2202 +9 +21947 +279 +23541 +21947 +21947 +823 +38 +19618 +20 +14 +8668 +12404 +5780 +23542 +915 +3849 +22042 +495 +671 +2 +23543 +23544 +23545 +23546 +23547 +23548 +15699 +22666 +248 +23549 +13265 +43 +23550 +3 +20507 +13474 +16557 +303 +683 +13405 +15914 +23551 +23176 +23552 +23553 +6874 +23554 +23555 +23556 +23557 +248 +23558 +736 +17011 +23559 +23560 +3 +872 +14 +736 +80 +1364 +23359 +23561 +1107 +1604 +23103 +23562 +2561 +21811 +23563 +23564 +23565 +337 +7328 +18132 +323 +8566 +23566 +12987 +23567 +17698 +248 +23568 +23569 +284 +756 +23570 +38 +9 +23571 +1870 +11420 +5689 +112 +21947 +21947 +2449 +823 +823 +20952 +23572 +284 +23573 +23574 +23575 +1517 +2 +23576 +19618 +213 +2035 +23577 +1112 +23359 +23578 +19404 +248 +23579 +23580 +23504 +345 +23581 +5577 +13279 +23582 +23583 +11995 +23584 +23585 +21947 +560 +23586 +8566 +14 +284 +590 +5622 +15 +12466 +259 +14477 +15 +3 +1012 +9 +736 +15718 +8668 +23587 +23588 +23589 +23590 +14604 +23591 +43 +3546 +7835 +3553 +22403 +2804 +23592 +57 +23593 +43 +337 +16281 +371 +736 +3546 +23594 +8566 +827 +9 +590 +23595 +23063 +23596 +23597 +23103 +736 +23598 +23599 +23600 +13361 +19 +15718 +756 +14 +823 +1049 +13721 +19 +32 +19 +23601 +19655 +8668 +23602 +21947 +23603 +43 +23604 +1316 +19218 +96 +43 +1104 +18250 +736 +23605 +2197 +19405 +14 +23606 +23607 +7137 +338 +736 +936 +1157 +23608 +23609 +19 +43 +23610 +43 +209 +23611 +2159 +19 +4463 +23612 +23613 +345 +23614 +11762 +23615 +13616 +590 +178 +10356 +23616 +23617 +23618 +1502 +22308 +23619 +23620 +23621 +23622 +2769 +538 +249 +23623 +20533 +345 +23624 +865 +57 +23625 +77 +1604 +9 +23626 +590 +201 +23627 +20773 +16437 +19404 +8668 +19009 +23628 +5438 +11754 +23629 +5085 +9759 +20 +14 +23630 +23631 +57 +11321 +213 +23632 +770 +16866 +286 +5833 +23633 +53 +1961 +1520 +23634 +3081 +2919 +23635 +1352 +23313 +23636 +13943 +23637 +21947 +21947 +272 +16437 +16 +23638 +303 +32 +9 +23639 +1961 +48 +23640 +201 +16437 +23641 +43 +23642 +23643 +23644 +349 +14527 +43 +23645 +23646 +1508 +2 +15718 +647 +3396 +23647 +590 +15 +23648 +1100 +19852 +1442 +19 +23649 +5820 +2577 +823 +19618 +23650 +2593 +23651 +23652 +43 +165 +23653 +23654 +23655 +23656 +16437 +23657 +554 +43 +57 +18064 +23658 +1655 +4765 +10 +23659 +736 +22 +23660 +23661 +286 +14477 +23662 +14001 +19 +713 +23663 +6571 +1066 +23664 +23665 +1291 +23666 +3546 +225 +22 +590 +3546 +514 +23667 +18951 +15572 +3978 +23668 +8351 +19 +683 +5780 +6950 +19 +11210 +21947 +9 +23669 +4963 +303 +23670 +845 +936 +23671 +11341 +7236 +23672 +7053 +286 +122 +23673 +736 +23674 +3546 +23675 +736 +286 +21947 +5022 +21947 +16437 +4263 +5067 +21031 +23676 +188 +23677 +23678 +22075 +2 +23679 +23680 +16118 +21776 +21947 +17151 +43 +20803 +57 +19404 +2 +13721 +12827 +286 +272 +958 +2561 +23681 +23682 +720 +5780 +286 +402 +14816 +1082 +3 +590 +23683 +5415 +2824 +14216 +7379 +248 +23684 +14175 +23685 +23686 +1870 +349 +213 +399 +23687 +213 +8696 +590 +303 +89 +21947 +337 +2561 +23688 +9 +23689 +23690 +18045 +11762 +2577 +43 +23063 +23691 +1316 +23692 +213 +32 +23693 +23694 +21947 +13721 +2911 +23695 +23696 +21947 +21947 +23697 +13721 +43 +21947 +213 +1026 +23507 +22 +3252 +1559 +974 +10 +887 +21947 +2804 +14102 +23698 +337 +1991 +345 +1606 +823 +19 +20113 +9 +303 +176 +14 +32 +155 +23699 +23226 +23700 +23701 +590 +3034 +23702 +23703 +5438 +16253 +23704 +1042 +19091 +23705 +284 +554 +16826 +970 +23706 +248 +412 +345 +7835 +23707 +22865 +1316 +17151 +14001 +495 +21080 +14033 +23708 +21947 +5833 +23709 +15720 +23710 +23711 +21947 +23712 +7137 +23713 +9 +736 +3546 +188 +155 +14 +2694 +14 +20 +22371 +303 +23714 +345 +1905 +303 +248 +23715 +14586 +22963 +23716 +15820 +18823 +707 +2 +303 +23717 +23718 +14 +303 +284 +23719 +23720 +213 +23721 +21947 +23722 +22 +349 +21947 +12987 +20797 +1930 +9 +23723 +23724 +7053 +23725 +23726 +892 +349 +14477 +23727 +2790 +8610 +3876 +13129 +23728 +823 +736 +19618 +23729 +15 +519 +15718 +23730 +1212 +248 +23731 +23732 +20 +23733 +590 +5085 +155 +590 +1961 +23734 +823 +323 +14 +43 +12080 +23735 +9245 +23736 +23737 +23738 +590 +11762 +18234 +17064 +19618 +23739 +23740 +13476 +23741 +887 +23742 +19 +337 +284 +23743 +21849 +23744 +23745 +2281 +23746 +694 +213 +213 +15320 +22042 +21947 +7945 +4012 +4543 +23747 +23748 +9 +23749 +16144 +23750 +14 +23751 +284 +23752 +16190 +9 +23753 +57 +15713 +23754 +8566 +457 +104 +15820 +9 +17698 +337 +23755 +345 +301 +22986 +222 +18283 +19618 +213 +823 +23756 +23757 +5085 +317 +8244 +15718 +23758 +286 +10406 +13713 +23759 +5773 +23760 +155 +23761 +23762 +32 +5119 +137 +9 +1696 +23763 +303 +3026 +23764 +23765 +23766 +12431 +2567 +23767 +4128 +23768 +5908 +323 +23769 +317 +323 +9 +19 +23770 +323 +23771 +23772 +18816 +23773 +379 +21403 +590 +23774 +21689 +155 +736 +19 +23775 +4502 +23776 +23777 +43 +2975 +21947 +15054 +23778 +349 +10356 +1051 +35 +32 +23779 +23780 +23781 +35 +23782 +178 +1356 +590 +13721 +15068 +23783 +23784 +77 +43 +1901 +14 +14 +10096 +23785 +21947 +19618 +23786 +23787 +14020 +23788 +915 +23789 +648 +20 +23103 +19655 +23790 +590 +14603 +15 +590 +23791 +286 +1154 +345 +23792 +19 +23793 +1765 +22505 +21947 +21698 +3546 +22242 +23794 +43 +21310 +345 +23795 +788 +23796 +3724 +23797 +23798 +14599 +23799 +23800 +140 +23801 +19 +57 +349 +18695 +19486 +13361 +193 +3 +9 +13721 +23802 +43 +22187 +57 +57 +23803 +1517 +349 +14 +23804 +590 +23805 +17151 +23806 +16411 +23807 +19618 +9 +842 +1224 +23808 +337 +23809 +446 +19 +1027 +14 +10846 +23810 +23811 +15718 +23812 +1107 +17273 +7379 +23813 +15718 +2609 +23814 +19618 +43 +7183 +32 +57 +19 +2 +3669 +21947 +21947 +23815 +23816 +21947 +16573 +23817 +23818 +23819 +20143 +18616 +8668 +43 +23820 +573 +155 +23821 +3546 +19 +21947 +23822 +23823 +3546 +10177 +19404 +23824 +21107 +23825 +3275 +23826 +415 +861 +23827 +19618 +23828 +23829 +4306 +927 +43 +23168 +7053 +140 +1578 +19792 +23830 +13721 +303 +23831 +21947 +22 +43 +1384 +23832 +23833 +6907 +23834 +19655 +23835 +52 +98 +23836 +1226 +21049 +15460 +7053 +22 +20 +865 +23226 +349 +265 +188 +43 +707 +21947 +17151 +23837 +349 +19 +23838 +590 +19 +23839 +23840 +29 +16413 +15810 +23841 +7458 +586 +21947 +23842 +23843 +1223 +23844 +23845 +23846 +23847 +23848 +23842 +23849 +23850 +23851 +43 +155 +23852 +19 +23853 +358 +14175 +349 +3626 +23854 +19618 +19 +345 +23855 +736 +23856 +137 +23857 +590 +1384 +23858 +5085 +21947 +1112 +23859 +23860 +349 +5041 +23861 +2550 +3139 +495 +7448 +1867 +23862 +23863 +23864 +23865 +13279 +23866 +9 +23867 +533 +2415 +20 +845 +23868 +43 +23869 +23870 +23871 +23872 +23873 +19852 +23874 +491 +23875 +23464 +1307 +155 +23876 +7137 +16437 +1048 +2 +23877 +23878 +2859 +21947 +349 +23879 +15718 +23880 +736 +2537 +15951 +23881 +23426 +23882 +1082 +32 +43 +15384 +23883 +23884 +1696 +23885 +819 +590 +16102 +57 +23886 +23887 +8297 +17956 +11471 +89 +23888 +272 +736 +23889 +23890 +23891 +23892 +23893 +23894 +554 +1496 +23895 +14 +671 +1716 +23896 +9481 +23897 +9187 +6744 +57 +23898 +23899 +590 +19618 +137 +137 +21947 +22099 +5085 +23842 +7291 +1224 +22 +12987 +6784 +7053 +1154 +23900 +23901 +1768 +23902 +66 +19792 +1090 +23903 +7598 +14001 +1991 +1091 +23904 +1222 +19618 +17151 +23905 +9389 +21280 +21947 +23906 +4625 +286 +23907 +4827 +23908 +23909 +2694 +23910 +2769 +15442 +23911 +43 +3546 +9 +20572 +1942 +14 +23912 +7276 +9 +790 +12013 +566 +23913 +358 +23914 +11013 +19618 +2410 +1920 +11607 +21947 +15975 +21947 +647 +14 +21947 +590 +2577 +736 +23915 +89 +936 +9 +23916 +10 +1571 +249 +23917 +155 +2035 +286 +23918 +7053 +915 +13375 +5764 +32 +185 +823 +23919 +2561 +23920 +349 +730 +155 +57 +1442 +1012 +736 +23921 +23922 +1524 +19618 +1149 +4578 +3546 +23923 +7855 +9797 +23924 +19797 +22233 +5601 +80 +1442 +5331 +5075 +379 +23925 +7276 +16910 +2617 +237 +23926 +13721 +18982 +23927 +23928 +4368 +3059 +736 +23929 +89 +23930 +14392 +23931 +7778 +736 +23932 +3546 +590 +77 +19 +155 +4364 +23933 +23934 +19404 +23935 +23103 +10030 +14 +23936 +23937 +616 +345 +23938 +15718 +23939 +23940 +23941 +16885 +15718 +19618 +764 +806 +23942 +23943 +2804 +23944 +122 +23945 +3546 +43 +303 +13721 +23946 +647 +32 +23947 +23948 +1066 +23949 +1307 +23842 +188 +20785 +23950 +9 +23951 +17136 +89 +32 +554 +17635 +8297 +736 +345 +23952 +345 +14 +720 +2117 +3572 +303 +13721 +23953 +22666 +23220 +17151 +337 +213 +19160 +23954 +17151 +23955 +17698 +1508 +21999 +248 +43 +248 +23956 +9 +13807 +720 +23842 +284 +23957 +20773 +416 +21947 +23958 +23959 +21947 +23960 +23961 +23962 +23963 +23964 +647 +817 +10 +2577 +13721 +248 +2 +3544 +3546 +2117 +736 +284 +345 +23965 +23966 +736 +13566 +32 +339 +213 +1612 +18041 +9 +13655 +573 +23967 +248 +23968 +23969 +23970 +23971 +19618 +402 +23972 +1425 +3546 +248 +349 +23973 +14001 +43 +590 +23974 +15718 +23975 +43 +23976 +248 +23977 +23978 +10028 +872 +23979 +5085 +23980 +22986 +23981 +1300 +14001 +23358 +13721 +43 +21947 +398 +643 +1716 +23982 +790 +14147 +4278 +22891 +23983 +303 +22 +299 +20952 +23984 +19 +23985 +23986 +23987 +17151 +89 +4278 +23988 +23989 +23990 +23991 +43 +15718 +23992 +10004 +15718 +1314 +22 +1529 +43 +23993 +21947 +14 +464 +1150 +23994 +248 +7053 +23995 +12042 +29 +17151 +936 +23996 +23997 +23998 +21947 +21475 +23999 +43 +6817 +43 +14604 +491 +20 +7053 +38 +24000 +590 +24001 +43 +24002 +720 +24003 +60 +32 +1423 +345 +5316 +21947 +22639 +13150 +14 +349 +14909 +24004 +18664 +337 +2336 +24005 +24006 +24007 +19810 +20040 +14131 +24008 +3601 +24009 +24010 +14693 +19618 +6741 +736 +24011 +24012 +6364 +2841 +2 +24013 +19618 +24014 +416 +16736 +57 +21947 +317 +21947 +1824 +15718 +7053 +19 +201 +284 +57 +24015 +24016 +590 +345 +24017 +24018 +13848 +13721 +14477 +590 +21947 +21947 +24019 +7855 +24020 +303 +24021 +24022 +19618 +10789 +13038 +736 +24023 +22505 +24024 +24025 +24026 +24027 +590 +19 +7357 +9 +21947 +790 +22 +19618 +14591 +15 +345 +24028 +9 +554 +21947 +349 +24029 +590 +2 +9 +23226 +43 +24030 +22355 +519 +533 +637 +24031 +14 +14477 +10 +303 +19618 +24032 +736 +868 +9449 +24033 +24034 +60 +13361 +21627 +3842 +2859 +24035 +12618 +23842 +24036 +14013 +17638 +24037 +19218 +590 +21947 +7183 +21947 +9 +19218 +24038 +24039 +24040 +24041 +24042 +17151 +112 +20600 +17608 +815 +24043 +24044 +24045 +8807 +286 +12534 +2600 +24046 +15718 +13320 +24047 +24048 +114 +24049 +18798 +590 +590 +43 +7134 +1822 +17 +57 +1538 +2 +5907 +53 +18553 +8798 +155 +24050 +24051 +3978 +1612 +12701 +155 +24052 +24053 +590 +17151 +24054 +24055 +24056 +1011 +19 +736 +1090 +24057 +13343 +2260 +24058 +24059 +24060 +24061 +2577 +23688 +354 +16976 +24062 +590 +2694 +14 +24063 +24064 +18695 +1172 +23805 +248 +21947 +24065 +2009 +24066 +24067 +6741 +23196 +5780 +16826 +2 +24068 +2724 +5310 +38 +213 +9 +24069 +24070 +13721 +24071 +20 +24072 +14 +24073 +379 +24074 +19655 +7276 +17410 +6171 +13045 +3678 +24075 +60 +2859 +34 +21947 +7855 +20315 +21947 +21947 +21947 +373 +43 +21947 +495 +1612 +17670 +43 +21947 +24076 +16118 +3543 +10147 +189 +24077 +24078 +24079 +32 +24080 +4278 +24081 +823 +24082 +3546 +250 +19439 +17400 +23842 +1224 +7855 +958 +15993 +24083 +24084 +24085 +3684 +3256 +590 +8668 +1716 +349 +286 +24086 +683 +17670 +3599 +7855 +13721 +647 +7379 +24087 +3546 +24088 +15 +19404 +17119 +9713 +19618 +4407 +249 +22183 +24089 +24090 +20 +4461 +20 +1047 +10356 +17698 +24091 +2 +57 +20340 +1198 +24092 +533 +24093 +590 +2983 +209 +24094 +5085 +24095 +24096 +24097 +24098 +24099 +1991 +1531 +24100 +19 +57 +14914 +24101 +24102 +14000 +24103 +9759 +17151 +1026 +1559 +213 +24104 +213 +23842 +19 +24105 +57 +9 +24106 +201 +24107 +7208 +24108 +24109 +24110 +35 +7835 +3341 +21947 +284 +1559 +19 +24111 +24112 +284 +24113 +3876 +24114 +14216 +7960 +209 +14 +554 +98 +43 +29 +9 +9 +24115 +6501 +17151 +3546 +20600 +349 +2577 +22787 +590 +23571 +155 +24116 +1300 +24117 +19 +155 +24118 +19618 +24119 +590 +17340 +736 +32 +1044 +303 +349 +15971 +349 +19 +24120 +24121 +14 +32 +22442 +554 +349 +19618 +24122 +213 +1870 +345 +22417 +24123 +19618 +24124 +3546 +24125 +554 +284 +2415 +24126 +43 +24127 +1810 +2 +397 +8939 +5780 +4126 +24128 +24129 +15 +16437 +24130 +284 +24131 +15 +24132 +24133 +15718 +24134 +3251 +9 +155 +554 +24135 +24136 +43 +590 +6283 +24137 +595 +24138 +3553 +23842 +11057 +7117 +24139 +43 +9118 +1696 +24140 +20952 +24141 +349 +21486 +24142 +22 +16413 +23842 +21947 +2499 +220 +415 +15718 +15718 +1300 +57 +24143 +15 +3546 +598 +179 +201 +1300 +8766 +14 +43 +6408 +21947 +24144 +169 +19 +155 +24145 +24146 +213 +38 +24147 +21689 +32 +13721 +24148 +24149 +24150 +24151 +24152 +354 +24153 +6130 +9 +24154 +24155 +3599 +4024 +12214 +20952 +24156 +337 +24157 +5577 +14420 +5627 +2988 +24158 +22888 +4364 +24159 +19618 +21947 +24160 +3950 +9 +24161 +24162 +24163 +24164 +14 +15718 +303 +21031 +14 +245 +2197 +2609 +24165 +43 +24166 +43 +12987 +586 +5662 +19618 +24167 +20 +286 +9 +24168 +24169 +11966 +9 +24170 +10 +9 +2476 +286 +43 +24171 +7855 +32 +9 +1244 +43 +2356 +671 +1688 +5791 +345 +24172 +1220 +24173 +22 +18982 +1051 +24174 +24175 +24176 +323 +32 +19 +24177 +24178 +89 +32 +286 +21049 +18683 +19618 +13848 +22599 +19494 +1384 +590 +21947 +10031 +19091 +24179 +24180 +9 +16102 +16436 +24181 +24182 +5505 +24183 +9 +14 +24184 +9 +43 +12821 +5119 +15 +60 +19 +595 +4993 +14477 +21834 +17871 +21947 +942 +24185 +2556 +24186 +24187 +24188 +13131 +24189 +590 +1157 +2728 +19192 +53 +24189 +3546 +14982 +24190 +24191 +24192 +6480 +6400 +705 +286 +5601 +15797 +590 +24193 +24194 +24195 +590 +24196 +19 +720 +1578 +9 +24197 +24198 +3546 +24199 +24200 +24201 +4242 +379 +20 +1089 +24202 +24203 +573 +613 +24204 +24205 +1364 +24206 +24207 +872 +222 +24208 +1745 +323 +12425 +24209 +15914 +43 +24210 +155 +24211 +19 +32 +24212 +873 +17151 +24213 +720 +24214 +6950 +6531 +20040 +24215 +590 +24216 +24217 +566 +10789 +44 +2577 +43 +24218 +24219 +24220 +13582 +24221 +349 +713 +24222 +10559 +8171 +13721 +24223 +24224 +142 +43 +9363 +16413 +24225 +15 +15989 +38 +1696 +137 +616 +24226 +24227 +11087 +21947 +24228 +4296 +19573 +24229 +24230 +1700 +24231 +683 +24232 +24233 +1812 +24234 +15718 +24235 +24236 +10003 +14 +17596 +736 +21947 +7183 +43 +32 +19618 +21947 +19 +7053 +43 +3484 +14 +286 +4463 +272 +4306 +24237 +7291 +915 +597 +43 +1768 +5627 +24238 +32 +1648 +790 +24239 +24240 +13150 +3353 +249 +3601 +533 +4055 +1559 +9526 +24241 +5515 +24242 +23741 +4821 +8669 +590 +19 +590 +14 +24243 +1920 +590 +24244 +554 +42 +24245 +24246 +14 +3067 +2289 +17821 +21947 +24247 +349 +564 +24248 +24249 +10 +2733 +20 +809 +24250 +24251 +155 +378 +32 +24252 +43 +24253 +2769 +43 +24254 +16640 +57 +1251 +24255 +66 +24256 +4745 +1688 +24257 +77 +19 +9 +15512 +19 +24258 +18234 +17151 +24259 +24260 +1302 +3978 +43 +971 +15589 +8297 +16437 +24261 +2882 +142 +2 +24262 +11341 +24263 +446 +21698 +24264 +17151 +11364 +24265 +24266 +23573 +24267 +19939 +1382 +13361 +15720 +24268 +8593 +4185 +7053 +797 +24269 +17 +21947 +14240 +595 +15718 +24270 +1605 +11639 +1112 +24271 +509 +342 +12987 +24272 +24273 +24274 +24275 +48 +19618 +24276 +16437 +24277 +1749 +736 +286 +1082 +6571 +20 +24278 +24279 +22666 +24280 +8668 +24281 +24282 +35 +43 +24283 +11 +19797 +24284 +24285 +4 +15 +345 +24286 +24287 +8508 +24288 +115 +59 +16437 +1013 +58 +5022 +3546 +790 +32 +24289 +43 +1091 +9 +59 +24290 +1047 +232 +590 +14363 +667 +2830 +249 +19763 +815 +17062 +24291 +32 +24292 +7256 +11762 +23196 +345 +24293 +333 +1992 +15824 +24294 +24295 +20 +32 +17151 +19 +24296 +11822 +707 +2302 +24297 +24298 +3 +23464 +2772 +1580 +24299 +24300 +24301 +590 +1051 +21126 +5499 +24302 +15718 +2 +249 +19618 +178 +9 +915 +538 +3553 +24303 +24304 +24305 +4547 +24306 +32 +24307 +24308 +19 +24309 +43 +24310 +24311 +23842 +15720 +10356 +11601 +13566 +7522 +22 +43 +3743 +11647 +4422 +24312 +24313 +24314 +24315 +19 +24316 +4790 +3553 +24317 +1559 +24318 +24319 +14 +155 +1612 +4609 +21947 +24320 +14 +24321 +1655 +22986 +13283 +57 +24322 +2550 +24323 +43 +541 +18703 +24324 +19618 +237 +15718 +24325 +7034 +57 +24326 +590 +14477 +590 +2305 +24327 +15107 +24328 +24329 +24330 +24331 +2260 +439 +345 +16139 +9160 +22643 +299 +23647 +14363 +21947 +272 +24332 +13721 +14 +24333 +1157 +4 +11428 +842 +24334 +43 +1566 +9 +43 +142 +24335 +122 +1680 +3708 +1668 +1124 +745 +24336 +7835 +16152 +24337 +1013 +24338 +16079 +6950 +21947 +349 +24339 +1716 +24340 +286 +24341 +1712 +15718 +8668 +24005 +201 +24342 +1688 +12 +155 +21681 +196 +2828 +24343 +14 +16437 +18707 +24344 +24345 +24346 +24347 +6395 +24348 +647 +1513 +13721 +24349 +24350 +24351 +24352 +819 +20 +24353 +3546 +9 +13615 +228 +24354 +24355 +24356 +16656 +2410 +7183 +24357 +11102 +2042 +11321 +1817 +15824 +43 +1481 +24358 +24359 +2790 +2577 +19618 +24360 +21947 +590 +736 +23842 +10147 +345 +14 +24361 +24362 +14079 +1169 +24363 +11421 +24364 +1765 +14621 +14000 +24365 +24366 +24367 +43 +4409 +1870 +15718 +12005 +15718 +23842 +24368 +24369 +12987 +1817 +24370 +2502 +18364 +370 +24371 +5253 +24372 +845 +21947 +24373 +24374 +19618 +16437 +17151 +2446 +590 +345 +13721 +1382 +24375 +10727 +647 +17151 +349 +590 +24376 +5075 +35 +3 +10 +24377 +24378 +32 +7835 +43 +8566 +15 +24379 +345 +43 +19 +2609 +2550 +24380 +12987 +17602 +23842 +11420 +13721 +24381 +24382 +5248 +21947 +24383 +590 +478 +249 +24384 +265 +24385 +24386 +209 +14102 +13570 +14477 +24387 +12506 +104 +1517 +24388 +24389 +24390 +24391 +20280 +24392 +24393 +196 +43 +3353 +286 +24394 +24395 +19618 +57 +554 +24396 +24397 +4463 +19 +43 +491 +23103 +21947 +24398 +24399 +24400 +22963 +57 +21947 +24401 +24402 +24403 +10111 +24404 +8208 +14 +24405 +4414 +24406 +24407 +2129 +24408 +32 +9 +24409 +57 +24410 +21947 +24303 +24411 +24412 +2 +19 +24413 +23166 +19 +24414 +21689 +32 +4745 +24415 +286 +24416 +590 +19618 +1920 +21947 +2197 +8134 +15718 +2764 +2550 +720 +16089 +2 +24144 +3270 +24417 +13405 +583 +21947 +24418 +7810 +7835 +24419 +286 +13652 +745 +3050 +15718 +13721 +647 +24420 +519 +24303 +9 +24421 +24422 +14363 +24423 +24424 +24144 +24425 +170 +3546 +24426 +827 +24427 +24428 +23190 +24429 +24430 +590 +15 +345 +21947 +19655 +7855 +7053 +10 +19 +24144 +16931 +13993 +1244 +13721 +24431 +13375 +66 +24432 +11273 +823 +18695 +17151 +24433 +1817 +24434 +24435 +2356 +5780 +24436 +24437 +24438 +2 +15 +2733 +1517 +20142 +19 +24439 +4502 +4124 +24440 +5318 +1677 +21947 +24441 +590 +590 +14 +60 +24442 +1698 +24443 +24444 +564 +2550 +1655 +24445 +22371 +43 +24446 +3034 +89 +2577 +24447 +16437 +24303 +4536 +15718 +9 +24448 +2314 +24449 +24450 +2446 +8976 +237 +7183 +286 +24451 +18784 +11413 +23103 +24452 +4961 +16102 +24453 +19655 +9 +827 +24454 +651 +4985 +4388 +24455 +3546 +15476 +24456 +20792 +24457 +24458 +590 +19 +15 +3601 +15 +43 +24459 +17151 +24460 +10470 +24461 +286 +24462 +24463 +24464 +24465 +15 +24466 +24467 +809 +19 +1230 +24468 +185 +14 +21947 +13173 +9 +155 +24469 +3546 +24470 +10123 +24471 +2254 +19 +2 +17865 +77 +24472 +764 +2804 +89 +24473 +3062 +14363 +24474 +373 +13721 +1021 +9649 +78 +24475 +24476 +249 +14216 +286 +24477 +2410 +736 +17151 +24478 +24479 +70 +8701 +19 +43 +4116 +24480 +1011 +358 +24481 +10117 +24482 +259 +24483 +24484 +24485 +24486 +9 +9 +21776 +3546 +17151 +590 +5659 +24487 +24488 +2459 +24489 +24490 +16079 +8669 +24491 +12260 +24492 +1160 +24493 +1696 +24494 +23842 +24495 +18896 +274 +17151 +11394 +24496 +1300 +3546 +14 +24497 +286 +89 +17151 +5085 +24498 +683 +24499 +25 +24500 +590 +24501 +590 +14 +647 +20 +24502 +16437 +19 +349 +24503 +24504 +24505 +2 +7717 +24506 +165 +5780 +19918 +2694 +24507 +24508 +24509 +24510 +24511 +4088 +915 +24512 +24513 +17144 +21031 +554 +11471 +19618 +155 +14185 +112 +168 +24514 +24515 +990 +3484 +24516 +24517 +13343 +345 +9 +1316 +1286 +24518 +14597 +111 +5257 +18283 +196 +24519 +18982 +137 +24520 +464 +16437 +22962 +16437 +274 +24521 +6171 +1056 +43 +36 +24522 +16571 +14 +15489 +686 +24523 +19868 +24524 +19618 +436 +24525 +24526 +18589 +24527 +1013 +720 +424 +22986 +24528 +7137 +13364 +345 +24303 +541 +16437 +24335 +4293 +24529 +4050 +24303 +1291 +24530 +24531 +13662 +24532 +24533 +24534 +24535 +736 +24536 +14 +24537 +5780 +24538 +14001 +2 +13988 +24539 +24540 +554 +17136 +24541 +23619 +24542 +24543 +24544 +32 +24545 +17920 +19839 +14240 +24546 +3546 +1013 +24547 +9 +7835 +24548 +20700 +24144 +1542 +35 +861 +7835 +4398 +342 +554 +24549 +7601 +19323 +24550 +3236 +17136 +3 +24551 +583 +21889 +48 +24552 +24553 +22802 +57 +17151 +24554 +23103 +18423 +24555 +24556 +2330 +36 +17670 +6430 +66 +24557 +13721 +24558 +24559 +19655 +15 +590 +20 +10967 +24560 +24561 +9 +24562 +24563 +188 +10 +24564 +89 +19797 +12404 +12005 +24565 +286 +24566 +43 +66 +57 +21947 +5197 +24567 +24568 +24569 +647 +24570 +14532 +1382 +19618 +322 +24571 +24572 +19931 +3007 +16437 +24573 +19386 +24574 +1021 +43 +7053 +24575 +14604 +12768 +23600 +9060 +24576 +17151 +1013 +15914 +13375 +43 +9578 +14477 +1612 +24577 +43 +24578 +24579 +22307 +23110 +3055 +24580 +24581 +23842 +17603 +10 +1013 +24582 +23196 +1961 +24583 +9 +20141 +24584 +21947 +24585 +24586 +24587 +24588 +24589 +11087 +1716 +9 +17698 +12005 +12402 +6782 +21947 +16640 +19618 +17151 +17754 +1901 +12987 +3278 +2042 +155 +14 +20228 +24590 +24591 +57 +2577 +24592 +519 +24593 +583 +155 +21776 +24594 +24595 +21947 +24596 +24597 +24598 +24599 +24600 +5085 +4824 +24601 +24602 +9 +20 +873 +566 +18695 +2132 +736 +2790 +24603 +24604 +345 +2537 +24605 +24606 +24607 +43 +519 +24608 +24609 +1566 +286 +14 +1423 +379 +590 +8351 +19618 +22787 +10 +24610 +3546 +24335 +24611 +24612 +24613 +492 +155 +8962 +21947 +14 +6430 +24614 +92 +349 +23579 +1680 +19618 +24615 +24616 +1198 +15718 +1481 +21947 +24617 +2117 +9 +24339 +1914 +22 +24618 +10 +138 +21947 +155 +24619 +43 +2117 +213 +19 +19852 +4055 +43 +24620 +43 +14586 +23196 +24621 +24622 +19618 +284 +1524 +20115 +1578 +21689 +284 +249 +43 +24623 +7600 +248 +14529 +24624 +149 +17633 +283 +57 +24625 +10230 +303 +13848 +24626 +24627 +411 +17151 +24628 +1109 +1155 +24629 +354 +399 +24630 +80 +2146 +13897 +5780 +24631 +24632 +541 +23842 +2008 +345 +24633 +3743 +24634 +3421 +24635 +24636 +590 +24637 +8256 +24638 +24639 +19618 +1578 +14 +19091 +14 +24640 +647 +24641 +1524 +4293 +1710 +24642 +22260 +24643 +12987 +24644 +13529 +24645 +24646 +43 +24647 +17151 +13721 +3842 +18616 +20 +24648 +24649 +3345 +8883 +9 +24650 +24651 +24652 +10 +24653 +573 +6531 +21730 +209 +3755 +23226 +1295 +16445 +736 +114 +16437 +17136 +24654 +8458 +303 +21796 +590 +6179 +4827 +24655 +24656 +5757 +323 +24657 +1765 +188 +24658 +590 +533 +24659 +24660 +24661 +24662 +2243 +213 +155 +24663 +303 +832 +736 +19337 +1559 +24664 +286 +2314 +14 +8779 +2 +19 +2410 +286 +4028 +155 +24665 +16437 +9 +3546 +3546 +1357 +19218 +14477 +8814 +24666 +24667 +21999 +19883 +286 +3316 +590 +24668 +24669 +20952 +24670 +24671 +5085 +19581 +24672 +15437 +8668 +24673 +21947 +24674 +377 +24675 +3543 +24676 +1870 +4808 +14 +24677 +24678 +24679 +24680 +24681 +12584 +46 +14 +24682 +14914 +24683 +9 +861 +16629 +872 +8186 +21947 +24684 +971 +24685 +354 +22091 +15085 +24686 +19 +6341 +13361 +20 +155 +24687 +2035 +349 +1764 +3904 +89 +345 +19 +24688 +24689 +19 +80 +8297 +89 +4317 +24690 +3546 +2264 +43 +15718 +24691 +345 +284 +24692 +24485 +21947 +24693 +16681 +8994 +3546 +3959 +43 +3353 +24694 +4550 +24695 +15718 +43 +20339 +1637 +7276 +3 +32 +4028 +14 +24696 +7014 +24697 +448 +24698 +590 +164 +201 +24699 +11224 +5169 +24700 +24701 +821 +5627 +24702 +24703 +24704 +24705 +24706 +9 +515 +24707 +590 +22818 +646 +24708 +24709 +349 +43 +827 +24710 +24711 +24712 +590 +24713 +5908 +12117 +14668 +24714 +21776 +1230 +24715 +1920 +24716 +23842 +137 +19404 +887 +24717 +24718 +14 +9705 +24719 +6341 +1100 +19618 +930 +9475 +24720 +14 +24721 +24722 +24723 +21776 +24303 +14546 +14363 +19404 +17136 +21947 +22 +1316 +14147 +80 +1559 +769 +1181 +536 +17670 +18978 +14 +2721 +232 +43 +23603 +24724 +12684 +209 +7855 +590 +24725 +23842 +89 +14 +936 +1090 +3546 +43 +19404 +19618 +7980 +76 +3258 +46 +24725 +24726 +24727 +43 +24728 +24729 +345 +1817 +20156 +24730 +3546 +24731 +24732 +22029 +286 +24733 +176 +24734 +15592 +24735 +14079 +24736 +6364 +2694 +213 +24737 +4502 +24738 +57 +8188 +24739 +1559 +21947 +24740 +3421 +14477 +13405 +19918 +989 +861 +303 +1749 +8351 +590 +861 +1364 +21947 +21627 +24741 +2238 +19 +14 +24742 +24743 +19618 +24744 +699 +24745 +248 +24746 +15589 +14 +9 +21947 +5085 +590 +23842 +24747 +345 +24748 +24749 +15 +24750 +464 +323 +58 +2 +554 +24751 +12987 +24752 +3034 +3546 +22556 +24753 +590 +13502 +2 +6086 +2314 +590 +24754 +16645 +24755 +43 +12987 +13721 +24756 +412 +24757 +24758 +23842 +379 +24759 +8392 +1688 +736 +19618 +24760 +24761 +2117 +19618 +24762 +24763 +590 +8566 +19618 +24764 +24765 +1051 +24766 +24767 +24768 +725 +21893 +24769 +9 +24770 +24771 +60 +24772 +1244 +77 +1051 +24773 +24774 +5319 +43 +1442 +24775 +7208 +43 +14477 +24776 +14 +24777 +24778 +12618 +5267 +24779 +188 +32 +24780 +24781 +140 +13721 +25 +24782 +24783 +1465 +1615 +24784 +683 +21947 +9801 +3553 +24785 +24786 +9 +213 +9 +1244 +24144 +24787 +24788 +6877 +24789 +21261 +24790 +20623 +24791 +24792 +1425 +345 +9 +345 +3546 +14017 +98 +15539 +2348 +14945 +18695 +21947 +24793 +24794 +24795 +1949 +123 +349 +24796 +12722 +24797 +303 +24798 +57 +21947 +5963 +24799 +345 +23867 +2577 +349 +32 +1870 +2410 +19 +19 +24800 +248 +872 +43 +19 +989 +24303 +18631 +13721 +99 +24801 +590 +554 +24802 +25 +24803 +2476 +1992 +24804 +35 +24805 +303 +14981 +14 +554 +57 +24806 +14477 +19 +24807 +1867 +24808 +24809 +2919 +3546 +24810 +24811 +155 +259 +24812 +349 +24813 +24814 +14 +24815 +2694 +3601 +24816 +24817 +21681 +19 +201 +24818 +24819 +24820 +491 +213 +43 +24821 +9 +23103 +12077 +24822 +12005 +24823 +22196 +24425 +284 +24824 +9 +24144 +1812 +18760 +14616 +32 +19618 +9 +1765 +1364 +11762 +15718 +24825 +9 +14363 +24826 +1604 +24827 +554 +9402 +104 +24828 +43 +43 +713 +21776 +1083 +19618 +17151 +13150 +24829 +24830 +9 +213 +15718 +19618 +24831 +24832 +24833 +16437 +24834 +19618 +11754 +21947 +32 +2865 +24303 +21947 +24835 +24836 +24837 +24838 +16437 +23226 +24839 +43 +2 +24840 +24841 +24842 +24843 +12912 +24844 +14660 +541 +8392 +18045 +24845 +24846 +24847 +196 +24848 +14 +24849 +1222 +590 +24850 +13721 +24851 +14 +155 +24852 +823 +3546 +24853 +24854 +43 +24855 +19655 +24856 +9 +21947 +15 +24857 +15718 +24858 +17151 +509 +18612 +19618 +665 +24859 +77 +24860 +24861 +358 +24862 +104 +32 +15718 +222 +24863 +24864 +13721 +22 +1745 +138 +14 +5418 +17472 +1529 +24865 +15718 +2694 +2 +11966 +4226 +24866 +9 +24867 +345 +24868 +24869 +13721 +323 +24870 +6877 +19 +19 +2 +24871 +24872 +19 +155 +24873 +249 +10 +21947 +411 +13566 +23842 +357 +24471 +373 +379 +24144 +24874 +24875 +24876 +19797 +1382 +24877 +14477 +24878 +358 +20125 +155 +24879 +4293 +14102 +24880 +11483 +24881 +9630 +19618 +9 +24882 +19 +24883 +43 +6400 +24884 +14001 +14340 +57 +24885 +671 +24886 +13721 +12351 +19 +24887 +736 +21947 +24888 +6095 +66 +15 +155 +24332 +15 +14563 +647 +24889 +303 +415 +21947 +105 +22 +16437 +16443 +24890 +14 +19 +24891 +13179 +9 +19 +24892 +24893 +590 +22717 +24894 +19618 +24895 +1316 +23231 +43 +24896 +24897 +201 +24898 +12387 +179 +19783 +14 +17151 +24899 +14660 +17484 +2764 +7855 +9 +24900 +24901 +2 +1442 +24902 +24903 +24904 +3171 +7835 +19 +2042 +345 +57 +24905 +764 +1226 +11754 +2499 +250 +24906 +15 +590 +24907 +24908 +24909 +590 +24910 +24144 +14001 +24911 +13566 +24912 +13497 +2818 +24913 +24914 +24915 +14216 +24916 +24917 +57 +365 +24918 +15720 +17151 +9 +9 +554 +21627 +2427 +24919 +24920 +2260 +590 +24921 +2314 +32 +14 +24303 +24922 +12366 +24923 +6950 +22888 +24924 +24925 +24926 +8291 +24927 +536 +4141 +3976 +24896 +24928 +8151 +14 +590 +24929 +24930 +66 +115 +24931 +14 +43 +1090 +176 +15 +590 +872 +910 +349 +18047 +1181 +10642 +15406 +14001 +16437 +32 +14369 +24932 +24933 +24934 +19209 +24935 +19 +20 +14 +104 +24936 +24937 +369 +665 +21947 +24303 +24938 +43 +24939 +5627 +286 +1048 +21947 +24940 +24941 +6147 +15718 +11995 +5920 +24942 +9 +15718 +21947 +24943 +24944 +24945 +19 +9 +14 +20 +1517 +286 +9 +21947 +24946 +15 +342 +14477 +495 +24947 +4702 +11423 +2459 +43 +24948 +38 +665 +24949 +14477 +9 +9 +24950 +24207 +24896 +4128 +24951 +24952 +14 +18734 +590 +14 +14477 +9 +19655 +24953 +272 +24954 +24955 +2804 +24956 +155 +2386 +286 +24957 +24958 +19 +24959 +415 +8685 +24960 +3546 +21947 +24961 +323 +86 +19 +5665 +24962 +24963 +24964 +7835 +568 +24965 +24966 +9560 +21540 +24967 +14 +137 +24968 +24969 +13623 +17670 +24970 +14185 +10793 +13721 +7053 +22308 +3546 +7183 +201 +2694 +24971 +24972 +720 +23842 +22230 +17716 +21269 +43 +24973 +19 +21947 +24974 +7137 +24975 +24976 +24977 +20187 +12 +13721 +12250 +4278 +3353 +14454 +8392 +8809 +665 +5316 +19 +24978 +345 +24979 +936 +24980 +24981 +14001 +11762 +832 +179 +24982 +24983 +323 +24984 +24985 +18896 +24986 +89 +43 +19478 +24987 +765 +7273 +345 +1425 +57 +915 +14 +24988 +19 +415 +24989 +22 +2 +24990 +21947 +23653 +9 +24991 +24992 +201 +16899 +24993 +15718 +3353 +5781 +12479 +188 +272 +17911 +12987 +24994 +57 +9 +24995 +17412 +24996 +24997 +43 +140 +24998 +349 +8994 +3546 +286 +24999 +25000 +25001 +25002 +9497 +741 +345 +17698 +14369 +25003 +6595 +7053 +3476 +3649 +7729 +228 +196 +25004 +15517 +5650 +14 +10482 +669 +25005 +707 +8787 +25006 +14369 +590 +9 +213 +5791 +21947 +43 +25007 +6058 +24303 +9 +14369 +373 +25008 +595 +736 +5299 +597 +19 +25009 +25010 +1991 +14369 +8188 +25011 +19458 +24303 +25012 +3546 +3330 +25013 +25014 +25015 +48 +14 +8967 +25016 +1542 +9275 +278 +25017 +25018 +25019 +14 +4388 +19091 +3417 +1051 +590 +25020 +1513 +25021 +19918 +25022 +665 +25023 +25024 +2234 +25025 +14 +25026 +25027 +21947 +9 +12402 +5085 +25028 +3546 +10 +9 +21849 +25029 +25030 +43 +14 +13365 +25031 +284 +5629 +25032 +1991 +25033 +3353 +19965 +7276 +17136 +25034 +10846 +2197 +25035 +14 +13721 +25036 +590 +19618 +1425 +9 +24045 +286 +15589 +745 +2537 +14477 +11762 +1920 +10 +25037 +25038 +185 +15730 +9396 +590 +25039 +5614 +3976 +25040 +590 +3546 +303 +590 +590 +590 +43 +19252 +25041 +16126 +25 +25042 +25043 +3 +25044 +14 +25045 +57 +25046 +20 +8624 +18798 +19 +720 +176 +14363 +9622 +590 +19218 +9 +25047 +25048 +25049 +13721 +9 +24144 +10642 +764 +25050 +15718 +590 +25051 +464 +57 +19618 +21689 +201 +1245 +25052 +25053 +936 +248 +25054 +19655 +25055 +25056 +1637 +25057 +25058 +2764 +14477 +6877 +1330 +25059 +2367 +303 +25060 +4414 +25061 +25062 +13566 +1765 +25063 +4387 +4411 +17136 +13721 +590 +286 +1051 +21947 +18896 +590 +14369 +25064 +971 +15718 +7835 +19003 +337 +25065 +16637 +3546 +849 +590 +35 +3251 +25066 +25067 +694 +14603 +19404 +25068 +3034 +209 +57 +213 +3 +19618 +3546 +14 +17033 +25069 +337 +12777 +736 +13721 +43 +7014 +303 +1066 +25070 +10094 +8171 +6518 +2694 +694 +1090 +25071 +648 +411 +25072 +25073 +25074 +14385 +478 +4585 +25075 +14381 +25076 +20852 +25077 +25078 +15989 +43 +25079 +15 +14079 +272 +25080 +3844 +19404 +1287 +15471 +849 +971 +25081 +736 +19 +365 +18423 +25082 +590 +11423 +19109 +25083 +25084 +43 +25085 +1082 +43 +25086 +14 +89 +25087 +1465 +155 +43 +25088 +8668 +25089 +1013 +8787 +15496 +18695 +1021 +25090 +2770 +25091 +25092 +1300 +9 +3417 +25 +3546 +17698 +5438 +13721 +25093 +25094 +24978 +17635 +25095 +7855 +25096 +15718 +19618 +19 +25097 +25098 +303 +19618 +25099 +25100 +3546 +3546 +21834 +4764 +25101 +25102 +25103 +2836 +25104 +25105 +1021 +25106 +25107 +15949 +4116 +13150 +1842 +25108 +25109 +14369 +2577 +43 +25110 +25111 +11757 +303 +647 +7053 +16437 +25112 +25113 +1112 +25114 +554 +25110 +3546 +43 +25115 +21947 +16648 +19 +24045 +2577 +24335 +590 +25116 +25117 +25118 +3095 +24144 +1316 +25119 +25120 +14477 +25121 +25122 +25123 +14 +397 +19 +25124 +25125 +24978 +25126 +25127 +25128 +21947 +43 +20666 +25129 +25130 +14693 +1529 +6741 +19618 +24862 +730 +19 +21729 +2971 +1604 +5601 +20 +25131 +15718 +5780 +1236 +25132 +25133 +8103 +16687 +345 +349 +19655 +590 +12987 +24303 +15824 +15285 +25134 +590 +4 +14 +25135 +8297 +25136 +25137 +25138 +12544 +4313 +19241 +4650 +17151 +25139 +13813 +14127 +25140 +25141 +1090 +25142 +13956 +25143 +14 +9 +24802 +20 +21947 +25144 +25145 +15797 +10672 +25146 +19618 +284 +25147 +345 +25148 +25149 +284 +25097 +590 +11370 +13721 +25150 +711 +154 +4055 +213 +1160 +2764 +25151 +2537 +2561 +17606 +1224 +16205 +25152 +25153 +365 +2314 +3657 +25154 +6950 +11341 +25155 +43 +9 +1051 +449 +43 +9688 +32 +21947 +1423 +590 +2635 +586 +25156 +25157 +3407 +12772 +2764 +887 +25158 +25159 +3330 +6354 +25160 +20 +22 +25161 +25162 +6300 +25163 +707 +8208 +9 +25164 +337 +21947 +8248 +21947 +349 +25165 +25166 +19 +736 +3484 +25167 +138 +22 +349 +25168 +2865 +25169 +284 +23364 +12315 +3546 +3546 +1987 +4364 +25170 +19 +6518 +358 +14477 +43 +323 +5780 +25171 +7812 +43 +590 +15718 +14 +25172 +8392 +5628 +25173 +25174 +25175 +303 +25176 +2040 +25177 +25178 +25179 +357 +1091 +9355 +20218 +736 +19618 +15220 +16437 +25180 +25181 +201 +17920 +14369 +25182 +14 +14477 +345 +7215 +9 +5085 +7283 +13721 +1508 +24896 +597 +25183 +14869 +3484 +25184 +20773 +3872 +590 +25185 +21947 +13230 +345 +1716 +14369 +25186 +16437 +25187 +284 +25188 +3546 +4550 +2260 +770 +19618 +14 +25189 +25190 +25191 +140 +13137 +337 +25192 +845 +25193 +25194 +25195 +21947 +12893 +19 +1181 +9 +24978 +284 +495 +25196 +25197 +25139 +43 +2733 +2113 +19 +15809 +25198 +541 +25199 +213 +25200 +5310 +21698 +25201 +379 +25202 +25203 +25204 +17698 +23103 +25205 +2197 +3251 +25206 +25207 +1316 +213 +3546 +161 +58 +25208 +822 +16 +25209 +155 +25210 +98 +2502 +21947 +514 +338 +8994 +25211 +23495 +13988 +20952 +284 +24532 +1090 +286 +337 +713 +25212 +1090 +590 +25213 +25214 +11762 +25215 +24617 +25216 +349 +25217 +14660 +14001 +1224 +43 +249 +25218 +18037 +25219 +509 +222 +43 +14827 +21947 +237 +43 +15718 +24144 +12287 +10 +17151 +3546 +25220 +284 +2577 +25221 +25222 +25223 +89 +25224 +25225 +15718 +7053 +25226 +14619 +25227 +43 +25228 +21276 +586 +11966 +25229 +590 +915 +7835 +17151 +25230 +25231 +425 +25232 +411 +349 +590 +25233 +35 +25234 +3546 +13648 +16121 +25235 +323 +25236 +4411 +4547 +24144 +25237 +155 +1224 +303 +25238 +57 +17151 +24036 +12987 +25239 +5780 +25240 +43 +24045 +25241 +9 +18896 +53 +21698 +1203 +21569 +32 +24896 +25242 +20199 +25243 +25244 +586 +25245 +25246 +25247 +821 +57 +1885 +19597 +25248 +770 +25249 +12479 +25250 +25251 +25252 +1018 +57 +25253 +24725 +1021 +2260 +4490 +2978 +25254 +25255 +12934 +25256 +25257 +24045 +1090 +25258 +25259 +14887 +5085 +25260 +2287 +19655 +720 +9 +25261 +9939 +25262 +20803 +25263 +35 +138 +15718 +19618 +14143 +14000 +2971 +25264 +1310 +25265 +14477 +25266 +25267 +248 +4550 +213 +299 +25268 +25269 +57 +22963 +4760 +19618 +23103 +23741 +25270 +1415 +2318 +43 +303 +1700 +25271 +19439 +20 +9705 +349 +25272 +25273 +25274 +487 +19618 +13713 +22963 +25275 +5650 +24978 +2042 +20212 +43 +590 +1655 +25276 +6766 +25277 +1700 +3546 +12812 +14 +1956 +536 +15824 +14 +19 +1384 +10094 +25278 +24896 +18044 +25279 +19334 +25280 +2756 +1688 +21947 +15238 +1048 +25281 +155 +19 +9688 +25282 +7048 +1047 +590 +2577 +4166 +8895 +345 +14 +25283 +1295 +155 +25284 +11966 +25285 +25286 +24303 +25287 +25288 +25289 +4502 +25290 +25291 +57 +25292 +25293 +7835 +25294 +24896 +966 +15311 +25295 +3128 +25296 +21947 +19797 +13721 +21947 +5376 +379 +6341 +5415 +57 +25297 +9 +43 +13721 +554 +893 +25298 +25299 +20 +5085 +20 +32 +7110 +25300 +25301 +8297 +24144 +17228 +10002 +590 +3601 +8188 +20450 +9 +25302 +5780 +14369 +25303 +43 +25304 +20530 +24646 +1316 +1812 +25305 +18548 +25306 +176 +590 +98 +8188 +25307 +21031 +43 +683 +21999 +24303 +25308 +12987 +25309 +25310 +24303 +2909 +379 +24303 +3034 +98 +7053 +24061 +21947 +25311 +25312 +4463 +25313 +14 +57 +9 +43 +25314 +43 +25315 +1823 +25316 +651 +1425 +25317 +25318 +24978 +21947 +25319 +1049 +25320 +817 +2314 +25321 +17670 +25322 +14477 +9 +14 +269 +19 +25323 +25324 +25325 +25326 +2476 +5119 +14477 +25327 +519 +15544 +21947 +13721 +16024 +19 +24896 +25328 +59 +25329 +1617 +25330 +4237 +1680 +25331 +345 +736 +8244 +43 +43 +13721 +43 +25332 +286 +2 +8295 +14000 +25333 +379 +3553 +25334 +9 +2040 +22 +282 +303 +25335 +14369 +21947 +19 +25336 +970 +25337 +5074 +21889 +3546 +25338 +25339 +448 +25340 +1013 +25341 +23103 +209 +14369 +9 +17872 +25342 +14527 +15406 +349 +16211 +14363 +24896 +25343 +13721 +15718 +25344 +14 +198 +24896 +21834 +3999 +7991 +15 +1514 +43 +25345 +16437 +17635 +19646 +23406 +25346 +3034 +25347 +25348 +25349 +15718 +25350 +19618 +25351 +1615 +25352 +20 +3546 +38 +15 +1612 +765 +2 +25353 +25354 +25355 +590 +18317 +25356 +1090 +25357 +1513 +5085 +60 +25358 +2260 +2 +25359 +43 +11249 +19797 +21947 +89 +14215 +25360 +25361 +560 +25362 +25363 +2556 +25364 +25365 +20019 +201 +25366 +411 +1605 +16437 +17236 +25367 +43 +155 +357 +590 +9402 +25368 +25369 +2577 +25370 +25371 +25372 +25373 +25374 +25375 +12987 +25376 +13375 +3484 +24303 +10 +1013 +25377 +25378 +25379 +5085 +590 +8668 +25172 +25380 +22308 +10117 +1425 +21031 +2728 +25381 +25382 +1991 +155 +19 +4458 +25383 +2577 +25384 +9 +736 +573 +14 +10298 +20161 +25385 +21947 +9 +14515 +77 +24045 +13721 +9560 +25386 +155 +25387 +178 +8351 +24303 +25388 +345 +286 +1425 +9 +25389 +590 +13760 +15511 +25390 +25391 +22587 +25392 +2308 +25393 +25394 +25395 +25237 +4315 +6928 +809 +25396 +25397 +5085 +2061 +25398 +323 +25399 +22 +590 +14369 +9 +25400 +21947 +2776 +25401 +25402 +16103 +22923 +11321 +286 +25403 +16437 +1300 +17151 +7208 +25404 +77 +17144 +25405 +3546 +21947 +22652 +1090 +23368 +25406 +25407 +25408 +2 +25237 +25409 +24896 +2 +25410 +21998 +25411 +25412 +9 +15718 +9 +25413 +14 +16 +25414 +155 +208 +9 +25415 +52 +3026 +25416 +3546 +25417 +20700 +25418 +17670 +1384 +597 +4 +189 +19618 +25419 +250 +25420 +25421 +713 +43 +25422 +3842 +25423 +25424 +9 +3 +764 +24303 +4536 +43 +2406 +707 +25425 +25426 +1384 +16003 +554 +14962 +25427 +25428 +25429 +25430 +10028 +25431 +155 +23103 +209 +13116 +4747 +19 +25432 +25433 +1295 +2324 +25434 +1870 +24302 +25435 +25436 +439 +25437 +13905 +25438 +14369 +25439 +1710 +1021 +3546 +22 +412 +4855 +25440 +2 +24303 +25441 +7053 +25442 +3645 +57 +25443 +1542 +23103 +590 +15572 +25444 +915 +15 +25445 +25446 +25447 +21947 +6701 +25448 +25449 +21947 +23103 +18998 +13905 +25450 +3981 +43 +3655 +201 +35 +554 +915 +17151 +286 +15718 +13375 +14477 +25334 +13721 +25451 +19 +736 +43 +2804 +18798 +248 +32 +4536 +337 +25452 +25453 +25454 +228 +25455 +76 +188 +25456 +25457 +3863 +25458 +14369 +345 +9 +25227 +25459 +9 +6275 +2609 +6764 +25460 +25461 +3546 +442 +13855 +25462 +25463 +3546 +25464 +201 +12937 +25465 +19576 +21627 +3241 +1559 +12671 +25466 +248 +44 +736 +25467 +25468 +25469 +13139 +345 +25470 +9 +25471 +24864 +52 +19655 +6950 +8218 +43 +43 +5438 +25472 +25473 +20803 +337 +9396 +248 +25474 +25475 +590 +32 +2542 +25476 +345 +2769 +57 +1364 +25477 +16671 +25478 +14581 +25479 +5755 +25480 +13988 +337 +1559 +15718 +25481 +14776 +24303 +25482 +2029 +25483 +25484 +25485 +248 +25486 +3610 +25487 +21947 +12832 +5085 +25488 +5963 +25489 +21947 +25490 +15718 +25491 +25492 +8668 +2 +21947 +2009 +12053 +286 +25493 +21908 +25494 +194 +25495 +43 +1364 +25496 +25497 +25498 +32 +43 +3 +43 +15718 +590 +24256 +745 +18685 +25499 +43 +25500 +1364 +25501 +25502 +14 +1961 +8798 +15718 +4550 +1444 +272 +25503 +3310 +2 +1566 +4425 +941 +9 +10 +25504 +21947 +25505 +19528 +18503 +23323 +25506 +25507 +16466 +13131 +25508 +25509 +25510 +5085 +15699 +2 +25364 +25511 +647 +24864 +720 +15718 +25512 +14 +9 +25513 +25514 +25515 +495 +6095 +595 +25516 +43 +11822 +4403 +4808 +25517 +25518 +10 +590 +248 +13721 +1991 +16118 +21689 +686 +25519 +19618 +25520 +379 +25521 +25522 +5627 +14363 +3546 +21947 +25523 +25524 +21689 +9561 +24864 +10 +25525 +13721 +155 +284 +24725 +25526 +25527 +25528 +2769 +14240 +16 +14 +7891 +303 +1559 +286 +357 +43 +25529 +248 +25530 +1765 +15038 +653 +25531 +25532 +25533 +17920 +1812 +751 +3546 +21672 +9 +25534 +831 +21627 +9705 +9 +1247 +533 +188 +3 +14131 +25535 +278 +21563 +8967 +3964 +21689 +10946 +25536 +25537 +24303 +25538 +13721 +20682 +25539 +1212 +213 +6096 +19 +23103 +25540 +12255 +89 +6621 +2790 +1423 +303 +3939 +3978 +1716 +8566 +14369 +25541 +25542 +25543 +19 +237 +24045 +3543 +25544 +18064 +25545 +18045 +14369 +18798 +4463 +25546 +272 +2253 +339 +20228 +9 +2086 +25547 +25548 +25549 +25550 +17920 +43 +15 +24896 +2135 +10325 +21947 +24144 +7053 +1989 +43 +25551 +25552 +25553 +16437 +22977 +590 +25554 +25555 +25556 +22075 +292 +25557 +20952 +484 +25558 +2 +3976 +14 +14 +18048 +2998 +2325 +25559 +42 +15978 +13375 +5780 +25560 +16437 +10 +15556 +14369 +1208 +24896 +1286 +1715 +7923 +2694 +25237 +25561 +22268 +13748 +24303 +15308 +25562 +19618 +25563 +25564 +694 +25565 +23832 +1578 +10356 +13307 +155 +188 +19 +19 +8098 +25566 +25567 +19 +25568 +192 +11736 +25569 +19304 +345 +1048 +25570 +3171 +25571 +25572 +21947 +14 +222 +25573 +15718 +12 +3491 +5542 +647 +25574 +16437 +7379 +339 +25575 +25576 +19618 +1442 +1208 +9842 +14001 +713 +25577 +25578 +25579 +25580 +57 +23608 +11483 +25581 +25582 +24303 +11995 +25583 +21947 +595 +25584 +25585 +25586 +21947 +17134 +185 +25587 +3480 +25588 +25589 +43 +15783 +1559 +19618 +3546 +1154 +2356 +3601 +25590 +349 +25584 +25591 +616 +25592 +25593 +25594 +25595 +25596 +155 +25597 +7836 +222 +19618 +12479 +14477 +24144 +14477 +43 +11762 +19 +25598 +2694 +25599 +3601 +25600 +14369 +21869 +5340 +286 +10642 +209 +25601 +19618 +20339 +1425 +18612 +25602 +345 +25603 +21689 +345 +13754 +10356 +14369 +10265 +6655 +3543 +13317 +2415 +19404 +14477 +25334 +1229 +14 +98 +21947 +1612 +57 +8566 +43 +1765 +25604 +25605 +19618 +1220 +25606 +590 +358 +25607 +25608 +25609 +18384 +286 +25610 +25611 +189 +25237 +25612 +25613 +25614 +25615 +25616 +365 +3546 +25617 +25618 +892 +2260 +1013 +25619 +25620 +887 +9 +677 +12722 +15718 +2157 +43 +683 +25621 +25622 +4851 +8367 +24864 +25623 +20616 +43 +25624 +25625 +286 +14477 +25626 +11762 +25627 +57 +21947 +25628 +137 +20442 +6883 +25629 +3546 +14 +13721 +19655 +25630 +14660 +590 +17698 +1295 +10094 +25631 +16437 +25632 +25633 +4550 +25634 +15762 +3395 +788 +25635 +25636 +109 +915 +25637 +536 +24725 +4806 +16190 +2694 +22666 +590 +25638 +3546 +25639 +17920 +16121 +720 +19 +24303 +25640 +24877 +4550 +14017 +20 +24864 +15718 +21689 +25641 +25642 +21529 +25643 +13721 +57 +25644 +43 +554 +25645 +25646 +25647 +25334 +25648 +25649 +21947 +345 +25650 +377 +13721 +17151 +1566 +286 +25651 +2029 +15718 +25652 +3787 +25653 +3546 +43 +1562 +10030 +2593 +6616 +179 +3239 +15216 +1605 +3548 +201 +2697 +25654 +15054 +196 +2243 +25655 +25656 +25657 +25658 +19 +25237 +25659 +18695 +57 +2175 +25660 +19 +13721 +590 +3546 +14369 +4414 +8668 +25661 +10338 +25159 +5031 +3908 +24919 +23697 +23103 +2 +272 +509 +25662 +11702 +19655 +25663 +24864 +19 +4961 +14 +24896 +4 +15718 +19286 +25664 +7855 +25503 +12741 +1295 +9 +554 +14 +25665 +19 +13721 +9993 +25666 +25667 +590 +25668 +24045 +286 +2476 +590 +17284 +2609 +2318 +2540 +14369 +14477 +9 +25669 +20 +46 +1241 +3546 +14363 +193 +19618 +13127 +2260 +248 +2287 +9 +11211 +25670 +25671 +3050 +14343 +1011 +25672 +25673 +25674 +20 +613 +19404 +1300 +1208 +57 +114 +379 +495 +2550 +1384 +25675 +25676 +25677 +25678 +10 +25679 +24207 +1972 +18896 +25237 +23406 +590 +590 +1051 +25680 +4463 +25681 +25682 +19 +7855 +4951 +2 +2029 +1172 +155 +25683 +25684 +303 +25685 +25686 +14 +25687 +25688 +23603 +213 +416 +25689 +2 +19 +25690 +43 +18874 +845 +20 +745 +745 +18749 +25691 +554 +25692 +25237 +17670 +25693 +5780 +8869 +720 +19 +25694 +10406 +25695 +613 +590 +14369 +590 +25696 +14369 +25697 +15 +25698 +7855 +213 +16118 +17151 +3353 +20 +18956 +25699 +4518 +14369 +4315 +248 +25700 +303 +25701 +15004 +23608 +14363 +8668 +373 +286 +9784 +1364 +5415 +15 +379 +22787 +13721 +32 +15018 +25702 +1212 +2622 +16437 +22273 +16480 +25703 +25704 +2958 +1090 +1085 +3 +25705 +25706 +21332 +25707 +19 +3119 +19618 +25237 +14369 +19404 +25708 +14 +25709 +25710 +4263 +590 +25711 +15718 +7154 +25712 +14 +25713 +337 +7531 +21947 +25714 +19 +7532 +9539 +15 +18792 +10236 +337 +14369 +24896 +8297 +303 +25715 +38 +345 +303 +303 +25716 +15000 +411 +2 +25717 +2733 +5204 +20768 +3546 +25718 +25719 +25720 +2009 +25721 +25722 +25723 +21947 +25724 +20572 +13523 +20 +14 +25725 +590 +25726 +590 +4116 +764 +286 +25727 +13529 +25728 +4550 +19618 +25729 +25730 +34 +25 +43 +24978 +5558 +25731 +185 +25237 +590 +1316 +25732 +1488 +25733 +379 +16790 +21988 +25734 +5877 +24896 +14583 +14477 +1578 +43 +7053 +736 +1082 +25735 +17151 +115 +1562 +286 +25736 +1212 +14 +25737 +284 +25738 +15511 +2131 +25683 +21947 +13721 +43 +19618 +25739 +9144 +1018 +827 +22317 +25740 +586 +19404 +25741 +25742 +25743 +7419 +25744 +1013 +665 +21947 +3599 +14124 +12005 +5188 +720 +9 +25745 +25746 +25747 +15 +590 +43 +25748 +11995 +15 +1465 +25749 +24497 +286 +9 +440 +22 +25750 +19655 +25751 +23103 +4793 +21885 +720 +5780 +57 +14604 +1169 +25752 +25753 +2697 +15094 +14477 +3034 +8668 +25754 +25755 +137 +345 +3 +25756 +2195 +14369 +25757 +2197 +22967 +16780 +2197 +25237 +4550 +25758 +25759 +25760 +3660 +25761 +18942 +25762 +25763 +745 +1446 +25764 +1100 +248 +25765 +25766 +14604 +9 +25767 +9 +597 +24896 +13361 +19404 +25768 +25769 +19618 +249 +25770 +25771 +21689 +12729 +23103 +13566 +24715 +19 +72 +2 +13721 +17151 +7457 +15 +22 +43 +248 +1013 +24896 +15844 +25772 +25773 +25683 +590 +9 +43 +25162 +21947 +14 +25774 +21947 +5085 +25775 +16028 +25776 +25777 +6517 +57 +14604 +345 +19618 +25778 +57 +19618 +720 +25779 +12987 +17083 +43 +25780 +1090 +15854 +201 +25781 +155 +209 +24725 +22308 +25782 +25783 +25784 +10230 +25785 +43 +11762 +23103 +9617 +25786 +648 +2197 +43 +9 +18406 +25787 +25788 +89 +337 +13959 +25789 +14 +25790 +12808 +3553 +2577 +25791 +14 +22468 +590 +2499 +25792 +736 +24785 +32 +14 +25793 +43 +14369 +3279 +286 +14 +18778 +17151 +3 +25794 +43 +25795 +1976 +25796 +25797 +25798 +25799 +21486 +272 +8465 +315 +13721 +16466 +13721 +19655 +15718 +15 +16118 +9 +11162 +25800 +32 +1829 +25801 +25802 +8668 +25803 +25804 +25805 +25806 +554 +8668 +25807 +43 +25808 +25809 +19091 +337 +24303 +14369 +43 +25810 +25811 +286 +10477 +590 +23103 +25812 +736 +14 +18372 +14363 +3546 +2694 +25813 +13721 +25814 +849 +25815 +21947 +18670 +573 +20941 +24864 +14435 +25816 +1091 +11754 +14 +11176 +25817 +5833 +6341 +432 +14 +25818 +14 +3291 +25819 +3335 +10946 +24978 +5780 +19 +25820 +25821 +20161 +25822 +25823 +248 +25382 +25824 +8297 +3546 +24864 +345 +32 +2056 +25825 +25826 +25827 +4581 +25828 +18421 +1889 +25829 +25830 +3 +13578 +25334 +15 +345 +9234 +25831 +2035 +25832 +14369 +6457 +25833 +25834 +16866 +286 +25835 +2029 +2389 +1234 +20339 +2197 +1637 +21947 +25836 +209 +25837 +19 +1382 +32 +25838 +25839 +25840 +25841 +1542 +25842 +665 +25237 +9 +286 +25843 +3484 +7604 +19618 +25844 +25845 +9566 +25846 +677 +4020 +201 +25847 +25848 +3601 +248 +21947 +4518 +8218 +25659 +21947 +14658 +7291 +1316 +24864 +284 +43 +2052 +5582 +10993 +707 +25334 +25849 +25850 +25851 +25852 +7053 +22308 +23103 +23603 +213 +25853 +21371 +2577 +1147 +19 +14 +25854 +17480 +25855 +25856 +19091 +25857 +25858 +98 +25859 +14604 +3546 +57 +9449 +590 +1542 +7137 +17349 +15 +25860 +25202 +2724 +25861 +14 +13372 +32 +213 +1051 +25862 +19618 +13721 +25863 +25864 +21698 +25865 +14369 +2 +1765 +21835 +12397 +665 +3546 +1100 +22717 +2882 +4441 +25866 +19618 +337 +8668 +25867 +694 +25868 +284 +18695 +2121 +25869 +20 +25870 +24303 +989 +3978 +9 +32 +3119 +25871 +6110 +25872 +25873 +20 +25874 +8427 +24907 +25875 +1715 +4616 +25876 +213 +25877 +155 +57 +1244 +25878 +491 +25879 +1563 +303 +8029 +10290 +9 +21126 +6372 +25880 +337 +358 +303 +16121 +25881 +25882 +25883 +1742 +248 +25884 +25885 +25584 +1090 +25886 +19 +1018 +15705 +213 +25887 +25888 +23666 +15 +25889 +18798 +272 +32 +25890 +19 +720 +25891 +25892 +24951 +24896 +24896 +3484 +442 +25893 +4 +25894 +4684 +25895 +18045 +6741 +14 +24862 +5649 +3546 +24864 +25896 +25897 +25898 +3546 +1812 +3543 +25899 +25900 +21698 +6212 +25901 +3546 +14 +25902 +11593 +43 +24303 +1134 +345 +25903 +3546 +1817 +25904 +25905 +1357 +25906 +272 +2314 +590 +9 +5780 +590 +514 +25907 +2 +25908 +25909 +590 +25910 +19618 +14079 +25911 +566 +43 +13721 +21947 +7917 +96 +4285 +2809 +1991 +13721 +25912 +1049 +286 +1542 +25913 +2 +590 +17082 +25914 +2476 +8255 +19618 +514 +10011 +43 +25915 +98 +25916 +25917 +43 +2314 +1517 +25918 +303 +14369 +24862 +25919 +19931 +590 +373 +4550 +15718 +25920 +25921 +25636 +21031 +201 +303 +25922 +25923 +25924 +25925 +25926 +25927 +1961 +8280 +25928 +19362 +25929 +25930 +23547 +2830 +24978 +25931 +25932 +14 +25933 +14477 +14369 +5614 +15718 +13721 +1423 +25934 +19 +23727 +3543 +3546 +25935 +2197 +25936 +25937 +25938 +9578 +25939 +155 +25940 +14 +18300 +72 +7743 +25941 +3546 +25942 +11754 +590 +155 +6785 +7053 +286 +5088 +10946 +25943 +809 +373 +25944 +22963 +24303 +14 +9410 +25945 +25946 +25947 +25948 +25949 +25584 +25950 +12 +25951 +4280 +24725 +25952 +2764 +20339 +13111 +16140 +25953 +25954 +2201 +10030 +137 +4050 +21947 +25955 +5204 +464 +12067 +16885 +25237 +170 +3546 +14 +13721 +22 +6459 +25956 +18178 +1577 +25957 +14604 +25958 +25959 +1300 +1160 +20 +373 +25683 +345 +13721 +20645 +13721 +19618 +201 +25960 +19618 +3030 +13721 +1364 +19 +554 +25871 +3709 +21045 +3338 +373 +22940 +43 +349 +9123 +18982 +3546 +3546 +36 +19 +25961 +25962 +19931 +6261 +533 +3546 +6794 +25963 +6928 +25964 +13721 +25965 +14 +159 +24144 +25584 +25146 +25966 +19218 +8188 +43 +590 +43 +19618 +3353 +25967 +228 +25659 +7053 +2707 +23103 +25968 +6095 +1082 +25969 +25970 +25971 +22986 +2009 +43 +25972 +286 +25973 +25974 +10108 +25975 +9410 +23103 +17654 +23071 +2136 +23196 +25976 +1817 +1765 +3546 +4990 +25977 +48 +14369 +15 +25978 +19 +25979 +25980 +538 +17151 +188 +25981 +25237 +15038 +25982 +16437 +25983 +15718 +286 +25984 +21689 +25985 +6518 +9 +25986 +270 +16618 +25987 +286 +11762 +24896 +6004 +20329 +25988 +5085 +25989 +18695 +25990 +16798 +25991 +22787 +495 +20063 +590 +19 +21689 +25992 +4463 +25993 +16 +53 +25994 +25995 +32 +32 +25996 +14369 +1743 +24303 +1804 +25997 +43 +14369 +25998 +14369 +25999 +26000 +26001 +14069 +26002 +1961 +26003 +554 +26004 +21947 +26005 +19478 +519 +89 +26006 +15824 +5803 +272 +26007 +2000 +19618 +188 +26008 +958 +26009 +15998 +26010 +26011 +554 +26012 +26013 +1013 +22065 +1961 +554 +26014 +26015 +1021 +26016 +9 +142 +1524 +26017 +12506 +14 +19404 +26018 +9 +7886 +19655 +15592 +9937 +26019 +590 +5780 +3394 +1529 +17609 +13721 +3077 +9 +536 +11762 +9 +21947 +26020 +26021 +13721 +14 +19 +21031 +43 +26022 +586 +26023 +1991 +26024 +2316 +11762 +1013 +26025 +26026 +613 +19 +377 +345 +26027 +24864 +26028 +18045 +26029 +26030 +24303 +26031 +26032 +26033 +26034 +26035 +14369 +349 +1642 +3067 +19091 +12987 +179 +24725 +213 +19 +43 +26036 +26037 +736 +7053 +19 +21734 +1300 +26038 +19 +17084 +26039 +5627 +155 +26040 +1012 +21689 +8015 +19618 +57 +2410 +10 +8351 +32 +12067 +26041 +7357 +3546 +23490 +26042 +26043 +14477 +554 +9 +26044 +26045 +6950 +26046 +26047 +26048 +98 +14369 +2537 +32 +26049 +20195 +8248 +21947 +101 +8053 +26050 +11804 +3546 +1912 +9 +19 +15718 +17151 +26051 +12826 +5117 +26052 +1384 +26053 +1784 +26054 +915 +26055 +26056 +17112 +89 +21947 +26057 +9 +26058 +26059 +15541 +11282 +26060 +225 +26061 +278 +665 +14 +14278 +21947 +19218 +13566 +26062 +26063 +590 +26064 +89 +590 +22302 +57 +26065 +43 +52 +3546 +2577 +26066 +21947 +1364 +16102 +13396 +26067 +12005 +26068 +26069 +14369 +7912 +1382 +1011 +17982 +3546 +17400 +155 +12404 +208 +8721 +20068 +16941 +4411 +32 +24896 +26070 +26071 +24864 +26072 +345 +13721 +1742 +26073 +24725 +14363 +647 +6571 +14477 +17911 +26074 +573 +2978 +43 +8367 +26075 +26076 +590 +19 +26077 +20497 +872 +720 +26078 +12005 +861 +13721 +349 +1100 +3546 +21689 +24732 +519 +26079 +26080 +155 +26081 +14369 +590 +26082 +11647 +9617 +18045 +26083 +26084 +3546 +10385 +43 +3546 +17151 +677 +26085 +647 +22918 +736 +14369 +4221 +1300 +1561 +26086 +272 +26087 +4388 +26088 +43 +26089 +13539 +17136 +26090 +19404 +26091 +13721 +1739 +24339 +16437 +24978 +1768 +207 +2 +26092 +26093 +26094 +14 +9 +26095 +317 +26096 +26097 +26098 +19 +7137 +26099 +21947 +3546 +590 +26100 +26101 +8668 +8967 +1107 +18045 +22963 +43 +862 +38 +26102 +26103 +26104 +19 +2 +2040 +26105 +26106 +345 +1917 +16102 +971 +3601 +26107 +590 +26108 +14 +43 +19823 +26109 +26110 +9 +3978 +21947 +26111 +528 +1172 +14 +24864 +26112 +345 +15104 +26113 +13375 +14369 +32 +17698 +24303 +282 +26114 +29 +14 +865 +14 +677 +26115 +24864 +26116 +26117 +17151 +4463 +1234 +26118 +26119 +26120 +14 +26121 +26122 +1612 +26123 +2694 +9 +566 +16437 +26124 +7987 +26125 +26126 +4230 +4550 +4764 +26127 +26128 +2 +26129 +13330 +1018 +14001 +24565 +24864 +19618 +26130 +7291 +26131 +53 +21689 +4 +14369 +590 +43 +14369 +17151 +26132 +26133 +4088 +12768 +21947 +26134 +5085 +7014 +13721 +26135 +12152 +26136 +15 +5780 +26137 +1090 +26138 +26139 +26140 +26141 +14363 +1112 +26142 +26143 +26144 +790 +234 +26145 +590 +3242 +398 +14 +26146 +8392 +13701 +140 +1382 +26147 +26148 +2009 +26149 +26150 +26151 +14369 +14 +26152 +21947 +14 +26153 +43 +349 +14369 +26154 +26155 +19797 +5446 +22 +26156 +1520 +720 +17136 +23122 +26157 +16014 +1090 +26158 +379 +43 +26159 +24725 +26160 +4463 +358 +26161 +14693 +7053 +26162 +590 +26163 +7048 +14814 +26164 +26165 +57 +399 +57 +26166 +26167 +25237 +26168 +14369 +26169 +14369 +19 +19618 +14185 +26170 +590 +21947 +24144 +845 +26171 +32 +43 +519 +3546 +25237 +26172 +345 +1021 +26173 +16118 +25833 +9 +1465 +14369 +21947 +26174 +6776 +17846 +345 +26175 +1100 +26176 +590 +9 +21947 +26177 +26178 +43 +2733 +26179 +26180 +19618 +137 +1738 +4918 +26181 +57 +13856 +8798 +4526 +20645 +26182 +21947 +333 +21689 +7137 +1013 +26183 +14909 +26184 +26185 +554 +26186 +15694 +22 +26187 +13721 +286 +26188 +14 +2919 +26189 +26190 +19 +43 +345 +14 +24790 +24303 +26191 +14 +29 +4088 +26192 +17151 +14 +26001 +1870 +26193 +14 +26194 +1010 +379 +26195 +26196 +968 +597 +26197 +26198 +23541 +4550 +377 +590 +43 +26199 +13484 +887 +26200 +21947 +26201 +286 +26202 +9 +26203 +26204 +23290 +286 +18591 +1224 +26205 +24864 +18019 +21947 +345 +1823 +26206 +43 +6620 +9431 +26207 +26208 +26209 +25683 +26210 +3546 +590 +24303 +26211 +1091 +19 +14604 +26212 +358 +3546 +3559 +26213 +26214 +21689 +36 +24303 +26215 +9400 +25659 +26216 +7137 +26217 +323 +3546 +25683 +7032 +1612 +8037 +26218 +5117 +501 +345 +720 +590 +13721 +26219 +7982 +24303 +19538 +26220 +26221 +590 +26222 +2770 +3330 +26223 +14 +3519 +827 +26224 +26225 +15 +3338 +484 +18383 +26226 +11822 +1208 +26227 +14604 +26228 +21947 +8668 +15906 +19 +4855 +20942 +26229 +25237 +3546 +25659 +15240 +736 +14477 +26230 +26231 +2034 +104 +8967 +16102 +924 +5326 +7588 +26232 +26233 +3978 +26234 +7053 +4518 +8110 +558 +14 +19109 +457 +590 +26235 +26236 +26237 +1502 +13361 +19 +26238 +19618 +2832 +21947 +26239 +14 +809 +590 +14 +3553 +26240 +19618 +26241 +19030 +23192 +14 +26242 +7855 +26243 +14477 +26244 +10 +4070 +564 +26245 +3119 +647 +21947 +26246 +519 +26247 +590 +14992 +14935 +26248 +26249 +12479 +59 +22269 +7357 +32 +26250 +26251 +1924 +26252 +1870 +18655 +16925 +9543 +3546 +590 +26253 +13405 +26254 +26255 +16437 +26256 +140 +26257 +26258 +17151 +26259 +43 +25927 +2260 +11274 +89 +26260 +11321 +9 +98 +22468 +112 +9779 +624 +3330 +2019 +495 +10 +22552 +5305 +14477 +286 +1316 +8177 +19 +26261 +20265 +26262 +10706 +26263 +26264 +26265 +23727 +26266 +14 +10364 +26267 +19 +7835 +43 +26268 +15 +26269 +6261 +1316 +474 +14342 +26270 +26271 +26272 +14 +26273 +533 +26274 +26275 +22500 +17136 +26276 +4550 +26277 +26278 +13131 +736 +14000 +21885 +22 +25334 +11762 +6479 +26279 +26280 +7477 +26281 +26282 +26283 +20340 +21947 +26284 +5085 +13361 +43 +2804 +15718 +32 +713 +1989 +19 +8188 +115 +209 +827 +345 +6627 +57 +26285 +26286 +1100 +185 +26287 +14369 +26288 +13484 +14 +26289 +26290 +21947 +1817 +14604 +15914 +645 +26291 +26292 +208 +1013 +16437 +8994 +26293 +24862 +26294 +23406 +3546 +9 +13619 +21947 +26295 +26296 +14 +26297 +26298 +25140 +745 +26299 +43 +14363 +9 +21947 +209 +3764 +43 +17151 +33 +17151 +26300 +14962 +24864 +16949 +26301 +9849 +8316 +1425 +3546 +1066 +26302 +1514 +26303 +24896 +26304 +5614 +26305 +17228 +26306 +26307 +155 +915 +2561 +590 +9 +13721 +1512 +590 +5085 +26308 +26309 +10 +286 +43 +14369 +26310 +19 +9 +26311 +26312 +3546 +6499 +5780 +43 +20946 +43 +26313 +590 +26314 +1124 +26315 +26316 +26317 +26318 +14 +19 +26319 +26320 +26321 +26322 +14 +887 +43 +19209 +16118 +5085 +272 +2325 +713 +26323 +57 +26324 +590 +57 +12722 +196 +2577 +1817 +373 +817 +26325 +5085 +26326 +26327 +2410 +349 +26328 +3950 +10846 +1655 +26329 +2121 +20676 +671 +2577 +590 +861 +22236 +24269 +26330 +3343 +188 +19931 +16819 +26331 +11762 +3546 +16695 +3924 +26332 +26333 +26334 +26335 +21947 +32 +26336 +26337 +590 +26338 +155 +22075 +24227 +26339 +3546 +2064 +6251 +18045 +26340 +13721 +25237 +26341 +487 +2427 +26342 +3460 +21947 +25928 +25758 +26343 +19 +1021 +19209 +1823 +26344 +26345 +2029 +790 +53 +4550 +77 +18136 +26346 +2197 +16125 +23103 +16369 +26347 +14369 +26348 +21947 +26349 +286 +12936 +14369 +26350 +6560 +26351 +349 +26352 +25564 +188 +26353 +26354 +590 +26355 +24207 +10621 +2694 +26356 +14369 +26357 +21947 +26358 +3978 +22 +26359 +26360 +26361 +424 +26362 +14 +26363 +26364 +22308 +4502 +26365 +13149 +26366 +4550 +26367 +536 +6010 +1338 +26368 +10642 +26369 +286 +14369 +26370 +26371 +352 +3376 +23547 +3978 +9 +26372 +155 +26373 +21947 +26374 +26375 +24864 +26376 +2310 +26377 +6950 +26378 +21947 +15216 +9 +24423 +19618 +26379 +586 +1222 +155 +14477 +3243 +26380 +14 +3546 +43 +1961 +18579 +14 +14477 +590 +26381 +3484 +26382 +26383 +16941 +8651 +26384 +936 +26385 +14369 +251 +26386 +43 +43 +26387 +26388 +20 +9 +26389 +26390 +26391 +26392 +26393 +26394 +3171 +5627 +19618 +14 +43 +2260 +14604 +26395 +26396 +1369 +1882 +26397 +13307 +26398 +10 +26399 +13897 +21947 +24303 +26400 +3649 +26401 +26402 +554 +17653 +13457 +26403 +14 +26404 +13149 +26405 +2694 +26406 +568 +590 +26407 +43 +26408 +26409 +26410 +155 +23037 +2260 +26411 +26412 +26413 +25683 +26414 +26415 +23103 +25683 +24144 +1710 +14 +26416 +554 +26417 +26418 +3553 +26419 +9 +26420 +26421 +19618 +9 +24864 +11762 +14 +43 +26422 +26423 +26424 +89 +5085 +14369 +26425 +26426 +22963 +3 +21947 +43 +19 +21947 +26427 +17151 +3546 +43 +17607 +21947 +19404 +26428 +9837 +19 +1870 +26429 +1051 +26430 +9 +43 +25584 +8188 +26431 +5803 +4 +26432 +764 +26433 +3546 +26434 +15718 +22 +26435 +26436 +70 +26403 +26437 +5584 +26438 +1224 +26439 +26440 +14843 +26441 +827 +26442 +155 +10428 +26443 +18951 +26444 +590 +5085 +26445 +26446 +13129 +12987 +43 +250 +43 +26447 +26448 +60 +26449 +26450 +671 +12304 +272 +1364 +26451 +26452 +43 +14369 +14152 +2769 +16118 +26453 +26454 +3252 +15647 +26455 +2040 +8465 +14343 +26456 +8188 +2733 +3 +25683 +26457 +26458 +7835 +323 +57 +26459 +19618 +2065 +25683 +26460 +26461 +12 +24896 +26462 +26463 +26464 +22042 +9 +26465 +16121 +822 +15809 +17346 +683 +26466 +15718 +8668 +15 +22798 +26467 +2029 +15 +8670 +1090 +14 +514 +6341 +3553 +43 +357 +25140 +20161 +1875 +8351 +8103 +43 +2 +26468 +26469 +6877 +14 +446 +286 +19618 +14211 +26470 +26471 +10 +13150 +10486 +26472 +19 +5085 +1961 +26473 +21947 +21947 +7183 +4855 +15810 +26474 +19 +24896 +558 +3946 +26475 +21947 +14369 +26476 +8953 +415 +3546 +1559 +14 +2728 +26477 +26478 +3470 +9 +22 +12155 +26479 +26480 +9 +13721 +2 +26481 +9819 +791 +26482 +21947 +26483 +26484 +19 +12067 +17790 +14477 +26485 +26486 +26487 +26488 +590 +3546 +14369 +10774 +26489 +26490 +15466 +26491 +26492 +11374 +823 +26493 +590 +14 +26494 +26495 +9 +22485 +96 +43 +3063 +17151 +26496 +26497 +915 +26498 +11964 +26499 +2 +646 +536 +26500 +24725 +1834 +272 +26501 +26502 +3801 +26503 +6499 +19 +20941 +7053 +25683 +26504 +26505 +590 +647 +26506 +6072 +26507 +26508 +7907 +26509 +25237 +4387 +26510 +26511 +1200 +345 +974 +222 +26512 +26513 +2795 +3105 +26514 +26515 +338 +21947 +26516 +7810 +26517 +14603 +26518 +26519 +32 +19618 +11229 +21947 +2449 +26520 +286 +1542 +8496 +26521 +11754 +26522 +9 +26403 +26523 +1817 +715 +26524 +26525 +3317 +21947 +3546 +936 +590 +26526 +827 +26527 +26528 +26529 +19 +2 +26530 +15948 +26531 +19928 +872 +26532 +19 +1011 +736 +26533 +590 +26534 +24017 +4650 +832 +11845 +26535 +26536 +26537 +249 +26538 +18695 +26539 +18695 +348 +23343 +249 +17039 +26540 +21947 +26541 +26542 +26543 +806 +25140 +26544 +26545 +21947 +26546 +9074 +32 +4550 +26547 +590 +26548 +26549 +26550 +10642 +19 +286 +6877 +26551 +58 +43 +26552 +19 +9410 +43 +26553 +201 +14369 +25584 +16876 +21689 +24039 +25683 +3546 +25584 +15 +1066 +17151 +26554 +14 +26555 +3546 +26556 +196 +554 +14369 +19 +25334 +286 +9 +17033 +22 +9074 +26557 +43 +554 +26558 +415 +17411 +26559 +24896 +19618 +26560 +3546 +43 +26561 +26562 +10 +399 +26563 +16017 +14000 +26564 +43 +5451 +26565 +26566 +14369 +15718 +19 +272 +2260 +26567 +15 +1605 +26568 +286 +286 +26569 +26570 +590 +349 +26571 +19 +26572 +19 +533 +8297 +4463 +20442 +19 +333 +26573 +26574 +5780 +1559 +21947 +26575 +12005 +8668 +19 +26576 +3353 +536 +26577 +16653 +26578 +11428 +286 +26579 +14 +70 +590 +16826 +21947 +586 +43 +26580 +24896 +3417 +15 +26581 +26582 +26583 +20643 +23530 +2324 +57 +8127 +17635 +17151 +1154 +2012 +26584 +25584 +9 +17345 +22666 +4388 +20470 +26585 +286 +15683 +26586 +14369 +14604 +26587 +1529 +1542 +3030 +26588 +26589 +213 +26590 +1090 +25140 +26591 +3452 +14 +26592 +26593 +21947 +26594 +26595 +26596 +26597 +303 +26598 +26599 +379 +21947 +11215 +26600 +14 +26601 +7208 +19618 +25140 +209 +25735 +26602 +26603 +26604 +26476 +26605 +26339 +3908 +17294 +14369 +26606 +15 +23103 +248 +2561 +284 +26607 +1578 +26608 +349 +284 +26609 +4028 +9900 +26610 +26611 +19 +3446 +4899 +358 +3976 +303 +14 +22573 +26612 +213 +15584 +26613 +5654 +26614 +26615 +23885 +17653 +26616 +337 +284 +8668 +11995 +15 +26617 +10 +26618 +26619 +26620 +26621 +1356 +19 +14369 +9384 +26622 +248 +4367 +8743 +15718 +26623 +10 +16727 +26624 +26625 +24864 +26626 +2342 +26627 +272 +1513 +26628 +15 +26629 +586 +19918 +20 +7855 +26630 +590 +26631 +57 +19220 +3546 +26632 +337 +26633 +7364 +7256 +66 +26634 +20563 +18325 +25584 +337 +176 +21947 +26635 +26636 +26637 +1774 +5780 +17691 +9 +26638 +24896 +21947 +26639 +43 +43 +7458 +1011 +26640 +15193 +26641 +17405 +16684 +337 +15939 +13566 +272 +590 +303 +8100 +19 +19618 +13213 +15907 +43 +26642 +491 +26643 +554 +284 +9 +26644 +19 +2770 +13349 +13343 +554 +671 +26645 +43 +26646 +9 +20 +2006 +43 +26647 +24864 +26648 +26649 +26650 +20866 +14 +915 +19 +25904 +26651 +26652 +26653 +2804 +24207 +20315 +26654 +26655 +26656 +24238 +26657 +9 +66 +26658 +19 +337 +26659 +26660 +26661 +736 +26662 +26663 +201 +26664 +349 +345 +26665 +26666 +8668 +26667 +26668 +286 +25009 +5904 +26669 +26670 +26671 +43 +1382 +12438 +22103 +26672 +2117 +26673 +274 +720 +349 +14 +8798 +26674 +2040 +25683 +18386 +26675 +26676 +26677 +142 +26678 +5780 +7048 +827 +26679 +2410 +14604 +13566 +14020 +14 +26680 +357 +26681 +26682 +26683 +26493 +115 +26684 +272 +3287 +590 +26685 +3601 +21947 +26686 +3559 +17151 +26687 +8256 +24449 +26688 +26689 +22633 +20328 +14369 +21947 +590 +26690 +23464 +1425 +286 +26691 +26692 +26493 +21947 +14 +17871 +26693 +2415 +337 +842 +3480 +26694 +4278 +1696 +20 +26695 +15820 +2496 +20 +213 +26696 +1013 +26697 +26698 +18718 +26699 +21689 +705 +4367 +9245 +26700 +24303 +19 +19618 +53 +248 +26701 +26702 +16826 +26703 +43 +5085 +736 +26704 +26705 +26706 +26707 +14770 +26708 +26709 +26710 +29 +178 +19 +590 +26711 +17151 +5393 +13721 +1991 +26712 +26713 +26714 +590 +80 +26715 +21947 +8953 +24 +8566 +825 +14369 +26716 +701 +26717 +8668 +274 +14 +14 +14 +26718 +13296 +284 +1082 +19404 +26719 +26720 +736 +15107 +26721 +26722 +3546 +3546 +358 +26723 +18824 +9210 +26724 +13721 +8668 +112 +647 +17320 +25129 +23579 +9 +1482 +3034 +26725 +26726 +823 +26631 +286 +1612 +32 +13411 +23226 +16387 +29 +3546 +9497 +26727 +345 +26728 +17698 +26729 +43 +26730 +4634 +736 +114 +26731 +26732 +3484 +14 +1224 +24303 +14 +1745 +12987 +14001 +26733 +17151 +26734 +26735 +3435 +915 +26736 +15560 +1090 +140 +411 +736 +12832 +1882 +26493 +272 +12 +196 +1961 +26737 +590 +15718 +16440 +5085 +26738 +20 +284 +736 +43 +26739 +26740 +1529 +19 +1787 +43 +16826 +20442 +26741 +26742 +43 +26743 +26744 +3546 +26745 +26746 +13721 +2957 +18695 +26239 +43 +24725 +26747 +3546 +14369 +10616 +26748 +26749 +26493 +19 +57 +26750 +26751 +67 +9 +15 +337 +14369 +3546 +43 +26752 +26753 +26754 +9 +26755 +14 +12987 +19489 +15 +26756 +26757 +19 +16944 +2 +11308 +4551 +3119 +2764 +11321 +137 +9 +4805 +736 +26758 +140 +25140 +2577 +3 +301 +26759 +717 +26760 +26761 +26762 +17749 +26763 +19 +823 +25683 +26764 +554 +369 +26765 +43 +5085 +26766 +19852 +2 +19 +3546 +24174 +26767 +828 +849 +1090 +26403 +7835 +26768 +590 +3546 +1812 +26769 +26770 +26771 +213 +43 +1090 +14186 +26772 +17151 +16024 +26493 +26773 +26774 +1051 +554 +11321 +26775 +13435 +26776 +1172 +590 +9 +26777 +38 +286 +16102 +26778 +26779 +1605 +15683 +665 +16028 +26780 +590 +3546 +137 +248 +21947 +19 +284 +284 +3252 +14477 +26781 +26782 +7009 +1562 +4221 +26783 +14515 +15718 +26784 +3251 +665 +3119 +19817 +15718 +2998 +3394 +564 +303 +10389 +248 +26785 +26786 +26787 +9 +3546 +590 +484 +26788 +248 +159 +26789 +26790 +24505 +20442 +8392 +26791 +26792 +155 +286 +32 +349 +24541 +25140 +188 +1513 +24908 +60 +26793 +26794 +8210 +751 +26795 +26796 +213 +303 +590 +1160 +284 +26797 +26798 +25778 +1768 +26676 +26799 +23207 +9 +26800 +4179 +32 +4735 +26801 +4550 +16437 +9343 +26802 +26803 +26804 +16118 +284 +5438 +26805 +26806 +26807 +14477 +248 +26808 +24896 +26809 +14603 +4684 +26810 +14369 +26811 +19404 +26812 +10654 +24303 +15657 +43 +1018 +26813 +286 +23226 +24864 +14363 +26814 +26815 +26816 +26817 +21947 +26818 +11762 +26819 +21689 +26820 +26821 +26822 +26403 +14871 +26823 +20339 +43 +25237 +26676 +202 +26824 +213 +26825 +736 +26826 +26827 +26828 +26829 +8330 +26830 +795 +26831 +19404 +26549 +3544 +2733 +1561 +18081 +14 +2281 +11822 +20470 +26832 +3353 +3546 +303 +2577 +24998 +57 +26833 +12 +24144 +720 +2 +26834 +12480 +14369 +2577 +3994 +213 +16024 +248 +26835 +26836 +58 +18860 +26837 +736 +16788 +26838 +26839 +6991 +26840 +26841 +26842 +26843 +26844 +4581 +26845 +1812 +25140 +1100 +26846 +14909 +26847 +19 +647 +2 +4463 +349 +46 +536 +26848 +484 +26849 +32 +26545 +26850 +4406 +26851 +26852 +26853 +14369 +6939 +26854 +43 +11762 +26855 +26856 +26857 +26858 +26859 +24423 +25683 +16240 +26792 +663 +3753 +26860 +26861 +8392 +4550 +26862 +14660 +8188 +14363 +1090 +26863 +345 +7585 +14363 +26864 +26865 +26866 +43 +26867 +5780 +26868 +20 +213 +26869 +26870 +11471 +14369 +590 +14 +26871 +21689 +26872 +284 +14369 +19618 +1543 +26873 +1829 +26874 +18382 +43 +2318 +24324 +9 +25683 +26496 +3546 +19655 +26875 +647 +26876 +2832 +19969 +21947 +20617 +9 +21947 +25237 +345 +26877 +26878 +2040 +26879 +24207 +11548 +2463 +1961 +323 +26880 +337 +337 +1244 +20646 +213 +1790 +248 +5022 +10 +26881 +270 +14369 +5314 +213 +1038 +2902 +26882 +26883 +8460 +26884 +6840 +736 +1696 +26885 +26886 +26887 +26888 +3484 +26889 +21149 +14 +26890 +43 +15 +137 +26891 +26892 +21947 +26893 +21947 +1384 +9 +26894 +26029 +26895 +26896 +2561 +11808 +43 +3546 +20340 +20897 +345 +213 +4028 +26897 +26898 +6364 +7516 +22684 +26899 +17151 +26900 +248 +9 +26901 +284 +303 +10702 +57 +213 +26902 +12152 +43 +23196 +3994 +720 +26903 +18503 +26904 +3 +26905 +590 +26906 +590 +8465 +43 +3546 +26907 +4441 +26908 +26909 +26910 +32 +25237 +3764 +25281 +26911 +13721 +1817 +3 +26184 +26912 +14369 +720 +15718 +26913 +379 +11754 +411 +20470 +15 +19618 +26914 +6915 +17670 +26915 +26916 +26917 +26918 +26919 +26920 +26921 +1021 +13150 +3790 +26922 +514 +26923 +14 +3546 +14649 +14 +26924 +26925 +26926 +26403 +573 +13721 +26927 +12180 +26928 +14 +1787 +26929 +9 +43 +248 +3417 +26724 +9 +519 +4241 +3828 +26930 +26931 +1513 +26932 +26933 +19 +13974 +4502 +213 +1369 +26934 +26935 +26936 +26937 +1091 +48 +16413 +7045 +2009 +5704 +694 +590 +26938 +26939 +19618 +15 +26940 +4650 +23425 +26941 +11889 +57 +11762 +26942 +5629 +22 +26943 +26944 +188 +26945 +57 +26946 +411 +19 +14369 +872 +14604 +26947 +26948 +26949 +1021 +20600 +17749 +26950 +491 +11428 +590 +26951 +26952 +26953 +12987 +286 +26954 +26955 +17972 +3601 +5561 +590 +17490 +1961 +138 +26956 +2733 +590 +26957 +26958 +26959 +764 +26960 +286 +57 +442 +26961 +26962 +43 +26963 +4209 +26964 +24864 +16437 +14 +415 +26965 +501 +26966 +11762 +9524 +26967 +26968 +26969 +26970 +19618 +188 +46 +345 +3546 +9 +20339 +26971 +2619 +26972 +17338 +12468 +3546 +26973 +21681 +43 +1011 +1082 +590 +26974 +26975 +590 +24864 +936 +1870 +519 +2514 +26976 +645 +590 +286 +43 +5780 +3187 +26977 +26978 +26979 +26980 +32 +14079 +26981 +5627 +872 +26982 +10 +16389 +26983 +26984 +26985 +568 +14604 +647 +43 +5780 +1817 +22 +24207 +12684 +20871 +2540 +26986 +284 +185 +26987 +26988 +6286 +16437 +2459 +2514 +26989 +590 +26990 +284 +14369 +4803 +15939 +3546 +9 +26991 +182 +736 +3546 +19618 +26992 +26403 +19 +345 +26993 +26994 +15728 +342 +213 +26995 +345 +446 +345 +14369 +5773 +15718 +19573 +26996 +26997 +5271 +26998 +26999 +317 +43 +27000 +24640 +345 +27001 +286 +5188 +665 +1529 +27002 +790 +3546 +27003 +27004 +57 +57 +27005 +27006 +27007 +7944 +4217 +19 +13721 +66 +27008 +1502 +27009 +25584 +27010 +519 +18364 +27011 +24716 +27012 +349 +24896 +1907 +10 +27013 +27014 +27015 +24207 +178 +14369 +286 +3994 +99 +827 +18695 +25442 +27016 +1295 +19009 +18205 +3546 +2902 +3406 +3546 +9 +16607 +646 +379 +590 +209 +303 +21245 +3601 +27017 +8994 +155 +21439 +27018 +9796 +213 +2415 +27019 +464 +337 +2601 +14369 +326 +27020 +648 +27021 +590 +478 +1287 +21889 +27022 +77 +15045 +1749 +647 +910 +27023 +27024 +19618 +27025 +27026 +25683 +43 +13721 +646 +27027 +27028 +43 +25140 +21947 +349 +27029 +27030 +89 +15 +27031 +27032 +21522 +21947 +8668 +43 +21947 +66 +2537 +590 +303 +22963 +2019 +1743 +43 +27033 +27034 +27035 +1181 +27036 +19 +3994 +24873 +250 +89 +20770 +57 +5169 +27037 +265 +25237 +26484 +27038 +19 +27039 +27040 +27041 +1889 +27042 +27043 +27044 +27045 +25097 +25683 +27046 +104 +19 +27047 +19404 +27048 +13848 +10781 +23103 +14 +34 +27049 +27050 +178 +14 +8967 +720 +14369 +882 +27051 +14532 +2882 +32 +27052 +12916 +18833 +15797 +1415 +27053 +27054 +27055 +27056 +27057 +1066 +27058 +27059 +8188 +17151 +27060 +27061 +27062 +27063 +2329 +25584 +27064 +27065 +27066 +24896 +27067 +5561 +5780 +1160 +25683 +2577 +2287 +4979 +3421 +3546 +27068 +27069 +27070 +24303 +27071 +590 +1157 +27072 +865 +27073 +3317 +10 +19 +27074 +14477 +3484 +27075 +27076 +27077 +2 +27078 +27079 +27080 +15050 +317 +27081 +27082 +15718 +2029 +27083 +25144 +27084 +694 +10727 +590 +4502 +14276 +249 +14369 +412 +209 +27085 +27086 +27087 +27088 +14 +27089 +5041 +27090 +1542 +27091 +7379 +249 +7981 +27092 +5780 +27093 +20470 +27094 +1961 +27095 +92 +22 +317 +27096 +19 +27097 +6095 +411 +27098 +2668 +27099 +20 +27100 +27101 +10028 +1817 +4982 +1870 +3862 +790 +11282 +27102 +27103 +3601 +15320 +27104 +26706 +89 +12987 +27105 +137 +19 +19618 +27106 +27107 +27108 +1955 +27109 +14 +26975 +10038 +14 +14645 +16121 +27110 +27111 +1870 +411 +19404 +13721 +4020 +3546 +27112 +27113 +17 +27114 +14 +27115 +27116 +2733 +3978 +15718 +23550 +26744 +24896 +24303 +20161 +43 +25584 +2043 +27117 +27118 +9 +24896 +14 +27119 +6499 +27120 +822 +24725 +21041 +27121 +590 +1765 +417 +27122 +27123 +27124 +27125 +27126 +1139 +27127 +27128 +27129 +17119 +425 +14 +27130 +8004 +27131 +14 +104 +6122 +5908 +27132 +11762 +11341 +201 +3546 +27133 +27134 +27135 +1219 +8762 +27136 +25140 +27137 +9 +27138 +4126 +4765 +936 +27139 +21947 +22420 +10604 +3034 +3067 +6188 +27140 +11321 +7053 +3 +27141 +4028 +32 +27142 +27143 +27144 +27145 +27146 +21187 +27147 +18896 +2560 +179 +13721 +745 +14369 +21027 +3034 +27148 +9796 +14 +345 +27149 +27150 +3546 +27151 +1524 +24038 +303 +142 +15718 +27152 +7053 +14369 +446 +8098 +1523 +66 +27153 +27154 +27155 +27156 +27157 +27158 +24 +27159 +15 +27160 +2140 +19618 +19618 +8019 +4388 +27161 +705 +43 +23103 +15728 +52 +14369 +21689 +9 +27162 +989 +20541 +22666 +27163 +27164 +27165 +1924 +27166 +23881 +43 +27167 +2015 +27168 +22555 +2260 +1559 +1169 +21947 +14 +349 +27169 +27170 +590 +3 +20315 +19994 +284 +245 +27171 +23418 +299 +24896 +27172 +491 +104 +27173 +27174 +13721 +590 +3553 +7053 +27175 +27176 +27177 +15556 +665 +38 +9 +8392 +27178 +13721 +554 +27179 +25683 +1812 +27180 +3546 +18364 +27181 +11211 +43 +27182 +27183 +345 +11321 +27184 +7991 +17206 +27185 +1604 +16024 +1502 +43 +21031 +6812 +27186 +9 +27187 +18503 +21947 +3546 +27188 +27189 +9 +27190 +365 +11283 +21947 +27191 +4414 +27192 +27193 +24340 +27194 +27195 +9460 +18695 +2449 +27196 +196 +27197 +27198 +21947 +4550 +27199 +24050 +27200 +15589 +17151 +25683 +9 +712 +27201 +43 +23770 +1605 +27202 +21947 +27203 +26403 +27204 +8280 +43 +10848 +27205 +21947 +27206 +1765 +21947 +1470 +14 +27207 +27208 +27209 +21689 +25584 +24864 +20161 +23890 +27210 +694 +27211 +21947 +27212 +27213 +24864 +3732 +2769 +14 +19655 +25140 +27214 +27215 +27216 +1384 +57 +43 +14 +14477 +164 +27217 +5780 +27218 +27219 +13841 +11822 +1021 +27220 +11792 +27221 +764 +26922 +5780 +3239 +12203 +399 +1013 +27222 +446 +1615 +692 +9 +26493 +27223 +27224 +1513 +27225 +5577 +2489 +15 +2260 +27088 +1310 +19618 +27226 +9617 +27227 +2459 +27228 +3601 +15 +1465 +27229 +616 +2791 +2919 +15 +26744 +7288 +22 +1047 +27230 +2882 +27231 +3546 +27232 +20 +27233 +8721 +27234 +20764 +27235 +27236 +7717 +14477 +286 +27237 +286 +35 +24045 +430 +18503 +14 +43 +17136 +17972 +27238 +27239 +27240 +25636 +590 +9194 +590 +1013 +25239 +27241 +14 +2694 +9 +27242 +590 +27243 +27244 +14079 +27245 +377 +11802 +24864 +5297 +26493 +14477 +1320 +27246 +27247 +491 +222 +286 +677 +12 +590 +541 +1291 +2308 +18539 +720 +286 +4075 +4550 +142 +14795 +2287 +345 +14 +22666 +225 +22 +27248 +27249 +9688 +27250 +237 +27251 +27252 +323 +21947 +27253 +25237 +27254 +17151 +21563 +201 +323 +137 +495 +27255 +27256 +5559 +60 +27257 +14369 +19 +910 +27258 +27259 +14369 +3394 +24896 +25237 +43 +15 +5438 +27260 +27261 +27262 +2919 +201 +13721 +770 +14369 +20470 +27263 +27264 +27265 +1222 +15718 +19618 +2941 +27266 +14363 +24303 +66 +27267 +14 +2260 +1107 +27268 +3790 +21947 +25683 +27269 +15718 +27270 +2790 +8566 +14562 +8724 +27271 +1716 +14240 +27272 +720 +16437 +8297 +89 +15824 +21947 +19 +286 +27150 +286 +24303 +27273 +22986 +176 +495 +9688 +27274 +14369 +2577 +27275 +303 +27276 +22 +1090 +1444 +27277 +16206 +27278 +1514 +27279 +13680 +43 +8280 +272 +27280 +201 +915 +10111 +27281 +27282 +201 +27283 +19 +26493 +27284 +25237 +27285 +616 +11 +27286 +14 +19 +14000 +24303 +27287 +27288 +27178 +27289 +43 +27290 +12807 +464 +16305 +27291 +27292 +19797 +19618 +14369 +590 +27293 +27294 +12772 +27295 +27296 +14 +27297 +32 +17872 +6354 +18695 +990 +43 +19 +19852 +25996 +14 +21689 +27298 +27299 +8226 +21947 +27300 +3546 +10621 +590 +14175 +3978 +43 +17663 +27301 +32 +27302 +25683 +228 +23727 +3546 +26493 +27303 +24725 +4550 +27304 +27305 +43 +301 +27306 +4550 +590 +14989 +20 +1021 +736 +43 +1295 +27307 +27308 +9688 +373 +25584 +23406 +27309 +25237 +27310 +3310 +2356 +27311 +14369 +4547 +27312 +27313 +5085 +2412 +43 +24725 +15718 +13721 +1316 +27314 +1710 +222 +7991 +15 +1356 +27315 +345 +13721 +8297 +21669 +21371 +27316 +27317 +27318 +27319 +424 +25140 +27320 +3480 +5075 +648 +533 +1730 +26496 +27321 +43 +27322 +1157 +692 +27323 +27324 +27325 +27326 +11483 +18429 +27327 +92 +27328 +27329 +25683 +17151 +27330 +26647 +27331 +307 +27332 +197 +971 +14131 +27333 +616 +27334 +27335 +2694 +14369 +27336 +27337 +27338 +27339 +27340 +27341 +8098 +24303 +27342 +317 +27343 +2074 +10787 +14 +89 +27344 +19 +586 +25 +27345 +17151 +345 +27346 +15 +26744 +23741 +2124 +57 +849 +10 +27347 +13127 +27348 +6132 +24303 +1382 +251 +21947 +862 +8351 +27349 +27350 +27351 +27352 +1688 +23216 +21947 +18895 +27353 +10 +1965 +13178 +43 +21947 +27354 +27355 +27356 +14477 +27357 +27358 +1352 +27359 +27360 +369 +27361 +7855 +43 +14604 +19618 +27362 +683 +25683 +533 +272 +27363 +25683 +27364 +14369 +27365 +1779 +3828 +27366 +27367 +27368 +27369 +27370 +24303 +3 +89 +27371 +736 +27372 +14369 +27373 +3546 +27374 +14477 +27178 +25237 +17151 +27375 +98 +5085 +323 +27376 +2356 +16818 +668 +27377 +11762 +7053 +5798 +10156 +14 +286 +27378 +27120 +17 +9994 +19386 +495 +6439 +6468 +27379 +24303 +27380 +27381 +1160 +27382 +5085 +519 +1169 +27383 +27384 +7795 +1517 +27385 +5085 +27386 +16437 +27387 +43 +27388 +18914 +4055 +27389 +14363 +12426 +27390 +14 +27391 +27392 +14369 +27393 +1615 +12346 +12307 +24303 +32 +12916 +14369 +21947 +27394 +27395 +15718 +18928 +27396 +7053 +27397 +27398 +43 +2694 +27399 +24725 +19618 +27400 +14 +21337 +14 +27401 +1364 +27402 +57 +27403 +25871 +3752 +10356 +27404 +27405 +27406 +27407 +27408 +22 +442 +26744 +25683 +8188 +26493 +25683 +27409 +27410 +272 +27411 +3546 +27412 +736 +27413 +27414 +590 +27415 +27416 +27417 +1047 +21689 +27418 +13905 +1674 +20 +2121 +27419 +20 +27420 +27263 +43 +25237 +27421 +27422 +3732 +27423 +24896 +14369 +27424 +27425 +349 +25382 +21689 +19618 +1046 +21947 +27426 +15718 +27427 +7835 +25237 +23103 +590 +27428 +21947 +27429 +4518 +12005 +24303 +21947 +27430 +20616 +25140 +27431 +43 +27432 +155 +27433 +27434 +27435 +9837 +8073 +13721 +1012 +27436 +590 +27437 +25237 +27438 +27439 +14 +27440 +21947 +36 +23103 +15308 +27441 +19618 +27442 +27443 +14603 +38 +27444 +27445 +590 +7053 +27446 +27447 +19838 +27448 +27449 +27450 +14369 +412 +5780 +43 +27451 +6130 +27452 +27453 +27454 +15718 +9 +23103 +43 +19404 +14477 +27455 +7053 +44 +27456 +18357 +27457 +5390 +27458 +27459 +13307 +14477 +43 +27460 +27461 +2325 +27462 +27463 +27464 +27465 +19 +27466 +721 +27467 +27468 +4426 +14000 +12351 +27469 +3826 +18988 +14 +1316 +25140 +286 +27470 +14604 +26496 +27471 +13285 +17608 +4896 +27472 +7836 +9 +1529 +27473 +13713 +43 +6950 +27474 +23406 +14 +19450 +27475 +17338 +2865 +27476 +27477 +21947 +23559 +27478 +27479 +27480 +1047 +15824 +24034 +22986 +43 +15971 +14369 +27481 +27482 +2040 +27483 +27484 +7253 +27485 +11822 +27486 +27487 +29 +26157 +19 +27488 +27489 +27490 +19 +15338 +27491 +1991 +8188 +27492 +27493 +27494 +24725 +27495 +27496 +27497 +17136 +9 +27498 +27499 +13905 +26680 +27500 +1493 +27501 +27502 +872 +6110 +14659 +13721 +27503 +286 +43 +27206 +27504 +77 +21947 +14369 +27505 +27506 +27507 +349 +27508 +554 +192 +21045 +20 +1168 +27509 +2 +27510 +2700 +8244 +140 +14477 +27511 +27512 +4516 +590 +27513 +7053 +27514 +21947 +25382 +21030 +27515 +3484 +3310 +98 +2 +43 +24303 +27516 +1013 +519 +14 +1021 +27517 +4388 +2040 +43 +665 +3546 +19618 +16437 +1385 +14 +27518 +1966 +27519 +27520 +201 +24864 +6518 +27521 +16687 +26030 +14 +27522 +14 +590 +12359 +590 +14 +27523 +27524 +13390 +27525 +379 +12055 +27526 +13111 +27527 +25871 +11928 +27528 +3978 +27529 +2694 +178 +21576 +668 +43 +27530 +2998 +15 +27531 +22684 +5085 +345 +24896 +1870 +43 +27532 +27533 +21947 +272 +27534 +27535 +22420 +1011 +13411 +9 +19618 +27536 +699 +27287 +19618 +24303 +5614 +10 +27537 +27538 +27539 +293 +27420 +14947 +80 +2694 +12307 +27540 +25237 +27541 +27542 +274 +12987 +27543 +14477 +5904 +14369 +27544 +27545 +27546 +14369 +22963 +27547 +1051 +26683 +27548 +43 +3546 +1021 +566 +24864 +11404 +707 +19582 +9 +43 +22442 +874 +428 +27287 +3543 +590 +27549 +27550 +104 +339 +590 +27551 +24733 +43 +349 +24896 +736 +27552 +519 +27553 +13307 +27554 +27555 +5085 +57 +27556 +25237 +27557 +2581 +8249 +27558 +13278 +8218 +27559 +43 +650 +6950 +27560 +19 +27561 +6395 +9 +27562 +27563 +590 +3330 +27564 +23727 +27565 +2027 +17749 +25584 +1172 +1012 +24036 +24303 +96 +8994 +13721 +27566 +13721 +25140 +32 +27567 +5297 +27568 +27569 +21947 +27570 +27571 +27572 +27573 +5725 +10003 +6225 +57 +286 +27574 +43 +18048 +21947 +2 +566 +26680 +5780 +590 +4900 +2694 +27575 +27576 +10748 +27577 +57 +25943 +349 +27578 +19618 +14693 +18250 +201 +412 +14909 +27579 +23504 +21669 +27580 +27581 +27582 +19050 +1090 +22 +11593 +27583 +25794 +23754 +46 +11944 +6874 +27584 +25237 +16925 +59 +13374 +1692 +21689 +20 +27585 +27586 +5085 +19217 +2338 +27587 +590 +14 +14369 +1605 +14000 +338 +1860 +14369 +7137 +15718 +398 +5908 +27588 +27589 +15824 +24725 +43 +345 +3105 +27590 +26493 +15 +27591 +286 +27592 +14 +20 +349 +9 +27593 +1559 +984 +345 +27594 +27595 +249 +19618 +411 +1864 +13721 +27596 +270 +27597 +6950 +29 +25382 +89 +26808 +27598 +27599 +24303 +6505 +440 +27600 +24864 +26065 +19 +141 +27601 +14369 +27602 +10706 +27603 +15718 +32 +19618 +25140 +22461 +43 +27604 +15268 +590 +27605 +27606 +18874 +19792 +14079 +590 +21698 +1481 +15 +3768 +179 +3470 +736 +3601 +27607 +237 +27608 +27609 +8367 +25683 +736 +13807 +27610 +14 +1912 +27611 +9 +1300 +2841 +188 +6360 +27612 +8188 +43 +27613 +27614 +27615 +27616 +11593 +27617 +4387 +27618 +27619 +27620 +27621 +20897 +27622 +48 +43 +22963 +43 +26496 +27623 +27624 +228 +27625 +27626 +15718 +7053 +25659 +478 +3 +19 +19 +5049 +10 +19 +683 +1051 +21947 +27495 +27627 +22391 +27628 +10 +18982 +15824 +317 +27629 +27630 +27631 +27632 +1066 +22 +22492 +27633 +27634 +27635 +27636 +27637 +12987 +2694 +43 +9 +27287 +1157 +23530 +284 +6950 +11995 +22963 +27638 +354 +25710 +19618 +24896 +736 +27639 +11321 +27640 +616 +27641 +736 +590 +4521 +4169 +27642 +349 +24896 +27643 +936 +27599 +19618 +14363 +19655 +12778 +201 +14 +1465 +27644 +6595 +3978 +27645 +13721 +7799 +27646 +26724 +32 +646 +27647 +27648 +27649 +27650 +27651 +12987 +25683 +12987 +43 +3003 +628 +416 +9 +27652 +2721 +736 +19 +2939 +14001 +27653 +27654 +590 +14 +20280 +27655 +27656 +57 +14477 +12987 +27657 +1100 +27658 +27659 +694 +568 +15718 +27660 +7152 +213 +27661 +176 +27662 +3003 +23103 +770 +27663 +19618 +27664 +27665 +13703 +27666 +24864 +27667 +27668 +6335 +27669 +2561 +2537 +23834 +15298 +155 +27670 +17 +1332 +25871 +27671 +27672 +14 +43 +25683 +27673 +6285 +43 +736 +43 +24920 +27674 +27675 +32 +27676 +14477 +27677 +10415 +43 +27678 +12588 +27679 +14477 +14878 +9784 +590 +2 +490 +27680 +10961 +14369 +60 +6086 +57 +27681 +2164 +6557 +27682 +76 +43 +27683 +27684 +6171 +590 +27685 +27686 +6765 +8188 +24864 +27687 +21947 +27688 +24303 +27689 +14369 +27690 +14130 +13843 +27691 +27692 +1100 +1153 +3546 +137 +27693 +20 +27694 +358 +27695 +1577 +5080 +624 +15718 +6505 +27696 +188 +27697 +736 +24862 +915 +19618 +590 +21896 +10591 +3546 +27698 +665 +27699 +27700 +27701 +27702 +14 +12987 +6054 +745 +4550 +43 +18946 +817 +34 +27703 +286 +27704 +3546 +19 +27705 +27706 +27707 +15853 +14 +27708 +15718 +2 +89 +27709 +9 +8297 +14102 +9 +27710 +19 +27711 +16290 +27712 +27072 +27713 +736 +18577 +27714 +686 +5477 +27715 +5119 +27716 +25237 +26744 +27717 +345 +317 +5204 +27718 +2197 +6214 +27287 +17151 +1559 +27719 +25140 +25280 +2944 +1688 +15662 +43 +269 +15718 +27720 +26389 +27721 +27722 +5088 +5764 +740 +27723 +282 +24864 +20 +14477 +25237 +16437 +3 +613 +725 +24753 +27724 +27725 +10 +27726 +27727 +27728 +554 +27729 +21947 +1234 +27730 +27731 +27732 +3546 +27733 +4086 +27734 +27735 +27069 +665 +27736 +20 +5438 +43 +27737 +27738 +464 +179 +27739 +27740 +1976 +27741 +225 +20655 +10218 +12987 +23506 +2 +15308 +1012 +15928 +27742 +27743 +27744 +10642 +27745 +317 +4598 +437 +27746 +590 +3053 +27747 +720 +14 +17872 +27748 +27749 +27750 +1885 +14 +22 +43 +14363 +27751 +27752 +18982 +14 +14521 +8668 +25683 +21947 +20329 +3 +13557 +27753 +27754 +14477 +196 +27755 +32 +21776 +27756 +27757 +24303 +533 +11647 +27758 +6263 +25683 +27759 +26361 +648 +27760 +3994 +27761 +15647 +352 +14000 +15718 +18334 +17670 +23741 +27762 +27763 +590 +18742 +24303 +25200 +2197 +590 +12600 +19618 +27764 +9 +14 +27765 +231 +19 +27766 +370 +19 +3119 +8249 +18795 +9 +27767 +286 +6275 +1529 +27768 +27769 +27770 +27771 +4463 +27772 +27773 +27774 +1860 +27775 +2043 +2577 +138 +24327 +27776 +27777 +27778 +1160 +9 +9402 +24864 +27779 +597 +20572 +19405 +15718 +99 +27780 +27781 +14369 +43 +14 +27782 +1563 +9 +972 +19655 +27783 +27784 +590 +27785 +22797 +27786 +27787 +25237 +14 +720 +27788 +14000 +27789 +27790 +43 +17048 +15406 +1021 +14604 +15797 +2072 +2301 +27791 +5383 +27792 +3638 +22895 +15824 +27793 +27794 +272 +15 +8160 +14369 +27260 +12214 +21947 +6877 +590 +27795 +11479 +354 +27796 +27797 +27798 +554 +10 +14 +27799 +57 +15989 +27800 +14175 +14369 +14369 +705 +209 +17635 +14604 +15718 +27801 +27802 +209 +27803 +25140 +26496 +1517 +27804 +27805 +15 +9 +27806 +36 +22552 +598 +8351 +26066 +8392 +547 +19 +77 +27807 +27808 +249 +27809 +832 +286 +27810 +4144 +9979 +25140 +27811 +2058 +27812 +176 +27813 +27814 +27815 +27816 +27817 +14804 +19 +4684 +27818 +4028 +3317 +27819 +1523 +286 +27820 +27821 +2260 +27822 +25683 +27823 +464 +3192 +13361 +17135 +22 +16014 +27824 +27825 +27548 +19 +27826 +7137 +27827 +573 +9 +301 +17151 +9 +1169 +27828 +1870 +27829 +2764 +16024 +2694 +27830 +165 +27831 +27832 +21947 +590 +25683 +26984 +43 +14477 +25140 +27833 +815 +27834 +590 +301 +822 +14369 +14369 +2260 +17136 +3546 +27835 +14369 +27836 +590 +27837 +14369 +24896 +8027 +27838 +1349 +27839 +213 +27840 +1444 +27841 +11 +5665 +27842 +14 +276 +43 +27843 +27844 +13411 +27845 +861 +27846 +345 +1406 +817 +2790 +910 +24303 +27847 +6341 +27848 +27849 +21947 +345 +590 +16763 +213 +303 +27850 +9 +27851 +13721 +27852 +185 +1458 +24303 +27853 +27854 +27855 +27856 +248 +21947 +26496 +284 +1604 +345 +1674 +213 +17151 +24896 +213 +286 +213 +27857 +25871 +7876 +27858 +27859 +5837 +137 +27860 +194 +27861 +27862 +24864 +297 +548 +27863 +14369 +27864 +27865 +19792 +3553 +27866 +27867 +26724 +683 +14363 +27868 +26744 +27869 +27870 +12479 +936 +14 +14 +27871 +9 +11394 +27872 +4550 +284 +27873 +27874 +27875 +683 +19618 +14604 +27876 +27877 +27878 +43 +9 +2769 +57 +27234 +18548 +2 +27879 +16 +27880 +27881 +27882 +17151 +3279 +27883 +27884 +27885 +14604 +554 +13905 +16645 +27886 +1021 +43 +43 +7855 +213 +213 +27887 +14369 +14 +14 +57 +15718 +317 +249 +27888 +27889 +27890 +43 +27891 +24303 +3546 +15 +6285 +936 +27892 +5085 +665 +27893 +27894 +248 +23231 +21187 +25683 +27895 +27896 +337 +337 +27897 +21947 +22 +18522 +27898 +27899 +1765 +27900 +11841 +222 +27901 +17072 +14477 +23103 +12260 +27902 +16014 +21186 +213 +43 +27903 +19 +317 +5780 +1749 +27904 +20803 +3470 +590 +27905 +27906 +23842 +57 +213 +27907 +3994 +43 +27908 +18650 +337 +27909 +4388 +21689 +14473 +27910 +27911 +15356 +337 +248 +43 +1524 +284 +27912 +1551 +27913 +29 +24296 +720 +3546 +464 +14 +3081 +13307 +20161 +5872 +27914 +27915 +27916 +6518 +15989 +16437 +14 +349 +19618 +1116 +2 +1012 +27917 +24896 +27918 +22896 +764 +590 +43 +590 +3546 +659 +70 +442 +27919 +7610 +27920 +3067 +19618 +590 +9 +12814 +27921 +1382 +9692 +14102 +10017 +2476 +14241 +27922 +18695 +27923 +2832 +590 +272 +27924 +19 +2 +27925 +27926 +861 +20260 +736 +1352 +345 +19 +27927 +412 +14 +22 +43 +2550 +14 +27928 +27929 +4701 +27930 +9629 +19160 +13905 +26744 +17151 +13905 +7588 +27931 +222 +27932 +14 +16205 +27933 +22237 +11827 +9266 +27934 +19 +590 +27935 +25584 +5755 +845 +27936 +27937 +27938 +21776 +741 +5467 +22 +365 +12893 +27939 +27940 +590 +10642 +303 +27941 +27942 +27943 +63 +27944 +22901 +21947 +19484 +14369 +27945 +14363 +1655 +464 +165 +19 +4896 +27946 +27069 +25683 +27947 +16437 +17144 +11634 +27948 +14019 +21947 +24614 +25683 +573 +27719 +2406 +1912 +2567 +19 +27949 +27950 +27951 +27952 +27953 +337 +27954 +16413 +7855 +27955 +14 +4856 +27956 +15953 +1508 +27957 +248 +27958 +27959 +862 +24896 +29 +337 +27960 +652 +12621 +21947 +3546 +27961 +21186 +25237 +14369 +1082 +27962 +25159 +7137 +123 +26786 +27963 +1834 +19 +2260 +29 +1384 +27964 +3350 +21689 +27965 +14 +286 +248 +7600 +7117 +15027 +12987 +9 +799 +2865 +14477 +8297 +14 +14 +2877 +14000 +3978 +6850 +89 +24507 +27966 +613 +284 +27967 +27968 +19852 +27969 +57 +345 +370 +349 +17093 +25871 +27970 +15 +32 +21947 +27971 +27972 +16102 +2561 +27973 +15718 +232 +27974 +5188 +27975 +43 +27281 +1112 +27976 +590 +43 +27069 +27977 +5188 +14369 +43 +342 +590 +27978 +27979 +27980 +27981 +19091 +6441 +24862 +6708 +3711 +27982 +27983 +25868 +1382 +590 +16 +3553 +27984 +345 +14 +57 +2334 +21627 +548 +20300 +43 +24303 +27985 +27986 +27987 +519 +27988 +16156 +27989 +24896 +27990 +1249 +16048 +21947 +6628 +9037 +4055 +4550 +32 +5085 +2550 +27991 +27992 +27993 +5188 +345 +887 +27994 +27096 +2561 +2619 +1157 +10470 +16437 +27995 +9 +43 +27996 +27997 +337 +9 +27998 +9 +25584 +22 +1561 +4684 +446 +25140 +23103 +590 +27999 +4550 +342 +15718 +5085 +25683 +1100 +14 +28000 +28001 +1382 +26158 +28002 +9 +20442 +19428 +28003 +12308 +19 +28004 +28005 +19 +28006 +14 +14 +590 +2029 +3994 +19618 +14422 +1066 +213 +28007 +28008 +14369 +8593 +815 +9 +20 +2 +28009 +28010 +26361 +28011 +303 +25237 +20764 +10230 +28012 +21947 +10946 +8668 +372 +28013 +28014 +822 +43 +19618 +23578 +14 +26724 +4824 +15833 +28015 +11483 +14 +28016 +28017 +28018 +28019 +22308 +349 +720 +248 +24896 +22963 +15 +248 +28020 +28021 +28022 +17151 +915 +28023 +9 +1502 +18054 +14369 +568 +284 +28024 +15718 +28025 +14369 +1517 +284 +28026 +28027 +28028 +25237 +14369 +28029 +24951 +647 +28030 +28031 +14 +28032 +284 +337 +28033 +19655 +28034 +345 +3546 +89 +28035 +301 +28036 +20700 +213 +3767 +28037 +3143 +22346 +11925 +28038 +14369 +19618 +14 +7797 +3546 +25140 +790 +14660 +1913 +2537 +6722 +284 +28039 +28040 +28041 +2197 +28042 +28043 +17872 +28044 +14 +19 +115 +28045 +43 +26169 +337 +337 +28046 +28047 +12055 +6885 +17119 +339 +9 +28048 +9 +28049 +337 +720 +23103 +15718 +7137 +28050 +17151 +349 +32 +345 +17668 +354 +248 +28051 +23406 +18045 +67 +24303 +28052 +9 +14 +337 +28053 +554 +26361 +4791 +2694 +23051 +12827 +590 +28054 +1543 +1364 +248 +590 +590 +3457 +19618 +28055 +1927 +39 +6018 +18435 +4387 +6877 +28056 +155 +1956 +9 +28057 +10 +28058 +15718 +303 +17801 +25749 +28059 +25140 +21947 +13905 +323 +43 +28060 +736 +26361 +10727 +28061 +27798 +19091 +28062 +43 +9 +17498 +3546 +11102 +1224 +28063 +28064 +28065 +720 +32 +17761 +28066 +42 +28067 +14 +1920 +28068 +28069 +14 +6533 +28070 +28071 +9 +28072 +21947 +21749 +20 +43 +7071 +23253 +3546 +28073 +3050 +21947 +1249 +15718 +671 +1356 +28074 +28075 +28076 +573 +9 +323 +28077 +28078 +12462 +11321 +2876 +25237 +24019 +590 +3428 +303 +28079 +28080 +590 +21776 +1508 +1655 +28081 +28082 +1655 +201 +14 +43 +17151 +2356 +19965 +21947 +14477 +248 +20 +77 +28083 +19797 +209 +25140 +2707 +28084 +28085 +28086 +745 +213 +28087 +28088 +28089 +32 +590 +14603 +1615 +14369 +1817 +286 +15793 +887 +28090 +28091 +28092 +3546 +14 +28093 +28094 +28095 +3484 +43 +28096 +6341 +4808 +27146 +765 +28097 +28098 +790 +21947 +764 +28099 +1352 +286 +352 +554 +25683 +28100 +28101 +5314 +25683 +19 +28102 +2410 +19 +7208 +352 +10607 +9 +28103 +272 +15718 +9 +14369 +28104 +28105 +137 +28106 +28107 +17151 +14369 +26496 +28108 +28109 +22308 +57 +9 +9 +28110 +4116 +27069 +28111 +28112 +28113 +14477 +915 +28114 +540 +28115 +28116 +213 +28117 +25 +942 +16012 +24896 +28118 +28119 +28120 +5188 +28121 +28122 +8668 +201 +1870 +28123 +25237 +1384 +17687 +28124 +28125 +18064 +28126 +28127 +28128 +28129 +28130 +28131 +14 +19 +14406 +7706 +28132 +7991 +89 +19618 +28133 +6571 +28134 +21458 +28135 +2042 +28136 +28137 +345 +28138 +590 +28139 +272 +28140 +32 +2260 +566 +28141 +25140 +15167 +19 +3546 +43 +28142 +3546 +17151 +43 +28143 +28144 +8208 +142 +28145 +28146 +17151 +1234 +5662 +21947 +2619 +14650 +28147 +28148 +28149 +28150 +28151 +28152 +19 +586 +286 +25584 +379 +58 +28153 +28154 +12005 +3546 +25 +4055 +28155 +1764 +28156 +17267 +25625 +19 +28157 +28158 +10179 +28159 +28160 +66 +14 +32 +28161 +20923 +28162 +28163 +3 +8188 +2762 +10 +2310 +14 +43 +19618 +317 +3994 +28164 +28165 +25943 +7053 +2430 +2841 +5188 +27178 +43 +1612 +21947 +2153 +28166 +1889 +140 +26040 +1991 +2316 +3484 +28167 +27719 +28168 +3546 +9234 +19 +21947 +1743 +25140 +28169 +9 +14660 +28170 +14 +28171 +23674 +5119 +18707 +13347 +28172 +2254 +24896 +568 +28173 +7071 +24698 +9012 +28174 +1514 +4055 +28175 +28176 +2728 +14577 +25172 +28177 +43 +13578 +1442 +4411 +8668 +28178 +1610 +25237 +28179 +18683 +16254 +24896 +28180 +28181 +28182 +28183 +18804 +2537 +590 +1745 +2463 +590 +15 +24303 +18693 +28184 +11217 +554 +24063 +28185 +28186 +43 +1401 +250 +2733 +19 +694 +2197 +43 +4452 +28187 +43 +1021 +28188 +24864 +14369 +13576 +12748 +14 +21833 +590 +4180 +28189 +301 +28190 +3546 +14 +9 +25584 +28191 +315 +573 +20383 +28192 +8188 +373 +28193 +28194 +20038 +14 +28195 +25140 +32 +3546 +28196 +13748 +28197 +3546 +15718 +43 +13721 +28198 +201 +28199 +27514 +43 +28200 +28201 +12768 +28202 +28203 +25683 +43 +28204 +23447 +28205 +5579 +3548 +11335 +4441 +28206 +827 +28207 +14369 +32 +8205 +720 +27069 +8566 +1870 +28208 +28209 +3484 +28210 +19 +28211 +89 +3323 +28212 +1689 +21947 +1765 +9 +28213 +28214 +25196 +19618 +24144 +1203 +3553 +28215 +28216 +13131 +28217 +179 +5297 +24862 +286 +43 +25237 +28218 +28219 +28220 +25943 +1615 +28221 +13721 +57 +17927 +6096 +3828 +18695 +10 +28222 +9123 +248 +28223 +3484 +21947 +28224 +914 +28225 +4897 +17451 +3790 +1345 +22 +14 +28226 +19 +590 +5085 +2058 +19 +22963 +1716 +12936 +28227 +9 +14 +28228 +28229 +6001 +28230 +28231 +11593 +43 +8160 +14175 +4594 +28232 +28233 +80 +25140 +286 +28234 +14369 +137 +205 +43 +19883 +43 +7048 +1131 +28235 +28236 +28237 +28238 +10 +28239 +28240 +213 +28241 +28242 +28243 +43 +286 +28244 +28245 +872 +2694 +4900 +417 +28246 +3353 +15 +28247 +24303 +28248 +25581 +286 +19206 +28249 +28250 +24896 +8297 +411 +19 +28251 +28252 +28253 +28254 +14808 +28255 +9095 +16205 +21689 +21947 +3546 +11535 +23103 +28256 +3546 +20367 +842 +28257 +16437 +28258 +13721 +19974 +28259 +19618 +4028 +28260 +28261 +28262 +315 +213 +446 +32 +21947 +28263 +19618 +554 +57 +32 +6459 +28264 +29 +1817 +28265 +28266 +25615 +28267 +28268 +28269 +28270 +28271 +28272 +3457 +28273 +1889 +3239 +13721 +1912 +67 +1961 +14369 +24303 +28274 +1765 +28275 +13721 +28276 +14 +14947 +28277 +57 +1190 +28278 +28279 +28280 +2061 +9 +28281 +28282 +28283 +15718 +9 +161 +4634 +22963 +28284 +26496 +28285 +26872 +20 +5282 +28286 +28287 +11971 +14369 +3978 +28288 +13375 +213 +26361 +16413 +28289 +21947 +19 +12987 +10745 +10094 +741 +28290 +349 +26744 +28291 +764 +9440 +25237 +28292 +337 +13569 +28293 +1021 +24303 +24207 +286 +3546 +28294 +28295 +29 +25140 +28296 +337 +28297 +5326 +3553 +28298 +24951 +345 +14604 +28299 +1900 +590 +14477 +28300 +28301 +28302 +28303 +28304 +28305 +829 +43 +28306 +12376 +25237 +14369 +284 +9 +1090 +5085 +446 +2 +28307 +28308 +5780 +26484 +14369 +15 +379 +28309 +28310 +9739 +28311 +554 +28312 +24015 +28313 +194 +14369 +284 +43 +28314 +24303 +1169 +32 +14363 +28315 +590 +6364 +590 +1090 +3601 +337 +28316 +28317 +28318 +28319 +7014 +21947 +345 +28320 +28321 +25382 +213 +16826 +590 +14363 +19705 +27146 +14369 +7492 +43 +9 +2570 +533 +274 +28322 +32 +345 +21947 +590 +21689 +28323 +248 +15718 +19618 +28324 +10510 +57 +28325 +16 +8994 +32 +27656 +14 +28326 +2064 +15654 +57 +442 +34 +22308 +2550 +28327 +286 +28328 +20773 +28329 +24303 +3655 +28330 +28331 +28332 +2331 +4918 +5780 +19 +43 +28333 +21947 +26001 +28334 +1502 +2865 +738 +28335 +28336 +3959 +22512 +23103 +28337 +28338 +28339 +28340 +6156 +14369 +28341 +6006 +2762 +28342 +28343 +28344 +43 +28345 +248 +25140 +28346 +5634 +323 +1172 +28347 +22 +22420 +13721 +24896 +28348 +24303 +28349 +28350 +24303 +43 +25683 +19 +8392 +1562 +4806 +736 +155 +16698 +9 +28351 +32 +1011 +590 +13323 +23418 +28352 +1234 +184 +3172 +1291 +8256 +2029 +20 +28353 +20108 +32 +18670 +23770 +21689 +114 +28354 +153 +303 +339 +26361 +28355 +8501 +21947 +1956 +303 +140 +28356 +28357 +179 +28358 +28359 +28360 +14477 +21947 +249 +292 +112 +6156 +960 +5438 +2314 +25481 +18951 +23951 +21947 +28361 +43 +15718 +28362 +19 +28363 +24896 +25140 +28364 +28365 +12864 +28366 +12722 +28367 +20340 +28368 +8297 +13721 +28369 +28370 +22815 +613 +28371 +12120 +28372 +28373 +13343 +28374 +13150 +10961 +28375 +28376 +13479 +28377 +28378 +14369 +28379 +272 +14369 +22 +349 +19 +25237 +1578 +7855 +28380 +43 +2040 +2 +28381 +736 +26962 +16 +28382 +28383 +28384 +28385 +28386 +2 +399 +28387 +28388 +28389 +213 +28390 +28391 +8594 +250 +2744 +70 +28392 +936 +25584 +2356 +28393 +15718 +18045 +829 +21947 +28394 +26912 +337 +468 +5271 +28395 +22075 +28396 +20265 +345 +28397 +446 +28398 +13721 +28399 +28400 +2960 +2764 +2260 +15473 +3814 +28401 +28402 +22587 +4682 +28403 +14369 +28404 +28405 +28406 +21947 +28407 +28408 +27087 +43 +43 +28409 +28410 +13721 +26496 +28411 +28412 +98 +28413 +379 +1385 +28414 +358 +751 +1559 +590 +14 +28415 +5188 +15718 +21947 +16121 +28416 +28417 +19 +28418 +72 +3546 +6741 +28419 +25683 +2 +792 +8668 +17730 +25683 +28420 +28421 +138 +25683 +1425 +28422 +28423 +28424 +28425 +28426 +28427 +1907 +14 +28428 +3075 +541 +28429 +2694 +28430 +7154 +28431 +683 +28432 +14 +14604 +2019 +201 +28433 +248 +21947 +28237 +28434 +554 +4403 +345 +590 +590 +28435 +19618 +28436 +8297 +11483 +27069 +14658 +28437 +5780 +14 +28438 +720 +43 +28439 +590 +28440 +354 +42 +13150 +28441 +25140 +18928 +4411 +20 +28442 +23103 +14369 +28443 +648 +16 +188 +14 +28444 +22030 +28445 +28446 +249 +4141 +2688 +586 +6877 +14 +28447 +237 +28448 +18982 +22236 +3316 +14 +28449 +14 +28450 +19 +349 +24303 +9490 +5648 +1605 +25584 +16338 +28451 +14369 +28452 +155 +27170 +28453 +28454 +1559 +28455 +28456 +103 +27748 +14330 +28457 +14330 +28458 +28459 +28460 +1481 +17151 +15824 +43 +12987 +23226 +28461 +28462 +713 +14 +28463 +28464 +28465 +164 +827 +28466 +21947 +28467 +3546 +3546 +28468 +13706 +27726 +1502 +509 +707 +14369 +18364 +8297 +28469 +5085 +28470 +28471 +28472 +4278 +5820 +80 +32 +165 +14 +28473 +28474 +16707 +14 +29 +10145 +28475 +28476 +4550 +27043 +28477 +57 +43 +28478 +28479 +28480 +14 +286 +28481 +14330 +28482 +3546 +19852 +474 +28483 +10505 +28484 +19927 +28485 +28486 +28487 +554 +20 +590 +21947 +28488 +28489 +349 +26744 +28490 +6907 +43 +28491 +28492 +28493 +509 +849 +28494 +28495 +3601 +28496 +5188 +28497 +548 +28498 +590 +28499 +28500 +28501 +20276 +27069 +915 +1157 +14369 +28502 +791 +28503 +14 +1021 +28504 +1578 +12067 +43 +19618 +345 +379 +27069 +28505 +14 +28506 +28507 +24303 +141 +3546 +373 +28508 +4002 +5649 +28509 +28510 +27146 +28511 +25237 +9 +28512 +17635 +736 +3297 +16126 +28513 +14369 +14369 +197 +8668 +28514 +60 +28515 +14330 +707 +11702 +484 +2197 +26119 +286 +13721 +28516 +28517 +9118 +1082 +2117 +28518 +28519 +14001 +14001 +28520 +14604 +20679 +28521 +19618 +21947 +28522 +141 +28523 +28524 +209 +28525 +21947 +15461 +28526 +20125 +43 +5659 +28527 +13721 +5773 +28528 +14 +22 +8351 +25943 +28529 +28530 +225 +28531 +1021 +28532 +43 +29 +14 +14369 +1765 +28533 +28534 +7543 +28535 +22121 +19655 +14 +28536 +3546 +482 +28537 +28538 +28317 +3546 +26666 +32 +1320 +23322 +28539 +21689 +12404 +28540 +38 +28541 +28542 +27719 +19 +10849 +21947 +16206 +19618 +28543 +13848 +28441 +2577 +15623 +28544 +25237 +2009 +1364 +4411 +28545 +28546 +282 +15 +10583 +331 +28547 +28548 +1502 +28549 +28550 +14477 +43 +1524 +28551 +28552 +26705 +28553 +495 +28554 +28555 +32 +590 +98 +28556 +28557 +18503 +590 +28558 +26786 +19 +18061 +28559 +2 +28560 +19 +28561 +28562 +57 +28563 +28564 +28565 +2540 +28566 +43 +28567 +248 +25683 +28568 +892 +1066 +1048 +28569 +7053 +25683 +533 +209 +1013 +28570 +1710 +16466 +14 +12344 +201 +8188 +28571 +43 +28572 +9060 +19 +77 +9 +345 +1524 +28573 +14 +20514 +4028 +28574 +8392 +19 +590 +3030 +28575 +21947 +11754 +10 +28576 +11514 +28577 +1765 +17151 +9 +536 +21947 +24896 +137 +96 +28578 +4285 +9 +242 +14 +5188 +1082 +60 +19965 +14 +28579 +18951 +8392 +28580 +28581 +28582 +14330 +28583 +28584 +27153 +28585 +1011 +28586 +28587 +28588 +5088 +5363 +1765 +6625 +5039 +3375 +28589 +28590 +28591 +28592 +104 +28593 +3546 +16437 +25584 +1234 +28594 +590 +16437 +28595 +28596 +3959 +28597 +5426 +17151 +1018 +27954 +28598 +19948 +28599 +28600 +1710 +590 +6518 +28601 +14369 +23438 +43 +10245 +5967 +5853 +28602 +21947 +28603 +138 +28604 +28605 +3598 +28606 +2338 +28607 +1947 +28608 +24207 +43 +28609 +5653 +12376 +9 +26452 +3872 +28610 +28611 +286 +57 +936 +24864 +989 +14369 +5204 +9705 +2314 +13150 +28612 +25943 +915 +28613 +10 +20175 +10 +43 +19618 +28614 +19 +28615 +28616 +43 +832 +28617 +345 +4144 +9 +28618 +590 +28428 +14 +28619 +28620 +28621 +57 +24896 +28622 +28623 +28624 +15718 +28625 +28626 +249 +2314 +167 +43 +14369 +2707 +28627 +28628 +28629 +15718 +1992 +15718 +14477 +28630 +19 +12902 +20 +446 +28631 +28632 +28633 +28634 +28635 +15476 +38 +590 +28636 +21698 +28637 +14369 +28638 +28639 +28640 +12479 +18683 +1234 +21031 +9 +92 +2314 +28641 +165 +43 +3422 +24303 +590 +28642 +736 +28643 +14369 +590 +14369 +28644 +201 +28645 +9095 +699 +28646 +397 +8566 +28647 +15446 +14214 +28648 +6364 +21947 +9 +28649 +17151 +21947 +28650 +28651 +28652 +28653 +28317 +9 +28654 +21947 +707 +2739 +18640 +57 +2117 +5204 +5188 +19713 +791 +48 +345 +2260 +28655 +3317 +2733 +25683 +2 +21947 +514 +8367 +24303 +169 +4518 +12936 +28656 +19618 +28657 +9922 +3353 +17264 +28658 +16866 +3546 +19 +11754 +1612 +28659 +28660 +1905 +5188 +114 +28661 +28662 +345 +398 +28663 +24725 +28664 +24896 +11966 +274 +28665 +28666 +28667 +21947 +28668 +9617 +28669 +1912 +28670 +2136 +19 +228 +28671 +19 +28672 +399 +238 +259 +10 +28673 +28674 +17151 +345 +28675 +25343 +590 +24227 +24864 +21268 +2029 +3179 +28676 +170 +43 +11192 +24864 +6122 +16178 +25683 +19624 +415 +5431 +28677 +26158 +28678 +28679 +2944 +28680 +28681 +28682 +13721 +27178 +5780 +28683 +28684 +28685 +13179 +28686 +28687 +25237 +28688 +25584 +1090 +5297 +23103 +28689 +28690 +19 +16375 +28691 +20 +19655 +28692 +590 +14477 +1021 +533 +24303 +201 +28693 +28694 +2314 +3546 +3546 +1961 +28695 +21698 +2446 +28696 +4230 +11185 +647 +21689 +7240 +14477 +586 +764 +28697 +28698 +18695 +28699 +14947 +140 +677 +28700 +14363 +446 +5976 +28317 +28701 +15261 +14 +345 +25237 +2577 +16102 +28702 +1765 +25140 +26506 +3546 +28703 +4088 +28704 +28705 +2135 +3543 +28706 +7753 +23343 +15914 +28707 +349 +28708 +155 +28709 +14477 +28710 +590 +24303 +24864 +28711 +13119 +19 +24896 +16205 +1234 +1425 +1051 +14330 +28712 +590 +21745 +28713 +17098 +28714 +3553 +28715 +28517 +24725 +5188 +10003 +28339 +249 +28549 +25140 +671 +28716 +28717 +28718 +28719 +16915 +28720 +28721 +19918 +3528 +13721 +509 +15186 +3546 +5820 +28722 +28723 +28724 +5085 +28725 +28726 +19 +6766 +28727 +1529 +286 +28728 +2764 +67 +24896 +14 +28729 +3317 +402 +560 +25683 +2316 +14 +3994 +28730 +14868 +1112 +349 +28731 +43 +28732 +28733 +43 +28734 +24725 +28735 +10963 +28736 +12987 +25237 +25921 +28737 +28738 +533 +28739 +19287 +1013 +9 +18982 +138 +15 +28740 +28741 +8465 +28742 +303 +28743 +16707 +5071 +647 +1927 +19 +25237 +4364 +14369 +21889 +15 +831 +43 +14369 +155 +28317 +21939 +10640 +13570 +16 +28744 +32 +28745 +20 +28746 +11552 +28747 +5438 +28748 +14 +3421 +28749 +28750 +19491 +28751 +26361 +28752 +1559 +10875 +5431 +11754 +17670 +28753 +28754 +10895 +21947 +19124 +25584 +9 +28755 +14 +590 +24725 +2 +12285 +28756 +1154 +27069 +349 +573 +43 +28757 +28758 +28759 +597 +28760 +357 +5691 +28761 +590 +20 +2733 +28762 +491 +77 +915 +491 +16826 +28763 +28764 +28765 +17466 +26496 +9 +43 +21947 +28766 +28767 +16883 +1443 +3601 +14369 +13150 +28768 +25 +552 +28769 +21947 +26496 +15718 +44 +14363 +28770 +1637 +28771 +25140 +28772 +28773 +24896 +5080 +28774 +590 +14369 +2330 +28549 +20 +19 +16067 +1425 +25683 +43 +28775 +28776 +28777 +533 +28778 +2668 +1047 +249 +2657 +28779 +10638 +28780 +14369 +9784 +1991 +80 +28781 +28782 +5803 +14816 +14846 +22986 +28783 +26744 +28784 +28785 +16437 +24303 +23603 +28786 +20694 +14965 +28787 +28788 +19 +22963 +28789 +18094 +28790 +28791 +1991 +19 +28792 +9497 +7379 +495 +24896 +28793 +590 +28794 +155 +8566 +24896 +28795 +19618 +317 +2762 +13721 +25140 +822 +14061 +2550 +28796 +3365 +12936 +14 +28797 +14604 +23103 +28798 +9 +28799 +354 +397 +28800 +9 +13307 +28801 +345 +28802 +15718 +19618 +590 +16437 +694 +8746 +872 +28803 +5547 +397 +28804 +4056 +4634 +1425 +7107 +28805 +21689 +9 +20952 +28806 +27069 +568 +14369 +845 +24864 +9 +28807 +3546 +28808 +683 +590 +7855 +104 +4364 +28809 +19618 +3546 +28810 +11907 +4001 +28811 +2243 +24725 +28812 +1314 +28813 +28814 +24864 +25683 +28815 +338 +28816 +26496 +28817 +25683 +3601 +28818 +28819 +8668 +28820 +28821 +14000 +28822 +28823 +28824 +14 +28825 +713 +4088 +24725 +15 +378 +22461 +13086 +14 +14 +14330 +3213 +3764 +2609 +155 +43 +2567 +28826 +738 +28078 +28827 +28828 +28829 +25237 +25140 +590 +57 +28830 +14477 +16437 +1481 +1066 +28317 +22236 +28831 +28832 +17385 +13111 +13848 +14369 +9688 +28833 +25140 +28834 +14 +28835 +19797 +112 +14 +1082 +12402 +378 +28549 +28317 +5481 +23806 +13150 +28836 +3476 +7154 +28837 +9410 +28838 +1605 +14868 +201 +7741 +26724 +379 +28839 +8210 +28840 +15183 +14369 +3408 +14369 +14369 +28841 +28842 +28843 +27669 +13566 +19 +28844 +1300 +28845 +28317 +16102 +28846 +28847 +10232 +2865 +28848 +24896 +1122 +14 +28849 +349 +57 +28850 +4 +28851 +25871 +14369 +28852 +21947 +28853 +14369 +15647 +23578 +16240 +3546 +24725 +28854 +20339 +19618 +28855 +720 +22850 +24862 +28856 +28857 +28858 +14 +4634 +28859 +1203 +815 +14 +19 +28860 +19618 +904 +28861 +2 +28862 +3067 +28863 +8418 +15683 +28864 +1465 +28865 +12746 +28866 +14369 +28867 +14345 +19 +19618 +28868 +245 +2065 +178 +3353 +13721 +28869 +28870 +28871 +1870 +14369 +28872 +1444 +28873 +43 +28874 +28875 +272 +24864 +14343 +990 +28876 +28877 +28878 +28879 +3598 +28880 +7176 +2 +194 +647 +827 +28881 +11308 +17326 +196 +5175 +28882 +3601 +15718 +9287 +28883 +11762 +22420 +32 +28884 +24862 +1300 +23139 +1228 +24864 +28885 +345 +590 +28886 +27726 +26069 +2286 +28887 +28888 +484 +4032 +1232 +28889 +28890 +89 +28317 +9343 +20952 +1100 +14 +24864 +16437 +28891 +28892 +28588 +57 +18695 +683 +28893 +28894 +24896 +245 +16826 +590 +28895 +28896 +9 +28897 +2744 +16883 +590 +25871 +17 +28898 +28899 +28900 +28901 +1112 +28902 +590 +16437 +22308 +9 +15442 +27669 +11733 +19618 +6156 +2476 +249 +26361 +19655 +28903 +590 +28904 +28905 +28906 +2 +18651 +14330 +28907 +25144 +27669 +28908 +13361 +28909 +9 +286 +28910 +28911 +15718 +1021 +1870 +17151 +15663 +28912 +14 +28913 +9 +28317 +28914 +20390 +278 +28915 +21947 +23853 +28916 +2550 +28917 +28918 +28919 +28920 +590 +21947 +28921 +28922 +4820 +24303 +349 +971 +28923 +28924 +28925 +28926 +89 +28927 +15718 +5188 +43 +28928 +28929 +9 +28930 +19304 +28931 +345 +24928 +28317 +28932 +28933 +1612 +28934 +19655 +4050 +4463 +28935 +28936 +26357 +46 +26724 +43 +28937 +15511 +2734 +43 +28938 +28939 +1559 +259 +9 +28940 +197 +14 +536 +25904 +14 +28941 +197 +28942 +28943 +19900 +28944 +32 +28945 +355 +43 +377 +19618 +14 +2 +32 +28946 +14369 +21947 +19091 +5780 +28947 +43 +28948 +9 +14 +28949 +28950 +1090 +28951 +1112 +28952 +28953 +28954 +28955 +827 +27167 +17920 +25237 +28956 +14 +1648 +28957 +5579 +28958 +28959 +286 +2577 +28960 +19618 +14330 +18443 +20952 +9738 +3601 +28961 +5144 +28962 +28963 +19618 +27172 +11803 +3546 +28964 +28965 +28966 +28967 +24864 +14363 +1082 +5085 +27279 +28968 +4463 +21689 +2415 +43 +15718 +28549 +22986 +345 +28969 +28951 +12344 +936 +28970 +28971 +345 +28972 +13179 +28973 +19 +1514 +3252 +28974 +1542 +28975 +4168 +9136 +21031 +1310 +28976 +24864 +28977 +24751 +28978 +22963 +14871 +9367 +19 +23103 +26431 +9039 +28979 +5099 +14369 +19618 +286 +28460 +14909 +11754 +2042 +18334 +28980 +24725 +28317 +15045 +7137 +28981 +14301 +2976 +2999 +28982 +15 +22099 +28317 +5629 +18951 +14330 +28451 +4441 +379 +28983 +1961 +28984 +19 +4963 +720 +21947 +28985 +25584 +558 +590 +590 +3546 +1425 +28986 +15718 +14186 +28987 +284 +28988 +28989 +19618 +28990 +18473 +1300 +24864 +28991 +18376 +28992 +28993 +19502 +7328 +28441 +25449 +284 +10 +213 +4264 +5757 +14369 +17136 +25140 +28994 +8427 +18951 +2029 +28995 +13721 +19797 +8653 +7440 +28996 +15718 +28997 +590 +25237 +28998 +27719 +8549 +213 +345 +12299 +28999 +14604 +29000 +29001 +11899 +286 +29002 +21689 +29003 +2415 +29004 +20 +720 +29005 +29006 +25749 +2762 +29007 +7537 +4651 +29008 +24640 +66 +337 +29009 +29010 +24725 +29011 +303 +27798 +15718 +14330 +29012 +29013 +29014 +10748 +29015 +43 +209 +29016 +29017 +209 +1154 +19618 +6095 +2316 +6407 +29018 +14363 +29019 +24864 +29020 +15 +213 +29021 +24303 +3546 +14369 +29022 +809 +213 +14604 +9 +8297 +3095 +248 +29023 +1442 +284 +29024 +29025 +23559 +1100 +29026 +2650 +1966 +19 +27798 +817 +12560 +20700 +29027 +7053 +29028 +20 +17151 +23226 +590 +7260 +43 +29029 +2197 +29030 +29031 +29032 +29033 +411 +337 +1517 +349 +43 +15810 +29034 +11966 +15539 +29035 +14330 +29036 +4518 +345 +18479 +43 +11429 +29037 +24725 +14 +303 +590 +648 +2793 +11966 +576 +24864 +2577 +14 +303 +1470 +29038 +43 +25683 +21947 +29039 +29040 +25661 +21371 +6305 +29041 +43 +16437 +15718 +29042 +24896 +29043 +29044 +43 +284 +14 +137 +19655 +1012 +17033 +4907 +29045 +66 +13721 +2415 +29046 +21947 +15486 +10117 +533 +22 +303 +29047 +590 +29048 +29049 +398 +29050 +25683 +24207 +6087 +345 +213 +29051 +861 +6364 +19 +18798 +495 +29052 +15718 +29053 +3546 +24751 +29054 +18346 +590 +67 +29055 +29056 +3553 +29057 +152 +14369 +29058 +301 +2117 +22 +29059 +590 +29060 +25683 +28299 +29061 +29062 +24896 +3353 +10720 +248 +1817 +2459 +2 +9410 +28295 +28441 +27669 +9 +24144 +248 +66 +590 +29063 +20265 +29064 +284 +17443 +29065 +15718 +29066 +1955 +2694 +13976 +29067 +14369 +590 +861 +6335 +17454 +4677 +29068 +29069 +2550 +29070 +8280 +590 +43 +286 +29071 +24303 +15718 +179 +590 +29072 +3546 +5188 +354 +3546 +29073 +14369 +29074 +29075 +15718 +29076 +137 +17670 +5641 +7053 +29077 +29078 +13721 +29079 +29080 +2902 +590 +1961 +3119 +29081 +16437 +29082 +15718 +29083 +1291 +28441 +357 +21947 +18493 +4422 +5820 +4414 +29084 +19852 +1716 +213 +9617 +29085 +25942 +11754 +2681 +16148 +29086 +29087 +43 +989 +242 +213 +29088 +21689 +2672 +2764 +5582 +29089 +1765 +29090 +22 +3553 +29091 +248 +29092 +22986 +23817 +446 +2971 +43 +28549 +43 +3546 +5561 +26484 +20681 +29093 +11312 +28991 +29094 +7053 +43 +345 +1987 +29095 +13721 +29096 +29097 +7137 +43 +29098 +10 +1896 +3417 +29099 +29100 +29101 +248 +29102 +345 +22292 +10049 +27719 +29103 +29104 +29105 +29106 +29107 +43 +29108 +15718 +29109 +29110 +29111 +1790 +19 +440 +1169 +3330 +17230 +3908 +14369 +29112 +29113 +809 +29114 +19852 +22142 +29115 +29116 +43 +20 +538 +17151 +590 +14 +29117 +736 +5904 +399 +29118 +3555 +21947 +19 +9 +1508 +590 +8686 +123 +16334 +29119 +671 +14 +9 +16437 +29120 +597 +29121 +5649 +21947 +14477 +29122 +29123 +25683 +6950 +5007 +18120 +29124 +29125 +29126 +29127 +209 +32 +14477 +14660 +29128 +98 +16116 +29129 +5780 +270 +24303 +249 +2314 +19 +597 +24725 +21947 +29130 +736 +29131 +29132 +29133 +27798 +14 +1013 +29134 +7912 +29135 +24 +10470 +29136 +155 +5780 +19618 +2032 +248 +29137 +1605 +19 +590 +24896 +6364 +24458 +22829 +29138 +6197 +29139 +822 +590 +19618 +663 +23770 +590 +29140 +1612 +29141 +21947 +29142 +1139 +43 +345 +14 +43 +14369 +583 +29143 +736 +28549 +15835 +19197 +29144 +21563 +24774 +29145 +18695 +5188 +29146 +29147 +15483 +3719 +29148 +29149 +13397 +1920 +29150 +25395 +29151 +29152 +29153 +27096 +29154 +10 +25683 +15 +29155 +29156 +29157 +5188 +11498 +3999 +29158 +284 +14363 +25943 +21947 +22823 +29159 +14369 +19797 +29160 +1626 +20700 +274 +29161 +29162 +1249 +29163 +5659 +27514 +10222 +21947 +736 +29164 +19618 +29165 +590 +8747 +43 +209 +4547 +29166 +29167 +29168 +29169 +29170 +201 +248 +852 +16079 +89 +29171 +27669 +29172 +590 +24303 +29173 +4518 +29174 +12307 +1013 +24811 +27836 +29175 +57 +9688 +27669 +16437 +29176 +720 +590 +590 +29177 +29178 +29179 +27719 +29180 +29181 +3187 +9 +178 +29182 +29183 +8744 +7053 +29184 +213 +24303 +865 +29185 +1234 +28877 +845 +3546 +509 +3745 +29186 +21947 +24303 +29187 +43 +14 +13721 +29188 +23226 +5780 +29189 +21947 +15398 +29190 +29191 +1382 +29192 +6068 +12987 +5773 +1605 +29193 +29194 +29195 +28317 +29196 +16798 +284 +3745 +15718 +337 +19868 +28317 +29197 +29198 +3546 +25140 +29199 +4055 +28317 +345 +19404 +7208 +19 +21730 +1763 +770 +29200 +1082 +29201 +21947 +1688 +29202 +14477 +5204 +730 +29203 +2260 +21003 +25293 +24045 +19404 +286 +583 +20 +536 +573 +29204 +29205 +19404 +29206 +15718 +14369 +28199 +13905 +694 +24207 +29207 +541 +29208 +3003 +284 +2 +29209 +29210 +29211 +29212 +6505 +29213 +590 +24303 +213 +57 +15 +4364 +14 +17 +29214 +29215 +19330 +14 +12497 +19951 +3553 +3601 +209 +43 +19 +18120 +29216 +29217 +284 +2577 +23103 +1169 +21394 +519 +18916 +2560 +5083 +2537 +337 +250 +29218 +29219 +29220 +29221 +1562 +7167 +29222 +29223 +8460 +23103 +29224 +6011 +5650 +29225 +21947 +24207 +29226 +989 +17151 +15517 +15718 +29227 +18995 +958 +39 +104 +29228 +13721 +2314 +137 +14957 +29229 +4055 +29230 +720 +29231 +13721 +248 +21947 +1247 +29232 +29233 +10364 +19 +16826 +15718 +349 +29234 +29235 +647 +11321 +8668 +28951 +29236 +8156 +590 +303 +225 +15718 +28951 +303 +26724 +272 +18684 +28317 +358 +29237 +29238 +15718 +29239 +24725 +14369 +2324 +21310 +2802 +29240 +213 +5188 +1011 +19655 +29241 +29242 +89 +29243 +2476 +14 +26361 +590 +286 +14 +1090 +8864 +29244 +1775 +2006 +19 +19618 +29245 +29246 +15718 +2287 +29247 +29248 +4269 +29249 +3317 +6263 +14369 +29250 +27153 +14477 +29251 +29252 +29253 +16967 +2000 +43 +5075 +15292 +213 +29254 +213 +29255 +14 +29256 +1765 +9 +18798 +3470 +17136 +29257 +19618 +14369 +317 +29258 +1604 +284 +19122 +6203 +14 +249 +29259 +345 +13279 +29260 +5629 +29261 +29262 +2314 +25237 +272 +4547 +14477 +29263 +554 +21947 +338 +590 +337 +29264 +29265 +29266 +538 +12402 +25683 +29267 +736 +1021 +43 +29268 +23990 +3007 +590 +29269 +861 +24896 +28549 +7537 +16154 +7379 +13848 +29270 +345 +14 +248 +27669 +29271 +12202 +26496 +29272 +14330 +29200 +29273 +21399 +29274 +29275 +29276 +3839 +4907 +8392 +8297 +14810 +29277 +29278 +29279 +29280 +14 +694 +29281 +24207 +28549 +4 +20 +3546 +29282 +142 +27669 +29283 +29284 +21947 +16180 +114 +2 +29285 +19 +554 +791 +936 +24864 +29286 +14369 +29287 +17151 +11762 +29288 +4196 +29289 +14369 +590 +12987 +590 +29290 +29291 +29292 +20199 +8392 +32 +337 +35 +14330 +13721 +1765 +18064 +14 +29293 +29294 +349 +29295 +29296 +15718 +14 +29297 +19 +736 +29298 +29299 +18951 +1779 +29300 +29301 +29302 +21947 +284 +29303 +730 +3353 +21947 +29304 +19 +28317 +29305 +15586 +25382 +12886 +29306 +3546 +26508 +4821 +29307 +29308 +29309 +15360 +29310 +15 +1529 +29311 +29312 +29313 +29314 +1606 +27669 +29315 +1720 +13721 +7381 +29316 +14 +7815 +29317 +3095 +25683 +349 +29318 +29319 +21947 +29320 +6766 +29321 +29322 +29323 +7996 +1245 +29324 +265 +29325 +29326 +27669 +29327 +29328 +590 +583 +190 +648 +720 +43 +43 +27798 +14604 +1749 +13265 +57 +5080 +59 +32 +26361 +28317 +29329 +19 +14 +43 +43 +1444 +671 +19 +29330 +936 +20 +29331 +3 +24896 +29332 +43 +25683 +15 +18914 +29333 +790 +2694 +18045 +29334 +590 +590 +29335 +1961 +29336 +29337 +14330 +29338 +1091 +970 +9 +57 +2832 +29339 +19 +29340 +590 +29341 +29342 +32 +14001 +9 +26496 +815 +12987 +22403 +29343 +2677 +29344 +25584 +19618 +19 +720 +14363 +345 +27669 +14330 +1090 +286 +29345 +9 +14604 +3353 +8668 +29346 +29347 +29348 +3994 +19 +3546 +10108 +165 +21947 +14604 +8566 +29349 +6087 +29350 +5085 +29351 +21947 +23363 +21947 +29352 +19965 +29353 +29354 +29355 +2540 +29356 +24303 +3540 +5929 +29204 +9 +15 +32 +377 +16375 +10 +18568 +16437 +26027 +14604 +15 +29357 +29358 +19618 +29359 +14330 +29360 +19 +817 +29361 +29362 +29363 +20442 +2512 +9102 +5188 +10777 +1434 +29364 +15718 +12005 +20984 +29365 +1051 +495 +29366 +29367 +590 +29368 +209 +29369 +29370 +14001 +3546 +10004 +15616 +2540 +14947 +19797 +1812 +25154 +1038 +2550 +21765 +29371 +21947 +9024 +5188 +29372 +29373 +29374 +43 +29375 +872 +29376 +21261 +564 +29377 +1356 +29378 +25237 +3428 +4230 +27069 +1870 +6950 +29379 +29380 +27024 +12989 +29381 +3546 +29382 +14369 +23313 +357 +225 +19404 +29383 +43 +16695 +29384 +11945 +29385 +20215 +22337 +29386 +29387 +1153 +736 +27415 +9364 +446 +15718 +29388 +28951 +24864 +14477 +4684 +24864 +29389 +279 +457 +29390 +25260 +11413 +15718 +23212 +29391 +29392 +1316 +345 +29393 +323 +22065 +448 +29394 +29395 +29396 +446 +89 +29397 +648 +19 +17048 +12404 +16258 +5623 +15824 +1634 +736 +25683 +29398 +99 +13765 +29399 +29400 +29401 +29402 +43 +29403 +3480 +29404 +16826 +2253 +18306 +29405 +21947 +29406 +24303 +1224 +1021 +29407 +28472 +4293 +29007 +9 +29408 +2206 +14947 +590 +495 +29409 +448 +29410 +20785 +9 +29411 +29412 +29413 +248 +2694 +15718 +58 +29414 +27669 +32 +19122 +24303 +9 +1765 +29415 +11 +10028 +29416 +345 +20 +665 +25140 +27669 +3655 +29417 +25140 +19237 +29418 +32 +13576 +16557 +13721 +29419 +24864 +29420 +7053 +2211 +5119 +12987 +29421 +28317 +28056 +12254 +28317 +43 +25172 +29422 +29423 +29424 +14 +29425 +15194 +8787 +29426 +13688 +29427 +28317 +22308 +397 +317 +19655 +29428 +29429 +345 +29241 +14369 +13140 +15 +28961 +514 +15718 +29430 +484 +29431 +7053 +29432 +21947 +29433 +29434 +9343 +14369 +29435 +99 +24725 +9560 +29436 +2804 +19 +14 +29437 +345 +138 +10 +2 +1051 +9 +7053 +29438 +29439 +29440 +554 +6363 +338 +16840 +18695 +27604 +29441 +25 +14369 +25829 +29442 +272 +286 +1222 +29443 +14 +365 +15479 +28606 +29444 +272 +19 +42 +29445 +2577 +2316 +24896 +29446 +29447 +495 +29448 +29200 +1198 +142 +14477 +29449 +28317 +14603 +29382 +29450 +28463 +19798 +349 +464 +17670 +29439 +29451 +17151 +29452 +25140 +25 +1425 +29453 +29454 +446 +23103 +19852 +190 +38 +29455 +43 +29456 +115 +29457 +29458 +29459 +29460 +29461 +6617 +11176 +29462 +29463 +671 +112 +736 +32 +22463 +29464 +19597 +416 +1100 +29465 +19 +20 +554 +2349 +349 +4803 +379 +29466 +13149 +270 +18310 +155 +29467 +29468 +3 +29469 +25237 +19794 +29470 +27669 +25237 +29471 +24896 +29472 +29381 +8249 +3546 +736 +29381 +5780 +29473 +29474 +29475 +2347 +25943 +29476 +29477 +29478 +29479 +18951 +554 +14 +29480 +29481 +29482 +29483 +17920 +9 +590 +7799 +53 +29484 +29485 +28951 +29486 +3349 +14947 +18869 +29487 +1356 +6011 +29488 +971 +29489 +29490 +29491 +25140 +1090 +15483 +15718 +9 +57 +29492 +29493 +590 +2733 +29494 +1244 +29495 +29496 +5780 +3546 +29497 +19 +8566 +15718 +590 +14477 +1798 +29498 +5588 +43 +25683 +29499 +29500 +13279 +379 +28317 +412 +29501 +3 +188 +29502 +349 +3994 +19 +29503 +1743 +6612 +446 +29504 +29505 +29506 +29507 +20992 +15718 +29508 +29509 +28317 +29510 +29511 +14369 +15 +7835 +345 +29512 +9 +29513 +29514 +21947 +29515 +5817 +590 +29516 +12696 +2577 +4028 +1799 +931 +89 +29517 +29204 +23208 +345 +29518 +29519 +29520 +495 +12893 +5773 +14 +15718 +19618 +15718 +29521 +28441 +22 +9 +29522 +29523 +1021 +590 +8668 +9 +43 +29524 +29525 +29526 +1273 +29527 +29528 +6068 +29529 +29530 +9 +29531 +3546 +21698 +29532 +21947 +29533 +9 +29534 +1852 +34 +12120 +28317 +43 +29535 +12158 +29536 +19404 +21947 +26127 +29537 +9 +29538 +29539 +29540 +32 +2649 +29541 +29542 +24896 +29543 +29544 +1300 +6251 +155 +29545 +14 +18064 +29275 +29546 +1812 +29547 +29548 +21689 +28951 +29549 +1018 +21947 +29550 +18199 +21689 +317 +536 +9 +29551 +29552 +43 +25943 +29553 +19 +2694 +43 +29554 +29555 +29556 +22 +29557 +104 +23226 +533 +24207 +19618 +20 +7385 +315 +29558 +2009 +29559 +12987 +27669 +25237 +21947 +29560 +484 +29561 +18503 +1907 +29562 +1559 +29563 +24161 +590 +1208 +29564 +249 +29565 +29566 +25 +3546 +27619 +15718 +29567 +8208 +6275 +29568 +29569 +29570 +590 +29571 +29572 +29573 +12988 +24896 +29574 +29575 +29576 +22963 +29577 +25683 +17813 +24896 +29578 +13721 +1401 +27420 +29579 +10 +29580 +9 +25624 +29581 +29582 +286 +25140 +29583 +12647 +29584 +29585 +10511 +16571 +29586 +29587 +155 +29588 +2260 +29589 +29590 +29591 +29592 +29593 +29594 +29595 +29381 +29596 +28549 +29597 +29598 +6505 +29599 +6468 +25683 +349 +29600 +8814 +19618 +28036 +4496 +29601 +1580 +14947 +29602 +29603 +43 +345 +27669 +29604 +29605 +707 +27087 +29606 +29607 +6766 +29608 +29609 +16254 +2694 +80 +29610 +22963 +15 +1517 +1384 +22919 +26501 +437 +29611 +9 +1768 +29612 +29613 +3575 +104 +15453 +2251 +112 +13566 +29614 +29381 +25659 +29615 +26040 +4055 +24725 +29616 +24303 +60 +15718 +21889 +115 +446 +7053 +1295 +5842 +43 +29617 +29618 +29619 +29620 +791 +29621 +29622 +2833 +24232 +1100 +2764 +6504 +9 +18736 +7253 +2744 +29623 +3743 +14415 +29624 +20694 +29625 +29626 +10094 +3553 +29627 +323 +20838 +21947 +358 +29628 +5923 +29629 +2029 +2117 +29630 +29631 +29632 +1524 +22963 +272 +29633 +6480 +29634 +1045 +29635 +29636 +29637 +11321 +23764 +89 +5188 +29638 +5188 +29639 +29640 +1212 +5188 +713 +29641 +29642 +43 +29643 +5780 +21373 +29644 +29645 +24303 +2988 +29646 +720 +20238 +29647 +12120 +29648 +1531 +14330 +29649 +29650 +2694 +21947 +29381 +29651 +29652 +29653 +138 +29654 +29655 +19 +29656 +104 +29657 +29658 +18695 +566 +19 +29659 +514 +1742 +29660 +29661 +14 +27117 +43 +24219 +936 +15853 +29662 +29663 +29664 +29204 +27739 +1870 +29665 +21947 +29666 +3790 +13961 +104 +15718 +29667 +7053 +27669 +323 +13721 +16437 +32 +19618 +20514 +21947 +6950 +115 +1011 +14560 +16979 +491 +5629 +29668 +29669 +564 +15718 +22 +29670 +13570 +4422 +3976 +29671 +24896 +29672 +29673 +43 +11787 +29674 +23103 +15540 +29675 +29200 +29676 +9 +29677 +1013 +29678 +29679 +29680 +29681 +29381 +29682 +9 +915 +16437 +17151 +29683 +861 +24178 +29684 +29685 +24896 +12893 +29686 +26031 +19091 +3551 +29687 +29688 +16826 +1961 +7053 +2042 +21689 +15718 +9749 +24896 +29689 +1870 +29690 +677 +10406 +24864 +29691 +29692 +14 +29693 +1680 +349 +29694 +24303 +25683 +29695 +2121 +27231 +12067 +12983 +29696 +29697 +43 +19091 +21947 +29381 +14369 +15718 +29698 +29381 +14947 +22 +29699 +29700 +29701 +29702 +5467 +2680 +439 +28317 +29483 +6364 +6950 +29703 +25237 +5806 +29704 +2686 +13943 +21031 +29705 +25625 +20518 +29706 +29707 +590 +1154 +29708 +29709 +29710 +29711 +43 +1168 +1090 +590 +28317 +8668 +11176 +20859 +245 +8218 +4934 +3345 +19928 +22461 +29712 +29713 +18668 +10910 +29714 +29715 +20 +197 +27669 +3119 +29716 +7835 +14 +29717 +2734 +14369 +9 +24864 +791 +22 +14481 +26710 +590 +29718 +29719 +27096 +1154 +13807 +29720 +43 +2117 +9 +29721 +590 +29722 +3055 +1425 +1514 +25659 +13823 +11436 +3626 +14477 +29723 +29724 +14369 +29725 +4357 +590 +2733 +259 +4461 +29726 +15914 +14 +28549 +29727 +1018 +39 +22 +14330 +15 +14369 +43 +25318 +5188 +29728 +29729 +29730 +2356 +3598 +4380 +650 +3601 +4502 +14477 +23828 +22236 +27669 +345 +29731 +4144 +5188 +21947 +29732 +57 +112 +18695 +29733 +43 +29734 +590 +29735 +21947 +5629 +29736 +14477 +5204 +24896 +109 +29737 +597 +15442 +3239 +19618 +29738 +29739 +24725 +278 +29740 +29741 +29742 +29743 +2117 +29744 +29745 +29746 +12582 +29747 +29748 +29749 +29750 +27669 +19404 +32 +14369 +17281 +26361 +29381 +12987 +9 +286 +29751 +17903 +14369 +29381 +13904 +3077 +16826 +201 +29752 +590 +10028 +29010 +29753 +29754 +29755 +590 +1637 +3994 +3719 +29381 +21563 +248 +4153 +201 +10117 +536 +303 +15 +936 +483 +248 +25683 +590 +15718 +29381 +185 +29756 +43 +25991 +5188 +24195 +29757 +272 +29758 +26496 +16121 +3655 +4677 +29759 +29760 +3546 +26286 +27096 +29761 +29762 +28317 +317 +18919 +29763 +10 +1011 +22986 +21947 +865 +209 +590 +29764 +28441 +29765 +436 +3376 +284 +13279 +43 +29766 +29767 +29768 +29769 +11471 +19 +5780 +373 +29770 +590 +29771 +791 +21947 +29772 +3546 +15718 +29773 +14477 +303 +14 +248 +29774 +14477 +436 +29775 +14604 +1425 +29776 +29777 +19618 +303 +826 +29778 +3 +29779 +20595 +4760 +279 +11995 +19928 +29780 +140 +5904 +29781 +29782 +29783 +14369 +2356 +15718 +1051 +554 +22986 +29784 +29785 +337 +13721 +590 +2302 +9 +14 +736 +29786 +43 +337 +12351 +43 +38 +28312 +1808 +29787 +24896 +21947 +29788 +1300 +2476 +29789 +14369 +26178 +1224 +15 +29790 +4452 +25943 +14 +29791 +20 +590 +29483 +15 +29792 +9 +9 +29793 +29381 +29794 +29795 +29796 +24144 +29797 +1090 +15718 +286 +345 +3559 +27669 +2588 +13721 +19318 +19618 +5085 +8683 +1442 +29798 +28317 +707 +3999 +19618 +1810 +590 +28441 +3904 +29381 +9617 +337 +20443 +29799 +3546 +28317 +29800 +860 +20952 +25237 +29801 +29802 +2787 +209 +19618 +29803 +286 +13566 +345 +1942 +29804 +29805 +21031 +29806 +1442 +248 +29807 +14 +248 +21947 +14 +7795 +2 +3546 +5438 +29808 +29381 +21698 +16180 +21869 +815 +29809 +29810 +1716 +109 +24864 +249 +21947 +29811 +303 +6071 +1168 +2769 +13307 +43 +3746 +14086 +14 +23323 +29812 +17871 +590 +29813 +29814 +3239 +29815 +590 +14161 +1047 +2026 +43 +21947 +373 +57 +196 +29816 +284 +590 +29817 +29818 +14 +43 +29819 +19 +15718 +29820 +21947 +20468 +43 +13957 +29821 +22 +29381 +20499 +3297 +24144 +21947 +29822 +80 +29823 +29824 +29825 +25584 +29826 +14079 +337 +29827 +29828 +9 +590 +2561 +2476 +29829 +28317 +10 +15989 +14330 +29830 +19618 +29381 +29831 +736 +303 +3484 +3546 +1502 +29832 +4862 +29833 +10 +29834 +29835 +25237 +337 +21111 +248 +14 +707 +18191 +590 +24864 +345 +29836 +29837 +3251 +29838 +4438 +1364 +1749 +2577 +19 +2593 +21947 +29839 +17467 +29840 +29841 +696 +3828 +6067 +29628 +820 +29842 +25237 +29843 +872 +43 +29844 +8367 +14369 +20339 +27331 +29845 +29846 +28549 +29847 +29848 +4634 +24896 +29849 +29850 +29851 +29852 +29853 +29854 +29855 +29856 +26744 +18479 +14369 +21947 +14369 +29381 +29381 +13721 +29857 +29858 +29859 +26672 +32 +43 +27414 +4441 +22204 +19618 +27669 +13957 +25 +29860 +519 +29861 +29862 +29863 +96 +10917 +29864 +9 +21947 +29865 +14560 +29866 +27669 +66 +13721 +12247 +14 +5134 +29867 +19618 +1513 +22230 +24403 +15 +713 +29868 +1415 +6341 +365 +29869 +29870 +18310 +9913 +1021 +6487 +2260 +28951 +29871 +29032 +344 +14604 +29872 +29873 +790 +17151 +213 +9 +3546 +29483 +29874 +29875 +5119 +2392 +29876 +29877 +29878 +29628 +25659 +17608 +29879 +29880 +9410 +19404 +29881 +89 +4278 +20883 +17749 +43 +29882 +10717 +15611 +29883 +5837 +16461 +8849 +20182 +15718 +29884 +791 +24920 +29885 +29886 +21947 +25945 +25530 +10 +29887 +15718 +286 +18234 +29888 +29889 +24303 +736 +1425 +14597 +24045 +29890 +29891 +2 +15789 +736 +21468 +29892 +9 +70 +21947 +736 +18234 +29893 +24144 +29894 +590 +28549 +25140 +25237 +29895 +29896 +3023 +29897 +1154 +57 +303 +21947 +29898 +24864 +29899 +43 +17412 +29900 +57 +7935 +1743 +43 +29901 +43 +14 +213 +19009 +15718 +29902 +29903 +16437 +29904 +16107 +29905 +29906 +14369 +3546 +29907 +29908 +29909 +29910 +29911 +19618 +4124 +27836 +4463 +21689 +29912 +29913 +1517 +14369 +8295 +1169 +29914 +29915 +29916 +29917 +29918 +915 +3353 +3252 +21947 +14 +28317 +6225 +694 +9774 +29919 +21931 +44 +29920 +16826 +14477 +9 +590 +27669 +29921 +10117 +345 +1812 +248 +6161 +43 +29922 +29923 +29924 +19618 +1051 +29925 +284 +15855 +29926 +24844 +57 +24896 +12956 +27669 +2342 +12067 +29927 +29928 +29929 +21947 +23867 +14 +14079 +4055 +12560 +179 +29930 +138 +29931 +29932 +21602 +137 +29933 +15158 +1612 +14276 +7799 +9 +1314 +2694 +21947 +248 +213 +7835 +14909 +29934 +5188 +29935 +25316 +12267 +20614 +2577 +29936 +19 +1109 +408 +77 +303 +24896 +29937 +29938 +29483 +29939 +25140 +29940 +13721 +3422 +2136 +10526 +3546 +29941 +8188 +29942 +29943 +29944 +19387 +358 +29945 +1859 +22989 +29946 +28549 +14079 +7053 +590 +13957 +27669 +19618 +29947 +25683 +29948 +13228 +379 +9 +16028 +29012 +43 +29949 +29950 +29951 +14604 +1090 +29952 +29953 +14369 +14 +15718 +25683 +3546 +29954 +29955 +29956 +29957 +29958 +5539 +15789 +29959 +43 +28441 +29960 +23578 +11995 +29961 +29962 +29963 +971 +1907 +14482 +14 +317 +29964 +1047 +14 +29965 +29966 +29967 +29968 +248 +1961 +6223 +29969 +29970 +5629 +248 +29971 +4463 +345 +14 +29972 +29973 +29974 +345 +6364 +29975 +2197 +29483 +29976 +29977 +21947 +25683 +411 +357 +345 +9 +28951 +10781 +29978 +25140 +13721 +27669 +29979 +558 +554 +5780 +29980 +286 +2135 +9600 +5791 +8668 +21889 +25934 +29981 +20132 +29982 +29983 +2795 +613 +29984 +3247 +29985 +29986 +2415 +3287 +28951 +29987 +590 +25668 +29988 +29989 +24144 +11702 +29990 +345 +29991 +590 +29992 +28441 +20161 +3874 +14 +1112 +197 +29993 +29994 +3081 +7053 +248 +29995 +29996 +713 +15207 +66 +21689 +4221 +29997 +6400 +3546 +9 +5326 +10094 +225 +29998 +28317 +1160 +29999 +30000 +7137 +30001 +14 +25683 +21947 +16515 +30002 +745 +30003 +30004 +30005 +25943 +27669 +30006 +19009 +21947 +30007 +2832 +30008 +30009 +29381 +3655 +24843 +30010 +22187 +5297 +6305 +30011 +1503 +337 +27 +16810 +8712 +2773 +1115 +15718 +24207 +9 +590 +30012 +29204 +303 +14363 +14079 +11238 +7508 +30013 +30014 +30015 +30016 +915 +11764 +29799 +21947 +19122 +5188 +4918 +19618 +30017 +185 +13721 +2035 +30018 +29032 +29720 +30019 +30020 +30021 +57 +590 +7706 +8367 +1010 +28745 +201 +19 +286 +30022 +30023 +873 +30024 +30025 +9060 +4634 +14175 +30026 +1168 +43 +30027 +322 +284 +21030 +30028 +13365 +11261 +30029 +43 +30030 +30031 +30032 +21947 +9636 +30033 +349 +30034 +43 +30035 +3484 +8442 +26475 +1021 +30036 +30037 +22 +9160 +19 +14330 +3491 +17749 +25237 +14369 +30038 +30039 +16066 +26940 +16974 +30040 +32 +30041 +519 +15939 +25943 +14436 +6504 +18020 +28951 +24864 +30042 +53 +590 +32 +30043 +76 +27069 +9 +2027 +30044 +30045 +30046 +19798 +30047 +30048 +14871 +5806 +213 +25237 +10389 +30049 +736 +30050 +30051 +30052 +21947 +27065 +19965 +30053 +30054 +32 +30055 +21947 +30056 +30057 +30058 +586 +677 +30059 +1481 +22 +15018 +10038 +15 +25943 +30060 +30061 +14369 +30062 +15718 +349 +3601 +20 +30063 +30064 +30065 +30066 +19563 +15 +30067 +647 +14330 +554 +30068 +590 +9 +548 +357 +25237 +19 +30069 +30070 +14 +30071 +14330 +28753 +43 +30072 +30073 +30074 +30075 +2836 +30076 +30077 +21947 +1011 +89 +201 +30078 +18640 +284 +30079 +13238 +5629 +30080 +30081 +155 +25140 +30082 +474 +19052 +28441 +30083 +6764 +30084 +43 +6976 +30085 +12832 +13543 +22492 +5780 +178 +30086 +29109 +11607 +29381 +14369 +683 +30087 +30088 +43 +19618 +30089 +29956 +11754 +21947 +2197 +28401 +30090 +12351 +3698 +9 +30091 +3546 +29204 +43 +5582 +26549 +4126 +22042 +28441 +30092 +165 +2694 +30093 +43 +1520 +446 +30094 +17635 +19 +1018 +30095 +15718 +30096 +19618 +3978 +2561 +5820 +18421 +14 +30097 +28441 +201 +30098 +6950 +1090 +3601 +23271 +30099 +30100 +30101 +30102 +228 +2902 +6728 +358 +30103 +1234 +9 +6261 +19 +30104 +27669 +14 +9 +26066 +1021 +2260 +29381 +3546 +1011 +14369 +8160 +43 +2330 +30105 +30106 +30107 +5803 +30108 +30109 +3546 +7259 +30110 +21947 +30111 +4752 +30112 +30113 +30114 +1517 +24725 +10 +2029 +30115 +1912 +30116 +3553 +10 +5791 +3067 +30117 +30118 +29381 +30119 +43 +27733 +29 +30120 +27404 +30121 +30122 +222 +30123 +21947 +1885 +60 +13349 +30124 +19 +19 +736 +18869 +30125 +29628 +13566 +14330 +15718 +23649 +2043 +12157 +30126 +345 +399 +6364 +14 +30127 +104 +1765 +6344 +20144 +17477 +14330 +1245 +30128 +20 +24862 +30129 +736 +30130 +30131 +3790 +30132 +30133 +19319 +286 +590 +30134 +2872 +30135 +18951 +43 +19 +30136 +30137 +8378 +30138 +373 +533 +25267 +30139 +25140 +30140 +590 +30020 +3330 +43 +30141 +18896 +30142 +30143 +1606 +15718 +30144 +30145 +2733 +30146 +24435 +19 +1920 +30147 +1765 +30148 +30149 +30150 +30151 +30152 +30153 +18248 +1332 +27069 +30154 +5188 +30155 +30156 +14102 +30157 +5188 +30158 +5088 +28317 +30159 +19618 +27564 +8455 +30160 +26361 +30161 +1056 +7577 +30162 +272 +30163 +30164 +28333 +24303 +30165 +20374 +30166 +30167 +1817 +30168 +2314 +27011 +30169 +14079 +43 +30170 +22999 +1808 +29381 +15 +30171 +30172 +7494 +30173 +30174 +30175 +14 +29799 +27069 +15 +30176 +21947 +19 +2356 +30177 +30178 +30179 +24303 +30180 +14001 +349 +30181 +26181 +14529 +17586 +30182 +2550 +30183 +7053 +30184 +30185 +30186 +20 +30187 +30188 +1066 +21947 +3059 +30189 +14330 +30190 +17271 +17872 +6924 +790 +17151 +30191 +30192 +30193 +590 +30194 +30195 +30196 +21689 +17529 +1401 +1423 +30197 +30198 +1596 +30199 +30200 +30201 +13807 +30202 +18951 +30203 +30204 +30205 +28923 +193 +1688 +15 +23103 +19618 +25829 +24896 +30206 +24725 +24725 +2476 +2787 +19206 +9210 +3858 +30207 +12397 +59 +30208 +29381 +30209 +17586 +30210 +15 +30211 +30212 +30213 +8686 +14604 +30214 +28549 +7053 +990 +30215 +7838 +21947 +2324 +34 +22963 +30216 +11259 +30217 +24207 +590 +1513 +30218 +8610 +24725 +28549 +29483 +24303 +2 +30219 +10583 +30220 +22986 +872 +7137 +30221 +43 +29799 +30222 +5326 +2254 +15718 +3546 +21947 +30223 +345 +677 +1090 +17691 +29381 +25140 +554 +30224 +5650 +25991 +30225 +13576 +25659 +17791 +24303 +15 +30226 +701 +10 +20 +30227 +4230 +30228 +671 +27875 +14 +1870 +30229 +18429 +22818 +15718 +30230 +30231 +8668 +12896 +27069 +30232 +3059 +30233 +21417 +30234 +26040 +30235 +30236 +554 +15541 +21576 +21947 +30237 +213 +30238 +18695 +15 +303 +30239 +114 +28036 +30240 +30241 +14 +29200 +872 +30242 +30243 +337 +495 +3034 +14477 +30244 +3546 +30245 +22599 +30246 +15398 +11217 +12359 +248 +30247 +37 +28661 +30248 +7749 +12956 +764 +30249 +43 +30250 +25683 +21031 +30251 +21947 +7014 +19404 +12696 +30252 +30253 +23162 +30254 +30255 +30256 +30257 +30258 +30259 +29163 +11321 +9 +16 +1011 +30260 +337 +1513 +30261 +30262 +26962 +1267 +30263 +27213 +2764 +99 +21947 +1710 +30264 +17151 +3994 +3908 +9 +30265 +30266 +14477 +19 +30267 +14 +26292 +30268 +32 +30269 +30270 +30271 +5188 +536 +21947 +30272 +30273 +3598 +57 +26496 +9 +30274 +28317 +286 +30275 +19655 +9266 +1442 +30276 +10729 +345 +23603 +30277 +19618 +30278 +30279 +25683 +284 +30280 +30281 +32 +30282 +30283 +2635 +29483 +3978 +790 +30284 +43 +30285 +248 +30286 +4747 +30287 +30288 +30289 +28317 +303 +248 +15 +2 +24303 +30290 +30291 +3994 +25237 +1234 +30292 +30293 +30294 +30295 +7738 +19118 +30296 +48 +9 +15592 +1217 +24303 +590 +25659 +29483 +29381 +28317 +30297 +26538 +2314 +1710 +3242 +590 +3435 +18798 +21849 +14330 +30298 +1655 +11762 +590 +30299 +25237 +30300 +24144 +30301 +30302 +29381 +30303 +30304 +3866 +30305 +16102 +6728 +30306 +20 +27669 +30307 +5085 +29381 +337 +30308 +6571 +30309 +7137 +9 +30310 +19 +8668 +30311 +30312 +3978 +30313 +185 +30314 +26984 +14369 +6145 +3601 +19095 +2040 +25584 +303 +30315 +27069 +2197 +25683 +30316 +30317 +3546 +333 +30318 +30319 +989 +19404 +13721 +411 +99 +2770 +5006 +1234 +4747 +14704 +29835 +1112 +4028 +5188 +30320 +303 +21947 +80 +30321 +586 +30322 +9 +411 +14369 +19 +1578 +24896 +29628 +3376 +30323 +14 +809 +286 +18064 +4278 +30324 +13848 +30325 +705 +14648 +337 +19404 +15718 +30326 +9 +21947 +30327 +4522 +28481 +5780 +9 +1168 +9110 +29381 +20 +27669 +14603 +30328 +14947 +30329 +30330 +30331 +30332 +30333 +590 +1961 +30334 +30335 +24469 +30336 +30337 +2668 +30338 +27669 +1870 +17808 +30339 +28549 +16437 +30340 +18091 +21947 +30341 +17144 +30342 +597 +30343 +24896 +3908 +7053 +323 +24725 +209 +21188 +7215 +29381 +26348 +30344 +43 +590 +519 +30345 +590 +29381 +25943 +590 +30346 +29381 +10 +19404 +30347 +1385 +8270 +30348 +17871 +30349 +25140 +323 +21947 +286 +28317 +30350 +29434 +10 +30351 +647 +6078 +23670 +30352 +7018 +25683 +1224 +14330 +17277 +30353 +23103 +590 +30354 +15939 +17571 +222 +9705 +9 +17670 +78 +590 +303 +30355 +30356 +18607 +30357 +6873 +30358 +6161 +30359 +338 +4 +7137 +30360 +30361 +19618 +30362 +14369 +2561 +30363 +155 +14233 +2260 +14369 +22689 +77 +24928 +21732 +30364 +14330 +30365 +1688 +30366 +30367 +6833 +11762 +22183 +19603 +392 +13905 +30368 +30369 +2392 +30370 +13405 +13725 +286 +21045 +2728 +3354 +5925 +3328 +30371 +8845 +26744 +17698 +14369 +43 +30372 +1112 +30373 +25683 +30374 +2449 +30375 +30376 +284 +590 +4990 +5107 +201 +29963 +3908 +647 +30377 +9 +6595 +19 +30378 +22317 +21947 +43 +155 +44 +27798 +4538 +337 +201 +30379 +1224 +14 +19 +417 +57 +26096 +11170 +30380 +373 +13905 +9214 +2342 +16031 +634 +390 +30381 +15476 +43 +3601 +3642 +668 +30382 +5267 +30383 +17151 +14604 +30384 +24045 +1051 +248 +12907 +5674 +30385 +30386 +3818 +14369 +3353 +30387 +30388 +7756 +30389 +15513 +13361 +349 +6171 +1112 +30390 +25140 +11754 +16505 +30391 +104 +1502 +9095 +44 +43 +17206 +25683 +21469 +34 +30392 +14477 +1524 +30393 +30394 +18760 +25237 +22473 +30395 +30396 +30397 +30398 +19267 +30399 +1217 +24864 +14 +30400 +554 +30401 +1470 +43 +249 +18780 +15 +30402 +29381 +14152 +10 +14 +30403 +30404 +3626 +3341 +21947 +30405 +8460 +13285 +3369 +30406 +446 +20 +284 +736 +10095 +30407 +30408 +590 +30409 +1889 +114 +140 +30410 +28317 +365 +590 +28549 +822 +2919 +590 +24000 +248 +30411 +30412 +25584 +590 +30413 +30414 +43 +14 +213 +3546 +19 +30415 +29483 +12067 +411 +24725 +4900 +1696 +736 +12987 +15824 +25237 +30416 +44 +30417 +378 +30418 +720 +30224 +30419 +21153 +24896 +337 +832 +43 +590 +2851 +248 +24896 +30420 +30421 +14369 +43 +14947 +3559 +28317 +4414 +30422 +17784 +1157 +30423 +104 +19404 +213 +3875 +17349 +6571 +32 +4808 +23752 +408 +30424 +16850 +30425 +24725 +30426 +19096 +43 +30427 +21689 +138 +26303 +16121 +12600 +25758 +286 +30428 +5134 +9 +30429 +213 +213 +43 +18684 +30430 +8297 +30431 +5119 +10239 +20 +590 +1382 +28317 +70 +29381 +43 +30432 +210 +17589 +30433 +19 +29956 +30434 +1559 +209 +29204 +26361 +19852 +30435 +30436 +28317 +10 +7291 +43 +57 +11482 +10527 +720 +14369 +1112 +30437 +30438 +30439 +30440 +18982 +30441 +18250 +1716 +590 +25140 +495 +30442 +6449 +30443 +30444 +30445 +11754 +30446 +1606 +1559 +43 +29483 +5188 +13484 +10 +303 +1364 +57 +3655 +352 +30447 +30448 +22 +30449 +28549 +21947 +1956 +30450 +213 +30451 +30452 +827 +345 +24864 +30453 +30454 +30455 +7137 +26570 +12254 +29916 +29013 +72 +9 +30456 +30457 +323 +30458 +1316 +2975 +30459 +30460 +3995 +14369 +30461 +18310 +7053 +30462 +222 +30463 +11762 +19 +12798 +9801 +8668 +15 +10527 +303 +590 +30464 +30465 +5007 +1234 +21201 +7053 +30466 +29434 +3208 +15 +30467 +15718 +30468 +38 +15533 +21947 +30469 +8668 +30470 +1574 +25683 +30471 +9402 +4364 +17972 +30472 +30473 +30474 +1593 +3546 +5318 +30475 +284 +683 +30476 +21947 +14947 +30477 +30478 +14330 +337 +19582 +27669 +12987 +30479 +9 +30480 +25237 +18951 +1514 +14369 +2043 +27669 +272 +3601 +30481 +30482 +30483 +15925 +6289 +3546 +8814 +1620 +337 +43 +707 +17749 +30484 +28317 +379 +30485 +30486 +13307 +4693 +13721 +14477 +4028 +30487 +30488 +3897 +25683 +29381 +15442 +30489 +30490 +26508 +30491 +7662 +12661 +345 +5336 +19618 +30492 +30493 +13721 +30494 +142 +6732 +27669 +736 +30495 +2410 +7014 +13538 +337 +2577 +15718 +12661 +337 +2768 +3546 +137 +30496 +28082 +1817 +5627 +21947 +30497 +30498 +30499 +19695 +30500 +590 +1961 +25237 +30501 +11 +30502 +22 +345 +5188 +590 +30503 +30504 +43 +30505 +30506 +30507 +29483 +16226 +1332 +3480 +8668 +30508 +24725 +19386 +4196 +30509 +5188 +3546 +30510 +18695 +30511 +14477 +30512 +30513 +30514 +2772 +30515 +14369 +24218 +20572 +30516 +30517 +2314 +647 +613 +2029 +5293 +14369 +19618 +26496 +21776 +683 +30518 +30519 +19618 +30520 +30521 +43 +30522 +2324 +9 +30523 +30524 +30525 +30209 +5780 +9649 +13721 +30526 +14 +10 +28353 +14825 +228 +349 +19 +5188 +30527 +30528 +1021 +30529 +7855 +30530 +48 +30531 +30532 +29483 +7835 +30533 +1809 +30534 +30535 +10 +104 +22680 +8244 +21947 +590 +29381 +30536 +30537 +2 +30538 +3080 +6505 +30539 +18100 +17094 +22552 +30540 +26132 +29381 +23474 +30224 +248 +831 +30541 +686 +30542 +30543 +11607 +30544 +30545 +30546 +29491 +8724 +647 +30547 +30548 +27669 +3328 +27669 +30549 +30550 +2406 +30551 +28317 +24045 +8610 +29483 +8244 +30552 +30553 +27669 +21698 +2208 +3719 +30554 +14369 +4012 +28317 +2593 +28549 +1082 +30555 +17921 +30556 +5267 +30557 +19435 +29381 +10356 +24864 +30558 +17005 +12431 +30559 +989 +272 +30560 +21947 +19 +21509 +1011 +30561 +14369 +30562 +457 +30563 +30564 +29483 +28317 +24860 +18744 +140 +18045 +24418 +1787 +25237 +29381 +7053 +43 +590 +590 +358 +7328 +9 +30565 +24144 +6341 +30566 +13585 +24864 +30567 +30568 +30569 +14369 +29483 +323 +4055 +8110 +15718 +2015 +27905 +15 +21947 +11762 +30570 +43 +20600 +30571 +16437 +15193 +2234 +30572 +30573 +30574 +30575 +590 +29981 +14369 +59 +4341 +1356 +30576 +1799 +24860 +30577 +3480 +30578 +15718 +18079 +1870 +30579 +21947 +30580 +29381 +24045 +30581 +29483 +14947 +30582 +1542 +5085 +3462 +19 +9060 +349 +379 +29381 +22308 +25943 +30583 +19 +1710 +3546 +590 +12287 +30584 +3546 +13229 +25 +21947 +1648 +349 +12222 +5561 +30585 +18982 +30586 +14215 +30587 +14666 +25276 +19 +30588 +590 +21947 +1442 +24725 +25364 +30589 +30590 +30591 +24864 +30592 +5085 +30593 +12987 +29629 +12479 +30594 +57 +5606 +30595 +30596 +30597 +249 +5085 +30598 +26744 +30599 +43 +17151 +1082 +30600 +30601 +29483 +30602 +27798 +5217 +30603 +30604 +25382 +43 +915 +30605 +2060 +29483 +30606 +30607 +26417 +7053 +25237 +30608 +30609 +24864 +30610 +30611 +1300 +15 +15949 +20816 +21031 +30612 +30613 +29483 +30614 +26361 +30615 +5314 +30616 +30617 +1203 +19 +14079 +10511 +30618 +5629 +24896 +19618 +26508 +590 +30619 +20636 +30620 +140 +30621 +26786 +30622 +21947 +26064 +28317 +30623 +30624 +19 +25316 +30625 +30626 +19 +43 +14 +30627 +3034 +30628 +1870 +1083 +15718 +5614 +373 +2 +30629 +30630 +38 +21947 +30631 +8668 +12404 +30632 +30633 +30634 +12062 +1226 +29381 +136 +140 +30635 +15718 +30636 +3913 +286 +14369 +25088 +30637 +4012 +20 +25237 +30638 +1517 +2975 +30639 +30640 +13721 +42 +23617 +30641 +1245 +3546 +671 +30642 +30643 +12987 +3228 +4364 +30644 +21689 +14330 +5785 +590 +17518 +30645 +2925 +24725 +13721 +30646 +21889 +15054 +30647 +30648 +29992 +713 +43 +155 +30649 +590 +30650 +286 +6060 +30651 +43 +17151 +9 +6766 +11754 +2733 +250 +20656 +242 +397 +30652 +9 +1332 +30653 +30580 +3531 +188 +30654 +30655 +12067 +30656 +30657 +30658 +26496 +24896 +23103 +30659 +30660 +30661 +20 +349 +30662 +30663 +188 +29483 +28147 +586 +29381 +30664 +30665 +14369 +8297 +30666 +30667 +164 +1153 +2342 +20 +21947 +10303 +30668 +259 +43 +1852 +4764 +30669 +13619 +9 +30670 +30671 +201 +10946 +3 +357 +30672 +30673 +9 +30674 +16817 +30675 +286 +358 +30676 +14477 +24896 +1889 +29381 +4138 +910 +3546 +21971 +30677 +11906 +30678 +566 +1295 +188 +3546 +30679 +11073 +8668 +19 +2409 +4765 +2260 +22236 +9 +30051 +412 +25620 +2764 +590 +15923 +736 +30680 +24864 +10117 +30681 +736 +14369 +30682 +1013 +30683 +30684 +30685 +30686 +349 +3601 +2 +25683 +1765 +43 +30687 +6893 +30688 +363 +2410 +11083 +25 +27669 +30689 +27669 +14330 +30690 +30691 +30692 +30693 +764 +30694 +30695 +30696 +13777 +14 +24045 +30697 +30698 +873 +30699 +2314 +2694 +30700 +11810 +28441 +30701 +30702 +1157 +30703 +30704 +30705 +30706 +24725 +30707 +8188 +30708 +30458 +27669 +7053 +30709 +30710 +30711 +30712 +30713 +4550 +26690 +13801 +30714 +30715 +30716 +915 +30717 +536 +60 +11087 +28490 +887 +18283 +590 +25971 +17371 +1716 +30718 +2834 +30719 +30720 +30721 +30722 +29984 +30559 +29381 +30723 +30724 +597 +30725 +30726 +30727 +1621 +19 +30728 +43 +30729 +30730 +30731 +30732 +30733 +19404 +30734 +30735 +1287 +30736 +30737 +19 +30738 +3546 +30739 +30740 +14947 +16437 +89 +23226 +10 +590 +30741 +6764 +18934 +30742 +30743 +26361 +2550 +345 +28317 +30744 +1508 +23752 +1698 +30745 +30746 +30747 +10 +1562 +15718 +21947 +2314 +30748 +3950 +30749 +30750 +25159 +30751 +23102 +286 +8668 +209 +30752 +27669 +2325 +21831 +30753 +18695 +19091 +27669 +30754 +2830 +30755 +30756 +6214 +9 +7855 +28317 +30757 +30758 +30759 +30760 +30761 +2065 +30762 +25237 +30763 +25943 +30764 +22098 +30765 +30766 +30767 +7559 +30768 +12987 +29381 +8249 +30769 +4821 +30770 +10 +345 +2804 +27482 +30771 +99 +20555 +30772 +4806 +30773 +30774 +30775 +30776 +27719 +18019 +43 +19618 +2471 +2459 +27669 +590 +9 +30777 +21947 +30778 +30779 +15 +4982 +3353 +17151 +109 +43 +519 +5074 +28441 +30780 +26040 +30781 +30782 +13841 +30783 +4387 +21947 +30784 +30785 +30786 +399 +30787 +1262 +21947 +7108 +30788 +590 +30789 +12231 +30790 +590 +2577 +2320 +5204 +11754 +25659 +43 +30791 +1824 +13662 +26649 +30792 +24864 +865 +30793 +25140 +14369 +30794 +67 +18605 +417 +30795 +30796 +22963 +1224 +19618 +70 +30797 +3546 +29483 +30798 +4364 +861 +14770 +3908 +30224 +30799 +39 +30800 +2459 +30801 +1612 +339 +30802 +817 +30209 +30803 +9629 +13576 +4278 +14343 +9 +20514 +30804 +17151 +30805 +30806 +25943 +30807 +590 +27669 +1300 +30808 +7053 +5601 +1423 +29483 +3546 +590 +30809 +21947 +845 +30810 +355 +14369 +30811 +24725 +30812 +30813 +30814 +12220 +5188 +30815 +590 +28317 +30816 +30817 +30818 +30819 +18186 +15207 +14604 +21337 +30820 +30821 +6334 +4425 +188 +3546 +1291 +14369 +15718 +30822 +30823 +30824 +272 +24896 +15825 +28317 +590 +19655 +57 +30825 +19 +2342 +12579 +30826 +21947 +30827 +13307 +18695 +28568 +19404 +24774 +9095 +2260 +9842 +20952 +1018 +190 +3764 +43 +2896 +30828 +2764 +25943 +14 +30829 +29381 +2049 +24144 +365 +98 +30830 +29483 +14841 +30831 +1018 +6364 +30832 +30833 +17270 +10430 +30834 +30835 +19 +21947 +30836 +1300 +28317 +30837 +30838 +30839 +14133 +43 +30840 +1220 +21947 +30841 +30842 +16437 +30843 +25172 +30844 +30845 +28317 +22 +17046 +30846 +573 +43 +27669 +30847 +30848 +12684 +20108 +30849 +30850 +15718 +30851 +15311 +19 +30852 +446 +4458 +30853 +345 +1992 +30854 +30855 +14363 +30856 +703 +30857 +30858 +861 +30859 +24333 +345 +30860 +14330 +9 +30861 +30862 +30863 +1012 +713 +15718 +26635 +30864 +3 +10360 +30865 +554 +20700 +590 +155 +30866 +30867 +29483 +28923 +416 +18896 +30868 +345 +30869 +30870 +590 +26011 +14 +24790 +30871 +345 +15 +3104 +17320 +15718 +19618 +14 +2314 +590 +1688 +4634 +30872 +21835 +590 +19064 +30873 +286 +30874 +30875 +30876 +17151 +14 +30877 +3626 +30878 +3551 +30879 +30880 +19 +5188 +3601 +10230 +29483 +1021 +22669 +30881 +29483 +30882 +22989 +14330 +38 +13566 +30883 +30884 +1559 +349 +43 +25172 +827 +43 +29497 +20 +30885 +30886 +30887 +5410 +14 +495 +19 +30888 +15 +30889 +14369 +89 +15942 +3546 +14604 +30890 +66 +43 +30891 +15 +30892 +32 +417 +228 +24131 +30893 +12722 +30224 +21499 +19582 +30894 +25237 +30895 +1961 +30896 +19 +30897 +24896 +30898 +304 +3546 +25666 +26711 +30899 +30900 +30901 +77 +827 +30902 +30903 +30904 +16437 +30905 +14330 +103 +30906 +27069 +25659 +1529 +1559 +5662 +12005 +27669 +14 +4306 +14 +30907 +30908 +30909 +30910 +30911 +58 +30912 +28441 +30913 +1245 +25604 +14477 +677 +29483 +30914 +3598 +4195 +281 +17151 +24045 +66 +14000 +43 +46 +30915 +30916 +29483 +25871 +43 +155 +30917 +30918 +18145 +2038 +2872 +30919 +43 +13279 +16437 +30920 +209 +30921 +25 +19655 +13583 +345 +89 +11174 +14527 +17151 +30922 +30923 +736 +13553 +30924 +24919 +1066 +29381 +89 +506 +533 +2 +14898 +442 +713 +14330 +25659 +6877 +30925 +8602 +29483 +3546 +1716 +30926 +349 +30927 +30928 +4028 +1786 +14330 +22308 +30929 +30930 +17608 +3546 +2 +14102 +6459 +30931 +3546 +21947 +30932 +29381 +57 +30933 +5085 +20952 +3546 +14185 +3546 +1521 +2264 +30934 +30935 +30936 +29153 +713 +245 +590 +21947 +30937 +2525 +2733 +30938 +43 +25140 +4502 +27719 +30939 +24896 +26484 +30940 +3044 +30941 +26484 +19618 +5085 +9 +2764 +30942 +30943 +21186 +484 +1444 +30944 +30945 +30946 +30947 +349 +2309 +842 +4086 +14477 +30948 +43 +30949 +22963 +11389 +303 +24063 +30950 +11995 +24144 +14909 +19404 +30559 +248 +30559 +10407 +12907 +915 +29483 +30951 +248 +1021 +30952 +30953 +829 +30954 +590 +30955 +30956 +25683 +30957 +30958 +9705 +30959 +30960 +26484 +25683 +30961 +915 +284 +19 +15718 +10961 +30962 +30963 +43 +284 +30964 +18568 +20514 +1332 +30965 +30966 +21947 +590 +2834 +30967 +30968 +19618 +7835 +30969 +590 +29483 +7522 +30970 +28317 +3790 +2064 +30971 +29483 +1234 +1710 +30972 +58 +23103 +30973 +249 +358 +21947 +358 +379 +32 +1471 +213 +30974 +30975 +6776 +14604 +8967 +713 +1222 +248 +30976 +817 +8256 +27669 +671 +30977 +15718 +30978 +14477 +16437 +73 +21947 +30979 +24951 +43 +14369 +7977 +24303 +27433 +1745 +14660 +26229 +927 +827 +30980 +30981 +25943 +9604 +43 +554 +30982 +30983 +751 +30984 +590 +248 +286 +30985 +677 +30986 +27446 +18946 +11845 +30987 +30988 +29381 +1562 +21947 +379 +2015 +30989 +15356 +3546 +30990 +30991 +1465 +30992 +590 +30993 +30994 +14369 +6095 +29483 +30995 +29381 +2804 +30996 +15259 +1562 +24144 +89 +3480 +9718 +1026 +19965 +66 +2728 +16853 +30997 +30998 +7137 +30999 +272 +1834 +31000 +590 +9 +12697 +31001 +20339 +31002 +2430 +3 +32 +974 +31003 +1169 +28441 +24896 +15824 +31004 +31005 +31006 +28317 +829 +13615 +179 +11138 +15470 +31007 +30051 +2004 +533 +31008 +24374 +29381 +27669 +590 +14369 +14369 +590 +13375 +27996 +1262 +12871 +31009 +31010 +29381 +15718 +1021 +29483 +14363 +31011 +31012 +31013 +22065 +14477 +29381 +43 +8188 +12563 +12053 +15718 +23464 +31014 +315 +303 +31015 +31016 +43 +4518 +278 +303 +31017 +18064 +17151 +31018 +14369 +31019 +3553 +491 +13721 +31020 +31021 +590 +31022 +31023 +20051 +31024 +9232 +4441 +15763 +103 +140 +3546 +25683 +21975 +31025 +31026 +31027 +29204 +31028 +27669 +30538 +286 +5451 +31029 +17151 +31030 +1300 +327 +31031 +3484 +31032 +31033 +21947 +31034 +31035 +16340 +1458 +27794 +2121 +19618 +31036 +29483 +31037 +590 +345 +31038 +31039 +31040 +1208 +8392 +31041 +2636 +31042 +31043 +736 +237 +31044 +26040 +3546 +25584 +791 +29799 +3251 +5089 +25140 +28317 +21853 +1013 +31045 +349 +915 +20532 +28317 +31046 +345 +31047 +26025 +21947 +16919 +648 +12351 +29483 +31048 +155 +31049 +20 +22420 +31050 +201 +3546 +188 +29434 +613 +31051 +15718 +31052 +24864 +9 +77 +4441 +18120 +22355 +13640 +164 +665 +31053 +140 +31054 +19618 +15718 +31055 +18283 +31056 +2485 +915 +31057 +31058 +872 +822 +19 +31059 +6617 +29381 +27669 +21947 +15068 +11670 +397 +31060 +8668 +31061 +3976 +27069 +31062 +31063 +31064 +1382 +31065 +24144 +22010 +590 +31066 +18045 +20404 +1559 +927 +590 +31067 +9 +26744 +31068 +19618 +31069 +1082 +179 +31070 +15980 +379 +43 +31071 +31072 +31073 +31074 +43 +31075 +16211 +11479 +31076 +3546 +22 +29628 +24896 +31077 +14001 +31078 +31079 +31080 +31081 +15 +31082 +10 +31083 +30559 +11582 +31084 +25904 +28549 +303 +25 +8244 +31085 +31086 +31087 +31088 +5780 +9 +12315 +25 +501 +8005 +284 +833 +411 +26744 +345 +31089 +31090 +31091 +3251 +31092 +43 +2694 +590 +29483 +5806 +31093 +31094 +25683 +2795 +31095 +21837 +9287 +188 +31096 +31097 +15348 +31098 +14871 +665 +19792 +31099 +286 +648 +970 +2197 +31100 +31101 +176 +31102 +20538 +590 +31103 +13086 +31104 +89 +19618 +43 +31105 +31106 +31107 +2975 +14477 +14477 +16826 +201 +16645 +26361 +30224 +736 +31108 +1018 +303 +20 +25943 +1051 +345 +29483 +4002 +8351 +14330 +30580 +21947 +31109 +31110 +153 +31111 +25140 +272 +14330 +18310 +31112 +323 +25237 +15569 +14369 +31113 +31114 +21947 +1543 +358 +30051 +2414 +3601 +25316 +12987 +24207 +31115 +31116 +31117 +31118 +286 +29483 +677 +31119 +20 +31120 +31121 +25237 +31122 +178 +31123 +31124 +43 +31125 +478 +27669 +23805 +43 +25943 +3950 +14520 +114 +18951 +31126 +31127 +1559 +31128 +31129 +29483 +26452 +31130 +32 +31131 +31132 +1502 +31133 +5390 +971 +15718 +14369 +30877 +31134 +31135 +31136 +303 +303 +27260 +6950 +28317 +284 +28179 +25659 +9 +14436 +31137 +303 +31138 +31139 +31140 +1047 +31141 +21947 +14330 +11672 +31142 +31143 +24896 +26158 +29381 +4414 +31144 +31145 +31146 +31147 +568 +31148 +31149 +590 +14363 +31150 +2253 +1082 +28441 +2260 +248 +1051 +31151 +31152 +1961 +15183 +286 +10601 +22371 +10793 +595 +19655 +24725 +24896 +43 +31153 +21947 +337 +31154 +18798 +31155 +25202 +21869 +2728 +22420 +11683 +590 +21947 +30877 +25584 +31156 +12987 +31157 +31158 +19 +548 +402 +31159 +19 +31160 +31161 +14643 +861 +2577 +1606 +98 +590 +31162 +9210 +24725 +31163 +3546 +24864 +12987 +1289 +15 +14477 +31164 +31165 +31166 +31167 +31168 +3546 +590 +31169 +31170 +971 +23666 +31171 +3546 +17920 +96 +31172 +43 +15649 +29381 +31173 +30917 +27548 +89 +446 +590 +536 +31174 +448 +323 +31175 +31176 +13905 +31177 +43 +31178 +31179 +8297 +14734 +31180 +15718 +31181 +373 +509 +31182 +31183 +4055 +31184 +379 +13848 +590 +590 +27798 +43 +31185 +31186 +2043 +213 +27669 +16948 +590 +14 +815 +5188 +31187 +31188 +31189 +13721 +17151 +31190 +23103 +26083 +31191 +179 +7983 +14814 +10111 +31192 +5188 +15 +31193 +284 +9 +17151 +57 +31194 +31195 +12474 +14000 +7810 +10 +31196 +14369 +19 +43 +6054 +2197 +31197 +17151 +31198 +2176 +349 +369 +5188 +31199 +31200 +31201 +31202 +1013 +1287 +25140 +31203 +29 +31204 +4056 +5840 +13840 +23103 +4278 +31205 +1066 +31206 +561 +554 +7053 +29381 +14330 +31207 +31208 +365 +31209 +25140 +31210 +14343 +345 +31211 +14369 +22311 +14947 +3059 +46 +31212 +31213 +31214 +7045 +365 +31215 +24144 +31216 +3553 +3978 +270 +19618 +2733 +8721 +31217 +6058 +24896 +31218 +31219 +21947 +201 +31220 +707 +25237 +43 +31221 +566 +60 +43 +31222 +31223 +2260 +31224 +19618 +2577 +13905 +26040 +31225 +31226 +31227 +12987 +31228 +31229 +26571 +31230 +3553 +31231 +31232 +5757 +9 +31233 +14363 +3598 +356 +22 +6970 +31234 +31235 +28441 +31236 +19618 +822 +31237 +19618 +30877 +15718 +25897 +31238 +1559 +31239 +167 +31240 +19618 +31241 +1870 +28326 +31242 +31243 +590 +30559 +25140 +20 +9 +24303 +32 +19655 +19618 +286 +17698 +265 +19189 +31244 +31245 +31246 +440 +31247 +31248 +29483 +31249 +15793 +31250 +5188 +2619 +3964 +14330 +6275 +29483 +31251 +5679 +31252 +31253 +31254 +9754 +11966 +9 +12 +16 +13539 +1094 +31255 +30224 +31256 +21947 +29799 +24725 +16089 +24864 +89 +5085 +15907 +31257 +7385 +27798 +20098 +554 +9 +3598 +17983 +250 +1011 +6331 +30877 +31258 +31259 +31260 +31261 +8668 +30794 +43 +1976 +1011 +31262 +9 +13721 +31263 +554 +3546 +13721 +31264 +24785 +249 +590 +31265 +349 +29381 +31266 +19618 +2308 +19618 +31267 +21947 +14369 +3601 +13576 +3 +31268 +590 +590 +43 +970 +31269 +24864 +31270 +155 +14369 +590 +19618 +9 +14369 +29002 +800 +2891 +27669 +27669 +590 +970 +5119 +12987 +14240 +31271 +31272 +30877 +14947 +15471 +25683 +30826 +31273 +30877 +31274 +77 +3978 +352 +590 +31275 +31276 +5119 +31277 +19618 +31278 +590 +21676 +31279 +1376 +24303 +21947 +31280 +286 +29483 +3406 +16451 +754 +31281 +31282 +31283 +11259 +25683 +809 +736 +31284 +9 +22 +31285 +9 +57 +1083 +14 +764 +23363 +19 +31286 +21947 +31287 +31288 +16437 +9 +736 +14660 +342 +31289 +31290 +27817 +12832 +590 +16466 +19836 +5976 +21309 +11940 +31291 +31292 +29381 +31293 +1612 +11934 +27669 +24864 +286 +2476 +2499 +31294 +31295 +31296 +7665 +14330 +677 +19209 +6877 +887 +9210 +31297 +12259 +43 +31298 +1521 +1027 +31299 +31300 +31301 +209 +2591 +31302 +31303 +31304 +31305 +3369 +53 +9 +32 +31306 +31307 +272 +31308 +31309 +16437 +31310 +8297 +1047 +3546 +15718 +379 +18683 +30559 +31311 +31312 +17902 +21947 +31313 +9 +21947 +31314 +31315 +31316 +31317 +11522 +29483 +26020 +31318 +43 +19618 +2316 +18896 +31319 +9 +21625 +3546 +31320 +24207 +31321 +27669 +11738 +31322 +31323 +11702 +89 +31324 +31325 +31326 +12987 +185 +14369 +31327 +533 +590 +25237 +31328 +19 +31329 +31330 +590 +16931 +22 +14330 +1920 +43 +15 +209 +31331 +31332 +6741 +30051 +31333 +720 +31334 +30877 +9782 +31335 +31336 +20496 +21947 +31337 +3546 +19618 +3343 +31338 +31339 +10 +4550 +248 +43 +21716 +8297 +19 +31340 +24588 +31341 +849 +31342 +31343 +15 +31344 +31345 +30877 +32 +155 +1013 +736 +15824 +4441 +31346 +887 +3994 +13396 +25943 +24045 +519 +30209 +29884 +10028 +25047 +31347 +31348 +29956 +21947 +31349 +590 +1090 +31350 +10362 +18112 +31351 +915 +31352 +77 +18695 +15853 +6197 +31353 +14603 +31354 +30224 +17834 +31355 +57 +8005 +4285 +31356 +27719 +21947 +17206 +1384 +31357 +31358 +31359 +31360 +31361 +31362 +2121 +30877 +1352 +18928 +18045 +66 +31363 +31364 +30877 +5512 +31365 +17168 +31366 +6395 +28441 +34 +29483 +3950 +31367 +31368 +31369 +29483 +31370 +31371 +27069 +28317 +31372 +13721 +31373 +31374 +31375 +9 +29786 +31376 +11472 +1046 +31377 +665 +19 +28317 +31378 +31379 +31380 +25237 +25584 +756 +13030 +14477 +31381 +14 +201 +31382 +138 +590 +43 +31383 +43 +24725 +98 +25382 +31384 +21045 +286 +29381 +30877 +89 +31385 +25140 +19618 +20897 +31386 +31387 +29483 +5085 +14660 +213 +19 +14369 +701 +29381 +31388 +28339 +24045 +11754 +31389 +30877 +29381 +31390 +31391 +10880 +19 +31392 +31393 +31394 +20536 +31395 +31396 +31397 +31398 +31225 +28317 +2 +1154 +25683 +20 +31399 +284 +31400 +31401 +3353 +2043 +14594 +7053 +16 +213 +24725 +17 +9 +30224 +29381 +590 +248 +31402 +42 +31403 +31404 +3546 +31405 +1847 +315 +248 +27798 +109 +14947 +31406 +1107 +21947 +31407 +31408 +345 +500 +1038 +31409 +19 +31410 +30224 +6179 +31098 +28317 +2264 +31411 +29483 +140 +21681 +10973 +30877 +1013 +31412 +28961 +1352 +31413 +5080 +31414 +21947 +31415 +14599 +31416 +25871 +53 +17 +14 +27798 +31417 +19618 +8668 +31418 +43 +24303 +31419 +8668 +9 +3601 +31420 +31421 +31422 +7835 +26727 +2314 +4609 +31423 +31424 +248 +1090 +470 +15718 +30877 +26496 +3546 +3160 +1992 +303 +31425 +31426 +7137 +31427 +25237 +1784 +20897 +9 +284 +31428 +2913 +31429 +170 +29628 +28317 +554 +31430 +22 +2668 +31431 +412 +43 +13390 +2489 +21776 +10 +19 +26508 +13776 +31432 +1224 +4550 +31433 +109 +1531 +31434 +31435 +284 +4028 +31436 +1924 +31437 +29483 +14001 +15718 +31438 +31439 +31440 +18695 +14369 +30877 +23103 +31441 +15 +31442 +20094 +31443 +20888 +4055 +9451 +31444 +31445 +16865 +303 +17033 +32 +22963 +31446 +43 +17136 +9 +4025 +19126 +29381 +13030 +1716 +685 +31447 +17084 +31448 +31449 +9939 +209 +29381 +31450 +28317 +25140 +590 +169 +18034 +31451 +31452 +19655 +541 +2593 +14369 +31453 +24303 +20 +9 +8721 +31454 +397 +415 +31455 +990 +716 +31456 +1765 +31457 +31458 +4684 +554 +14369 +536 +1131 +22064 +3408 +29381 +26496 +31459 +31460 +21689 +1335 +31461 +31462 +249 +9 +31463 +31464 +17151 +31465 +24675 +20 +13150 +10117 +31466 +43 +28339 +31234 +317 +31467 +31468 +27669 +23103 +14 +31469 +31470 +29381 +26744 +29483 +7253 +337 +1090 +31471 +31472 +411 +554 +15824 +31473 +491 +671 +31474 +31475 +31476 +590 +31477 +31478 +14369 +14 +915 +31479 +31480 +7868 +31481 +9 +29483 +31482 +6090 +31483 +28471 +31484 +31485 +31486 +941 +6877 +31487 +1817 +31488 +22 +720 +915 +31489 +31490 +5498 +24010 +31491 +31492 +19 +31493 +390 +29483 +2577 +31494 +14363 +31495 +29483 +31496 +31497 +249 +9 +16656 +5188 +19817 +28999 +970 +6595 +31498 +11304 +5780 +3546 +27069 +31499 +31500 +3599 +31501 +31502 +31503 +31504 +25683 +284 +9548 +533 +9994 +43 +25683 +14369 +57 +3 +12832 +31505 +2315 +590 +5169 +1332 +31506 +31507 +559 +27669 +15718 +31508 +31509 +31510 +1578 +590 +31511 +28000 +31512 +19 +31513 +31514 +165 +31515 +558 +213 +31225 +1765 +31516 +1927 +1352 +31517 +31518 +5085 +15631 +31519 +27669 +590 +379 +28877 +30650 +10750 +28317 +29483 +31520 +25237 +8961 +19 +18951 +22464 +7233 +31521 +345 +31522 +31523 +30921 +31524 +31525 +31526 +29799 +745 +31527 +31528 +15718 +31529 +24952 +9132 +31530 +14301 +2009 +31531 +8367 +3465 +31532 +30877 +24864 +28317 +31533 +5085 +31534 +31535 +8668 +31536 +24302 +16444 +31537 +446 +31293 +3553 +2259 +31538 +31539 +25237 +590 +30309 +31540 +30877 +491 +2187 +31541 +31542 +31543 +31544 +5659 +27069 +958 +31545 +196 +31546 +31293 +31547 +24207 +13721 +31548 +865 +2117 +18695 +345 +31197 +2515 +24896 +665 +13919 +31549 +1019 +1937 +31550 +15718 +31551 +31552 +22063 +1905 +14369 +9 +820 +15718 +1716 +201 +286 +19883 +16118 +31553 +7053 +31554 +31555 +15718 +31556 +284 +4463 +31557 +31558 +533 +31559 +31560 +26361 +5627 +31561 +31562 +77 +286 +31563 +14330 +31564 +29381 +30224 +7855 +854 +19618 +31565 +31566 +31567 +2728 +936 +29109 +29483 +373 +89 +337 +1831 +4144 +31568 +28317 +30309 +10 +15 +31569 +31570 +6991 +13721 +31571 +970 +25097 +31572 +5780 +9578 +10407 +7053 +358 +43 +213 +15 +31573 +31574 +16640 +31575 +8247 +29032 +12987 +31576 +31577 +25237 +24725 +7053 +43 +31578 +46 +31579 +30551 +31580 +24864 +3546 +213 +11838 +30921 +213 +31581 +31582 +284 +31583 +11607 +11754 +5780 +14477 +27669 +25943 +345 +274 +25943 +31584 +27473 +213 +29381 +31585 +15370 +1458 +16656 +10 +31586 +31587 +30877 +19618 +26647 +31588 +31589 +31590 +43 +2314 +27669 +29200 +31591 +1768 +9 +564 +1021 +286 +5707 +31592 +286 +29483 +4918 +2086 +6557 +31593 +9 +18607 +970 +11571 +337 +1051 +26190 +31594 +31595 +274 +19095 +3546 +21947 +9335 +31596 +284 +2993 +29032 +31597 +155 +21947 +2356 +31598 +31599 +554 +31600 +31601 +10356 +14477 +17 +720 +31602 +30877 +554 +2728 +28317 +6766 +31603 +11210 +31604 +43 +31605 +9 +1559 +18561 +31606 +14 +668 +23806 +3553 +31607 +19655 +31608 +31609 +590 +31610 +31611 +21947 +25140 +31612 +31613 +677 +31614 +1517 +15 +29628 +337 +31615 +31616 +31617 +29483 +66 +31618 +31619 +31620 +31621 +31622 +22 +5188 +22963 +29791 +25097 +337 +31623 +4808 +29483 +31624 +5188 +2694 +25237 +4242 +25109 +31625 +31626 +31627 +22 +13840 +12067 +31628 +2029 +4606 +13349 +19 +24896 +3575 +3457 +21126 +31629 +14477 +31630 +30877 +19372 +17997 +31631 +586 +31632 +12987 +31633 +303 +16472 +43 +31634 +1244 +31635 +32 +4174 +1862 +31636 +31637 +14369 +14330 +31638 +17039 +1745 +15718 +24403 +12987 +31639 +15718 +31640 +6736 +791 +66 +31641 +31642 +31643 +21947 +16437 +29483 +31644 +590 +31645 +30877 +2289 +25140 +43 +31646 +31647 +36 +15718 +9 +590 +29576 +31648 +31649 +24045 +1414 +43 +31650 +3 +18919 +2 +31651 +185 +21947 +31652 +31653 +31654 +31655 +31656 +1047 +31657 +31658 +13150 +31659 +30877 +317 +337 +2 +4055 +31660 +31661 +671 +2694 +28317 +19852 +3546 +31662 +1956 +29483 +1090 +14330 +5976 +25723 +15584 +736 +32 +178 +31663 +377 +3067 +730 +21947 +31664 +17144 +15 +5820 +31665 +2694 +517 +31666 +6459 +43 +25402 +13721 +31667 +12013 +19618 +31381 +11224 +5041 +24864 +882 +31668 +10 +970 +4808 +720 +18418 +31669 +29483 +248 +31670 +25140 +31671 +25943 +345 +3477 +590 +31672 +57 +31673 +4055 +31674 +31675 +24896 +13721 +245 +30224 +19618 +22868 +31676 +31677 +2260 +30458 +29204 +18136 +29483 +21031 +7137 +30877 +142 +14603 +9 +31678 +14369 +1604 +31679 +21947 +31680 +31681 +31682 +31683 +736 +31684 +16413 +14216 +7835 +17907 +18982 +2733 +25140 +5435 +590 +28549 +31685 +31686 +31687 +27939 +379 +31688 +31689 +31690 +31691 +38 +43 +15718 +28013 +31692 +337 +26361 +613 +31693 +6086 +112 +31694 +1384 +31695 +28140 +5780 +9 +13150 +7855 +32 +9 +31696 +31697 +31698 +31699 +10356 +2 +76 +2476 +2577 +249 +1208 +3104 +22075 +1423 +3470 +31700 +349 +15483 +24864 +27681 +13566 +1157 +1765 +31701 +12267 +5344 +20058 +43 +17151 +31702 +21776 +23841 +30877 +32 +590 +1012 +8798 +1224 +345 +31703 +19618 +1011 +3739 +24896 +19618 +611 +12788 +24896 +9 +31704 +31705 +3335 +15504 +2990 +1716 +31706 +14363 +1208 +31707 +4026 +1090 +1090 +179 +1051 +770 +8263 +24896 +286 +30051 +22 +337 +31708 +5085 +31709 +31710 +17151 +31711 +31712 +31713 +1765 +31714 +28500 +31715 +9 +1212 +31716 +31717 +27719 +9 +24144 +3 +31718 +19618 +345 +43 +31719 +31720 +4 +31721 +31722 +24725 +29381 +5387 +28441 +43 +28317 +31723 +18951 +31724 +31725 +14369 +15718 +9 +57 +5007 +31726 +22098 +29381 +16377 +29483 +31727 +345 +19 +22986 +9 +31728 +2769 +24725 +31729 +4028 +27669 +17151 +590 +31730 +29381 +14363 +31731 +24371 +590 +43 +2286 +286 +31732 +19852 +222 +24303 +11321 +590 +1115 +14330 +8967 +533 +17749 +2019 +14 +31733 +3546 +14477 +2 +30655 +20952 +590 +21947 +20792 +30877 +31734 +18951 +25683 +31735 +1514 +31736 +31737 +43 +31738 +14369 +30580 +31739 +6627 +31740 +43 +21947 +31741 +31742 +31743 +2976 +25943 +31744 +104 +19 +31745 +31746 +31747 +31748 +18695 +4124 +31749 +31750 +31751 +31752 +31753 +30877 +22963 +43 +18568 +31754 +31755 +25164 +2064 +1316 +15448 +14477 +13325 +43 +21947 +12987 +29463 +21947 +31756 +31757 +17151 +590 +30877 +9194 +19 +31758 +272 +5601 +31759 +3055 +30877 +42 +31760 +2694 +402 +3546 +30877 +31761 +14363 +31762 +590 +31763 +861 +15989 +554 +31764 +31765 +1224 +31766 +910 +9 +17920 +8668 +155 +31767 +554 +19585 +31768 +26496 +31293 +3406 +31769 +31770 +31293 +31771 +31772 +26779 +27110 +31773 +43 +272 +27279 +9 +379 +164 +19618 +272 +31774 +24864 +861 +566 +590 +31775 +31776 +2764 +8037 +14477 +751 +4028 +349 +23103 +3 +30851 +29483 +31777 +31778 +31779 +5085 +20517 +57 +20785 +31780 +10580 +179 +1100 +24045 +6499 +5438 +31781 +15718 +31782 +29483 +31293 +26744 +16966 +31783 +31784 +970 +31785 +31786 +31787 +770 +24864 +31788 +13721 +19404 +43 +31789 +31790 +31791 +25991 +10 +28441 +31792 +4805 +15481 +43 +31793 +24765 +26361 +31794 +19585 +8249 +3999 +590 +29381 +597 +21947 +31795 +31796 +1090 +31797 +3790 +15183 +23368 +14832 +25140 +31798 +28295 +1870 +31799 +4128 +31800 +25584 +26724 +1382 +738 +196 +31801 +43 +5415 +21947 +27069 +31802 +19 +31803 +31804 +31805 +25140 +31806 +379 +31807 +43 +27669 +1514 +242 +31808 +31809 +3764 +31810 +31811 +31812 +29799 +27069 +29951 +31813 +2260 +31814 +7357 +1356 +19618 +23103 +31815 +31816 +26011 +795 +1465 +21261 +10139 +31817 +31818 +104 +57 +14363 +31819 +31820 +29483 +29289 +21947 +1208 +27069 +1612 +43 +26040 +31821 +27448 +31822 +66 +31823 +29381 +31824 +5908 +21947 +703 +31720 +31825 +138 +4550 +402 +338 +31826 +14 +19655 +31827 +3061 +590 +1262 +484 +28441 +31828 +29849 +13848 +25140 +179 +345 +31829 +4793 +24045 +590 +1961 +21947 +4244 +29483 +10038 +28317 +31830 +3546 +31831 +30224 +27719 +8110 +31832 +8255 +25683 +590 +31833 +19868 +43 +2260 +14477 +19 +31834 +284 +28317 +31835 +9 +2764 +31836 +24896 +9 +31837 +43 +3301 +4468 +29483 +7137 +31838 +31839 +29381 +43 +24951 +31840 +282 +13721 +31841 +31842 +1942 +21095 +1559 +31843 +31844 +21947 +31845 +1562 +4855 +8675 +31846 +1513 +31847 +28000 +284 +14330 +1524 +31848 +43 +31849 +31850 +31851 +3546 +21776 +5629 +284 +14947 +17112 +31852 +1384 +286 +104 +707 +19 +26680 +20700 +21947 +176 +26680 +66 +25237 +31853 +31854 +29628 +31855 +31856 +31857 +13721 +31858 +248 +286 +43 +31859 +576 +16618 +590 +1090 +10717 +16205 +3417 +10578 +5022 +590 +5976 +19618 +8950 +31860 +31861 +25140 +25683 +31862 +31863 +1563 +303 +31864 +4441 +3095 +2314 +18920 +31865 +713 +31866 +13848 +9 +25237 +57 +9 +31867 +31868 +16391 +11762 +16437 +495 +303 +29381 +5085 +337 +19404 +31869 +31870 +1136 +43 +31871 +31872 +6518 +31873 +31874 +29200 +31875 +5627 +31876 +19618 +31877 +31878 +24458 +788 +31879 +5188 +24253 +5119 +7053 +31880 +23103 +31881 +31882 +373 +720 +540 +31883 +31884 +27159 +1907 +31885 +237 +13307 +31886 +24896 +3353 +31887 +597 +3546 +31888 +1224 +31889 +2733 +303 +31890 +248 +595 +31891 +284 +4441 +9707 +66 +21947 +20340 +12159 +31892 +31893 +196 +9351 +31894 +31895 +27798 +23103 +31896 +21947 +17151 +30260 +3044 +31897 +57 +31898 +31899 +31900 +31901 +43 +9 +29483 +31902 +25140 +31903 +970 +31904 +26706 +19918 +89 +43 +4055 +9 +31905 +303 +31906 +20058 +29483 +9 +27843 +53 +31907 +31908 +5852 +25140 +14001 +31909 +2577 +1524 +28804 +31910 +31911 +411 +32 +5614 +31912 +14947 +12573 +30143 +31913 +31914 +2550 +31915 +155 +30650 +791 +15718 +14330 +31916 +31917 +9 +31918 +15428 +31919 +31920 +21947 +31921 +29483 +25237 +4717 +42 +21207 +29483 +31922 +3546 +24026 +13848 +14330 +31923 +337 +31924 +8367 +21947 +31925 +14898 +29770 +26738 +31926 +179 +20616 +31927 +31928 +31929 +5188 +31930 +29381 +31931 +31932 +31933 +1113 +15629 +21947 +31934 +31935 +286 +716 +31936 +31937 +24144 +554 +31938 +31939 +20616 +323 +31940 +1716 +379 +15541 +970 +29381 +31941 +31942 +31943 +31944 +21689 +18394 +8263 +31945 +25159 +29381 +31946 +86 +57 +15718 +31293 +31947 +31948 +31949 +31950 +25659 +31951 +1083 +21776 +31952 +29381 +29483 +13721 +31953 +15718 +9 +27719 +29381 +31954 +9501 +189 +536 +30347 +30209 +29434 +31955 +31956 +31957 +31958 +31959 +31960 +861 +31961 +31962 +590 +11056 +736 +31963 +573 +24063 +31964 +31965 +21947 +213 +209 +31966 +345 +27069 +5083 +3546 +31967 +31968 +31168 +31969 +31970 +8030 +31971 +31972 +21889 +24864 +43 +31973 +31974 +28317 +15718 +31975 +352 +15718 +169 +576 +31976 +31977 +892 +20871 +31293 +31978 +4820 +3745 +14330 +412 +26136 +31168 +21394 +31979 +12956 +28317 +28317 +970 +31980 +31981 +12166 +12907 +14532 +4441 +19939 +31098 +1249 +43 +14369 +31982 +31983 +31984 +31985 +31986 +15718 +18503 +31987 +24896 +5614 +23103 +683 +31988 +31989 +25053 +339 +31990 +31991 +3317 +31992 +31993 +31994 +16205 +31995 +31996 +31997 +345 +31998 +597 +31999 +32000 +9 +19091 +24907 +30877 +32001 +9688 +32002 +25659 +60 +32003 +1224 +6873 +32004 +9 +1823 +5865 +18503 +3546 +32005 +12987 +464 +32006 +32007 +9048 +4 +1615 +32008 +21947 +1090 +30877 +32009 +32010 +138 +32011 +1314 +32008 +1437 +6557 +32012 +32013 +32014 +2136 +32015 +22420 +6171 +22411 +32016 +32017 +32018 +32019 +29798 +13721 +21031 +21947 +1356 +32020 +21947 +32021 +32022 +29381 +32023 +7987 +6382 +317 +21947 +21947 +7977 +1300 +31293 +23111 +32024 +43 +21947 +13484 +590 +32025 +32026 +32027 +32028 +14604 +21504 +32029 +696 +5297 +6595 +14477 +32030 +32031 +32032 +25140 +21863 +25584 +18045 +24896 +32033 +15718 +32034 +3908 +12202 +19 +1112 +1920 +18695 +32035 +19 +43 +21947 +32036 +16571 +7619 +32037 +25584 +1382 +2243 +1444 +32038 +32039 +32040 +16413 +32041 +31603 +43 +331 +31293 +9 +9560 +720 +14369 +915 +32042 +32043 +32044 +32045 +32046 +32047 +791 +32048 +32049 +1332 +32050 +31860 +345 +178 +32051 +14369 +2700 +32052 +32053 +12400 +21698 +32054 +9410 +16 +2697 +25683 +32055 +590 +209 +32056 +1249 +2243 +17151 +16437 +19 +3626 +1226 +32057 +32058 +8297 +32059 +248 +27669 +32060 +13721 +2302 +32061 +32062 +66 +30877 +32063 +32064 +32065 +1442 +213 +19091 +78 +30877 +28317 +1320 +32066 +30224 +32067 +303 +32068 +590 +21947 +28549 +29836 +32069 +32070 +32071 +345 +32072 +2591 +24864 +9 +32073 +338 +22963 +3353 +28317 +32074 +284 +19 +6732 +12798 +1425 +2314 +26724 +6072 +21947 +18792 +337 +30877 +15718 +32075 +590 +745 +32076 +915 +32077 +32078 +32079 +28317 +28549 +14330 +1234 +32080 +32081 +1295 +5188 +32082 +5780 +213 +25683 +14870 +13765 +865 +9160 +38 +32083 +32084 +18112 +10482 +213 +31293 +590 +9 +4441 +4278 +30260 +43 +14000 +32085 +2919 +699 +32086 +713 +32087 +29109 +201 +32088 +32089 +970 +32090 +751 +29483 +32091 +21947 +5791 +30224 +5627 +29387 +303 +29483 +32092 +19 +32093 +43 +3044 +32094 +303 +32095 +15718 +32096 +19009 +32097 +232 +2941 +28549 +32098 +32099 +25683 +14 +15718 +32100 +32101 +32102 +286 +66 +13897 +32103 +32104 +32105 +23706 +5188 +736 +13296 +32106 +32107 +13781 +24864 +32108 +18234 +10500 +1907 +32109 +14369 +20871 +9 +32110 +284 +2577 +590 +201 +109 +590 +32111 +16 +23547 +284 +32112 +25683 +32113 +541 +32114 +25683 +20514 +32115 +32116 +32117 +1454 +32118 +2155 +564 +32119 +30877 +1103 +30877 +4606 +337 +30877 +17151 +536 +9 +26744 +30877 +32120 +27178 +8460 +32121 +32122 +29981 +1226 +138 +590 +7835 +32123 +29483 +21947 +32124 +22 +686 +15718 +21377 +4388 +1018 +31293 +32125 +3546 +32126 +32127 +32128 +20 +590 +28522 +32129 +6122 +32130 +32131 +13279 +5908 +32132 +16121 +233 +32133 +32134 +970 +1384 +138 +17809 +28753 +14660 +30224 +1100 +32135 +32136 +32137 +6110 +32138 +27669 +32139 +19 +3 +29381 +1090 +3546 +9 +6095 +4954 +32140 +32141 +77 +2043 +1838 +491 +2525 +590 +272 +20232 +26736 +13594 +12097 +32142 +3875 +16511 +32143 +5344 +2577 +18503 +756 +16437 +32144 +14330 +1920 +9705 +1444 +32145 +32146 +1637 +29956 +31168 +9 +15481 +32147 +29483 +13260 +32148 +9 +27849 +32149 +14330 +2415 +29483 +21947 +10583 +24725 +10262 +1047 +3994 +32150 +11452 +32151 +31168 +736 +25237 +536 +23519 +25943 +15594 +32152 +32153 +345 +5893 +12005 +970 +21947 +12387 +32154 +357 +14947 +6086 +32155 +18346 +9 +18200 +17151 +26040 +5627 +31364 +24303 +15382 +18307 +1082 +25237 +1090 +3480 +32156 +9 +32157 +32158 +22986 +32159 +32160 +29381 +13675 +671 +29032 +32161 +32162 +21947 +32163 +32164 +11808 +3546 +32165 +32166 +7835 +29200 +32167 +32168 +411 +349 +24303 +19 +29 +32169 +19 +20 +112 +29381 +28490 +590 +32170 +32171 +19 +15804 +25140 +1018 +32172 +32173 +15718 +10933 +4403 +32174 +29661 +32175 +32176 +19618 +18045 +29381 +32177 +32178 +29200 +32179 +3548 +970 +30224 +43 +25140 +1335 +17670 +32180 +32181 +677 +7137 +32182 +30515 +21947 +32183 +13648 +31293 +32184 +115 +22960 +3484 +24332 +32185 +3059 +32186 +514 +18265 +936 +9 +32187 +32188 +1502 +89 +32189 +32190 +32191 +32192 +32193 +15 +31493 +25140 +21947 +3635 +21947 +7855 +20 +14369 +2673 +15167 +3470 +29483 +590 +4055 +22963 +9548 +32194 +32195 +32196 +7855 +24339 +10348 +32197 +1112 +32198 +25683 +25 +32199 +32200 +32201 +30051 +15 +32202 +32203 +15 +576 +32204 +32205 +1508 +5085 +14369 +20315 +21112 +24725 +32206 +32207 +15718 +13721 +32208 +19218 +3546 +32209 +21947 +32210 +32211 +7053 +9402 +554 +19238 +32212 +13721 +32213 +274 +9 +32214 +32215 +32216 +14563 +21947 +10 +24864 +32217 +915 +17144 +28549 +15497 +1824 +32218 +6302 +32219 +16839 +5097 +27669 +6294 +32220 +19624 +32221 +1012 +8188 +1870 +32222 +29483 +28549 +18048 +286 +32223 +30051 +22922 +32224 +32225 +32226 +31053 +29381 +1051 +32227 +32228 +26060 +32229 +59 +32230 +13474 +25778 +15 +29483 +42 +377 +19974 +7746 +32231 +32232 +32233 +590 +5780 +32234 +25683 +3050 +43 +32235 +3543 +32236 +32237 +32238 +7835 +29483 +14604 +3759 +24303 +1332 +32239 +5204 +590 +32240 +23507 +32241 +32242 +32243 +2733 +3081 +15718 +32244 +30577 +32245 +32246 +14120 +32247 +32248 +24725 +32249 +15718 +14477 +23226 +10818 +32250 +29483 +32251 +32252 +4684 +43 +29483 +32253 +32254 +3421 +32255 +1356 +32256 +3119 +32257 +32258 +26361 +32259 +57 +32260 +27798 +3484 +590 +32261 +32262 +31293 +3553 +32263 +590 +32264 +25140 +32265 +21698 +11702 +323 +27669 +28317 +4196 +1727 +1743 +237 +1927 +30877 +26355 +5188 +32266 +30877 +357 +892 +32267 +32268 +10 +32269 +32270 +32271 +3543 +32272 +8036 +32273 +17151 +349 +32274 +32275 +32276 +8668 +665 +14 +155 +3030 +4055 +32277 +29984 +19 +3484 +15245 +32278 +31225 +15718 +1720 +32279 +28549 +1012 +32280 +12479 +19995 +32281 +32282 +323 +32283 +24303 +27918 +30877 +27669 +24907 +14330 +26952 +11286 +32284 +32285 +10 +32286 +32287 +14369 +27260 +4550 +24050 +21371 +99 +30877 +1992 +26119 +1458 +32288 +32289 +89 +249 +6741 +32290 +1562 +32291 +155 +32292 +32293 +43 +4242 +25943 +32294 +14369 +32295 +32296 +39 +971 +590 +1090 +3995 +30051 +32297 +32298 +32299 +1208 +10791 +32300 +3635 +15356 +27669 +32301 +2562 +32302 +32303 +265 +32304 +357 +3546 +32305 +32306 +32307 +9 +720 +5601 +27260 +1437 +29007 +32308 +32309 +31293 +1090 +32310 +5627 +32311 +10869 +9139 +9573 +32312 +25943 +3406 +1817 +30877 +14369 +9210 +32313 +32314 +32315 +32316 +4820 +25659 +16102 +32317 +5577 +32318 +28549 +19927 +590 +11027 +32319 +1612 +32320 +32321 +32322 +5764 +21947 +22793 +20315 +1531 +9900 +13457 +32323 +32324 +27669 +1090 +14363 +4245 +1044 +32325 +279 +11995 +176 +32326 +16763 +5908 +32327 +13566 +9 +379 +43 +6217 +32 +32328 +970 +14648 +32329 +8188 +25140 +32330 +349 +13129 +32331 +13405 +6086 +25829 +1502 +32332 +9 +448 +19618 +1716 +18695 +23603 +32333 +32334 +20185 +24896 +30877 +1790 +8668 +32335 +19 +14343 +14477 +67 +6620 +573 +32336 +32337 +9 +32338 +32339 +24864 +32275 +32340 +32341 +32342 +1352 +9396 +25683 +1090 +2064 +2832 +19 +9 +24864 +24253 +11762 +249 +1011 +89 +20599 +32343 +28549 +25140 +28490 +31293 +286 +590 +3546 +43 +28317 +31293 +89 +323 +32344 +43 +15 +32345 +32346 +15914 +29483 +19618 +32347 +32348 +32349 +25237 +32350 +32351 +6116 +18982 +1208 +32352 +28549 +23103 +2806 +25683 +17082 +32353 +27669 +18914 +32354 +29483 +2243 +32355 +32356 +32357 +32358 +2 +4230 +28441 +5780 +272 +210 +2410 +32359 +32360 +32361 +27669 +4765 +30224 +31691 +43 +15 +32362 +32363 +32364 +590 +13848 +26047 +32365 +3546 +32366 +25237 +32367 +15481 +32368 +26060 +32369 +13150 +32370 +7208 +1047 +32371 +1356 +4055 +32372 +32373 +32374 +30551 +3546 +19 +16437 +32375 +6441 +1710 +2035 +720 +4436 +30388 +32376 +32377 +29956 +27669 +1503 +23103 +32378 +32379 +222 +25659 +32380 +24303 +15398 +648 +3604 +671 +29047 +32381 +30580 +6072 +3546 +14330 +32382 +33 +18695 +819 +4651 +19 +43 +32383 +32384 +43 +30877 +29483 +32385 +29483 +32386 +32387 +1090 +1245 +25624 +21090 +1817 +32388 +32389 +14604 +27719 +927 +32390 +15718 +30877 +32391 +32392 +32393 +32394 +19 +32395 +32396 +14 +1559 +27669 +32397 +29032 +8905 +9 +4055 +32398 +736 +32399 +32400 +2427 +31637 +19 +27669 +32401 +32402 +32403 +32404 +32405 +25683 +2029 +32406 +31293 +32407 +4055 +4055 +43 +416 +24725 +201 +32408 +344 +24303 +14001 +3376 +32409 +103 +32410 +9 +32411 +176 +7014 +43 +32412 +32413 +5773 +32414 +14647 +104 +10727 +43 +21689 +32415 +29483 +17402 +21947 +32416 +32417 +9 +5188 +43 +32418 +31098 +31637 +25683 +3480 +24403 +2093 +28549 +32419 +590 +9 +27669 +26496 +32420 +3546 +32421 +22963 +32422 +32423 +32424 +32425 +32426 +24864 +4028 +286 +18429 +3994 +14369 +14330 +32427 +43 +18045 +3546 +31668 +21576 +11056 +26744 +3857 +4682 +31434 +849 +32428 +2009 +27069 +4055 +26496 +21947 +15765 +31637 +25683 +533 +32429 +31637 +32430 +24154 +586 +32431 +5326 +29381 +15 +1198 +32432 +28000 +32433 +1812 +32434 +32435 +6122 +30877 +1688 +32436 +25140 +13430 +32437 +32438 +27669 +32439 +32440 +7137 +1090 +345 +32441 +32442 +2944 +32443 +138 +32444 +15 +32445 +228 +32446 +28901 +23103 +13721 +3546 +32447 +28317 +22236 +32448 +14424 +32449 +32450 +32451 +32452 +2 +11762 +15342 +3553 +32453 +24303 +12053 +32454 +3994 +2259 +92 +9 +32455 +29799 +27069 +9497 +21947 +27669 +32456 +5188 +32 +32457 +13317 +25237 +590 +31995 +4055 +4547 +4023 +7855 +14477 +14 +1310 +9 +32458 +32459 +323 +12987 +6341 +30877 +25316 +1425 +32460 +23103 +13829 +910 +32461 +32462 +32463 +10280 +21776 +32464 +15018 +7253 +25683 +43 +32465 +3239 +32466 +32467 +1961 +23103 +32468 +32469 +32470 +18695 +379 +32471 +32472 +32473 +6968 +25237 +6621 +32474 +272 +30877 +32475 +11930 +970 +12340 +1596 +1812 +26496 +32476 +13943 +29483 +8849 +32477 +23216 +32478 +32479 +7694 +671 +9 +4765 +14603 +1316 +1615 +31293 +25237 +32480 +32481 +533 +2944 +8465 +32482 +4387 +32483 +30224 +32484 +9 +12916 +32485 +32486 +2035 +590 +32487 +26361 +10 +32488 +32489 +4242 +32490 +201 +32491 +30877 +1524 +590 +32492 +24919 +32493 +178 +8188 +21947 +25683 +19 +18364 +32494 +16437 +32495 +32496 +590 +32497 +32498 +53 +26361 +3546 +29381 +32499 +14909 +9 +358 +28317 +32500 +32501 +3666 +30877 +29204 +32360 +30877 +24864 +32502 +43 +7900 +2764 +12304 +4055 +32503 +21947 +30309 +32504 +3553 +32505 +590 +32506 +3559 +32507 +28665 +32 +8721 +10601 +14369 +21947 +3416 +28301 +18568 +9 +32508 +1961 +32509 +9259 +32510 +2692 +32511 +32512 +519 +7855 +595 +32513 +17082 +9 +4441 +155 +14330 +3546 +32514 +9705 +10 +2101 +25237 +7835 +284 +21947 +2550 +19618 +32515 +32516 +43 +3067 +11482 +32517 +25140 +1559 +32518 +23688 +1316 +32519 +1011 +2577 +1517 +20 +32520 +32521 +3119 +20952 +32522 +8465 +32523 +32524 +29200 +370 +1562 +32525 +1382 +30877 +32526 +5393 +9 +14001 +397 +9 +32527 +3546 +32528 +31293 +32529 +25683 +2769 +24864 +491 +31293 +3242 +32530 +30516 +32531 +583 +9 +13721 +5022 +14330 +14369 +303 +286 +29503 +213 +25943 +25683 +12304 +32532 +32533 +284 +32534 +32535 +32536 +971 +32537 +6595 +11273 +284 +15758 +213 +32538 +1244 +32539 +5806 +32540 +671 +4055 +29483 +248 +43 +14369 +284 +27669 +554 +32541 +1090 +18763 +1090 +25683 +9 +29822 +14330 +13317 +284 +32542 +1539 +32 +349 +32543 +32544 +2457 +28644 +19347 +3544 +32545 +31293 +21957 +14477 +17151 +14330 +213 +32546 +32547 +32449 +3601 +32548 +11762 +96 +3381 +32549 +6496 +19655 +12916 +533 +2410 +5125 +19 +1090 +14855 +23103 +3553 +32550 +32551 +27378 +286 +337 +17767 +32552 +248 +32553 +32554 +32555 +57 +32556 +1529 +32557 +155 +32558 +26020 +14369 +43 +25140 +32559 +30877 +32560 +104 +32561 +188 +32562 +19618 +1112 +30877 +28317 +30051 +7053 +9 +14 +32563 +29434 +14887 +337 +27514 +25584 +21031 +26744 +32564 +1224 +32565 +14369 +32566 +32567 +1168 +5780 +43 +32568 +32569 +15718 +27669 +32570 +32571 +9 +1090 +19 +19646 +21536 +32572 +12907 +21089 +3994 +352 +29381 +15240 +25584 +21947 +32573 +29679 +19655 +32574 +536 +213 +8540 +23103 +1415 +32575 +32576 +4055 +1090 +19478 +14856 +4055 +32577 +6571 +27669 +32 +30051 +337 +32578 +32579 +32580 +25237 +89 +32581 +5085 +15824 +213 +2649 +32582 +32583 +14 +32584 +14369 +303 +3330 +32585 +19655 +17635 +32586 +4055 +12 +12907 +77 +10748 +590 +30877 +3908 +14 +21947 +365 +141 +286 +24303 +31293 +32587 +9863 +32588 +1637 +19335 +32589 +178 +32590 +32591 +32592 +32593 +36 +25683 +19 +6171 +6656 +30877 +30224 +32594 +32595 +22989 +20666 +32596 +99 +738 +9 +5299 +32 +19 +21947 +30877 +31293 +21947 +32597 +32598 +14369 +32599 +2733 +32600 +32601 +2577 +27427 +2787 +20339 +18684 +14947 +1517 +32602 +4055 +10 +32603 +4463 +176 +32604 +32605 +43 +9 +27069 +25683 +1301 +15235 +43 +24303 +30877 +32606 +639 +1051 +971 +9497 +1870 +25237 +3484 +9 +32607 +32608 +32609 +29628 +1013 +32610 +13528 +9445 +32611 +5650 +25868 +32612 +3959 +17151 +2035 +32613 +32614 +9 +2694 +32615 +24628 +27096 +32616 +21835 +14477 +32617 +12095 +29381 +1100 +22 +30854 +6095 +32618 +13956 +3128 +42 +15331 +32619 +14947 +13875 +31293 +3610 +32620 +10482 +32621 +222 +665 +32622 +28317 +3978 +22 +9 +31733 +32623 +24423 +32624 +484 +8188 +32625 +3976 +32626 +32627 +1364 +15897 +32628 +373 +32629 +32630 +21947 +4944 +1870 +26496 +32631 +32632 +31098 +30877 +14369 +29483 +17151 +13961 +17670 +849 +32 +8015 +11873 +28494 +3994 +1524 +24862 +829 +32633 +32634 +32635 +32636 +248 +15718 +694 +26787 +32637 +32638 +15845 +32639 +32640 +32641 +19618 +32642 +31637 +2694 +5662 +32643 +15718 +2314 +13721 +286 +11341 +22986 +24303 +415 +2733 +25683 +23037 +32644 +25 +554 +31637 +32645 +32646 +43 +32647 +1524 +14369 +32648 +32649 +248 +32650 +32651 +32652 +14066 +21947 +14869 +616 +32653 +25140 +8150 +29483 +15718 +32654 +32655 +24743 +32656 +32657 +20600 +32658 +29275 +32659 +1066 +22621 +32660 +704 +32661 +32662 +22455 +30170 +5614 +15510 +32663 +30224 +9894 +32664 +32665 +3743 +590 +32666 +284 +32667 +32668 +32669 +13012 +25683 +32670 +9254 +27069 +3553 +1090 +3743 +9784 +25683 +24303 +32671 +32672 +32673 +32674 +554 +3746 +1090 +9 +32675 +32676 +32677 +32261 +21947 +590 +32678 +19489 +32679 +250 +1090 +29200 +134 +1082 +971 +32680 +5212 +32681 +19 +25683 +19618 +32682 +32683 +29483 +32684 +9 +30458 +2132 +736 +26361 +32685 +4278 +19 +193 +32686 +43 +14363 +16656 +21689 +32687 +32688 +14330 +11762 +21031 +32689 +32690 +2764 +2035 +32691 +32692 +14485 +971 +53 +32693 +32694 +11907 +14330 +3546 +2136 +32695 +32696 +31234 +416 +32697 +14660 +10775 +7960 +32698 +17064 +32699 +6877 +17951 +32700 +822 +10880 +32701 +5801 +32702 +32703 +5188 +32704 +32705 +20952 +5204 +26328 +32706 +19478 +2668 +27669 +32707 +32708 +20551 +28845 +590 +32709 +24154 +1131 +10789 +284 +25960 +29204 +21947 +32710 +24952 +21947 +196 +1808 +4441 +15537 +46 +15718 +32711 +32712 +379 +32713 +32714 +15493 +21753 +32715 +43 +19 +1153 +104 +32716 +32717 +32718 +590 +32719 +22901 +373 +29032 +32720 +32721 +32722 +32723 +15718 +2865 +25364 +30877 +31293 +21947 +1513 +32724 +7855 +32725 +15718 +32726 +17058 +24303 +28441 +32727 +29986 +32728 +32729 +590 +32730 +6190 +303 +30877 +9 +32731 +32732 +15370 +16640 +21947 +32733 +32734 +23103 +32563 +9 +15 +14000 +303 +32735 +32736 +99 +29483 +16571 +32737 +28961 +12401 +29483 +32738 +25991 +24464 +17897 +20617 +32739 +2 +16102 +23103 +32740 +201 +32741 +20512 +29483 +21947 +21947 +32742 +32743 +22922 +32744 +3546 +29483 +19 +32745 +12236 +32746 +259 +26496 +29483 +32747 +31293 +32748 +5438 +32749 +590 +32750 +9573 +155 +15718 +32751 +29483 +1090 +14330 +30051 +22922 +5188 +6161 +15 +29200 +13721 +10642 +32752 +36 +32753 +213 +19797 +31293 +317 +989 +31042 +14369 +1710 +1765 +104 +32754 +21947 +9928 +17136 +44 +31098 +32755 +32756 +28036 +30650 +32757 +1109 +32758 +7291 +32759 +2318 +1316 +32760 +17151 +20 +32761 +14814 +32762 +32763 +398 +30224 +32764 +6086 +32765 +32766 +32767 +24435 +4195 +14369 +14771 +303 +1090 +27669 +29483 +32768 +9 +31098 +20942 +4055 +21947 +213 +1090 +2019 +19618 +43 +1051 +573 +5085 +32769 +5067 +541 +32770 +303 +411 +43 +30877 +32771 +32772 +28219 +1300 +32773 +26496 +32774 +31293 +32775 +43 +24615 +32776 +3546 +32777 +213 +1774 +971 +3 +213 +303 +19 +24864 +648 +30853 +971 +616 +30551 +32778 +29007 +32779 +32780 +20645 +1382 +26626 +19618 +178 +9 +24864 +15718 +28845 +8210 +32781 +20952 +1234 +32782 +2132 +484 +12871 +249 +3546 +5925 +32783 +32784 +2836 +32785 +24303 +31406 +32786 +13721 +377 +32787 +284 +14477 +32788 +32789 +32790 +7276 +5827 +32791 +533 +5694 +2239 +32792 +32793 +20276 +25140 +2260 +19 +14369 +872 +14477 +358 +22 +32794 +32795 +32796 +32797 +43 +32798 +43 +14 +209 +32799 +32800 +32801 +14001 +28317 +43 +66 +613 +21689 +21947 +8849 +15536 +31293 +32802 +42 +32803 +317 +32804 +32805 +32806 +3546 +13721 +32807 +23913 +20984 +32808 +32809 +4764 +21947 +32810 +14871 +32811 +32812 +1617 +1012 +30458 +10470 +32813 +32814 +14477 +23103 +30877 +5780 +32815 +32816 +25943 +29483 +8386 +29483 +32817 +2406 +32818 +31896 +32819 +32820 +3757 +15718 +11811 +32821 +270 +32822 +14477 +8188 +11762 +795 +29483 +17151 +25943 +32823 +1021 +1090 +13375 +1224 +19 +2832 +32523 +1217 +32824 +3601 +32825 +14369 +18969 +14 +29840 +21947 +14025 +19 +32826 +19 +24864 +32827 +32828 +14369 +32829 +32830 +19618 +24807 +32831 +29651 +9 +32832 +46 +590 +19618 +1090 +32833 +2117 +43 +18469 +32834 +32835 +3353 +32836 +32837 +32838 +5169 +349 +15 +155 +4747 +32839 +32840 +32841 +2560 +32842 +32843 +566 +32844 +57 +27767 +32845 +32846 +20719 +14369 +12987 +32847 +13652 +2243 +19 +590 +32848 +43 +12579 +32849 +10245 +32850 +196 +15810 +1382 +3546 +32851 +32852 +9 +155 +19 +32853 +32854 +32855 +32856 +573 +104 +2459 +358 +104 +32857 +29170 +32858 +284 +190 +566 +6994 +6499 +32859 +32860 +21947 +19 +32861 +3251 +2314 +25683 +25943 +9160 +27798 +32862 +57 +9 +872 +13897 +188 +24864 +8668 +17083 +1090 +491 +24864 +32863 +7119 +2427 +32864 +32636 +1018 +32865 +32866 +32867 +2721 +1853 +590 +32868 +14869 +25237 +32869 +32870 +14330 +209 +32871 +32872 +14477 +31293 +32873 +701 +19478 +32874 +32875 +2 +882 +4055 +24864 +29200 +4055 +30877 +32876 +18503 +21031 +32877 +590 +13963 +28893 +32878 +42 +720 +32879 +32880 +5601 +26992 +32881 +28317 +32882 +6877 +16437 +32883 +23603 +1655 +1437 +32884 +32885 +1091 +1520 +32886 +32887 +4775 +10111 +32888 +30224 +9 +32889 +23103 +32890 +29204 +25943 +27619 +279 +21947 +10450 +32891 +25140 +22963 +16584 +397 +12987 +32892 +32893 +20 +694 +2804 +32894 +32895 +43 +32896 +19 +1318 +31293 +17716 +14330 +32897 +32 +31293 +1559 +25140 +19618 +32898 +9 +3491 +25530 +32899 +32900 +31293 +3599 +32901 +2577 +43 +3546 +32902 +32903 +590 +14369 +448 +24725 +32904 +23785 +32905 +32906 +13721 +4055 +11321 +32907 +29381 +354 +12013 +24725 +43 +32908 +14369 +24961 +32909 +32910 +32911 +32912 +19618 +32913 +436 +6528 +3484 +20617 +2832 +27669 +14477 +32914 +536 +683 +13721 +178 +590 +720 +32915 +32916 +32917 +32918 +32919 +89 +32920 +15718 +14330 +21689 +7014 +1823 +30051 +29381 +26484 +89 +32921 +1604 +32922 +1262 +20096 +1817 +21947 +32923 +14 +1698 +32924 +32925 +1838 +14330 +9 +19582 +32926 +9713 +573 +1615 +595 +13129 +32927 +7137 +32 +13721 +936 +23103 +3546 +25316 +32928 +32929 +887 +32930 +29 +27748 +24725 +27599 +9 +19618 +43 +32931 +32642 +32932 +7835 +32933 +32934 +32935 +694 +2132 +16437 +6161 +32936 +3317 +32937 +1082 +32938 +15356 +19858 +25140 +32939 +32940 +22473 +10 +32941 +16527 +3546 +590 +32942 +188 +15975 +491 +32943 +26161 +27708 +1090 +24775 +32944 +14 +32945 +32946 +6110 +32386 +3231 +19318 +21689 +32449 +32947 +30224 +32948 +188 +32949 +32950 +9125 +32951 +345 +32952 +32953 +32954 +32955 +237 +31293 +19 +32956 +19618 +2971 +15718 +32957 +17151 +3599 +5659 +7835 +32958 +43 +32959 +1154 +14477 +4856 +32960 +7835 +30877 +28239 +11191 +14369 +32961 +31293 +11568 +32962 +872 +21835 +32963 +17830 +27096 +30215 +32964 +32965 +32966 +32967 +32 +22307 +4547 +20941 +24303 +32968 +9 +10320 +7292 +8787 +3553 +827 +9 +21947 +3026 +32969 +32970 +29979 +32971 +12462 +32972 +32973 +9 +4550 +6764 +28549 +32974 +57 +2260 +24303 +32975 +32976 +2832 +15536 +32977 +20462 +3 +29381 +2953 +25237 +564 +32978 +32979 +7835 +32980 +31293 +27069 +1046 +1517 +436 +4487 +7835 +32261 +22552 +323 +32981 +1011 +4055 +598 +411 +1234 +32982 +788 +32983 +32984 +14147 +12063 +3553 +745 +32985 +32986 +1244 +32987 +274 +32988 +21947 +19852 +4550 +4055 +1051 +25584 +14330 +32989 +15535 +32990 +32991 +19 +14343 +286 +11321 +10792 +24045 +6939 +590 +32992 +32993 +21045 +1688 +1749 +32994 +23103 +14 +9 +971 +32995 +32996 +31168 +32997 +32998 +349 +43 +665 +32999 +1765 +33000 +25237 +31293 +1765 +2694 +272 +33001 +33002 +33003 +30835 +6612 +33004 +21165 +790 +9 +4918 +33005 +33006 +12956 +27669 +671 +1300 +827 +33007 +970 +33008 +33009 +10 +1090 +23103 +590 +33010 +3546 +33011 +9 +33012 +33013 +33014 +57 +16121 +153 +32 +24725 +33015 +270 +33016 +7053 +15 +25710 +33017 +33018 +33019 +33020 +9 +17412 +43 +33021 +33022 +24303 +9 +21834 +33023 +16391 +11762 +31098 +7137 +33024 +33025 +14369 +3546 +24698 +57 +33026 +30877 +33027 +33028 +1961 +4606 +19655 +1470 +2324 +13721 +30224 +970 +1090 +16437 +33029 +4055 +33030 +26158 +5627 +14 +5041 +33031 +104 +21689 +33032 +3272 +19 +18982 +7345 +590 +14369 +2 +24045 +3959 +33033 +18684 +24 +33034 +270 +21947 +33035 +1710 +1688 +30224 +33036 +349 +26152 +33037 +19618 +20842 +31293 +33038 +24523 +3353 +155 +590 +25943 +24303 +1716 +209 +18107 +29434 +1310 +14369 +17911 +33039 +23103 +3122 +13517 +590 +33040 +33041 +33042 +33043 +7835 +21947 +33044 +33045 +33046 +33047 +13265 +1377 +33048 +29483 +9 +18695 +590 +6423 +15718 +33049 +33050 +33051 +27818 +29483 +25683 +33052 +349 +33053 +7835 +21947 +14079 +33054 +671 +17119 +33055 +8137 +11 +2004 +16102 +33056 +25382 +14477 +60 +33057 +33058 +33059 +33060 +317 +2132 +590 +13977 +14477 +24725 +33061 +970 +9 +720 +24862 +33062 +3546 +16640 +33063 +33064 +317 +21947 +33065 +694 +4441 +1364 +33066 +19 +21577 +9 +33067 +33068 +19618 +23103 +6275 +31293 +1090 +33069 +7855 +33070 +33071 +153 +9688 +357 +17151 +33072 +23454 +770 +1364 +1674 +19618 +33073 +24864 +33074 +33075 +33076 +3407 +27719 +19 +3 +33077 +12055 +21947 +33078 +5877 +22 +4884 +33079 +3601 +21947 +33080 +30051 +33081 +590 +21245 +33082 +33083 +590 +11341 +33084 +29381 +33085 +33086 +28036 +7053 +1051 +25943 +23103 +33087 +17151 +25316 +33088 +7479 +12005 +2040 +22420 +6095 +30139 +33089 +30224 +1234 +43 +1090 +15 +33090 +1920 +33091 +20886 +270 +33092 +24144 +720 +1100 +14000 +3844 +11341 +164 +25237 +2132 +15517 +27816 +27719 +33093 +33094 +19655 +29381 +33095 +19655 +1559 +4041 +33096 +9688 +686 +249 +14369 +33097 +249 +15 +14588 +20 +32636 +15718 +9 +33098 +19318 +43 +15 +9649 +21689 +33099 +4367 +6122 +21947 +21947 +33100 +29720 +30877 +66 +33101 +5904 +16466 +29483 +43 +12005 +33102 +1090 +33103 +5188 +14666 +18695 +11762 +286 +33104 +43 +30877 +33105 +25140 +14330 +33106 +590 +14553 +33107 +3353 +1154 +33108 +29381 +43 +30877 +33109 +861 +711 +20 +345 +14 +5188 +23103 +1013 +33110 +849 +21874 +14369 +33111 +21968 +33112 +8961 +25140 +13897 +25683 +28441 +19 +24725 +4055 +33113 +24725 +13777 +29628 +155 +19 +13150 +7369 +377 +20383 +14001 +33114 +33115 +590 +8038 +3546 +33116 +590 +33117 +33118 +14942 +20507 +32 +1090 +24303 +33119 +8465 +33120 +2919 +32575 +15718 +33121 +31728 +15541 +33122 +33123 +33124 +1208 +703 +33125 +25140 +33126 +32386 +33127 +15 +354 +33128 +17215 +27954 +1090 +33129 +15 +2006 +164 +19 +33130 +25237 +43 +10990 +6054 +33131 +514 +270 +12281 +33132 +9 +3337 +19655 +43 +33133 +9 +30877 +6627 +21835 +12430 +26158 +11469 +29483 +21 +33134 +342 +22065 +1001 +378 +14477 +31293 +33135 +19 +19 +31225 +28745 +33136 +5662 +27276 +2733 +33137 +17139 +970 +33138 +33139 +33140 +12185 +33141 +14216 +23103 +2733 +1524 +1208 +15718 +5085 +7053 +33142 +14330 +14369 +14477 +33143 +33144 +32642 +14 +1316 +19624 +15718 +28317 +10531 +14369 +3546 +33145 +123 +2035 +4055 +27719 +15 +76 +1937 +1013 +22573 +15318 +33146 +2410 +24449 +33147 +9 +33148 +13045 +33149 +16437 +33150 +32 +25316 +33151 +19091 +25 +13528 +1083 +33152 +33153 +2694 +33154 +21003 +33155 +33156 +33157 +33158 +33159 +33160 +60 +33161 +1251 +33162 +30224 +3546 +33163 +13566 +33164 +4055 +33165 +14330 +2243 +24045 +17151 +3353 +24303 +33166 +1045 +12684 +33167 +33168 +1870 +25237 +590 +155 +33169 +970 +99 +33170 +15 +32919 +1181 +22703 +5080 +33171 +57 +4055 +31098 +179 +32410 +6914 +11321 +14330 +25382 +989 +7381 +33172 +33173 +33174 +20 +3994 +12120 +27669 +32787 +33175 +33176 +10364 +32254 +30710 +19618 +33177 +43 +33178 +9 +18695 +32813 +2832 +519 +20 +14477 +33179 +9 +17790 +33180 +586 +33181 +33182 +25140 +9245 +29483 +33183 +33184 +31293 +33185 +25237 +33186 +33187 +33188 +14 +590 +15718 +590 +33189 +30877 +33190 +9 +29204 +1181 +3981 +379 +2356 +13307 +20510 +33191 +270 +491 +11283 +4701 +33192 +352 +27669 +20 +3601 +165 +597 +33193 +6328 +33194 +33195 +1612 +33196 +33197 +38 +16437 +33198 +33199 +519 +25683 +31293 +28317 +31978 +33200 +12120 +28441 +15718 +26127 +28482 +19918 +1224 +491 +165 +33201 +33202 +14330 +4979 +237 +43 +23394 +33203 +21947 +9 +30209 +1332 +33204 +33205 +18798 +27874 +286 +33206 +13807 +31719 +17631 +9 +14604 +43 +9845 +1517 +22669 +33207 +8256 +28036 +25281 +590 +4055 +60 +16272 +30794 +16152 +15419 +57 +24303 +33208 +1090 +14330 +33209 +33210 +19618 +33211 +9 +1683 +5316 +21947 +16437 +33212 +33213 +57 +548 +33214 +25904 +4855 +33215 +1157 +33216 +15758 +345 +1224 +33217 +33218 +6275 +33219 +19 +30877 +1236 +28317 +4274 +33220 +18372 +33221 +21689 +533 +2919 +17687 +24303 +33222 +33223 +99 +21947 +9 +14369 +28242 +33224 +33225 +32919 +9 +24864 +3359 +33226 +9 +28295 +13857 +33227 +33228 +33229 +417 +25140 +14477 +33230 +554 +9144 +4055 +12325 +99 +33231 +1047 +6877 +33232 +24864 +21947 +33233 +9 +2161 +568 +33234 +970 +647 +26040 +22918 +11683 +8668 +33235 +1961 +43 +43 +21031 +11762 +3330 +33236 +33237 +18695 +4544 +21947 +8668 +33238 +33239 +15 +23103 +31042 +25943 +33240 +33241 +971 +17151 +8407 +33242 +25237 +23226 +26496 +33243 +33244 +32 +33245 +14369 +20514 +1382 +21187 +29483 +33246 +201 +1356 +6039 +873 +228 +31098 +15511 +4185 +2561 +33247 +21507 +33248 +33249 +33250 +1066 +33251 +33252 +33253 +349 +3030 +16437 +33254 +33255 +648 +33256 +425 +19 +12 +27798 +827 +33257 +8171 +11571 +66 +8297 +33258 +8249 +33259 +1765 +21947 +590 +33260 +9 +14369 +25943 +9 +33261 +57 +12005 +665 +43 +19 +28549 +20258 +22752 +33262 +30877 +4550 +3491 +33263 +33264 +15718 +29163 +33265 +5085 +14947 +39 +2117 +17848 +29 +4006 +33266 +349 +28317 +399 +683 +970 +13754 +4055 +2804 +33267 +32 +286 +33268 +33269 +8864 +15718 +33270 +162 +33271 +590 +19478 +33272 +21627 +33273 +21947 +4414 +3546 +33274 +8967 +33275 +17730 +29381 +249 +5904 +14477 +1234 +29956 +25140 +33276 +33277 +683 +15961 +33278 +379 +33279 +6294 +33280 +17151 +33281 +33282 +33283 +18695 +19730 +43 +33284 +29381 +19618 +1612 +32 +1688 +1425 +31520 +3994 +4055 +33285 +9396 +33286 +33287 +13566 +33288 +43 +17670 +43 +1089 +19 +3055 +33289 +9 +1300 +3075 +5792 +4634 +3973 +19 +8297 +558 +36 +25237 +1529 +33290 +115 +14947 +33291 +25237 +17602 +28317 +1222 +19153 +33292 +7532 +1100 +24864 +6294 +7014 +23770 +1559 +23742 +19 +1561 +671 +1612 +43 +2733 +33293 +12203 +33294 +19618 +25316 +28036 +17749 +519 +19 +33295 +141 +14477 +33120 +24725 +14330 +33296 +33297 +33298 +30877 +31293 +33299 +17911 +33300 +1870 +33301 +33302 +33303 +354 +33304 +1090 +10356 +19655 +33305 +6161 +33306 +22023 +4805 +33307 +39 +1454 +3546 +21689 +33308 +19 +33309 +30589 +21689 +19318 +2764 +33310 +3842 +33311 +33312 +33313 +33314 +33315 +33316 +13448 +9 +2009 +33317 +809 +33318 +2804 +9 +7053 +33319 +1090 +33155 +3908 +33320 +33321 +112 +33322 +11111 +30224 +33323 +541 +30551 +1157 +22884 +33324 +3546 +6505 +1090 +6035 +33325 +286 +33326 +33327 +1520 +33328 +27669 +873 +16066 +19344 +1107 +17698 +33329 +33330 +28317 +1021 +33331 +6258 +14477 +19 +33332 +586 +16371 +478 +33333 +27669 +33334 +24969 +15683 +53 +14369 +24303 +9 +33335 +2459 +33336 +33337 +1154 +14597 +9 +53 +4411 +19491 +33338 +43 +1716 +33339 +33340 +286 +30224 +27669 +33341 +33342 +33343 +17821 +10350 +33344 +33345 +2649 +2061 +33346 +29513 +9 +683 +33347 +33348 +33349 +33350 +33351 +17151 +9 +590 +33352 +33353 +25316 +872 +25683 +286 +590 +43 +21947 +14330 +33354 +33355 +24303 +33356 +26066 +30877 +25736 +6072 +14131 +3353 +26361 +9 +23103 +1224 +3553 +14378 +33357 +2600 +33358 +1018 +31293 +33359 +1384 +15720 +564 +33360 +31098 +147 +28036 +29381 +9 +20616 +11762 +33361 +1300 +6285 +33362 +30466 +33363 +13863 +28755 +1090 +33364 +33365 +14369 +4055 +33366 +18989 +25904 +345 +33367 +29483 +30224 +33368 +32 +3546 +541 +4414 +4961 +683 +21186 +32953 +33369 +4028 +22986 +33370 +33371 +33372 +14574 +21126 +111 +966 +14604 +2449 +9 +1364 +33373 +33374 +20514 +14001 +1738 +33375 +26142 +30224 +349 +33376 +33377 +33378 +1571 +2733 +33379 +2836 +15985 +12260 +33380 +14369 +30051 +33381 +11808 +24725 +17406 +33382 +19618 +33383 +9 +25683 +590 +213 +33384 +33385 +9963 +19 +33386 +28474 +57 +15740 +33387 +33388 +9144 +3416 +33389 +33390 +30051 +21947 +590 +14017 +1090 +2550 +19095 +6364 +248 +33391 +484 +720 +15 +33392 +33393 +188 +941 +33394 +33395 +33396 +33397 +3239 +33398 +7600 +33399 +33400 +4432 +28746 +33401 +5022 +303 +4028 +1684 +1415 +14477 +25316 +19 +5582 +32421 +165 +33402 +1562 +372 +12315 +33403 +33404 +242 +19545 +17217 +19 +2356 +1961 +19 +15718 +248 +358 +33405 +33406 +317 +19 +701 +9064 +970 +337 +33407 +33408 +16579 +14102 +2517 +33409 +209 +1437 +3546 +22099 +33410 +25316 +17277 +33411 +25237 +13721 +17872 +1765 +3067 +33412 +33413 +15654 +33414 +27178 +21947 +303 +43 +33415 +1090 +30224 +33416 +12 +15718 +33417 +32 +33418 +33419 +1090 +1217 +20374 +33420 +22114 +248 +970 +33421 +31168 +665 +21689 +46 +197 +3546 +3546 +5119 +33422 +33423 +16149 +27669 +15541 +533 +28036 +33424 +27748 +30747 +22922 +21426 +29716 +33120 +4824 +22063 +1021 +9 +213 +21947 +19 +14603 +33425 +33426 +29483 +197 +9 +155 +33427 +30949 +33428 +29483 +5780 +33429 +25237 +5634 +33430 +19 +33431 +33432 +2132 +33433 +33434 +33435 +9 +538 +648 +33436 +323 +30877 +33437 +2415 +3546 +1090 +33438 +33439 +284 +2132 +2197 +33440 +30650 +33441 +33442 +3546 +33368 +969 +33443 +33444 +29597 +29172 +20952 +2325 +12228 +33445 +6086 +43 +30877 +33446 +21947 +10617 +369 +2029 +15384 +33447 +12479 +33448 +33449 +33450 +33451 +29483 +2561 +4055 +2604 +3655 +12603 +1112 +19 +24896 +303 +23351 +317 +7053 +16515 +7786 +272 +446 +43 +33452 +33453 +15718 +5088 +590 +2577 +2668 +27719 +27669 +33454 +248 +33455 +18869 +33456 +303 +4526 +13524 +9 +1090 +29859 +33457 +33458 +20 +213 +33459 +209 +3407 +1817 +33460 +4028 +971 +33461 +892 +29260 +43 +24896 +25683 +14604 +15989 +29066 +4055 +16139 +24873 +1090 +5625 +15286 +140 +665 +19 +14369 +33462 +33463 +3994 +29483 +33464 +33465 +25620 +6614 +33466 +12203 +13964 +33467 +33468 +29381 +33469 +1560 +33470 +33471 +33472 +6439 +1716 +33473 +26361 +265 +29209 +13710 +28036 +33474 +31225 +249 +33475 +1063 +33476 +33477 +33478 +5923 +33479 +33480 +209 +8668 +284 +33481 +33482 +33483 +33484 +2132 +15778 +23103 +31293 +33485 +9 +33486 +248 +33487 +554 +4055 +33488 +5188 +7014 +19 +2260 +33489 +15824 +2572 +4717 +9 +6950 +18683 +13360 +21365 +5780 +33490 +491 +6344 +4 +2410 +33491 +33492 +27669 +33493 +29981 +33494 +33495 +12013 +1444 +33496 +33497 +33498 +43 +21947 +1656 +590 +33499 +57 +33500 +33501 +12560 +25612 +1090 +33502 +14369 +1559 +33503 +29200 +33504 +1817 +33505 +323 +25316 +1817 +24982 +33506 +14 +3188 +342 +29381 +590 +21630 +33225 +1090 +2733 +519 +33507 +2459 +33508 +2 +14385 +4 +9 +165 +33509 +33510 +2457 +1332 +349 +33511 +4463 +16905 +590 +19618 +14947 +33512 +33513 +24988 +514 +720 +31098 +33514 +33515 +9 +9410 +31293 +33516 +33517 +2289 +33518 +2132 +1066 +43 +5464 +28402 +6505 +2577 +19 +1429 +21947 +15718 +3546 +9 +26104 +33519 +33520 +15718 +33521 +2121 +12987 +33522 +595 +5188 +33523 +18418 +33524 +32636 +17151 +21947 +33525 +17112 +13721 +9 +33526 +533 +7053 +33527 +31293 +590 +29483 +1513 +25351 +33528 +31098 +2577 +33529 +249 +33530 +5130 +248 +33531 +30224 +33532 +1812 +33533 +33534 +33535 +14947 +5340 +15540 +15 +33536 +33537 +33538 +13721 +9 +4055 +33539 +317 +33540 +24303 +33541 +33542 +33543 +887 +33544 +683 +28036 +345 +248 +10727 +13484 +31873 +33545 +33546 +33547 +27069 +3546 +33548 +1090 +15718 +14825 +33549 +19618 +14957 +31293 +9 +25683 +222 +33550 +1090 +33551 +491 +33552 +33553 +33554 +19 +647 +6595 +33555 +31293 +15 +9433 +265 +33556 +197 +33557 +33558 +33559 +3553 +2318 +1578 +2537 +590 +15718 +25316 +29483 +30589 +33560 +16981 +43 +2 +42 +33561 +28248 +303 +17911 +33562 +33563 +4471 +303 +33564 +21708 +7987 +33565 +33566 +13721 +32 +4990 +15718 +213 +33567 +33568 +14415 +213 +668 +33569 +9986 +30877 +9 +33570 +185 +22787 +33571 +13848 +590 +25683 +27069 +33572 +14330 +33573 +16925 +15054 +9 +1012 +33574 +9 +20 +15 +33575 +24045 +33576 +33577 +17151 +6571 +5627 +33578 +33579 +18989 +9 +2744 +33580 +30589 +222 +33581 +33582 +1013 +15 +33583 +14719 +1230 +33584 +213 +8332 +43 +6465 +25991 +33585 +768 +23464 +33586 +25683 +1090 +19304 +3369 +33587 +1123 +14282 +12 +33588 +265 +4055 +33589 +1710 +33590 +32 +33591 +33592 +11336 +14574 +43 +284 +4055 +33593 +165 +33594 +33595 +337 +2958 +33596 +2694 +33597 +33598 +29483 +11210 +284 +103 +21689 +248 +245 +33599 +28031 +3601 +33600 +8566 +736 +10230 +33601 +671 +29200 +1090 +9 +25237 +20442 +13279 +26496 +9 +33602 +25943 +2733 +33603 +8367 +33604 +2314 +21947 +18982 +27599 +11185 +1175 +33605 +33606 +21947 +29573 +398 +590 +9400 +33607 +590 +24725 +284 +8360 +33608 +33609 +25140 +24045 +33610 +2122 +30551 +33611 +823 +272 +5188 +5318 +24864 +5169 +33612 +33613 +33614 +33615 +31042 +8668 +21947 +27150 +30877 +33616 +5035 +33617 +10 +2769 +29641 +9 +9 +14527 +27669 +6058 +303 +3553 +33618 +33619 +10947 +33620 +33621 +33622 +2324 +28036 +284 +14369 +11098 +33623 +33624 +33625 +19 +1524 +179 +1542 +13905 +77 +14330 +33626 +43 +284 +33627 +9 +22407 +2568 +33628 +25584 +31293 +2310 +26544 +138 +342 +25683 +2132 +14369 +33629 +33630 +349 +7855 +28295 +7964 +18045 +20952 +33631 +16025 +2540 +446 +213 +286 +248 +14477 +1559 +590 +2694 +27669 +33632 +18312 +379 +28549 +3546 +24045 +33633 +337 +33634 +12896 +30835 +25316 +33635 +33636 +9410 +33637 +590 +33638 +284 +33639 +677 +33640 +1716 +43 +286 +24303 +33641 +15 +33642 +33643 +33644 +4550 +303 +33645 +28317 +16014 +248 +33646 +770 +10381 +33647 +345 +24460 +33648 +33649 +13129 +32609 +11754 +33650 +2719 +5188 +9 +1605 +33651 +25140 +33652 +141 +1559 +33653 +3546 +989 +33654 +33655 +33656 +25683 +3548 +33657 +27069 +33658 +33659 +373 +33660 +9 +14871 +33661 +33662 +33663 +31293 +2419 +28549 +33664 +23867 +13621 +1090 +15 +66 +26680 +8392 +536 +140 +7375 +33665 +20810 +53 +15645 +33666 +201 +33667 +1920 +33668 +303 +19618 +24303 +29483 +33669 +33670 +33671 +185 +9132 +30224 +33672 +33673 +27335 +19618 +9 +33674 +33675 +33676 +303 +936 +33677 +509 +428 +33678 +13307 +3546 +10 +33679 +33680 +33681 +33682 +33683 +185 +11754 +21947 +33684 +33685 +33686 +33687 +33688 +33689 +33690 +33691 +33692 +5798 +33693 +30877 +33694 +14369 +478 +28036 +5803 +19618 +33695 +213 +33226 +30877 +439 +2117 +33696 +33697 +38 +155 +33698 +9233 +33699 +20803 +33700 +1705 +671 +2459 +140 +20952 +14604 +33701 +770 +33702 +478 +677 +23231 +23103 +33703 +1090 +18553 +33704 +19218 +554 +33705 +33706 +33707 +33708 +1181 +286 +33709 +33710 +1169 +31293 +14947 +30877 +33711 +33712 +23226 +10 +10624 +27669 +33713 +5169 +18798 +33714 +3546 +33715 +590 +3369 +11675 +554 +2550 +33716 +412 +700 +24426 +9 +7049 +13503 +33627 +33717 +33718 +19 +26484 +33719 +33720 +248 +21947 +22 +14369 +26157 +15718 +29628 +29209 +25140 +194 +30877 +33721 +33722 +14330 +33723 +30458 +28317 +33724 +25683 +249 +22605 +33725 +2655 +14330 +33726 +33727 +411 +23675 +24045 +33728 +29997 +33729 +33730 +10678 +33731 +33732 +33733 +33734 +3546 +4055 +3546 +16145 +20435 +33735 +14330 +33736 +33737 +33738 +1090 +33739 +33740 +25659 +28151 +19050 +7945 +98 +751 +11207 +1230 +751 +14947 +590 +33120 +57 +23103 +33741 +33742 +270 +2694 +25140 +27669 +13956 +33743 +15718 +33744 +694 +17920 +19009 +222 +590 +33745 +1090 +33746 +9688 +33747 +33748 +15384 +12005 +33749 +22 +18815 +33750 +1870 +33751 +25140 +286 +24896 +18821 +2009 +13465 +33752 +6086 +33753 +23481 +33754 +33755 +970 +6161 +28441 +3546 +19 +209 +5561 +15907 +33756 +10 +16437 +4088 +33757 +13721 +345 +28549 +33758 +27669 +33759 +19 +33760 +16437 +33761 +33762 +33763 +3 +354 +18434 +7891 +33764 +18896 +33765 +33766 +541 +5326 +19618 +33767 +19 +18045 +9898 +6595 +33768 +33769 +4055 +284 +5780 +22 +22 +66 +33770 +33771 +19618 +33772 +33773 +2577 +33577 +16979 +33758 +33774 +4055 +1559 +33775 +33776 +4055 +33777 +33778 +892 +322 +29483 +33779 +2410 +14330 +720 +28441 +99 +213 +26320 +33780 +345 +398 +20822 +24339 +21947 +19 +337 +232 +27669 +13956 +33781 +29381 +28317 +13570 +33782 +33783 +33784 +1332 +11762 +349 +33061 +9 +33785 +33786 +14 +15971 +9573 +25683 +33787 +33788 +566 +14369 +43 +33789 +7291 +33790 +720 +14161 +33791 +33792 +14369 +33793 +33794 +30224 +14079 +12936 +1991 +33795 +4055 +14369 +52 +1157 +18434 +3994 +33796 +213 +33797 +1352 +33798 +22963 +29483 +7823 +66 +33799 +33800 +33801 +26943 +21947 +33802 +33803 +33804 +1384 +2129 +25584 +1013 +439 +33805 +15718 +33806 +33393 +33807 +33808 +33809 +5700 +24144 +354 +33388 +21947 +30877 +33810 +33811 +6095 +14369 +1090 +1077 +736 +4124 +11762 +286 +337 +31434 +16437 +33812 +29981 +19 +19655 +33813 +736 +3755 +25237 +8946 +33814 +33815 +590 +33816 +33817 +33818 +514 +14840 +21416 +33819 +33820 +33821 +284 +33822 +33823 +19618 +3019 +3546 +25683 +2668 +27748 +33824 +248 +3026 +21947 +115 +33825 +31293 +33826 +25237 +28036 +3601 +3546 +1812 +694 +21248 +303 +33827 +30224 +303 +33828 +345 +248 +21689 +32 +12552 +26361 +17093 +33829 +33830 +250 +345 +33831 +13985 +33832 +17029 +284 +33833 +33834 +31577 +33835 +178 +24725 +337 +1749 +27069 +32 +33836 +9 +30224 +5188 +822 +9 +337 +33837 +25683 +27113 +3546 +33838 +33839 +590 +33840 +24864 +5085 +33841 +590 +33842 +29 +286 +9024 +6095 +19 +33843 +248 +33198 +1051 +8454 +33844 +915 +33845 +33846 +33847 +1044 +33848 +4002 +1961 +33849 +33850 +33851 +1047 +33852 +13721 +30877 +337 +10757 +1920 +33853 +43 +33854 +3317 +33855 +18946 +46 +33177 +583 +14059 +33856 +22098 +24 +1090 +303 +21681 +2135 +33650 +33857 +248 +677 +15718 +2260 +5085 +28036 +33858 +24864 +5085 +25584 +33859 +33860 +5208 +6006 +590 +1870 +2015 +25 +337 +1605 +248 +31906 +5085 +33861 +13721 +284 +33862 +25683 +13848 +29880 +33863 +33864 +349 +2577 +33865 +16413 +4151 +179 +123 +33866 +1531 +22986 +250 +25237 +683 +33867 +123 +10 +24864 +33868 +33869 +1562 +3160 +33368 +5808 +25584 +33870 +30224 +29204 +9 +1605 +2338 +3684 +33871 +23103 +33872 +25140 +33650 +15 +27669 +30224 +292 +464 +23871 +33873 +33874 +272 +590 +33875 +33876 +33877 +33141 +3546 +137 +33878 +30084 +590 +17972 +2372 +33879 +30051 +19 +8367 +2764 +33880 +105 +1090 +33881 +33882 +15718 +3668 +31293 +2314 +2264 +33883 +26744 +1316 +16332 +33627 +1559 +6537 +33884 +19974 +33885 +33886 +22308 +4075 +33887 +14909 +590 +8239 +21947 +239 +18250 +33888 +33889 +14330 +33890 +20 +14001 +33891 +19048 +15 +248 +1562 +9 +286 +33892 +3904 +1716 +7601 +2485 +33893 +7801 +736 +2537 +17151 +861 +33894 +33895 +33896 +19618 +22922 +33897 +2577 +595 +33898 +9 +4055 +279 +33899 +7532 +33900 +33901 +26361 +4502 +33902 +14330 +24630 +33903 +33904 +1502 +33307 +11639 +12987 +6187 +89 +14604 +33650 +6122 +25140 +33905 +16798 +3546 +25683 +18283 +936 +7816 +3660 +33906 +9210 +345 +31346 +12919 +25140 +1765 +33907 +286 +14 +33908 +17749 +21947 +19618 +43 +872 +29483 +33627 +33909 +33910 +25237 +1870 +464 +345 +14604 +14369 +1090 +29 +12120 +33911 +22823 +33912 +736 +33913 +13721 +18897 +6441 +14523 +14814 +33914 +33915 +33916 +33917 +115 +13721 +707 +12916 +284 +13976 +31293 +33918 +53 +590 +33919 +9 +25996 +13905 +10946 +43 +32642 +33920 +30224 +33921 +89 +13943 +887 +19 +18869 +33922 +12431 +1051 +29483 +20063 +1090 +7522 +21947 +194 +33923 +33650 +33924 +14330 +33925 +33926 +10 +33927 +21947 +194 +30051 +43 +2677 +9 +30224 +33928 +27669 +873 +1513 +33929 +33930 +33931 +18815 +4028 +26081 +33932 +21947 +33933 +43 +20745 +33934 +33935 +25539 +22269 +1870 +25316 +9 +31293 +2865 +1169 +33936 +736 +28317 +14577 +23394 +29502 +13813 +11321 +26712 +33120 +99 +33937 +30877 +38 +33938 +43 +33939 +5085 +25237 +379 +32938 +33940 +38 +1605 +10230 +736 +590 +33941 +8849 +15718 +15 +20563 +2865 +751 +29381 +24144 +33942 +33943 +33944 +590 +14 +1090 +12407 +357 +14000 +538 +3491 +349 +30877 +43 +20426 +33945 +33946 +533 +9210 +1289 +1765 +2018 +14369 +1364 +32566 +19 +32 +33947 +33948 +19 +33949 +7128 +33950 +33951 +16437 +25316 +9 +9 +31098 +19618 +33952 +323 +33953 +25140 +25683 +33954 +33955 +33956 +23231 +33957 +29926 +1090 +33958 +721 +2601 +33959 +33643 +33960 +495 +33961 +17635 +228 +1234 +1300 +13375 +24303 +33962 +33963 +25584 +33964 +33965 +28609 +19 +33966 +33967 +25659 +33968 +21371 +10117 +33969 +38 +590 +12075 +2197 +31249 +33970 +22922 +665 +29172 +20776 +33971 +33972 +30224 +33973 +15 +2459 +1224 +29483 +33974 +66 +665 +33975 +33976 +28317 +33977 +14707 +5780 +29381 +1090 +33978 +31375 +33979 +57 +33980 +33981 +22986 +28317 +43 +590 +4624 +33982 +19996 +6618 +9 +33963 +1090 +21947 +33983 +33984 +66 +30224 +9074 +6054 +98 +17749 +28549 +861 +29 +29032 +33985 +12120 +33986 +5085 +43 +12203 +1011 +17670 +33987 +33988 +736 +274 +24303 +33989 +6701 +33990 +33211 +33991 +33992 +29483 +10239 +33120 +25316 +33993 +19 +3353 +1824 +3999 +12214 +33994 +33995 +21922 +4055 +33996 +25683 +670 +33997 +2577 +30051 +33627 +33650 +25140 +43 +33998 +8188 +33999 +1716 +18357 +34000 +34001 +30224 +34002 +15483 +4028 +379 +34003 +32640 +1090 +31098 +15718 +15511 +34004 +1384 +34005 +21947 +34006 +34007 +21947 +5629 +13375 +34008 +1446 +31098 +15356 +415 +4603 +34009 +34010 +7291 +34011 +27387 +15 +26361 +38 +18695 +34012 +1011 +34013 +14369 +77 +60 +34014 +14079 +66 +32 +34015 +3546 +34016 +7835 +137 +398 +1013 +34017 +2832 +34018 +1992 +34019 +34020 +9 +34021 +34022 +24907 +29716 +357 +34023 +34024 +43 +34025 +34026 +14330 +34027 +15541 +13897 +1720 +25237 +31293 +34028 +7610 +13150 +1090 +1961 +34029 +34030 +538 +27069 +26361 +2 +34031 +21947 +1543 +21486 +3601 +34032 +34033 +24948 +25140 +26582 +43 +3349 +34034 +34035 +34036 +8188 +25 +1817 +377 +34037 +27669 +2769 +12987 +32332 +34038 +21947 +34039 +590 +736 +34040 +8037 +34041 +14363 +1134 +34042 +25237 +590 +14604 +34043 +34044 +1157 +12555 +34045 +43 +4533 +5085 +1559 +26434 +3601 +736 +26744 +21947 +34046 +482 +34047 +34048 +32 +34049 +34050 +4123 +31293 +34051 +34052 +14909 +9 +34053 +28441 +34054 +13807 +33650 +34055 +193 +34056 +1090 +6439 +19007 +16102 +34057 +590 +17730 +34058 +7855 +613 +4124 +21947 +34059 +34060 +14330 +4677 +25859 +34061 +34062 +28638 +842 +34063 +12480 +34064 +32 +1224 +11762 +21947 +34065 +34066 +12987 +2694 +34067 +17872 +8186 +109 +34068 +25683 +34069 +1508 +12987 +26666 +34070 +32 +424 +34071 +33650 +16116 +34072 +26040 +34073 +3546 +1090 +9024 +34074 +34075 +34076 +34077 +33650 +24144 +30458 +34078 +34079 +30877 +1112 +33758 +2971 +29483 +34080 +5080 +31293 +16375 +33650 +8005 +34081 +34082 +34083 +5627 +30877 +34084 +1961 +34085 +209 +8668 +33650 +9 +34086 +1082 +3553 +201 +34087 +26496 +34088 +25584 +1470 +34089 +1612 +34090 +34091 +34092 +34093 +43 +1870 +17698 +34094 +34095 +34096 +2064 +34097 +34098 +30877 +15 +2 +694 +30877 +13030 +34099 +4055 +5780 +1157 +19655 +15718 +16875 +34100 +9 +34101 +21947 +590 +34102 +34103 +111 +9560 +31293 +232 +34104 +34105 +34106 +9 +3067 +43 +29381 +4055 +13566 +34107 +178 +27669 +576 +34108 +491 +1090 +15718 +9 +533 +34109 +14330 +34110 +6354 +34111 +34112 +1382 +1810 +34113 +20 +9 +4055 +5408 +590 +3946 +8994 +34114 +15018 +34115 +2581 +5683 +14369 +9 +10 +19 +1107 +34116 +24303 +19 +3546 +345 +25316 +7835 +35 +28441 +9 +4367 +15 +33650 +19 +34117 +34118 +20850 +14001 +34119 +34120 +20 +18798 +30877 +34121 +29483 +22587 +31293 +30877 +1668 +3546 +34122 +9 +2733 +373 +720 +30877 +24303 +3546 +34123 +34124 +34125 +43 +28116 +34126 +8668 +34127 +20443 +34128 +345 +1529 +34129 +33650 +34130 +1310 +1870 +10 +33650 +590 +8593 +34131 +19918 +201 +43 +34132 +34133 +9 +713 +849 +43 +27669 +57 +34134 +34135 +32 +34136 +43 +12987 +34137 +18874 +34138 +736 +34139 +21947 +595 +22592 +30877 +34140 +28549 +196 +31293 +33963 +16264 +8766 +14102 +4388 +9 +34141 +34142 +34143 +971 +2872 +24458 +25237 +18421 +533 +27249 +9904 +34144 +23368 +29204 +208 +3746 +34145 +19 +2 +26127 +34146 +14588 +9 +31503 +4055 +34147 +34148 +22236 +34149 +34150 +9 +1374 +8357 +43 +8249 +2988 +34151 +26946 +12987 +703 +4055 +10 +573 +1514 +2356 +34152 +282 +2 +1961 +11754 +648 +25050 +7835 +13474 +541 +34153 +34154 +2325 +1648 +34155 +24725 +34156 +34157 +25871 +98 +14330 +98 +21947 +28549 +33650 +34158 +34159 +34160 +19 +102 +9 +2064 +34161 +43 +43 +25140 +34162 +15 +34163 +20586 +34164 +14776 +43 +34165 +12302 +34166 +10199 +20666 +3999 +34167 +66 +14759 +29800 +27096 +30224 +19618 +590 +14343 +34168 +209 +34169 +34170 +590 +13721 +5629 +34171 +1524 +43 +34172 +30051 +34173 +34174 +9 +32537 +34175 +24939 +14 +5192 +34176 +3484 +34177 +278 +34178 +14947 +14477 +34179 +34 +34180 +31293 +16437 +34181 +32900 +34182 +34183 +17698 +9 +34184 +3546 +34185 +25237 +34186 +21947 +17272 +349 +15718 +34187 +34188 +34189 +5803 +17151 +34190 +34191 +34192 +34193 +4026 +10256 +34194 +43 +14369 +25237 +179 +377 +14216 +21494 +3546 +34195 +25160 +720 +21947 +19855 +9 +43 +21947 +98 +5085 +1529 +5817 +34196 +19 +34197 +34198 +34199 +33650 +34200 +1382 +8351 +57 +19 +647 +6499 +31603 +31293 +34201 +2550 +18045 +38 +9 +29381 +34202 +34203 +286 +2577 +10031 +1961 +34204 +34205 +590 +17675 +12005 +9402 +4055 +770 +2071 +34206 +936 +237 +7053 +1385 +25237 +3546 +21947 +11697 +201 +34207 +34208 +34209 +15463 +14 +3959 +34210 +34211 +828 +5188 +34212 +21947 +34213 +590 +34214 +34215 +43 +21689 +19655 +713 +34216 +790 +34217 +21835 +34218 +736 +34219 +9 +34220 +176 +28295 +21947 +34221 +34222 +34223 +11966 +32642 +34224 +34225 +590 +34226 +1090 +34227 +2260 +30551 +14369 +34228 +34229 +1529 +590 +34230 +416 +34231 +28317 +15671 +14 +34232 +34233 +19 +34234 +3871 +34235 +4791 +34236 +34237 +34238 +3959 +17281 +34239 +34240 +31500 +196 +15216 +34241 +736 +3143 +519 +34242 +19 +34243 +34244 +34245 +13721 +34246 +42 +34247 +34248 +554 +1524 +16447 +10003 +34249 +1765 +34250 +9 +34251 +24 +34252 +43 +18043 +6294 +33650 +27669 +14477 +34253 +34254 +30051 +14594 +2926 +104 +2314 +34255 +33445 +17784 +738 +1208 +15718 +34256 +250 +9 +34257 +34258 +34259 +14369 +568 +34260 +34261 +34262 +34263 +34264 +15718 +34265 +34266 +3584 +34267 +29204 +1066 +34268 +26744 +34269 +23990 +19523 +30877 +34270 +317 +34271 +29483 +29715 +34272 +18283 +21689 +34273 +31585 +34274 +34275 +28471 +34276 +26040 +358 +5085 +1716 +14369 +34277 +34278 +29658 +19618 +30224 +286 +23675 +34279 +34280 +2009 +27117 +34281 +34282 +34283 +19 +1090 +34284 +34285 +34286 +34287 +34288 +3546 +25584 +34289 +23313 +34290 +77 +4752 +1291 +1364 +12 +34291 +34292 +155 +14660 +10 +19 +34293 +31293 +1169 +29628 +34294 +15 +34295 +34296 +1992 +32636 +9 +34297 +155 +29381 +28549 +31293 +34298 +13638 +43 +34299 +34300 +286 +34301 +21947 +34302 +1684 +34303 +14330 +25140 +936 +34304 +342 +77 +19 +352 +140 +21758 +32863 +15514 +3994 +2042 +22963 +34305 +24303 +8418 +4055 +20443 +34306 +3978 +34307 +34308 +19 +34309 +27669 +25943 +21947 +2919 +39 +14079 +590 +9460 +34310 +4808 +21904 +34311 +6725 +34312 +34313 +34314 +21889 +33963 +34315 +34316 +10 +34317 +20952 +590 +34318 +21947 +3790 +34319 +34320 +9 +31293 +21947 +590 +9 +5839 +33818 +34321 +15718 +14369 +34322 +34323 +31467 +176 +34324 +34325 +30877 +22986 +590 +34326 +4055 +43 +43 +34327 +34328 +491 +34329 +554 +21947 +34330 +34331 +1090 +8746 +21187 +6335 +29483 +554 +4364 +1513 +342 +1508 +34332 +11423 +18283 +34333 +32805 +179 +671 +15 +18045 +11362 +6883 +34334 +34335 +25943 +286 +34336 +27669 +34337 +21499 +349 +14 +30224 +34338 +1157 +34339 +25237 +590 +19 +34340 +34341 +19 +25316 +34342 +34343 +34344 +10049 +34345 +8996 +34346 +286 +30551 +34347 +34348 +34349 +7836 +34350 +533 +25683 +43 +34351 +590 +22464 +34352 +1021 +34353 +17151 +24864 +7855 +34354 +16014 +6142 +1655 +349 +30224 +10717 +28317 +887 +43 +176 +30051 +29483 +34355 +14604 +34356 +2129 +20700 +7835 +484 +34357 +22922 +34358 +28036 +27669 +14477 +34359 +9 +2286 +30712 +7053 +34360 +27669 +1234 +3546 +15320 +34361 +1425 +33963 +31293 +4951 +34362 +16883 +34363 +34364 +5188 +352 +2253 +34365 +1018 +1688 +34366 +34367 +3601 +411 +34368 +379 +1716 +1529 +179 +1157 +34369 +19618 +24725 +26040 +5119 +33021 +31293 +25683 +558 +34370 +21947 +1364 +34371 +14369 +13068 +3369 +2570 +34372 +20 +34373 +478 +27669 +19 +11653 +770 +27074 +222 +13566 +17136 +30877 +27669 +34374 +34375 +345 +34376 +25237 +34377 +33368 +34378 +849 +34379 +34380 +9 +34381 +19 +32 +34382 +34383 +7154 +25943 +34384 +736 +34385 +34386 +694 +1090 +34387 +34388 +970 +34389 +713 +590 +34390 +933 +4 +14174 +15718 +19852 +34391 +34392 +9 +19 +14369 +34393 +349 +1765 +34394 +27886 +25140 +703 +34395 +14410 +34396 +33445 +34397 +34398 +43 +34399 +34400 +720 +3044 +5741 +28317 +34401 +4 +34402 +1442 +43 +24864 +2093 +34403 +31293 +15 +5990 +18995 +43 +397 +4055 +19618 +16780 +34404 +34405 +286 +34406 +34407 +1566 +17535 +34408 +19939 +31293 +34409 +27864 +33278 +26178 +6945 +34410 +25237 +32646 +34411 +34412 +29381 +29483 +373 +8476 +1090 +34413 +12346 +5085 +34414 +188 +363 +43 +28745 +29483 +331 +34415 +20 +22 +5489 +24864 +12987 +27719 +19618 +34416 +14330 +22666 +34417 +34418 +11341 +7835 +11966 +1578 +115 +590 +36 +34419 +10173 +2318 +32538 +648 +3546 +25683 +34420 +34421 +32782 +34422 +6054 +18695 +34423 +34424 +1779 +892 +34425 +22986 +34426 +683 +34427 +34428 +34429 +34430 +34431 +30877 +34432 +66 +10781 +379 +4055 +970 +30877 +590 +533 +14369 +31293 +3589 +19582 +2799 +34433 +11282 +249 +17121 +915 +34434 +5085 +43 +910 +25 +29200 +34435 +34017 +5169 +19 +2356 +34436 +730 +34437 +34438 +3 +2015 +30551 +19618 +34439 +188 +7108 +25683 +28219 +7379 +34440 +18045 +25683 +34441 +19 +349 +34442 +34443 +590 +9 +34444 +34445 +19838 +19335 +34446 +15039 +34447 +34448 +7835 +24864 +34449 +25140 +23239 +14 +13566 +21947 +17151 +12005 +24864 +14603 +34450 +970 +34451 +34452 +34453 +34454 +34455 +21947 +34456 +6287 +20 +14763 +34457 +34458 +29200 +22453 +1870 +12916 +27669 +34459 +5792 +4550 +31293 +34460 +34461 +34462 +34463 +1234 +8855 +34464 +29720 +34465 +21947 +1090 +34466 +736 +22922 +33758 +34467 +89 +27669 +34468 +66 +34469 +21835 +34079 +34470 +736 +14369 +24864 +34471 +34472 +48 +34473 +34474 +33963 +536 +27153 +34475 +5188 +3546 +34476 +20 +14604 +14369 +34477 +57 +9204 +34478 +34479 +13721 +9 +19655 +34480 +34481 +7522 +34482 +29483 +5908 +352 +823 +34483 +286 +3343 +34484 +22315 +1131 +21947 +179 +707 +598 +25584 +25943 +34485 +1425 +34486 +11672 +34487 +23406 +29981 +1710 +34488 +5085 +8210 +9 +29381 +249 +28036 +43 +34489 +34490 +31168 +692 +13794 +43 +1230 +22 +43 +25237 +9 +14369 +1107 +34491 +34492 +34493 +34494 +43 +34495 +478 +34496 +971 +34497 +11321 +349 +590 +34498 +21947 +33650 +14369 +22236 +34499 +34500 +34501 +28348 +34502 +34503 +5188 +278 +34504 +2260 +399 +34505 +34506 +36 +29204 +34507 +34508 +34509 +34510 +34511 +34512 +34513 +34514 +915 +5316 +590 +24896 +4028 +3100 +29483 +683 +34515 +1090 +29483 +197 +9 +18145 +2314 +34516 +34517 +14369 +34518 +5559 +34519 +31293 +34520 +34521 +14369 +34522 +28295 +31406 +34523 +34524 +34525 +349 +2619 +4055 +34526 +849 +13797 +7291 +34527 +9660 +34528 +14330 +15845 +34529 +34181 +7053 +21947 +20386 +25237 +34530 +345 +3546 +249 +254 +34531 +34532 +34533 +25140 +34534 +34535 +13510 +19 +4055 +23752 +9 +22198 +14604 +34536 +26361 +24725 +1817 +1090 +24864 +33697 +3330 +24951 +7835 +16437 +23603 +25683 +29884 +9 +43 +32359 +24303 +345 +379 +34537 +9 +34538 +3546 +34539 +1090 +18503 +14188 +34540 +15 +25237 +2762 +16121 +34541 +1157 +34542 +57 +34543 +188 +286 +1090 +34544 +1286 +2197 +415 +33963 +34545 +16437 +2694 +34546 +28317 +42 +416 +32 +7053 +29204 +34547 +15135 +34548 +34549 +34550 +14369 +165 +209 +345 +182 +34551 +43 +33141 +34552 +4441 +5188 +1090 +14216 +9 +25683 +34553 +34554 +2 +34555 +34556 +34557 +9 +25237 +33627 +248 +34558 +7835 +196 +26561 +21947 +25683 +286 +34559 +11762 +25140 +1320 +34560 +337 +43 +19 +2117 +34561 +586 +25683 +1122 +34562 +34563 +34564 +34565 +19688 +36 +31293 +89 +33627 +34566 +34567 +21947 +284 +1220 +19 +34568 +4979 +5188 +34569 +1742 +10 +31293 +29204 +250 +30224 +4055 +17267 +2347 +34570 +21947 +17972 +89 +4650 +34571 +8367 +284 +28317 +4116 +2410 +29032 +30917 +337 +16440 +19 +34572 +19 +4055 +1696 +34573 +19 +248 +1481 +590 +25659 +34574 +2289 +34575 +34576 +34577 +34 +34578 +700 +34579 +4278 +248 +6617 +34580 +248 +397 +2540 +707 +345 +1090 +34581 +34582 +21689 +915 +25237 +665 +337 +736 +3119 +6294 +34583 +34584 +43 +25584 +20 +14759 +34585 +17060 +213 +34586 +34587 +19 +2550 +34588 +3546 +43 +17151 +23506 +178 +34589 +21947 +5188 +34590 +248 +3077 +34591 +6962 +721 +21947 +34592 +402 +34593 +34594 +9 +9396 +25683 +25991 +34595 +13721 +34596 +1090 +18982 +34597 +9 +99 +28317 +34598 +4227 +519 +31293 +10642 +703 +34599 +3546 +34600 +30051 +10 +34601 +1863 +9 +931 +34602 +34603 +23103 +711 +34604 +248 +34605 +2289 +25943 +34606 +317 +34607 +10544 +34608 +1120 +10 +33627 +7137 +29483 +590 +11925 +828 +15718 +3484 +15 +34609 +11719 +29 +26355 +25298 +14330 +34610 +19 +337 +936 +1817 +51 +34611 +15 +14 +25683 +34612 +34613 +34614 +891 +2260 +15 +34531 +1559 +5188 +9939 +9 +1384 +12987 +34615 +12425 +872 +34616 +14369 +12153 +34617 +25140 +354 +3391 +34618 +34619 +34620 +9497 +33963 +15 +22922 +123 +23103 +34621 +9 +34622 +34623 +34624 +114 +1247 +34625 +13721 +29688 +28549 +14884 +34626 +34627 +12987 +24423 +34628 +19 +21429 +25943 +33963 +34629 +25584 +22269 +34630 +2577 +34631 +16239 +25683 +34632 +19 +373 +33977 +34633 +14 +34634 +14369 +34635 +33683 +8593 +17281 +21394 +34636 +3553 +213 +34637 +14477 +590 +34433 +4055 +201 +105 +34638 +24303 +34639 +34640 +27719 +18684 +34641 +14369 +869 +27238 +442 +8460 +24725 +590 +1219 +11970 +57 +25683 +19618 +13361 +9808 +34642 +411 +21689 +32 +21947 +21947 +1696 +15018 +4368 +2446 +24725 +34643 +25316 +30877 +30650 +178 +303 +34644 +34645 +34646 +30209 +1090 +57 +317 +34647 +34648 +597 +34649 +43 +19 +20 +31293 +33445 +34650 +25316 +2342 +1382 +823 +5904 +196 +34651 +46 +34652 +15881 +590 +533 +22868 +24896 +21947 +248 +27669 +28317 +24864 +7362 +34653 +12013 +21947 +4306 +12178 +179 +32161 +1090 +590 +34654 +34655 +30224 +34656 +15354 +1716 +34657 +4055 +349 +24129 +19 +185 +20 +286 +28294 +1013 +34658 +23547 +9 +19618 +14369 +1920 +16826 +179 +24864 +586 +358 +15881 +4631 +34659 +19 +22787 +27669 +22864 +23103 +34660 +15384 +34661 +34662 +4055 +3476 +670 +9 +736 +34663 +176 +30877 +31293 +31293 +34664 +34665 +34666 +43 +2197 +358 +34667 +5731 +4856 +32920 +8218 +209 +29172 +815 +213 +1112 +14504 +27669 +3061 +8668 +3 +9 +354 +20328 +25683 +12479 +2769 +8670 +19618 +34668 +155 +34669 +17698 +24058 +34670 +34671 +34672 +34673 +29381 +2 +31293 +10 +17238 +14769 +701 +27178 +20722 +34674 +34675 +713 +34676 +2009 +554 +21563 +7835 +984 +10 +34677 +34678 +21947 +34679 +3005 +34680 +15331 +33650 +34681 +34682 +6364 +2197 +34683 +13247 +34684 +19 +19655 +590 +358 +34685 +3546 +495 +34686 +34687 +34688 +33963 +34689 +30224 +5376 +34690 +11983 +34438 +16102 +99 +19618 +213 +12987 +34691 +1090 +34692 +34693 +284 +24725 +2577 +34694 +1109 +34695 +24045 +15 +34696 +34697 +2764 +34698 +155 +34699 +19655 +34700 +1508 +15718 +34701 +34702 +19042 +80 +34703 +32 +34704 +20 +33650 +34705 +2949 +213 +34706 +34707 +34708 +9682 +9 +2463 +15597 +9 +3055 +377 +31098 +34709 +33 +34710 +46 +345 +33963 +34711 +14774 +484 +3655 +303 +8849 +34712 +123 +23271 +15718 +14025 +34713 +13279 +34714 +1018 +671 +349 +25140 +3601 +27669 +9 +34715 +21510 +322 +34716 +34717 +34718 +11762 +1465 +34719 +1861 +213 +29204 +30877 +284 +29733 +16401 +2998 +22 +34720 +34721 +27669 +34722 +15718 +43 +5665 +286 +19 +34723 +284 +9 +283 +590 +34724 +34725 +3546 +34726 +34727 +22922 +34728 +19618 +1425 +4055 +1364 +12157 +2721 +21553 +299 +34729 +17404 +10961 +33650 +34730 +201 +30877 +23150 +14485 +379 +25237 +19 +34731 +34732 +7048 +540 +3247 +25316 +7259 +11483 +43 +19618 +284 +34733 +1141 +34734 +4055 +34735 +4055 +34736 +34737 +89 +19 +34738 +4961 +23103 +34739 +21689 +34740 +352 +34741 +31293 +34742 +17571 +3981 +590 +7717 +34743 +25625 +34744 +15718 +5780 +14369 +21689 +18953 +77 +2550 +34745 +34746 +33427 +30775 +16437 +9617 +34747 +21647 +228 +34748 +4 +9160 +16 +18811 +19874 +3546 +25382 +43 +19928 +19523 +34749 +34750 +89 +4055 +27669 +2 +14330 +12722 +30210 +34751 +12299 +3546 +33693 +1503 +20 +34752 +34753 +17698 +9 +5188 +7053 +27669 +42 +34754 +32642 +27669 +18571 +15718 +34755 +15 +33627 +1011 +34756 +464 +34757 +29483 +34758 +34759 +23103 +2560 +34760 +337 +22292 +31293 +25683 +34761 +3182 +19321 +25584 +34762 +1502 +4425 +13390 +2040 +9 +34763 +1559 +155 +34764 +14001 +34765 +34766 +3546 +13721 +57 +3908 +26815 +18479 +28441 +9 +66 +15 +1529 +34767 +34768 +7418 +29109 +34769 +66 +33650 +28961 +15718 +34770 +34771 +14520 +3546 +13566 +1224 +2260 +34772 +5908 +15 +18896 +26176 +43 +668 +3659 +15088 +44 +12988 +970 +34773 +12987 +1524 +645 +33650 +9 +3739 +7292 +2694 +27669 +34774 +4055 +25237 +13228 +6595 +34775 +1090 +32871 +1090 +1829 +14 +7053 +4055 +30051 +21089 +34776 +31293 +28845 +32269 +22963 +4463 +815 +23103 +15194 +2600 +25164 +10780 +34777 +10318 +30877 +1116 +34778 +34779 +3337 +30051 +3361 +34780 +60 +34781 +30051 +34782 +34783 +98 +337 +34784 +1089 +286 +1295 +10 +34785 +1021 +3 +19 +34786 +34787 +43 +34788 +6732 +27669 +12013 +29483 +34789 +34790 +34791 +5659 +736 +1149 +33627 +137 +28317 +34792 +25316 +34793 +25683 +1513 +2009 +1013 +33650 +25140 +8297 +861 +590 +24725 +43 +33650 +34794 +34795 +9 +849 +31437 +34796 +34797 +34798 +25237 +33650 +24144 +34799 +245 +34800 +345 +14369 +34801 +9 +19852 +22290 +12005 +6782 +3908 +34802 +3484 +34803 +34804 +23926 +358 +176 +4693 +3546 +2197 +32604 +33113 +5433 +8188 +34805 +34806 +14 +416 +34807 +34808 +34809 +29381 +98 +19618 +6617 +34810 +16334 +11754 +43 +34811 +1817 +34812 +30877 +43 +2372 +259 +34813 +34814 +379 +34815 +104 +464 +13721 +43 +25140 +34816 +3369 +809 +3876 +590 +1090 +34817 +25140 +72 +13754 +34818 +33113 +29200 +6741 +34819 +9410 +3476 +31315 +19 +43 +14947 +358 +34820 +34821 +15 +554 +34822 +24303 +43 +34823 +22144 +21776 +25237 +416 +34824 +34825 +436 +33963 +19618 +17320 +2764 +11057 +9 +1244 +179 +1090 +554 +34826 +590 +123 +28639 +19618 +34827 +3976 +33758 +34828 +378 +34829 +12093 +14369 +34830 +3559 +250 +19 +34831 +16264 +34832 +14330 +1090 +29483 +34833 +19 +34834 +6999 +34835 +34836 +17281 +34837 +14399 +29549 +3546 +31098 +677 +34838 +34839 +34840 +34841 +15504 +16371 +2260 +6463 +21947 +15768 +15718 +34394 +33120 +25683 +4055 +1765 +34842 +338 +34843 +3546 +25316 +28317 +34844 +34845 +2593 +415 +34846 +209 +27860 +1236 +34847 +15718 +43 +34848 +26724 +27069 +19618 +16413 +16146 +3553 +29381 +4487 +19289 +1508 +43 +34849 +34181 +34850 +7072 +43 +1090 +34 +33650 +201 +25683 +34851 +34852 +2975 +34853 +345 +34854 +59 +34855 +34856 +1559 +25280 +9 +12 +1765 +590 +845 +34857 +20600 +345 +15914 +34858 +19852 +1870 +27669 +11321 +34859 +3202 +34860 +20482 +622 +34861 +32137 +16109 +140 +34862 +323 +554 +806 +98 +720 +34863 +9 +4326 +21689 +34864 +34865 +34583 +34866 +1090 +2058 +5995 +1026 +34867 +34868 +1461 +34869 +3252 +1870 +34870 +19276 +34871 +19618 +34872 +13375 +19618 +2694 +22 +34873 +3484 +5217 +43 +34874 +14369 +34875 +1090 +2043 +34876 +1453 +34402 +30877 +1817 +3790 +34877 +34878 +25943 +15 +26496 +34879 +34880 +19 +34881 +20785 +25659 +34882 +12348 +9 +18045 +34883 +501 +34884 +7105 +6463 +5080 +1051 +21947 +3546 +22963 +24 +15583 +34885 +2406 +34886 +34887 +1612 +34888 +915 +15718 +30500 +15649 +34889 +34890 +34891 +34892 +6310 +2537 +9460 +31936 +22463 +31098 +34893 +25943 +34894 +331 +9 +34895 +2049 +2 +5188 +2410 +2812 +9 +34896 +34897 +25683 +533 +21947 +1090 +66 +19618 +20340 +29483 +3599 +34898 +1710 +3170 +8418 +1090 +34899 +14477 +34900 +13721 +4806 +34901 +25316 +43 +1013 +43 +34902 +19 +34903 +1992 +32886 +26419 +21553 +34904 +1912 +34905 +3655 +398 +738 +19618 +34906 +6883 +1090 +34907 +3546 +16 +590 +16437 +8188 +19618 +66 +345 +34908 +9 +490 +377 +14013 +33113 +14369 +34909 +15 +3239 +34910 +31735 +1090 +23226 +24864 +34 +15483 +34911 +43 +66 +25140 +29381 +30877 +33120 +19 +34912 +25904 +1655 +24144 +34913 +34914 +34915 +34916 +34917 +34918 +34919 +15718 +19344 +18479 +34920 +357 +34921 +34833 +5389 +21947 +137 +25237 +554 +415 +14458 +7834 +736 +33650 +43 +31293 +34922 +34923 +2260 +2537 +31293 +34924 +33758 +34925 +31293 +1090 +34926 +34927 +32 +16102 +1090 +34928 +34402 +7053 +32 +15572 +34929 +3923 +34930 +25237 +5188 +34931 +34932 +178 +19618 +358 +14 +34933 +19355 +34934 +34935 +32517 +5601 +12642 +2 +541 +958 +19852 +970 +112 +2027 +34936 +6214 +15718 +34937 +32680 +21947 +34938 +533 +34939 +19 +34940 +971 +34941 +9 +377 +349 +34942 +590 +34943 +28317 +10642 +34402 +5649 +34944 +25036 +28923 +34945 +34946 +14693 +34947 +34948 +34949 +14079 +34950 +34951 +1212 +34952 +34953 +9 +34954 +30224 +6214 +34955 +34956 +736 +34957 +34958 +34959 +5080 +590 +32922 +34960 +34961 +18503 +14330 +19655 +2260 +34962 +286 +15 +887 +43 +34963 +4441 +842 +694 +590 +34964 +34965 +14 +43 +6095 +29200 +15718 +34966 +34967 +19 +28845 +6116 +941 +9 +31293 +872 +9 +34968 +29746 +19 +34402 +34969 +7176 +861 +345 +1051 +34970 +1090 +10600 +34971 +1090 +34972 +28295 +1716 +13721 +3553 +34973 +14 +27355 +34974 +9 +57 +29628 +13656 +34975 +34976 +590 +16437 +887 +26358 +2724 +19787 +7376 +155 +34977 +10199 +24303 +34 +201 +34978 +34979 +7176 +34980 +209 +34981 +31873 +25237 +14330 +34982 +34983 +34984 +34985 +34986 +34987 +34988 +1157 +34989 +34990 +34991 +34992 +29815 +12987 +12987 +34993 +317 +57 +28317 +301 +1090 +10510 +33650 +21947 +1100 +27161 +9 +12701 +34994 +34995 +34996 +34997 +829 +228 +9 +34998 +25316 +2410 +34999 +354 +25943 +35000 +6095 +25943 +24144 +9 +15068 +17400 +286 +43 +317 +4764 +21822 +9 +14240 +26560 +29855 +35001 +35002 +1513 +35003 +24864 +6217 +35004 +13178 +43 +35005 +3994 +765 +26496 +57 +6950 +35006 +137 +34641 +1047 +5370 +21947 +35007 +35008 +11754 +590 +4055 +35009 +648 +35010 +14434 +104 +28317 +35011 +14330 +31293 +27669 +10031 +35012 +30451 +35013 +33627 +35014 +15718 +35015 +3546 +14369 +30458 +57 +35016 +915 +25140 +11471 +35017 +1090 +6766 +27669 +14693 +24864 +4055 +209 +35018 +1680 +35019 +35020 +28549 +30301 +9 +736 +484 +35021 +43 +5188 +694 +9 +35022 +345 +249 +35023 +27719 +5925 +18120 +35024 +29381 +4518 +20 +35025 +35026 +29628 +33508 +30877 +970 +31293 +35027 +4411 +35028 +590 +140 +15647 +25140 +21947 +35029 +317 +27669 +2314 +35030 +35031 +425 +20841 +19839 +2 +25382 +4528 +35032 +2769 +35033 +35034 +554 +34804 +35035 +31501 +35036 +21261 +15514 +14369 +33203 +35037 +822 +6525 +32153 +24632 +35038 +35039 +35040 +8668 +30224 +35041 +35042 +23103 +398 +1637 +3546 +35043 +14947 +23958 +2988 +35044 +15683 +35045 +249 +35046 +35047 +33650 +13566 +35048 +694 +26861 +35049 +590 +35050 +19 +35051 +5314 +30224 +35052 +25683 +35053 +43 +33693 +25172 +3095 +10 +2782 +28549 +1090 +18869 +29381 +2314 +1716 +4414 +140 +109 +2446 +35054 +17206 +2625 +43 +35055 +18956 +27669 +6142 +10990 +2349 +35056 +35057 +15730 +35058 +14369 +1559 +345 +1829 +1090 +1927 +1732 +7835 +5188 +12987 +3351 +35059 +4388 +35060 +34 +28745 +15699 +4502 +15718 +35061 +35062 +3977 +35063 +19026 +1710 +31293 +35064 +10535 +12005 +35065 +35066 +34402 +28474 +15 +177 +5085 +1394 +14330 +9 +35067 +5659 +16102 +16422 +16818 +35068 +29574 +34402 +34402 +2260 +35069 +1442 +43 +35070 +35071 +19 +1100 +35072 +35073 +12916 +11135 +35074 +28441 +6532 +1517 +35075 +26361 +1371 +35076 +791 +8160 +3842 +35077 +18394 +35078 +464 +35079 +301 +35080 +25683 +35081 +33650 +970 +35082 +35083 +4055 +35084 +386 +35085 +35086 +29483 +28036 +1291 +35087 +26361 +5780 +2082 +25140 +2 +3369 +1295 +15718 +590 +14363 +4 +35088 +1019 +25943 +8465 +29434 +19 +7776 +4055 +30177 +3546 +35089 +35090 +533 +35091 +34436 +29800 +32523 +2744 +35092 +9 +176 +5642 +35093 +35094 +323 +3777 +33650 +29200 +26559 +35095 +21947 +35096 +27843 +30224 +16 +3452 +2764 +34534 +1520 +1674 +13360 +42 +18284 +35097 +35098 +3575 +35099 +25237 +35100 +8668 +201 +35101 +103 +35102 +5188 +14369 +3385 +16 +9 +15 +35103 +19172 +35104 +35105 +665 +35106 +9020 +14369 +9 +34795 +9 +35107 +3460 +35108 +98 +35109 +29459 +25683 +35110 +24727 +35111 +14689 +4907 +35112 +1332 +11554 +25316 +1090 +3376 +35113 +31346 +35114 +7811 +4055 +1021 +15718 +15 +11727 +33606 +464 +25 +2694 +8297 +35115 +35116 +2550 +13578 +736 +35117 +35118 +6950 +31293 +33650 +32001 +25382 +15231 +9 +18250 +2406 +590 +35119 +35120 +5923 +14 +25683 +34 +2593 +3997 +4 +1743 +3287 +23764 +35121 +35122 +1382 +35123 +12987 +7835 +35124 +12851 +677 +30051 +35125 +19 +14369 +35126 +35127 +21947 +25316 +35128 +14330 +5085 +286 +35129 +12309 +33120 +613 +35130 +35131 +1051 +28295 +35132 +35133 +586 +15 +11341 +35134 +26704 +8668 +35135 +10544 +590 +21947 +4055 +35136 +9 +35137 +3958 +35138 +6915 +24258 +1160 +19655 +354 +32 +16437 +9 +43 +19 +286 +18045 +14369 +736 +1090 +43 +17151 +10298 +237 +1914 +17698 +4055 +28036 +22787 +3330 +35139 +14886 +736 +15718 +2316 +35140 +19 +2636 +35141 +6751 +35142 +35143 +35144 +35145 +35146 +29981 +36 +35147 +13484 +35148 +22697 +35149 +32 +2314 +12307 +22208 +35150 +19655 +33125 +24864 +35151 +35152 +694 +2117 +35153 +57 +35154 +35155 +2287 +29381 +4083 +18045 +29483 +228 +35156 +3601 +14 +33821 +23867 +345 +14001 +19 +35157 +6048 +14369 +8362 +1648 +282 +872 +35158 +11515 +1870 +2260 +29200 +6617 +1300 +35159 +14369 +5579 +137 +35160 +35161 +35162 +35163 +35164 +828 +590 +694 +9941 +17 +35165 +2733 +14947 +1091 +35166 +31293 +491 +1481 +284 +2 +28339 +4055 +35123 +8670 +3353 +35167 +2061 +28803 +533 +33445 +8895 +35168 +26361 +35099 +16206 +35169 +7276 +3546 +284 +19 +33120 +1141 +35170 +22213 +1520 +35171 +14604 +349 +1090 +35172 +35173 +1889 +35174 +1224 +337 +3546 +213 +1090 +29981 +35175 +8668 +33758 +2694 +861 +27669 +27069 +35176 +31293 +27069 +23958 +3553 +595 +35177 +14193 +4848 +29628 +1139 +17911 +35178 +35179 +35180 +9 +35181 +849 +590 +21689 +15511 +24303 +33120 +2310 +25943 +35182 +35183 +57 +284 +20187 +2117 +76 +35184 +35185 +104 +35186 +5503 +31293 +213 +8338 +31603 +736 +35187 +7053 +8021 +35188 +303 +19 +12684 +11321 +5080 +1090 +303 +14102 +303 +35189 +35190 +301 +35191 +33650 +27850 +354 +13391 +3787 +35192 +19 +1090 +43 +828 +3711 +35193 +34 +35194 +245 +2764 +35195 +35196 +25140 +35197 +1021 +15 +14576 +35198 +3 +35199 +16205 +35200 +1019 +35201 +18695 +35202 +2769 +337 +31293 +188 +303 +35203 +19 +25683 +35204 +248 +33758 +34 +25 +35205 +21227 +35206 +24303 +30051 +11552 +35207 +6658 +28908 +3764 +19852 +1090 +33627 +284 +35208 +17088 +2140 +18706 +597 +5326 +303 +1169 +2828 +27293 +284 +33494 +24303 +337 +35209 +19218 +18869 +9 +43 +35210 +1542 +399 +178 +35211 +30458 +15 +35212 +9 +8668 +4055 +35213 +35214 +3365 +2308 +5085 +34402 +35215 +10094 +2837 +16437 +35216 +373 +35217 +35218 +379 +337 +5188 +25129 +9 +284 +35219 +11851 +35220 +35221 +9 +14369 +31293 +98 +35222 +35223 +9 +20 +35224 +1090 +849 +31246 +694 +303 +228 +9 +345 +29381 +35225 +11647 +17834 +590 +4764 +2040 +35226 +57 +35227 +28036 +35228 +30877 +35229 +337 +26496 +35230 +35231 +43 +35232 +3994 +1027 +35233 +2157 +33650 +597 +53 +9384 +43 +286 +3546 +25237 +35234 +28441 +613 +30393 +4055 +35235 +597 +936 +1470 +24207 +35236 +35237 +3067 +586 +35238 +713 +35239 +43 +35240 +27669 +15718 +35241 +1290 +648 +16121 +19618 +35242 +89 +4055 +35243 +43 +35244 +24302 +3546 +8297 +35245 +16826 +35246 +1900 +17920 +35247 +5188 +9 +15261 +19486 +1295 +33627 +2804 +3553 +35248 +20291 +43 +35249 +20443 +35250 +35251 +21947 +29483 +31293 +35252 +35253 +303 +22552 +14947 +2038 +35254 +104 +9941 +28036 +43 +286 +533 +35255 +14369 +4055 +35256 +25865 +26724 +25307 +34402 +15 +6616 +24978 +28757 +337 +25793 +35257 +3814 +790 +20514 +17151 +9 +1090 +35258 +35259 +35260 +872 +35261 +8408 +35262 +27669 +9 +402 +43 +590 +35263 +32858 +31293 +25683 +24303 +35264 +10356 +19 +12178 +30877 +2430 +1047 +915 +35265 +35266 +35267 +4278 +1870 +24972 +430 +35268 +35269 +35270 +8512 +19 +18798 +35271 +35272 +8685 +11754 +31293 +32449 +18310 +13721 +1976 +25316 +586 +19618 +35273 +1203 +35274 +35275 +22666 +35276 +35277 +5908 +16102 +989 +35278 +21758 +248 +2694 +35279 +10264 +35280 +35281 +3546 +15 +22922 +11683 +19 +3546 +1612 +35282 +57 +35283 +21027 +3814 +4116 +3828 +142 +25584 +35284 +18659 +9 +1186 +5119 +35285 +29483 +590 +33120 +21527 +34402 +21947 +1401 +861 +35286 +29483 +35287 +2525 +23691 +14025 +35288 +1529 +27719 +35289 +1716 +35290 +35291 +2029 +1481 +35292 +35293 +32523 +57 +35294 +35295 +7053 +24864 +4547 +12120 +35296 +13905 +286 +22752 +1208 +35297 +35298 +30224 +2832 +1314 +26209 +155 +19 +25584 +9 +2501 +35299 +24864 +32 +35300 +21509 +165 +24021 +248 +19 +35301 +22666 +35302 +35303 +35304 +35305 +35306 +27669 +14562 +1021 +745 +1698 +20 +21947 +31168 +9560 +16437 +1011 +35307 +35308 +24864 +35309 +809 +35310 +89 +35311 +861 +9 +25683 +35312 +35313 +213 +35314 +303 +33120 +35315 +915 +29483 +590 +3546 +21689 +15951 +1870 +590 +2577 +153 +12202 +17422 +35316 +35317 +12432 +4055 +35318 +1090 +21426 +35319 +21947 +35320 +35321 +18654 +17020 +35322 +35323 +20130 +19618 +35324 +665 +1864 +21031 +286 +4055 +9 +35325 +25316 +33120 +2577 +1082 +35326 +4001 +34264 +25237 +19618 +33650 +2318 +35327 +35328 +3546 +35329 +25316 +345 +16437 +24144 +15533 +35330 +13721 +13390 +35331 +35332 +35333 +17497 +2 +14369 +35334 +35335 +35336 +27669 +736 +26861 +1584 +248 +9 +35337 +1924 +8460 +1154 +5925 +14935 +3010 +14 +1112 +35338 +19 +9 +21947 +3376 +35339 +53 +28036 +35340 +35341 +1612 +14888 +35342 +4055 +188 +5075 +3926 +35343 +35344 +1716 +19 +2289 +24144 +35320 +35345 +210 +188 +849 +35346 +1082 +35347 +35348 +17956 +970 +60 +28441 +35349 +35350 +16826 +35351 +14330 +590 +301 +66 +12936 +29483 +27669 +35352 +14477 +3546 +4 +19907 +5431 +345 +284 +35353 +17151 +17714 +19 +77 +213 +323 +32538 +1013 +35354 +3330 +35355 +1090 +26683 +27708 +1090 +35356 +35357 +16437 +6658 +32 +21689 +57 +35358 +337 +35359 +15 +23776 +35360 +7034 +16677 +35361 +4055 +35362 +35363 +209 +337 +140 +234 +34531 +303 +28317 +35364 +284 +4565 +35365 +495 +248 +15517 +3104 +33120 +35366 +35367 +35368 +35369 +35370 +35371 +17349 +7991 +284 +20700 +35372 +22922 +35373 +14369 +35374 +35375 +35376 +4055 +6294 +4765 +14477 +35377 +35378 +35379 +35380 +66 +613 +35381 +35382 +27669 +35383 +9 +43 +103 +35384 +971 +89 +19 +8670 +815 +57 +15 +33120 +35385 +35386 +16389 +34402 +19 +5780 +155 +35387 +35388 +19 +24864 +35389 +13829 +4698 +19 +27954 +3815 +19 +303 +35368 +35390 +25316 +1604 +35391 +25237 +5839 +590 +35392 +13279 +10028 +694 +18154 +713 +35393 +35394 +35395 +30877 +533 +35396 +17635 +35397 +5217 +35398 +7817 +35399 +1991 +31293 +14369 +303 +35400 +35401 +15669 +22989 +35402 +317 +32 +720 +25943 +35403 +15718 +3546 +35404 +35405 +35406 +533 +4634 +35407 +34 +5192 +35408 +14369 +35409 +35410 +4055 +24303 +30917 +25237 +3553 +21947 +35411 +35412 +29200 +35413 +35414 +35415 +21836 +35416 +3202 +15 +16258 +25239 +35417 +19 +19 +331 +2135 +21947 +35418 +8392 +357 +9 +12751 +14856 +6344 +2197 +35419 +21689 +554 +35420 +12987 +35421 +18310 +8372 +35422 +35423 +35424 +3316 +35425 +19 +30877 +35426 +373 +34402 +35427 +35428 +35429 +35430 +33113 +2770 +303 +35431 +21031 +484 +20218 +23442 +35432 +2724 +17571 +35433 +35434 +2310 +19 +142 +345 +35435 +21947 +33963 +30877 +30051 +4634 +19335 +7998 +35436 +31098 +35437 +35438 +25683 +337 +4055 +24666 +35439 +35440 +35441 +35442 +35443 +1300 +24864 +34402 +1867 +284 +35444 +9 +3137 +29 +24725 +28490 +24967 +598 +822 +14369 +43 +35445 +35446 +35447 +10028 +24864 +1021 +495 +35448 +5085 +33434 +284 +29381 +35449 +665 +27669 +349 +35450 +35451 +590 +35452 +35453 +35454 +15718 +19618 +35455 +1330 +464 +24864 +2577 +27669 +35456 +43 +14330 +286 +15989 +32 +2694 +8769 +29434 +35457 +17472 +15718 +2117 +35458 +35459 +35460 +20 +35461 +1091 +9410 +1090 +15367 +28317 +31293 +345 +19 +35462 +683 +9 +28028 +24303 +21573 +35320 +5806 +25237 +35463 +43 +24896 +35464 +35318 +35465 +35466 +35467 +15 +24303 +13721 +35468 +35469 +57 +4055 +35470 +14363 +2 +35471 +35472 +99 +2577 +35473 +1316 +35474 +35475 +35476 +4311 +19 +35477 +13638 +24263 +35478 +35479 +19205 +35480 +574 +1090 +14369 +35481 +16887 +2260 +4944 +35482 +35483 +694 +9 +20 +29381 +3743 +345 +57 +25237 +35484 +1107 +34656 +16443 +35485 +18896 +1376 +35486 +35487 +9 +35488 +2274 +25683 +35489 +14369 +342 +35490 +35491 +35492 +25281 +28753 +4055 +9 +25584 +35493 +30317 +590 +8525 +35494 +495 +29636 +35495 +35496 +35497 +26702 +20290 +35498 +35499 +1010 +736 +1234 +35500 +11471 +33128 +9738 +35501 +21947 +18951 +35502 +35503 +11822 +2733 +590 +12158 +2 +35504 +24303 +25683 +35505 +35506 +345 +66 +35507 +533 +35508 +11003 +35509 +2315 +28247 +35510 +15 +35511 +274 +35512 +736 +21947 +5318 +9 +573 +1208 +35513 +35514 +35515 +35516 +21947 +21947 +35517 +35518 +14330 +8670 +31293 +595 +19 +4055 +35519 +19618 +21031 +595 +509 +19 +7053 +35520 +35521 +35522 +35523 +15718 +35524 +33120 +35525 +3546 +35526 +19655 +249 +29483 +14102 +9 +31488 +5629 +35527 +35528 +35529 +3976 +6505 +19852 +24864 +2853 +25140 +33627 +1107 +25943 +32920 +35530 +363 +32359 +35531 +35532 +35533 +14369 +9 +21791 +1090 +2561 +19579 +14 +35534 +14369 +35535 +1090 +1208 +1090 +89 +4921 +35536 +22308 +971 +35537 +21947 +35538 +57 +35539 +12005 +1310 +35540 +6533 +35541 +25943 +9 +16437 +590 +35542 +35543 +35544 +35545 +35546 +35547 +35548 +29483 +4116 +35549 +18479 +32 +32 +35550 +4247 +809 +34619 +14947 +35551 +6071 +21678 +39 +1157 +33693 +35552 +13913 +201 +24426 +10247 +9 +35553 +35554 +251 +138 +20572 +14712 +5188 +35555 +35556 +35557 +14604 +35558 +12926 +179 +35559 +21947 +8316 +14369 +1604 +566 +197 +9 +373 +21947 +10212 +5773 +1524 +35560 +35561 +35562 +35563 +35564 +27669 +15718 +20471 +30877 +677 +35565 +24045 +590 +736 +43 +15718 +35566 +35567 +19 +35568 +35569 +35570 +25683 +35571 +9 +35572 +29483 +3200 +590 +34402 +35573 +14369 +16 +43 +424 +19091 +35574 +16102 +35575 +35576 +35577 +178 +30224 +887 +35578 +25683 +35579 +33 +176 +35580 +21947 +18503 +21947 +35581 +11469 +35582 +25237 +231 +24303 +17093 +1090 +25242 +14175 +35583 +33278 +770 +3119 +8249 +43 +5780 +1073 +21947 +43 +35584 +694 +209 +35585 +21947 +9 +33650 +35586 +35587 +35588 +35589 +98 +35590 +30877 +35591 +4055 +30877 +13424 +34402 +33627 +29007 +3601 +12 +29 +3119 +35592 +20952 +35593 +35594 +35595 +251 +2 +3442 +35596 +35597 +28494 +2260 +4634 +35598 +4055 +25316 +18695 +96 +5393 +5188 +29956 +35599 +23103 +34212 +5780 +694 +35600 +35601 +1612 +21947 +15 +16375 +33758 +13848 +35602 +35603 +931 +14871 +188 +5394 +14001 +1689 +34804 +21947 +35604 +32816 +28230 +35605 +8053 +9 +43 +31293 +28672 +4364 +19646 +30877 +590 +12552 +35606 +14 +100 +2919 +35607 +9 +20616 +1047 +35608 +1090 +15583 +28199 +1655 +20805 +8967 +1090 +35609 +35610 +4055 +3767 +179 +590 +2694 +16102 +2410 +242 +15718 +35611 +35612 +35613 +8053 +28441 +26945 +33650 +35614 +15206 +35615 +22738 +5004 +13963 +60 +30209 +35616 +35617 +35618 +35619 +3553 +11428 +936 +590 +43 +3984 +15524 +35620 +35621 +33693 +35622 +14340 +2314 +31424 +35623 +27514 +286 +286 +279 +590 +35624 +35625 +35626 +35627 +35628 +35629 +5601 +35630 +140 +21947 +12055 +35631 +35632 +35633 +590 +1563 +27669 +16437 +590 +22552 +31293 +19 +35634 +1529 +76 +19091 +14477 +35635 +736 +4 +671 +35636 +7817 +35637 +1517 +30877 +27669 +35638 +35639 +28036 +35640 +35641 +35642 +43 +1889 +28490 +77 +33674 +7015 +27069 +35643 +20218 +5629 +19 +35644 +10591 +35645 +1090 +35646 +5119 +21309 +35647 +29483 +1715 +14947 +3407 +31293 +35648 +1812 +21947 +1112 +66 +35649 +590 +35650 +35651 +35652 +2314 +397 +1605 +27178 +28441 +20260 +34433 +19655 +31168 +35653 +9953 +35654 +15718 +35655 +2769 +35656 +31293 +35657 +35658 +176 +25683 +6950 +19294 +1157 +27453 +1090 +21689 +35659 +35660 +35661 +35662 +21689 +35663 +3546 +2502 +21885 +730 +35664 +35665 +35666 +43 +35667 +43 +35668 +35669 +2514 +35670 +35671 +22898 +677 +4116 +188 +26638 +35672 +349 +9163 +89 +33650 +2811 +1918 +35673 +35320 +446 +1924 +35674 +5400 +35675 +4795 +43 +35676 +35677 +14186 +15 +35678 +14 +33650 +35679 +5420 +34204 +35680 +590 +25316 +29483 +28441 +35681 +35682 +25943 +35683 +35684 +30551 +43 +19 +9095 +35685 +590 +43 +33627 +35686 +35687 +30307 +35688 +35689 +13666 +5188 +2446 +25316 +27669 +590 +35690 +2561 +24303 +15054 +9 +17165 +35691 +35692 +26159 +35693 +17698 +21698 +35694 +25140 +14630 +9 +35695 +7912 +31873 +35696 +9 +24303 +16803 +5415 +590 +21689 +14482 +101 +35697 +35698 +2872 +2342 +35699 +35700 +4155 +35701 +20 +35702 +39 +20161 +3828 +29032 +9 +1465 +96 +590 +8910 +745 +15081 +3408 +35703 +1013 +10271 +35704 +1817 +2310 +31098 +153 +2694 +33137 +14482 +20825 +24192 +9 +14369 +35705 +3480 +14369 +416 +25943 +35706 +3908 +24896 +554 +25943 +178 +14825 +15471 +178 +57 +35707 +30877 +3104 +35708 +35709 +35710 +11483 +35711 +18553 +2019 +35712 +35713 +11762 +590 +35714 +25584 +17891 +1060 +595 +25237 +4502 +18951 +30580 +209 +25140 +5400 +11966 +249 +77 +16024 +35715 +17897 +345 +35716 +31873 +57 +12371 +35717 +24864 +35718 +27069 +590 +35719 +35720 +30877 +35721 +123 +34433 +14161 +9 +35722 +35723 +35320 +35724 +35725 +24803 +89 +31293 +5085 +10961 +43 +29065 +25683 +4820 +590 +14369 +35726 +7835 +35727 +43 +7891 +28036 +31293 +32438 +21947 +2537 +35728 +35729 +25140 +16437 +9 +32725 +19 +35730 +21698 +7480 +20 +35731 +35732 +43 +9 +4598 +1743 +19 +4028 +5780 +5409 +29527 +60 +35733 +3251 +32410 +18064 +35734 +35735 +5832 +35736 +21947 +286 +35737 +35738 +34402 +35739 +35740 +9 +586 +34964 +21947 +35741 +36 +970 +35742 +7328 +6294 +35743 +15 +12661 +11073 +35744 +2253 +4885 +16466 +35745 +29981 +25683 +736 +19 +33258 +7053 +9 +16975 +21947 +24247 +35746 +35747 +35748 +2023 +35749 +1423 +694 +14604 +35750 +222 +35751 +1090 +35752 +27069 +1738 +18130 +25316 +9 +910 +6029 +25069 +14369 +590 +8392 +35753 +1434 +8967 +35754 +19383 +28961 +15718 +33659 +17670 +35507 +27355 +43 +286 +21102 +7553 +35755 +35756 +14343 +27507 +35757 +25943 +707 +34402 +915 +35758 +21947 +34 +694 +26150 +43 +2625 +16102 +1716 +35759 +6595 +35760 +35761 +35762 +35763 +16085 +35764 +34402 +24303 +35765 +270 +33627 +35766 +590 +35767 +9 +795 +43 +286 +446 +35768 +827 +35769 +1090 +200 +30209 +35770 +35771 +18503 +12417 +24751 +35772 +35773 +18951 +35774 +29483 +13287 +31293 +4055 +1489 +35 +29200 +3908 +35775 +2655 +590 +35776 +35777 +35778 +9 +9941 +33627 +15535 +35779 +32 +35780 +35781 +25316 +25683 +15655 +15 +1920 +35782 +590 +317 +707 +3492 +958 +19 +14330 +646 +554 +22 +18350 +349 +31796 +35783 +35784 +35785 +25 +35786 +16102 +35787 +7855 +35320 +22963 +66 +35788 +15718 +2324 +31293 +8418 +28480 +14330 +19655 +4055 +4398 +35789 +35790 +35791 +21947 +7045 +21027 +342 +35792 +34402 +9561 +35793 +5409 +554 +35794 +8668 +23271 +3598 +27581 +25237 +201 +19 +35795 +10239 +14369 +35796 +112 +14330 +35797 +35798 +5755 +3481 +665 +35799 +250 +3287 +1224 +286 +2006 +185 +301 +5065 +176 +27719 +18331 +155 +43 +35800 +3829 +27669 +33278 +12013 +30877 +1478 +14992 +5188 +1437 +25316 +43 +43 +4055 +35801 +35802 +379 +35803 +5627 +35804 +35805 +33120 +286 +12987 +14604 +9 +178 +35806 +240 +35807 +34 +2 +23651 +31293 +2 +35808 +1415 +7537 +35809 +35810 +3484 +24864 +27669 +2919 +35811 +33368 +677 +35812 +14 +77 +590 +35813 +66 +17058 +590 +35814 +34908 +12987 +35320 +35815 +3842 +19 +35816 +35817 +323 +694 +357 +35481 +35818 +35819 +32782 +14240 +30051 +590 +35820 +24303 +179 +2 +29381 +28549 +8393 +35821 +970 +35822 +10111 +35823 +2253 +35824 +24864 +35825 +15718 +35826 +43 +137 +26724 +35827 +573 +9 +35828 +35829 +13721 +1515 +5780 +19 +15718 +970 +2537 +2619 +30877 +28194 +13721 +10230 +1502 +27140 +35830 +24045 +861 +19 +35831 +13721 +35832 +31293 +35833 +43 +9 +176 +35834 +35829 +30877 +34402 +5085 +1559 +21947 +14688 +14840 +24303 +21027 +18079 +8357 +43 +5075 +31293 +35835 +35836 +35837 +1157 +35838 +25129 +19983 +35839 +27705 +35840 +35841 +35842 +345 +514 +14001 +35843 +9 +590 +35844 +99 +35845 +35846 +15384 +35847 +13570 +28082 +35848 +35849 +34402 +35850 +11593 +24253 +35851 +17553 +35852 +683 +286 +35853 +33120 +2537 +35854 +29483 +35855 +115 +169 +46 +25237 +16511 +27954 +17151 +5085 +35856 +5197 +35857 +342 +35858 +14962 +33553 +27329 +1415 +9 +35859 +32518 +98 +30051 +590 +24864 +9460 +35860 +35861 +35862 +15428 +16102 +14827 +28441 +3553 +15 +35863 +352 +26496 +1139 +35864 +35865 +2476 +35866 +8798 +33758 +446 +590 +35867 +1056 +35868 +16437 +9 +327 +27669 +35869 +35870 +35871 +13538 +1100 +35872 +35873 +17864 +35874 +9 +1870 +57 +26323 +14 +12404 +35875 +14 +1524 +35876 +971 +35877 +35878 +29483 +43 +35879 +15 +35880 +35881 +286 +207 +15 +35882 +21947 +35883 +823 +671 +35884 +936 +27798 +4752 +27069 +1924 +25683 +1533 +352 +43 +155 +23103 +18982 +1300 +35885 +15989 +19 +35886 +8717 +35887 +10601 +35888 +25237 +35889 +2804 +26787 +30969 +6161 +9 +15 +7019 +8756 +13721 +35890 +35891 +35892 +14 +35893 +3 +35894 +209 +12916 +35895 +989 +2694 +35896 +35897 +815 +1189 +590 +6251 +35898 +2310 +27669 +576 +35899 +24864 +616 +17911 +4693 +35900 +1249 +35901 +24862 +15718 +19 +17911 +3546 +29200 +4055 +188 +15666 +35902 +970 +9871 +29483 +16618 +35903 +590 +35904 +1172 +35905 +35906 +12936 +21947 +35907 +35908 +26946 +2064 +25237 +12240 +35909 +28317 +286 +19091 +2410 +43 +19 +35910 +21031 +27669 +52 +20 +4803 +21947 +514 +35911 +201 +671 +25140 +7835 +35912 +5085 +29381 +35913 +1364 +35914 +35915 +2243 +4055 +35916 +35917 +21006 +26361 +22963 +33693 +10643 +25133 +35918 +29424 +31293 +5780 +10979 +23103 +35919 +9 +5021 +6766 +29721 +32805 +35920 +377 +8756 +35921 +35922 +35923 +1090 +25683 +22109 +35844 +1566 +3213 +341 +24303 +35924 +33650 +9 +35925 +14435 +399 +34402 +35926 +29483 +26666 +33113 +14909 +35927 +35928 +1442 +35929 +3055 +9 +29483 +4055 +14477 +35930 +25140 +16437 +35931 +35932 +17151 +10239 +35933 +35934 +31293 +31293 +35935 +703 +13365 +35936 +35937 +14369 +548 +32 +35938 +35939 +4908 +554 +35940 +35320 +18695 +3353 +677 +8961 +2694 +29629 +30877 +35941 +31293 +35942 +43 +2769 +823 +259 +28116 +35943 +35944 +35945 +26744 +35946 +35947 +35948 +35949 +14001 +35950 +9210 +35951 +270 +1090 +35952 +209 +5908 +35953 +11593 +35954 +416 +10601 +35955 +35956 +590 +35957 +35958 +5085 +970 +1710 +35959 +7813 +573 +29483 +1090 +35960 +9953 +1234 +19 +35961 +590 +24303 +32449 +35962 +35963 +34433 +22607 +14477 +35964 +43 +35965 +14669 +9 +209 +14942 +137 +27525 +24045 +21729 +6095 +14477 +35966 +35967 +30877 +35968 +35969 +1976 +2561 +495 +9 +32 +35970 +35773 +35971 +20442 +1316 +7912 +35972 +35973 +35974 +3 +15718 +26069 +25659 +35975 +29687 +35976 +27024 +35977 +25061 +12555 +35978 +19 +35979 +43 +1100 +19 +35980 +7480 +35981 +35982 +30877 +2314 +35983 +3407 +317 +35984 +272 +35985 +35986 +35987 +35988 +21947 +19 +8849 +869 +35989 +9 +1808 +35990 +14103 +20138 +1834 +28490 +35991 +4055 +35992 +35993 +35994 +1604 +27262 +25237 +29628 +2356 +3003 +35995 +35996 +1531 +25316 +613 +13304 +2136 +35997 +35998 +4658 +35999 +19618 +1575 +15298 +43 +15718 +36000 +36001 +36002 +21947 +36003 +19 +2619 +36004 +29204 +28186 +379 +36005 +11176 +36006 +36007 +36008 +1425 +36009 +15035 +36010 +9 +36011 +36012 +1013 +13721 +22963 +36013 +25300 +36014 +42 +36015 +36016 +20952 +16328 +30224 +36017 +10 +19372 +14299 +29483 +36018 +16437 +4775 +36019 +36020 +36021 +33627 +19618 +36022 +24678 +7191 +36023 +9258 +19009 +31293 +32564 +10853 +14369 +28307 +1790 +36024 +36025 +36026 +36027 +2537 +36028 +36029 +3755 +5780 +12827 +36030 +36031 +9 +2463 +36032 +26496 +29800 +576 +5188 +36033 +24303 +36034 +36035 +36036 +36037 +16 +25528 +33444 +36038 +29597 +36039 +317 +1090 +36040 +36041 +36042 +1082 +21947 +27669 +36043 +14369 +12185 +338 +686 +36044 +36045 +36046 +36047 +43 +22 +861 +5344 +4367 +36048 +36049 +36050 +25316 +21947 +36051 +31873 +24303 +943 +24303 +29145 +3976 +15 +1090 +36052 +14477 +17549 +13529 +4938 +12198 +13680 +36053 +9561 +1615 +1013 +29938 +32 +36054 +36055 +36056 +36057 +248 +32402 +970 +286 +36058 +36059 +36060 +36061 +36062 +25140 +34346 +36063 +201 +4624 +1021 +141 +17356 +36064 +36065 +248 +1745 +27669 +337 +43 +17956 +317 +43 +13317 +14477 +14477 +28036 +36066 +30877 +1812 +33368 +19 +34641 +36067 +36068 +1013 +2814 +19 +31346 +36069 +25237 +3994 +18350 +27669 +36070 +15989 +35427 +21027 +8297 +21689 +36071 +98 +36072 +36073 +36074 +115 +36075 +13905 +32402 +36076 +14342 +36077 +14369 +36078 +1090 +36079 +1116 +248 +14369 +36080 +495 +2019 +36081 +4502 +398 +36082 +18844 +36083 +2324 +1710 +36084 +36085 +36086 +6116 +3546 +337 +5085 +178 +9163 +21947 +16798 +36087 +36088 +36089 +36090 +36091 +4463 +1090 +36092 +349 +303 +77 +2410 +14553 +36093 +27387 +1637 +12371 +36094 +34957 +19 +20 +30877 +373 +736 +6627 +36095 +17151 +36096 +36097 +30224 +831 +7176 +36098 +36099 +2577 +36100 +77 +36101 +11483 +29 +1562 +36102 +14947 +213 +36103 +337 +31474 +345 +337 +36104 +21947 +24303 +590 +30040 +8282 +3964 +736 +36105 +338 +36106 +43 +5085 +164 +9 +30877 +33627 +15 +43 +554 +1090 +36107 +36108 +590 +14369 +284 +303 +36109 +36110 +36111 +20 +13207 +533 +24864 +1090 +36112 +9 +43 +1090 +3657 +36113 +11171 +36114 +6571 +28441 +29381 +1605 +14330 +57 +26577 +568 +89 +36115 +36116 +36117 +36118 +36119 +3186 +32642 +36120 +36121 +303 +34181 +1090 +31293 +36122 +31603 +36123 +2525 +36124 +36125 +19318 +27719 +36126 +25237 +36127 +4885 +14369 +1224 +25237 +3569 +213 +9 +270 +7615 +36128 +31098 +2694 +9396 +36129 +27599 +342 +1090 +27669 +36130 +14079 +36131 +34402 +36132 +25 +5229 +33120 +36133 +28441 +20 +31225 +14369 +36134 +36135 +17730 +22412 +2616 +915 +36136 +345 +3335 +17151 +1710 +29402 +114 +213 +36137 +9 +36138 +12597 +60 +554 +2195 +36139 +22986 +36140 +21088 +36141 +3994 +9 +6505 +19907 +887 +36142 +3978 +1361 +13721 +36143 +24303 +36144 +377 +36145 +15718 +36146 +2619 +30917 +36147 +36148 +36149 +1090 +36150 +36151 +36152 +590 +4 +36153 +24154 +29544 +7053 +11026 +2525 +23103 +36154 +19 +3546 +5780 +36155 +36156 +14013 +13539 +57 +3546 +36157 +3546 +14369 +36158 +24864 +6054 +1637 +36159 +2206 +36160 +35568 +36161 +3601 +36162 +16466 +9543 +16242 +36163 +19 +358 +28441 +36164 +201 +1090 +491 +1508 +36165 +8668 +13807 +2577 +17151 +36166 +24303 +1089 +36167 +36168 +1090 +36169 +15705 +1090 +872 +19 +31668 +1712 +36170 +1688 +36171 +15718 +3435 +36172 +36173 +43 +5904 +1867 +25316 +1157 +36174 +27719 +4002 +36175 +24864 +36176 +1157 +29561 +36177 +35320 +20768 +43 +17136 +36178 +15226 +201 +19618 +98 +2567 +57 +809 +36179 +30224 +36180 +36181 +27954 +9629 +28036 +27538 +13359 +590 +36182 +590 +17151 +36183 +31293 +36184 +9 +1364 +33627 +43 +7053 +36185 +5188 +9 +3546 +13908 +30877 +345 +23103 +36186 +66 +36187 +36188 +26613 +36189 +36190 +36191 +36192 +36193 +34402 +519 +5833 +36194 +317 +25 +9 +14369 +554 +15 +25455 +19618 +28923 +14330 +2882 +36195 +29381 +19 +30877 +15938 +36196 +3484 +197 +36197 +519 +323 +36198 +43 +2406 +17151 +566 +36199 +21746 +137 +36200 +11008 +14947 +36201 +36202 +1429 +36203 +36204 +77 +36205 +25382 +1229 +15 +1870 +36206 +36207 +8249 +36208 +19 +15 +36209 +21947 +21689 +386 +8042 +6595 +43 +19 +597 +58 +29981 +13996 +23190 +1524 +736 +43 +15718 +317 +36210 +36211 +36212 +20510 +33099 +18707 +36213 +17151 +9934 +36214 +36215 +36216 +36217 +3067 +36218 +16560 +14887 +9 +2694 +436 +26357 +795 +18107 +59 +656 +178 +16 +1090 +34402 +36219 +36220 +303 +36221 +9 +36222 +19 +43 +36223 +43 +242 +971 +36224 +990 +1562 +21261 +646 +15718 +36225 +21698 +36226 +464 +17151 +201 +123 +36227 +36228 +2865 +123 +10349 +36229 +36230 +36231 +36232 +20600 +13465 +36233 +20571 +33838 +25097 +36234 +598 +36235 +10156 +36236 +15597 +2865 +36237 +3867 +36238 +25683 +36239 +23103 +15 +34337 +3764 +24864 +3317 +60 +4166 +597 +36240 +36241 +1090 +915 +14369 +1384 +590 +446 +36242 +31293 +36243 +18940 +43 +6214 +36244 +36245 +1870 +27355 +1612 +36246 +34402 +14369 +677 +27069 +31346 +36247 +36248 +9 +34 +43 +33120 +33330 +36249 +36250 +15718 +14 +15718 +27669 +36251 +36252 +25659 +36253 +14102 +15718 +31168 +29204 +4521 +36254 +201 +841 +24303 +2314 +36255 +36256 +1018 +19 +26414 +36257 +36258 +36259 +36260 +89 +19209 +14369 +29483 +21863 +36261 +43 +36262 +36263 +36264 +36265 +36266 +21045 +845 +1112 +32 +43 +36267 +36268 +1842 +30650 +24896 +533 +36269 +115 +12180 +22963 +5780 +36270 +658 +16121 +36271 +14369 +3369 +34650 +1829 +736 +36272 +720 +2694 +25659 +179 +36273 +36274 +32 +36275 +36276 +26209 +18242 +3598 +36277 +536 +36278 +36279 +4502 +36280 +1605 +9 +36281 +22256 +9 +3553 +17382 +887 +3567 +36282 +36283 +24725 +36284 +36285 +36286 +19 +36287 +736 +9 +3081 +35320 +36288 +590 +265 +43 +1885 +36289 +19918 +3484 +339 +14330 +36290 +36291 +4 +13748 +36292 +36293 +17228 +1920 +21947 +34402 +36294 +30224 +25237 +36295 +36296 +36297 +36298 +827 +19 +36299 +30224 +36300 +36301 +24144 +36302 +14001 +18896 +14001 +849 +3978 +36303 +115 +24862 +36304 +9 +36305 +736 +2619 +736 +36306 +554 +36307 +3330 +19 +36308 +9 +36309 +15718 +1901 +36310 +24045 +36311 +32984 +76 +43 +36312 +16826 +57 +36313 +43 +1011 +36314 +15718 +36315 +32 +1454 +14204 +15 +768 +36316 +29716 +36317 +15 +58 +36318 +188 +24144 +43 +2 +35458 +14363 +736 +14 +14342 +17326 +31293 +36319 +7835 +36320 +36321 +14369 +36322 +24864 +15298 +13140 +28317 +36323 +36324 +25943 +36325 +24144 +36326 +5963 +172 +36327 +36328 +31293 +19618 +209 +36329 +36330 +1169 +2260 +9 +22 +140 +8896 +345 +4 +30877 +24725 +36331 +17911 +36332 +345 +25316 +36333 +5539 +14061 +1090 +5117 +36334 +35409 +2728 +34375 +19750 +21947 +21251 +36335 +10505 +1222 +590 +25 +22818 +36336 +2576 +27669 +43 +30051 +33627 +8986 +21689 +36337 +19858 +36338 +36339 +36340 +6519 +36341 +36342 +19 +7601 +36343 +32871 +5253 +30051 +35104 +6263 +29483 +5014 +1716 +36344 +21947 +36345 +36346 +36347 +20745 +19852 +25943 +11966 +32 +1107 +1870 +9 +14477 +14260 +5780 +36348 +18830 +5431 +369 +36349 +36350 +53 +36351 +10791 +4364 +30373 +36352 +4531 +36353 +34402 +18782 +141 +16429 +2733 +4055 +26361 +2314 +342 +3546 +21791 +36354 +36355 +6624 +19 +590 +2406 +57 +36356 +415 +36357 +36358 +179 +33627 +36359 +43 +4055 +201 +36360 +10789 +14330 +286 +915 +29 +27669 +36361 +13721 +36362 +25140 +36363 +14369 +36364 +36365 +15718 +19218 +14814 +36366 +3958 +31098 +36367 +8342 +342 +9 +36368 +36369 +36370 +36371 +36372 +36373 +26559 +28441 +20443 +23588 +1870 +265 +36374 +19 +176 +109 +24864 +25316 +9 +36375 +36376 +137 +3061 +1172 +9 +36377 +36378 +23103 +17698 +12989 +36379 +36380 +10 +36381 +36382 +8896 +1680 +1234 +1514 +34650 +36383 +36384 +671 +36385 +590 +29628 +36386 +15 +13843 +9 +67 +15 +23103 +20187 +178 +14001 +16798 +676 +36387 +14 +36388 +36389 +34850 +36390 +17151 +9 +43 +33627 +36391 +751 +36392 +1116 +2733 +27599 +36393 +5169 +28923 +14363 +25776 +36394 +3050 +1604 +36395 +12480 +9 +845 +36396 +36397 +36398 +32 +21947 +57 +354 +36399 +34402 +15 +36400 +21647 +1716 +36401 +415 +17151 +57 +36402 +36403 +7157 +36404 +43 +104 +12180 +2561 +12343 +15 +17941 +26484 +36405 +2164 +32253 +9481 +15718 +36406 +4528 +9 +6710 +9 +36407 +29381 +36408 +9941 +25140 +36409 +379 +36410 +11469 +936 +736 +36411 +36412 +13943 +36413 +1566 +8110 +14369 +33120 +1310 +3743 +228 +7835 +36414 +36415 +36416 +15437 +36417 +24303 +7053 +4055 +36418 +2936 +36419 +36420 +36421 +415 +9 +30650 +14369 +28502 +36422 +36423 +2694 +36424 +7 +36425 +25584 +36426 +11321 +345 +23103 +586 +29981 +11571 +33627 +36427 +815 +7471 +26125 +3553 +9 +13721 +1090 +36428 +36429 +36430 +7208 +4055 +43 +7107 +34 +26559 +349 +3104 +36431 +345 +36432 +36433 +345 +36434 +12518 +18588 +36435 +31293 +36436 +349 +29381 +104 +2902 +1508 +36437 +1021 +30224 +12987 +3546 +36438 +286 +36439 +5394 +57 +3317 +24864 +36440 +33501 +36441 +24303 +19 +36442 +36443 +16056 +14369 +19 +36444 +36445 +32410 +24207 +14363 +14343 +72 +15 +36446 +8351 +25683 +10910 +491 +27669 +36447 +541 +23176 +2356 +27508 +36448 +36449 +36450 +279 +2197 +43 +21947 +365 +701 +36451 +23921 +4055 +36452 +35352 +36453 +27669 +36454 +36455 +3842 +176 +36456 +36457 +31873 +36458 +2476 +36459 +36460 +399 +36461 +36462 +36463 +36464 +141 +25237 +17602 +43 +17149 +9 +705 +845 +36465 +18787 +27669 +36466 +345 +36467 +33 +31346 +36468 +27669 +36469 +23970 +36470 +20 +36471 +9 +36472 +17150 +6571 +25632 +36473 +19618 +3546 +3236 +16 +36474 +15718 +484 +3059 +6317 +43 +15718 +533 +36475 +14571 +36476 +25237 +1870 +36477 +36478 +31293 +590 +671 +25683 +491 +36479 +36480 +910 +36481 +36482 +30458 +33494 +36483 +21829 +36484 +28549 +36485 +36486 +11273 +15718 +36487 +43 +23322 +36488 +15 +98 +36489 +14604 +7107 +11774 +34264 +33627 +713 +194 +1810 +36490 +36491 +5780 +13566 +17151 +36492 +1384 +36493 +11822 +25943 +491 +4033 +36494 +33650 +14330 +36495 +286 +25316 +25 +3059 +590 +36496 +36497 +36498 +36499 +6829 +1107 +590 +349 +36500 +36501 +8774 +36502 +36503 +34181 +357 +27069 +36504 +36505 +29284 +14369 +317 +17670 +36506 +36507 +12166 +19618 +30224 +36508 +554 +36509 +21280 +590 +15718 +36510 +25053 +36511 +22 +3484 +15718 +19 +36512 +27669 +36513 +27798 +1116 +286 +12987 +15 +36514 +15 +36515 +12299 +89 +4441 +9 +7725 +36516 +33120 +33508 +36517 +7991 +28392 +872 +21947 +1508 +1090 +36518 +1100 +1696 +745 +36519 +36520 +5415 +31041 +21958 +36521 +21947 +566 +36522 +16325 +58 +28402 +34628 +30051 +57 +36424 +36523 +3148 +14679 +9 +3 +36524 +27669 +36525 +36526 +17670 +36527 +3546 +6595 +597 +699 +10123 +9 +36528 +8821 +36529 +34181 +20514 +3196 +484 +12646 +15718 +11321 +36530 +36531 +36532 +4982 +36533 +36534 +9410 +2061 +30877 +36535 +36536 +138 +32 +36537 +19 +3599 +36251 +34402 +33278 +5344 +36538 +27835 +19 +5409 +15718 +89 +27954 +36539 +7154 +36540 +9 +25237 +36541 +16866 +36542 +3994 +11593 +36543 +8096 +1090 +17151 +536 +5791 +915 +15718 +1688 +745 +970 +29483 +861 +1100 +36177 +1465 +32 +19579 +2367 +36544 +36545 +28219 +3553 +36546 +36547 +14369 +15 +14000 +36548 +1720 +4307 +3553 +1547 +36549 +33758 +1920 +12621 +36550 +17911 +13907 +30068 +586 +43 +36551 +6096 +745 +14 +32538 +57 +809 +16121 +36552 +36553 +3546 +31293 +11960 +936 +36554 +3491 +30224 +30224 +36555 +36556 +36557 +36558 +22752 +24 +22963 +14604 +26040 +30877 +36559 +66 +43 +9 +36560 +1524 +2206 +27277 +27684 +36561 +36562 +14616 +35546 +761 +60 +4897 +4468 +36563 +10147 +36564 +1615 +18311 +8146 +23442 +242 +36565 +228 +21188 +4279 +20 +18479 +2561 +6996 +20339 +358 +36566 +33890 +36567 +36568 +6505 +16589 +5316 +36569 +27141 +36570 +736 +36571 +970 +36572 +19655 +1605 +22082 +36573 +36574 +57 +32359 +36575 +16798 +36576 +19 +36577 +36578 +30877 +25140 +3296 +33120 +36579 +1013 +36580 +28961 +9 +36581 +36582 +23103 +590 +2476 +694 +1364 +36583 +4364 +573 +14001 +77 +31441 +36584 +222 +1502 +36585 +6950 +36586 +282 +36587 +36588 +21947 +20798 +27205 +197 +9 +24144 +36589 +2694 +33494 +1464 +36590 +31293 +590 +36591 +4055 +822 +249 +36592 +13452 +26484 +36593 +8668 +3553 +9 +36594 +21947 +20 +1444 +36595 +18077 +36596 +16678 +33278 +36597 +536 +4344 +5313 +36598 +533 +36599 +1384 +3886 +14369 +34402 +349 +1307 +36600 +30650 +14001 +4650 +19903 +541 +36601 +36602 +30177 +17151 +1291 +29844 +36603 +23103 +28317 +1056 +815 +36604 +590 +36605 +36606 +5145 +15647 +24864 +5627 +11966 +36607 +26604 +36608 +46 +36609 +2136 +36610 +36611 +15718 +21027 +474 +36612 +442 +3546 +36613 +33627 +815 +36614 +22922 +19 +26295 +25102 +19 +36615 +36616 +36617 +2926 +7964 +201 +30209 +39 +18045 +30877 +188 +7451 +36618 +27669 +16826 +19 +554 +30877 +36619 +5780 +1559 +36620 +31293 +33650 +36621 +36622 +33494 +13905 +36623 +345 +36624 +915 +36625 +179 +66 +36626 +36627 +9 +1090 +36628 +19 +66 +15718 +14363 +27669 +23603 +4055 +21947 +197 +36629 +36630 +36631 +36177 +25659 +8188 +29381 +21947 +484 +16096 +36632 +25316 +34532 +36633 +33061 +1107 +36634 +36635 +1262 +77 +36636 +15718 +9 +36637 +36638 +36639 +1682 +30458 +36640 +36641 +3546 +21947 +36642 +1082 +36643 +32 +36644 +11762 +19 +10 +36645 +8137 +4116 +19 +30051 +3999 +36646 +27669 +36647 +616 +2040 +36648 +36649 +6054 +613 +36650 +13566 +13721 +14363 +36651 +36652 +36653 +36654 +57 +411 +6116 +7053 +15536 +1920 +43 +1316 +36655 +15 +10356 +24864 +20745 +24303 +34402 +1559 +4055 +28961 +36656 +36657 +822 +27669 +286 +16437 +36658 +339 +185 +9 +5780 +31234 +36659 +827 +36660 +23103 +29381 +36661 +60 +36662 +36663 +33650 +19 +201 +24864 +18553 +140 +142 +36664 +36665 +155 +36666 +745 +21947 +20 +3059 +12 +36667 +36668 +7154 +15718 +5188 +36669 +36670 +201 +29200 +16 +4 +21947 +16290 +1745 +36671 +19 +24303 +4982 +11995 +971 +36672 +286 +24864 +9 +1228 +36673 +1720 +671 +19852 +31293 +36674 +19 +20514 +28961 +415 +250 +25584 +21689 +14330 +7600 +2 +2694 +23103 +36675 +665 +15 +36676 +20 +14751 +17670 +590 +36677 +286 +19 +9999 +2164 +17259 +36678 +11624 +323 +36679 +36680 +36681 +36682 +36683 +338 +20005 +5188 +32 +865 +14856 +36684 +590 +9 +43 +36685 +36686 +36687 +19907 +33061 +36688 +36689 +36690 +36691 +24864 +66 +18951 +1563 +4 +2500 +13323 +36692 +36693 +32449 +9 +21947 +474 +32 +1230 +53 +36694 +2561 +24864 +1090 +1870 +30877 +9 +36695 +77 +36696 +16437 +19 +3546 +3546 +3385 +30877 +17151 +23743 +554 +36697 +5188 +345 +613 +1112 +31293 +554 +415 +22963 +15 +30877 +736 +36698 +36699 +19794 +5966 +11966 +5623 +13323 +36700 +31433 +36701 +57 +23103 +36702 +25943 +36703 +25584 +29381 +36704 +1423 +301 +21226 +36705 +36706 +36707 +30877 +6518 +36708 +1961 +1244 +12124 +36709 +36710 +24725 +33650 +8967 +14947 +2865 +1384 +35427 +201 +12956 +5297 +694 +36711 +4452 +411 +36712 +36713 +197 +590 +21947 +36714 +2015 +35052 +1115 +4055 +18503 +21791 +8392 +36715 +32523 +25 +936 +5188 +14001 +9 +36716 +36717 +28317 +19 +5085 +9 +2694 +16466 +30877 +27117 +1524 +29527 +21947 +36718 +36719 +30877 +36720 +2476 +36721 +12987 +29483 +36722 +7379 +36723 +768 +6010 +8249 +9 +36724 +36725 +33494 +30877 +590 +19797 +590 +936 +586 +36726 +13279 +21266 +36727 +20 +1596 +36728 +1369 +278 +36729 +36730 +2254 +36731 +4441 +43 +7071 +15718 +36732 +43 +20 +27669 +36733 +31293 +16422 +31691 +36734 +16826 +36735 +76 +22 +15914 +21028 +35547 +1716 +1444 +942 +36736 +36737 +19852 +36738 +484 +286 +2655 +677 +36739 +13943 +14 +349 +36740 +586 +21947 +36741 +13260 +3546 +36742 +2330 +7154 +30877 +31139 +36743 +33627 +14369 +36744 +2764 +17151 +36745 +36746 +14477 +590 +25584 +66 +11624 +286 +1961 +36747 +1942 +36748 +36749 +36750 +36751 +1090 +36752 +43 +2460 +36753 +17144 +12987 +16329 +36754 +7399 +29981 +53 +36755 +2694 +33061 +36756 +36757 +15718 +286 +20933 +22 +8554 +861 +286 +114 +36758 +36759 +2314 +36760 +17151 +24303 +9246 +1961 +36761 +4820 +24303 +14 +3601 +36762 +15 +36763 +15 +5188 +1169 +12987 +36764 +36765 +2561 +25364 +16121 +25584 +23103 +590 +6950 +19655 +36766 +861 +4502 +36218 +36767 +2009 +33673 +14369 +5886 +21947 +36768 +14604 +2762 +36769 +5409 +4238 +36770 +36771 +36772 +76 +910 +303 +36773 +26361 +33627 +9 +26744 +3477 +99 +352 +7053 +36774 +36775 +1738 +331 +703 +13721 +1051 +36776 +9573 +5188 +35400 +213 +11341 +495 +2254 +30877 +495 +16466 +57 +3858 +15718 +28317 +178 +15824 +33650 +377 +4002 +31293 +20058 +1244 +9 +14369 +36777 +248 +12055 +36778 +1295 +415 +21947 +28317 +36779 +36780 +3976 +36781 +31225 +19618 +36782 +36783 +1606 +36784 +36785 +36786 +36787 +373 +36788 +36789 +21681 +36790 +15 +36791 +36792 +36793 +337 +19209 +29483 +30650 +4634 +36794 +36795 +1090 +36796 +827 +12 +36797 +27669 +11321 +36798 +36799 +3912 +36800 +36674 +5188 +36801 +28559 +19653 +30877 +36802 +5316 +2064 +36803 +43 +16437 +25316 +25237 +24864 +25140 +751 +36804 +36805 +36806 +15 +554 +20 +1021 +15718 +9 +19 +36807 +36808 +33890 +36809 +248 +23103 +12819 +4055 +14369 +36810 +32642 +248 +3491 +1425 +1300 +7364 +16820 +36811 +31225 +22963 +16443 +43 +4055 +36812 +8208 +7658 +36813 +43 +1531 +34402 +36814 +36815 +13535 +36816 +36817 +36818 +36819 +2356 +36820 +57 +36821 +3553 +19 +43 +36822 +1090 +646 +1502 +43 +36823 +36824 +35389 +491 +27669 +1907 +303 +13904 +36825 +9 +34233 +2581 +1090 +4155 +36826 +36827 +11754 +27669 +36828 +28272 +36829 +514 +3546 +713 +1195 +3353 +36830 +1882 +5773 +32880 +19 +3543 +36831 +36832 +4055 +36833 +15331 +19618 +30051 +36834 +30051 +57 +34264 +3546 +32 +30051 +36835 +36836 +1558 +23103 +1224 +36837 +36735 +24303 +36838 +36839 +31293 +27079 +36840 +283 +33890 +36841 +4055 +36842 +34402 +1090 +36843 +1011 +337 +9 +736 +12987 +24303 +36844 +30224 +23495 +1257 +337 +36845 +7053 +590 +36846 +36847 +19 +36848 +18439 +6051 +1310 +36849 +36850 +36851 +10262 +31160 +36852 +4502 +31691 +2561 +2694 +36424 +27669 +43 +36853 +736 +36854 +36855 +36856 +36857 +28317 +5650 +77 +30224 +33 +57 +36858 +36639 +30747 +27117 +36859 +29200 +1013 +19 +2957 +36860 +1051 +31576 +590 +19 +36861 +3 +25584 +36862 +5582 +1539 +24998 +1208 +26142 +861 +36863 +31168 +36864 +590 +2166 +1107 +13375 +36865 +15 +12194 +57 +27669 +27095 +2694 +533 +736 +5780 +115 +30983 +1091 +36866 +36867 +15718 +736 +4055 +354 +36868 +36869 +36870 +21947 +33280 +36871 +60 +29791 +6840 +36872 +36873 +36874 +53 +31109 +21947 +36875 +36876 +19 +25140 +736 +36877 +5045 +36878 +36879 +398 +1870 +66 +9976 +16466 +36328 +36880 +36881 +16066 +14340 +14369 +36882 +36883 +14947 +1090 +845 +11762 +6627 +26361 +14909 +33650 +12020 +28317 +554 +36884 +7855 +36885 +1349 +32 +36886 +36887 +36888 +25 +4055 +492 +248 +25237 +43 +495 +27669 +36889 +36890 +415 +43 +1090 +19 +36891 +29483 +28441 +665 +9497 +36892 +24725 +4787 +358 +25316 +20514 +43 +36893 +19 +36894 +14330 +1100 +36895 +1018 +27669 +43 +29200 +869 +354 +36896 +36897 +36898 +21947 +19 +36899 +36900 +439 +3546 +19 +36901 +14731 +536 +36902 +36903 +1920 +3842 +31098 +1349 +36904 +36905 +303 +3546 +20329 +15413 +2728 +8146 +36906 +887 +36907 +27117 +210 +17151 +36908 +12987 +15 +3546 +1090 +36909 +36910 +36911 +464 +36912 +36913 +36914 +590 +31225 +1090 +36915 +1100 +646 +3546 +705 +31098 +36916 +14001 +36917 +36918 +21089 +2782 +43 +16375 +36919 +36920 +1090 +36921 +248 +2865 +3484 +6306 +12096 +66 +29628 +1090 +590 +30051 +179 +36922 +3546 +36923 +46 +1011 +1508 +2561 +345 +25395 +16 +4 +958 +36924 +5409 +36925 +22556 +36926 +6785 +590 +2577 +104 +17151 +25281 +36927 +3994 +30051 +2769 +36928 +4236 +2913 +36929 +210 +4806 +648 +1524 +484 +15647 +36930 +495 +272 +20339 +21027 +1967 +36931 +36932 +19111 +32 +13829 +958 +31293 +36933 +29931 +19549 +36934 +34402 +24303 +1855 +10280 +5041 +4055 +720 +20853 +586 +36935 +19 +665 +286 +19618 +16466 +66 +13566 +43 +34602 +36936 +35888 +4028 +36937 +36938 +2 +44 +36939 +2593 +18517 +29483 +2324 +20443 +33650 +11715 +36940 +36941 +9460 +32496 +7666 +36942 +17151 +3353 +36943 +36944 +36945 +6595 +36946 +4055 +2349 +57 +4388 +25584 +16437 +17687 +36947 +4702 +98 +1154 +29204 +36735 +28317 +36948 +36949 +21947 +1245 +18982 +15498 +16 +36950 +36951 +36952 +36953 +514 +274 +7923 +36954 +9 +29483 +23302 +13517 +1716 +57 +9 +9 +36955 +8465 +36956 +36957 +179 +36958 +2274 +36959 +36960 +7053 +36735 +36961 +14001 +14 +43 +36962 +36963 +9 +5287 +36964 +43 +14369 +5849 +730 +36965 +36966 +16024 +36967 +11770 +303 +29381 +528 +19 +36968 +36969 +36970 +16437 +33650 +1082 +89 +14369 +286 +5409 +36971 +349 +1090 +8171 +36972 +36973 +30877 +29628 +36974 +3686 +36975 +2709 +19 +36976 +12005 +2728 +36977 +19 +14369 +36978 +9 +36979 +36980 +57 +2427 +1295 +36981 +21045 +3764 +36982 +19 +2260 +509 +24864 +1090 +36983 +43 +18695 +21781 +36424 +17092 +36984 +21689 +28549 +36985 +19 +30051 +29628 +23322 +26040 +48 +36986 +13113 +720 +35624 +32984 +6439 +36987 +27708 +36988 +36989 +1817 +36990 +36991 +1018 +345 +1090 +36992 +36993 +2197 +31293 +36994 +24765 +6067 +828 +14019 +36995 +16826 +17529 +36996 +19 +248 +29109 +14102 +24864 +36997 +33494 +31293 +18896 +15 +36998 +2314 +36999 +37000 +1765 +31382 +37001 +18345 +43 +590 +36424 +24045 +27669 +761 +33627 +2309 +37002 +37003 +31293 +3599 +43 +16292 +37004 +558 +5582 +491 +19 +4461 +1615 +37005 +37006 +37007 +736 +1870 +33445 +16239 +33615 +37008 +1224 +32 +21947 +15194 +37009 +5188 +2187 +337 +46 +37010 +37011 +12020 +26895 +26599 +14330 +37012 +7987 +9440 +19287 +37013 +22684 +37014 +30230 +29204 +815 +3858 +25829 +2865 +31098 +37015 +37016 +37017 +37018 +23352 +37019 +3546 +37020 +5085 +27069 +683 +337 +416 +37021 +37022 +19618 +28000 +1559 +27875 +37023 +2059 +37024 +34583 +337 +286 +342 +37025 +2325 +2410 +720 +19091 +37026 +31293 +37027 +7053 +37028 +7123 +37029 +671 +4055 +20700 +5780 +238 +37030 +37031 +37032 +11424 +354 +37033 +37034 +1716 +1090 +37035 +89 +1481 +21947 +21947 +34113 +491 +37036 +37037 +37038 +13150 +5313 +37039 +30877 +37040 +958 +2694 +2488 +14 +613 +33650 +29381 +37041 +37042 +284 +37043 +24864 +18448 +278 +30794 +2581 +37044 +33758 +37045 +15 +533 +29204 +3546 +4581 +37046 +37047 +342 +98 +37048 +37049 +1688 +538 +10174 +37050 +665 +36424 +25316 +13566 +37051 +37052 +4055 +37053 +37054 +8967 +2281 +37055 +37056 +28317 +37057 +34342 +20113 +37058 +1090 +37059 +37060 +536 +37061 +37062 +201 +37063 +3543 +936 +37064 +349 +37065 +1559 +3999 +30877 +29204 +37066 +185 +365 +37067 +37068 +37069 +29540 +37070 +37071 +34627 +31293 +17480 +17121 +37072 +2804 +1090 +37073 +37074 +14553 +57 +37075 +24864 +1765 +37076 +9 +37077 +349 +3597 +10356 +6364 +37078 +7619 +823 +625 +24144 +5827 +37079 +12684 +590 +13463 +19 +37080 +1824 +26361 +541 +32 +37081 +37082 +13145 +9 +43 +37083 +37084 +19618 +37085 +17880 +37086 +9210 +33494 +30224 +37087 +1090 +37088 +495 +1562 +37089 +31293 +21947 +30877 +590 +37090 +15718 +13205 +37091 +3406 +37092 +43 +1575 +2537 +7442 +37093 +37094 +24725 +37095 +15718 +22922 +8668 +17911 +36483 +89 +14330 +37096 +26815 +4808 +590 +736 +590 +37097 +37098 +89 +2802 +3875 +33185 +19 +15718 +1169 +28013 +34402 +19 +736 +37099 +5080 +2043 +29561 +16560 +36735 +37100 +1169 +24038 +37101 +37102 +590 +286 +31293 +26040 +37103 +37104 +1097 +37105 +30458 +19 +31293 +27117 +590 +478 +5780 +16879 +25237 +19618 +37106 +590 +37107 +37108 +22114 +12498 +597 +188 +37109 +43 +5371 +37110 +1047 +37111 +77 +1090 +37112 +23290 +1870 +345 +495 +37113 +2006 +1224 +13150 +37114 +4153 +37115 +25237 +377 +37116 +29628 +37117 +237 +14479 +37118 +30224 +1157 +1295 +13961 +14 +30051 +3409 +19 +37119 +37120 +37121 +37122 +892 +6104 +57 +19 +36819 +646 +3546 +1710 +22587 +4055 +10729 +37123 +37124 +9 +37125 +37126 +37127 +10 +464 +28317 +46 +1295 +694 +35427 +37128 +33650 +37129 +37130 +2770 +37131 +37132 +37133 +4766 +20710 +3994 +1090 +1862 +37134 +43 +25237 +842 +4055 +8668 +590 +37135 +37136 +23103 +4699 +19 +37137 +34 +3508 +17698 +36156 +6171 +37138 +15 +265 +37139 +3330 +37140 +28317 +31293 +15718 +11087 +33120 +22337 +19 +19 +37141 +30877 +176 +37142 +19 +26323 +36391 +1410 +37143 +19 +4808 +25943 +37144 +37088 +4245 +37145 +33113 +19 +37146 +5780 +37147 +37148 +43 +37149 +37150 +36424 +2 +33627 +14369 +29483 +142 +1082 +27069 +8668 +20572 +60 +37151 +345 +8338 +3546 +15572 +37152 +14330 +37153 +37154 +11312 +37155 +11822 +37156 +892 +3 +17151 +37025 +17151 +37157 +37158 +19 +3743 +29381 +7553 +37159 +37160 +2841 +37161 +14369 +16798 +37162 +22587 +29204 +37163 +37164 +286 +37165 +915 +28549 +27173 +23487 +1913 +3828 +37166 +37167 +20 +37168 +18951 +1503 +37169 +37170 +5188 +3790 +14553 +349 +2368 +37171 +33211 +8668 +31346 +416 +3484 +12751 +37172 +31293 +29483 +3660 +24864 +12005 +345 +28170 +37173 +18695 +12155 +7276 +37174 +37175 +28339 +37176 +30309 +37177 +37178 +37179 +286 +37180 +37181 +736 +13474 +25021 +37182 +22752 +9649 +4116 +35076 +1716 +30877 +2577 +19 +19 +37183 +1269 +15 +5080 +345 +37184 +37185 +4056 +27719 +16437 +185 +699 +495 +37186 +4463 +60 +37187 +828 +18780 +9 +37188 +37189 +1090 +37190 +20700 +8668 +2310 +37191 +37192 +9 +590 +30650 +2314 +43 +14369 +37193 +22788 +188 +14340 +30458 +736 +11620 +9 +37194 +590 +4055 +26496 +37195 +43 +3546 +104 +37196 +2175 +20 +14001 +1090 +15718 +2243 +25943 +37197 +720 +37198 +9649 +3559 +37199 +37200 +21947 +4302 +5780 +22420 +33916 +37201 +25260 +34402 +8668 +17911 +2919 +13566 +37202 +9560 +15718 +37203 +11754 +33120 +28666 +14369 +37204 +37205 +7015 +28549 +37206 +37207 +2694 +37208 +915 +37209 +37210 +37211 +37212 +37213 +25316 +3406 +37214 +43 +595 +36761 +37215 +26550 +24303 +9738 +37216 +23219 +37217 +37218 +14340 +24864 +37219 +29465 +24864 +34999 +30224 +37220 +43 +20700 +77 +37221 +27669 +37222 +21947 +37223 +43 +27669 +15172 +25316 +1384 +37224 +36527 +386 +37225 +554 +7987 +27669 +9 +37226 +25871 +1251 +37227 +4230 +2308 +399 +37228 +3950 +15446 +37229 +37230 +43 +2356 +37231 +14330 +19825 +18930 +1961 +18695 +37232 +3543 +37233 +16375 +37234 +910 +37235 +22963 +37236 +13493 +21669 +9 +9433 +19 +8100 +37237 +1481 +24864 +35068 +2577 +27669 +4747 +33494 +37238 +19 +9 +36424 +20329 +37239 +37240 +43 +11841 +9 +8668 +25237 +25316 +37241 +37242 +37243 +590 +30877 +8724 +37244 +37245 +415 +37246 +37247 +2410 +7341 +25683 +37248 +34703 +4278 +4461 +37249 +345 +4 +764 +33496 +37250 +37251 +22273 +9560 +33524 +37252 +34402 +37253 +12825 +24678 +22473 +15 +31098 +37254 +9 +29483 +18045 +37255 +27387 +3546 +37256 +43 +915 +3948 +7014 +21149 +11321 +14216 +6877 +37257 +37258 +19655 +15718 +37259 +37260 +57 +1115 +37261 +519 +37262 +37263 +6771 +9560 +37264 +37265 +37266 +28044 +6441 +823 +12590 +5188 +1090 +3978 +13361 +37267 +37268 +33650 +37269 +37270 +37271 +6950 +37272 +299 +16280 +19 +37273 +31098 +8967 +37274 +37275 +24303 +29483 +22922 +33650 +2593 +30224 +37276 +16798 +16102 +19582 +37277 +37278 +345 +37279 +37280 +33457 +37281 +37282 +37283 +37284 +43 +6364 +809 +37285 +37286 +4247 +37287 +37288 +1524 +37289 +16118 +2287 +37290 +29204 +37291 +37292 +3 +27669 +30224 +19 +2197 +27798 +3553 +19 +37293 +37294 +37295 +25902 +2406 +1082 +46 +31293 +36282 +37296 +554 +19655 +22922 +15 +37297 +37298 +43 +37299 +590 +6776 +37300 +349 +37301 +164 +484 +1566 +4463 +21947 +14 +415 +24303 +24919 +3976 +15705 +37302 +33113 +19852 +179 +12845 +13566 +37257 +35883 +2325 +19 +26755 +37303 +26006 +24725 +17911 +14330 +37304 +1870 +37305 +28317 +37306 +22 +37307 +19939 +57 +19 +66 +14369 +37308 +36486 +21947 +26496 +29483 +37309 +14330 +2514 +12987 +37310 +27669 +37311 +34402 +8545 +10244 +37312 +3005 +31293 +590 +35580 +37313 +13760 +1812 +10634 +37314 +8249 +19974 +37315 +37316 +77 +14001 +37317 +495 +176 +37318 +28961 +37319 +37320 +185 +7922 +4055 +3484 +21947 +14477 +14 +15 +36019 +35337 +37321 +590 +29687 +25316 +30073 +6095 +19618 +586 +349 +37322 +28494 +32 +37323 +720 +5088 +15 +37324 +7944 +5169 +37325 +37326 +37327 +37328 +27669 +3 +18045 +23841 +8301 +25316 +19 +37329 +30224 +37330 +37331 +1300 +89 +3553 +3601 +23303 +37332 +1743 +37333 +34779 +12987 +1051 +22963 +37334 +9497 +37335 +270 +671 +19 +740 +1310 +1090 +2260 +37336 +14369 +3829 +37337 +590 +33524 +60 +37338 +37339 +590 +30224 +197 +89 +17151 +43 +15718 +37340 +1961 +9273 +26804 +990 +23406 +46 +2318 +37341 +4530 +37342 +27669 +165 +27669 +37343 +35352 +3598 +5601 +37344 +4461 +9 +3372 +19618 +36157 +357 +37345 +43 +37346 +15718 +37347 +17151 +791 +6439 +8996 +2406 +677 +37348 +37349 +338 +1090 +1716 +37350 +37351 +1090 +37352 +37353 +34944 +37354 +32574 +7835 +37355 +18394 +19 +37356 +1937 +24457 +37357 +19852 +201 +9 +415 +24144 +21947 +9 +37358 +15486 +694 +29628 +1829 +17997 +37359 +98 +37360 +4055 +16422 +25584 +12934 +1428 +354 +19 +178 +28219 +6869 +736 +37361 +37362 +37363 +22963 +37364 +37365 +1109 +37366 +1749 +179 +5387 +28317 +33627 +1090 +37367 +872 +25140 +29 +590 +720 +37368 +663 +19 +37369 +4055 +37370 +37371 +5837 +37372 +179 +18100 +37373 +12005 +2342 +18369 +12 +15928 +3764 +5301 +37374 +37375 +33627 +37376 +37377 +317 +37378 +37379 +37380 +37381 +590 +37382 +37383 +37384 +8297 +2117 +24154 +24303 +37385 +37386 +37387 +196 +32944 +37388 +21947 +19 +5117 +37389 +29381 +677 +30877 +37390 +37391 +12152 +19618 +23103 +27118 +17911 +37392 +1790 +37393 +14369 +11213 +11717 +3546 +176 +1090 +33627 +33758 +16437 +37394 +22014 +37395 +4055 +13905 +37396 +37397 +23103 +736 +8668 +349 +1154 +37398 +436 +21027 +37399 +37400 +36333 +28441 +478 +29381 +4055 +5052 +1090 +2347 +13807 +27669 +37401 +37402 +43 +37403 +37404 +1992 +24324 +37405 +7053 +16437 +6122 +29483 +24864 +37406 +13311 +1090 +37407 +37408 +222 +23103 +9 +536 +37409 +14797 +303 +31293 +11188 +22827 +2015 +37410 +15203 +21686 +4364 +1870 +37411 +1120 +14477 +15718 +37412 +590 +37413 +37414 +1924 +19 +6171 +590 +6935 +5409 +37415 +37416 +26580 +37417 +36424 +24 +37418 +32 +19 +1768 +15718 +590 +17374 +34602 +3601 +1637 +6153 +37419 +37420 +37421 +24303 +29204 +25943 +1508 +21689 +37422 +37423 +764 +28518 +15 +37424 +33494 +15 +37425 +35409 +8668 +37426 +1356 +23103 +554 +14369 +37427 +37428 +11754 +20142 +9 +33650 +24864 +30580 +1090 +1900 +37429 +15718 +37430 +1912 +33758 +37431 +21947 +37432 +37433 +37434 +34 +22986 +3546 +31098 +37435 +1774 +411 +36727 +37436 +1559 +140 +14634 +32646 +17927 +37437 +21947 +5188 +37438 +37439 +37440 +37441 +37442 +15718 +21127 +164 +6004 +36251 +25 +27791 +21689 +15654 +37443 +15491 +37444 +33650 +541 +37223 +37445 +10 +37446 +37446 +1021 +37447 +33890 +89 +37448 +37449 +16466 +1749 +37450 +2577 +29032 +37451 +170 +13855 +36735 +2577 +37452 +24303 +25237 +19 +37453 +33627 +20677 +2009 +822 +2993 +37454 +590 +272 +29204 +250 +15718 +6054 +37455 +20337 +37456 +464 +9567 +29483 +23150 +21947 +37457 +24195 +665 +24972 +2043 +37458 +32275 +9 +28317 +554 +37459 +13150 +37460 +27069 +27669 +37461 +2 +98 +73 +37462 +1012 +5904 +37463 +37464 +4278 +24621 +13566 +43 +15 +37465 +37466 +15718 +30877 +37467 +5601 +37468 +33494 +15018 +30724 +29483 +16732 +37469 +37470 +23218 +1481 +37471 +25140 +12013 +37472 +1107 +29483 +178 +5085 +345 +37473 +1364 +37474 +11749 +19 +37475 +37476 +3204 +27669 +37477 +745 +566 +1230 +16375 +31336 +20700 +37478 +2314 +671 +16866 +15 +286 +15718 +3806 +37479 +37480 +20745 +37481 +37482 +5204 +28069 +21947 +42 +37483 +11341 +37484 +37485 +720 +29483 +37486 +345 +5770 +37487 +37488 +30877 +14 +1508 +2525 +966 +138 +12893 +1559 +37489 +25237 +24 +37490 +209 +1157 +1765 +25683 +32 +34 +5188 +8210 +5027 +1716 +43 +19285 +4124 +6571 +37491 +29204 +971 +27701 +5188 +5119 +37492 +5502 +28441 +32 +1203 +37493 +30877 +37494 +37495 +37496 +37497 +685 +7117 +16440 +29026 +37498 +15643 +30877 +10 +16375 +16327 +37499 +3353 +34402 +37500 +37501 +37502 +677 +27357 +21947 +18597 +31698 +3546 +36127 +37503 +37504 +37505 +30986 +26431 +30844 +37506 +37507 +9 +665 +37508 +248 +533 +26040 +37509 +37510 +21947 +43 +21689 +3546 +33278 +37511 +37512 +37513 +43 +37514 +37515 +5161 +36177 +18283 +37174 +25 +37516 +5912 +37517 +21689 +35265 +37518 +37519 +7835 +57 +8167 +21947 +37520 +21947 +337 +4364 +15 +24864 +37521 +16437 +14001 +11832 +21947 +3421 +14947 +303 +37522 +29483 +21947 +37523 +17911 +3137 +21776 +303 +9 +37524 +5223 +37525 +20315 +37526 +37527 +19618 +37528 +37529 +123 +827 +37530 +19318 +37531 +27669 +30877 +37532 +1226 +2058 +37533 +509 +37534 +25970 +8356 +10965 +21947 +19 +14477 +35296 +140 +9 +14477 +37535 +8685 +284 +37536 +9 +1157 +37537 +37538 +248 +37539 +37540 +28661 +37541 +1090 +10028 +25237 +37542 +37543 +15718 +37544 +6617 +1559 +34630 +13566 +37545 +36424 +170 +25316 +37546 +24725 +377 +11907 +15718 +26804 +15 +286 +36874 +37547 +37548 +9 +17320 +849 +24303 +37549 +1542 +30051 +29855 +9 +3391 +30877 +20 +33494 +37550 +1765 +1090 +15718 +37551 +30051 +29381 +10828 +34641 +1198 +37552 +12522 +37553 +37554 +17920 +33494 +7379 +4055 +28490 +16 +31575 +5218 +377 +30051 +1364 +590 +4055 +1090 +37555 +37556 +2476 +377 +37557 +37558 +37559 +37560 +37561 +14369 +24144 +37562 +11762 +21947 +13508 +36424 +37563 +9 +37564 +36735 +597 +20 +1578 +283 +36736 +155 +1090 +37565 +37566 +32 +37567 +137 +14982 +43 +37568 +9212 +10621 +37569 +4602 +5153 +1520 +8668 +1203 +6183 +37570 +37571 +37572 +15 +37573 +37574 +27415 +11966 +337 +27669 +37575 +27669 +303 +37576 +33650 +6962 +337 +25129 +15998 +2040 +27092 +37577 +303 +37578 +37579 +11537 +213 +3484 +37580 +1090 +18386 +9 +30029 +20700 +37581 +8297 +37582 +37583 +2260 +37584 +284 +37585 +37586 +22236 +7053 +37587 +20916 +13919 +37588 +36218 +1082 +1384 +7053 +176 +33494 +37589 +3546 +3546 +37590 +3944 +37591 +8392 +37592 +37593 +590 +989 +19 +37594 +7053 +338 +38 +33758 +19 +37595 +30650 +17945 +16235 +37596 +37597 +37598 +25683 +29483 +14864 +1533 +15 +37599 +37600 +16437 +37601 +21776 +37602 +29381 +707 +114 +22963 +14477 +2347 +105 +43 +2316 +377 +31293 +483 +4598 +213 +1710 +37603 +37604 +37605 +2769 +37606 +686 +28549 +12474 +1524 +37607 +37608 +14330 +19576 +25316 +16443 +8351 +37609 +37610 +646 +554 +32 +37611 +32449 +14 +32 +18139 +2694 +37612 +37556 +337 +24896 +37613 +2537 +34402 +27388 +197 +13801 +33690 +37614 +554 +32642 +37615 +14 +270 +15702 +18369 +37616 +37617 +18156 +37618 +9402 +1090 +19 +37619 +37620 +37621 +9262 +21698 +36492 +37622 +30224 +25316 +36735 +37623 +2372 +15104 +37624 +30877 +14279 +37625 +5318 +37626 +36735 +37627 +13943 +179 +446 +21947 +3844 +43 +37628 +5188 +5119 +13377 +222 +37629 +123 +15718 +37630 +15718 +1090 +11762 +769 +17151 +590 +303 +590 +37631 +337 +4450 +37632 +14603 +43 +37633 +37634 +32426 +37635 +1710 +536 +18695 +9 +1090 +936 +37636 +590 +2040 +31362 +9 +37637 +2577 +43 +25237 +33445 +31293 +2804 +34 +37638 +176 +21947 +14 +37639 +248 +1605 +28085 +12987 +590 +19 +37640 +23103 +37641 +37642 +20572 +337 +31293 +37643 +37644 +37645 +13714 +1139 +1090 +16437 +37646 +1090 +30877 +2550 +30877 +14369 +22075 +1745 +10853 +37647 +4026 +21003 +1824 +1100 +37648 +31293 +1749 +37649 +12987 +645 +1208 +31098 +18912 +8351 +14369 +37650 +36452 +33120 +25140 +37651 +430 +34957 +37652 +37653 +30224 +665 +568 +354 +140 +1228 +5188 +213 +37654 +14477 +176 +37655 +18079 +33650 +37656 +37657 +37658 +37659 +37660 +179 +669 +37661 +1090 +15498 +792 +33650 +37662 +19655 +18919 +560 +37663 +37664 +1680 +37665 +37666 +4055 +1384 +3546 +37667 +2746 +37668 +536 +37669 +37670 +4055 +9 +14 +17897 +37671 +37672 +37673 +3559 +37674 +11762 +37675 +37676 +12402 +37677 +15683 +37678 +14001 +37556 +37679 +28197 +31293 +37680 +2043 +43 +37681 +1710 +37682 +37683 +37684 +37685 +554 +197 +37686 +37687 +27669 +33120 +21947 +25307 +284 +323 +30877 +15683 +25237 +9 +686 +12546 +37688 +12013 +37689 +303 +37690 +1529 +137 +849 +37691 +37692 +37693 +18109 +115 +9 +37694 +6660 +37695 +19 +37696 +2260 +37697 +484 +25237 +37698 +21947 +37699 +37700 +37701 +37702 +17151 +37703 +23418 +31168 +19 +3976 +37704 +22505 +37705 +33758 +828 +37706 +37707 +213 +15 +22717 +37708 +213 +213 +2325 +37709 +590 +37710 +2832 +37711 +25021 +4285 +37712 +37713 +2308 +37714 +28494 +37715 +27669 +35805 +1090 +29720 +1529 +15718 +3546 +337 +13296 +1295 +19 +11966 +37716 +37717 +1131 +745 +37718 +372 +337 +37719 +60 +3546 +37720 +237 +37556 +284 +178 +1090 +37721 +12302 +12185 +3480 +25316 +37722 +22963 +37723 +25162 +25316 +495 +1574 +31293 +14660 +37724 +337 +37725 +29381 +284 +2314 +37726 +248 +37727 +2581 +19 +37728 +37729 +616 +28361 +11321 +37730 +3546 +37731 +9 +37732 +37733 +28317 +58 +37734 +2618 +15 +337 +1563 +9955 +5409 +37735 +15718 +37736 +37737 +37738 +37739 +37740 +399 +3 +37741 +37742 +590 +9460 +37650 +112 +20083 +37743 +9082 +4055 +37744 +37745 +22 +37746 +37747 +6950 +37748 +16437 +3546 +14363 +37749 +1011 +9 +15096 +740 +213 +37750 +9465 +37751 +19795 +27599 +140 +436 +29032 +25140 +446 +37752 +284 +37753 +37754 +37755 +8367 +1870 +5004 +37756 +9 +284 +37757 +284 +872 +37758 +24303 +1508 +37759 +21947 +37760 +37761 +303 +23867 +37762 +303 +14871 +37763 +35552 +37764 +8668 +4116 +17911 +2865 +37765 +7357 +404 +37766 +188 +33508 +4055 +2561 +57 +349 +25943 +21947 +37767 +25683 +2 +37768 +37769 +34402 +1181 +37770 +37771 +590 +10628 +37772 +24972 +36853 +822 +35695 +34433 +33494 +1247 +20770 +7363 +16437 +25237 +14107 +37773 +37774 +11840 +2325 +37775 +1513 +15718 +2762 +303 +37776 +8668 +15481 +2465 +37777 +14385 +16437 +10933 +37778 +37779 +19655 +37780 +9 +25237 +11211 +29 +37781 +10642 +37782 +28389 +37783 +30224 +31293 +1230 +37556 +21535 +286 +37784 +14770 +17911 +99 +37785 +37786 +1109 +37787 +815 +18695 +24725 +37788 +37789 +5085 +14152 +15718 +37790 +15 +1442 +30877 +37791 +18503 +33192 +15320 +37792 +29129 +34842 +37793 +37794 +15718 +19057 +464 +4032 +60 +37795 +37796 +37797 +30209 +31036 +37798 +37556 +21947 +3755 +26417 +2859 +33650 +37799 +34402 +5619 +2356 +286 +37800 +34902 +37801 +24864 +37802 +20 +1236 +13905 +354 +21689 +7658 +9 +915 +31168 +797 +6950 +1357 +5780 +6110 +18822 +27904 +1503 +25683 +37803 +4055 +37804 +37805 +37806 +30877 +37807 +11762 +25140 +11 +37808 +27283 +1961 +32 +15 +19837 +809 +57 +37809 +887 +14369 +37810 +1090 +37811 +37812 +7053 +37813 +43 +9649 +43 +25965 +37814 +29483 +1710 +37815 +8724 +7855 +6950 +19 +25683 +5110 +35167 +10 +32410 +286 +26585 +15718 +37816 +24045 +32960 +37817 +14330 +155 +21947 +17136 +1357 +37818 +37819 +683 +29621 +37820 +37556 +3546 +1226 +28389 +21947 +37821 +19618 +43 +33494 +16494 +11420 +9 +2356 +37822 +37823 +37824 +1208 +8367 +37825 +43 +37826 +1559 +24864 +30458 +3598 +590 +29483 +16158 +17698 +31168 +284 +590 +17911 +5188 +37827 +33627 +29483 +29381 +30051 +37828 +43 +31293 +37829 +37830 +491 +7330 +37831 +6883 +989 +66 +37832 +2197 +9600 +1812 +37833 +16773 +37834 +57 +7977 +34081 +33316 +586 +14193 +4907 +597 +27178 +37835 +464 +29025 +43 +37836 +37837 +17144 +37838 +440 +1049 +645 +37839 +34402 +1562 +1732 +286 +36884 +37840 +1991 +337 +37841 +37842 +15 +32 +43 +3353 +27669 +37843 +19057 +37844 +37845 +1090 +16443 +14369 +665 +27669 +26186 +21045 +24864 +21947 +14477 +33479 +37846 +31873 +20700 +1090 +37847 +36 +37848 +284 +590 +2289 +2733 +37849 +97 +5188 +37850 +16698 +1867 +37851 +36219 +37852 +1920 +37853 +43 +77 +29977 +377 +3559 +37854 +37855 +2117 +37856 +970 +2152 +5188 +21947 +37857 +17911 +736 +12431 +4055 +1503 +21947 +37858 +720 +37859 +24725 +8716 +5780 +37860 +14007 +1109 +26626 +31098 +197 +25 +9 +43 +16826 +14 +5085 +37861 +19714 +37862 +16413 +37863 +23226 +15 +12955 +14102 +21371 +16480 +27522 +37864 +37865 +21947 +31273 +32382 +323 +36 +28298 +19218 +1090 +21947 +14795 +37866 +20 +1212 +37867 +37868 +37869 +37870 +286 +14369 +4055 +27619 +10791 +29483 +37871 +43 +17151 +57 +37872 +37873 +185 +28199 +27669 +37874 +14369 +44 +37875 +34317 +6028 +37876 +9433 +21387 +37877 +37878 +37879 +37880 +30051 +11762 +20 +13566 +24725 +996 +137 +5780 +369 +24303 +43 +32 +4055 +8316 +1536 +99 +185 +27669 +590 +37881 +37882 +4598 +37883 +14477 +37884 +12573 +4468 +683 +5188 +8301 +2593 +37885 +30877 +1224 +30224 +37886 +36735 +37887 +5188 +3598 +37888 +33061 +33113 +37889 +37890 +37891 +37892 +5085 +37893 +9543 +2919 +37894 +37895 +2591 +37896 +882 +37897 +196 +13150 +4055 +970 +30551 +892 +1112 +34264 +37898 +37899 +37900 +32 +28251 +32 +2159 +36907 +4518 +34 +37901 +27669 +37556 +19 +5007 +37902 +27430 +736 +3 +19 +37903 +4463 +37904 +34402 +5188 +19 +37905 +398 +533 +27669 +37906 +7069 +24774 +8919 +30877 +11483 +37907 +37908 +20700 +7053 +4028 +12987 +5188 +3008 +15592 +317 +6776 +33650 +10598 +28441 +37909 +2121 +286 +37910 +32 +2694 +16437 +2476 +37911 +37912 +15718 +32751 +1082 +13721 +37913 +37556 +37914 +25 +412 +37915 +1090 +3239 +37916 +1503 +501 +37917 +1011 +357 +28317 +104 +11471 +37918 +19655 +22315 +37919 +1234 +37920 +2356 +29483 +37921 +597 +671 +415 +19 +58 +6261 +14369 +3395 +20 +24864 +9 +342 +1012 +2139 +37922 +2733 +1425 +31293 +17 +37923 +7817 +37924 +37925 +19 +37926 +286 +37927 +37928 +1716 +1189 +26361 +37929 +37930 +19974 +3 +21045 +37931 +37932 +37933 +7597 +33627 +13150 +37934 +352 +37935 +822 +37936 +16375 +9 +915 +37937 +37025 +19655 +4293 +31293 +37938 +528 +37556 +25943 +19489 +4730 +554 +29381 +37939 +37940 +21947 +14369 +7226 +33650 +1442 +9 +5197 +37941 +37942 +35214 +770 +1091 +2 +377 +19742 +89 +57 +1082 +37943 +31867 +377 +37944 +14527 +37945 +42 +21947 +20 +14 +9 +19 +6883 +27669 +37946 +19294 +37947 +790 +9118 +35823 +5403 +37948 +37949 +10111 +6251 +29381 +37950 +37951 +37952 +37953 +155 +9 +28490 +21947 +37954 +37955 +12647 +37956 +31225 +5627 +13867 +37957 +2117 +6881 +33758 +37958 +209 +20141 +15354 +29381 +57 +37959 +2308 +37960 +37961 +37962 +27669 +1021 +33650 +37556 +37963 +37964 +4518 +25237 +57 +37965 +29381 +17151 +14814 +17151 +13566 +19381 +19 +10706 +5299 +1578 +14369 +17911 +37966 +16422 +43 +2919 +2449 +31293 +37967 +37968 +37969 +19486 +33950 +14666 +37970 +37971 +377 +7053 +15 +37972 +37973 +37974 +37975 +590 +12296 +16787 +37976 +15718 +514 +25140 +37977 +30917 +202 +37978 +37556 +37979 +25140 +4292 +19849 +590 +3546 +21947 +37980 +37981 +3994 +4461 +19 +37982 +15220 +15 +21947 +1021 +32 +184 +37983 +23544 +19713 +34601 +6248 +28277 +37556 +37984 +15718 +37985 +27669 +4502 +37986 +37987 +342 +28317 +37988 +32449 +14477 +4855 +9 +349 +37989 +11330 +37990 +1745 +20677 +25215 +37991 +613 +16437 +15718 +249 +262 +37992 +19 +37993 +37556 +37994 +1749 +14330 +2410 +37556 +37768 +24864 +15 +3546 +15511 +37995 +33650 +4364 +37996 +15 +1090 +15 +8668 +37997 +37998 +764 +1295 +683 +613 +15395 +16 +37999 +11585 +23150 +38000 +1021 +1100 +37830 +4461 +38001 +12 +38002 +209 +736 +9 +6363 +38003 +104 +19792 +38004 +29381 +1604 +38005 +10840 +1090 +6505 +38006 +1090 +590 +38007 +9183 +38008 +37556 +36218 +16437 +4414 +38009 +29152 +29483 +26060 +23103 +22552 +33061 +21689 +27669 +4055 +28206 +66 +17670 +38010 +34433 +21947 +4472 +14 +533 +38011 +6625 +34650 +38012 +11013 +3599 +38013 +1013 +34985 +2998 +38014 +38015 +3546 +736 +38016 +38017 +491 +38018 +14363 +671 +20573 +12711 +35224 +18045 +38019 +736 +38020 +31293 +34402 +21175 +1967 +38021 +38022 +38023 +17151 +2694 +15705 +38024 +590 +20189 +38025 +38026 +38027 +25140 +15718 +30051 +2 +19 +416 +38028 +6439 +8362 +554 +19 +37556 +6001 +15 +46 +38029 +15 +38030 +1021 +38031 +804 +9 +15 +379 +5908 +38032 +25316 +38033 +38034 +3544 +37530 +659 +201 +38035 +6658 +37556 +8322 +137 +21115 +98 +16375 +38036 +19 +28036 +1244 +4028 +9257 +20 +29381 +7829 +38037 +38038 +179 +38039 +1920 +24864 +19655 +9 +38040 +1870 +29192 +9784 +38041 +1090 +16437 +22922 +10828 +7431 +20113 +6439 +31234 +590 +38042 +38043 +696 +31168 +38044 +2419 +1090 +38045 +38046 +24864 +38047 +37556 +38048 +38049 +15 +38050 +14369 +43 +936 +38051 +1224 +24303 +38052 +21947 +9 +6122 +16466 +736 +37949 +12009 +2064 +1442 +1090 +38053 +29204 +3601 +38054 +9 +37556 +115 +35300 +38055 +38056 +28549 +19 +38057 +20339 +286 +23103 +38058 +21947 +38059 +14279 +1316 +12684 +19852 +38003 +6095 +27669 +37741 +665 +21776 +36888 +38060 +1082 +17911 +197 +27291 +38061 +38062 +354 +19 +43 +33494 +317 +38063 +12907 +2577 +1710 +6877 +5666 +317 +13396 +2865 +21729 +22564 +27669 +38064 +2489 +38065 +33120 +38066 +597 +30877 +286 +339 +3030 +12907 +6187 +38067 +25237 +38068 +38069 +30877 +1612 +38070 +9577 +20113 +2561 +3317 +677 +19 +22922 +38071 +28474 +2136 +6736 +36957 +323 +30166 +43 +20785 +38072 +20005 +38073 +2164 +38074 +43 +7964 +2338 +38075 +1870 +1107 +33650 +38076 +6617 +228 +38077 +43 +671 +31293 +38078 +7419 +12397 +3546 +38079 +38080 +31293 +38081 +38082 +16437 +8668 +19 +38083 +33650 +15718 +21031 +7912 +519 +38084 +3553 +345 +9 +613 +38085 +38086 +971 +2762 +19 +19 +1817 +38087 +38088 +398 +9939 +153 +43 +38089 +14693 +38090 +38091 +38092 +3481 +38093 +38094 +286 +3343 +176 +12696 +38095 +14369 +3546 +554 +9 +1082 +3959 +77 +10574 +38096 +38097 +38098 +17911 +12474 +2668 +38099 +286 +29200 +31098 +38100 +38101 +30794 +38102 +19655 +194 +478 +16323 +33693 +14369 +38103 +1633 +38104 +37185 +38105 +140 +845 +16818 +4055 +11432 +25584 +24045 +21689 +1566 +33352 +38003 +7053 +25 +576 +683 +317 +19618 +24144 +586 +560 +16466 +30742 +38106 +21947 +14420 +21947 +38107 +26040 +3790 +5990 +33758 +1116 +317 +25871 +20 +38108 +28148 +38109 +38110 +1531 +26048 +24864 +37556 +16447 +14363 +1927 +15 +9948 +32805 +38111 +7053 +936 +33496 +9 +38112 +25 +33188 +23150 +77 +20 +38113 +38114 +33627 +17596 +36735 +57 +38115 +38116 +38117 +27669 +38118 +3729 +4055 +38119 +38120 +38121 +3430 +10299 +27178 +8668 +38122 +242 +861 +38123 +33910 +31758 +2733 +38124 +4055 +9497 +15 +15718 +533 +15718 +38125 +590 +38126 +1481 +402 +43 +38127 +4055 +4056 +34306 +1542 +38128 +2 +815 +38129 +38130 +13150 +1524 +15 +38131 +16437 +3055 +11762 +1920 +9 +12120 +33693 +38132 +2308 +3644 +3015 +7406 +21045 +38133 +34 +770 +34999 +38134 +38135 +38136 +15718 +46 +270 +38137 +28206 +15718 +28317 +34433 +398 +43 +38138 +38139 +31381 +17267 +2924 +38140 +20 +38141 +18956 +14369 +20531 +38142 +15824 +38143 +38144 +38145 +38146 +38147 +38148 +21947 +14603 +3343 +38149 +28317 +21689 +1090 +15 +1090 +446 +399 +1765 +3034 +33650 +38150 +38151 +4242 +38152 +25 +19 +8668 +14369 +38085 +36853 +134 +887 +38153 +8367 +38154 +8279 +15 +4907 +36157 +25237 +21947 +25683 +14216 +38155 +43 +38156 +38157 +38158 +20 +38159 +14369 +10028 +38160 +2414 +25 +19 +1112 +33627 +3251 +155 +25914 +2308 +38161 +26496 +38162 +38163 +24864 +20750 +38164 +38165 +33494 +11822 +38166 +38167 +16772 +38168 +38169 +2049 +1011 +38170 +3546 +38171 +34480 +38172 +23102 +38173 +22 +38174 +430 +6263 +140 +38175 +369 +38176 +694 +19941 +46 +89 +25316 +35624 +30401 +38177 +338 +6736 +38178 +412 +38179 +38180 +38181 +29200 +14330 +2274 +5976 +1364 +13317 +4055 +38182 +887 +38183 +28961 +2577 +38184 +2121 +38185 +533 +38186 +38187 +21947 +15718 +201 +38188 +32426 +38189 +38190 +38191 +398 +38192 +38193 +38194 +14477 +140 +38195 +809 +38196 +201 +38197 +38198 +590 +8110 +12661 +9 +938 +13959 +1314 +29597 +19220 +9658 +15718 +2064 +38199 +23640 +15718 +5689 +37556 +30877 +2006 +38200 +9 +38201 +23103 +415 +38202 +38203 +30877 +38204 +34650 +21947 +3252 +33634 +349 +18895 +7815 +38205 +38206 +18120 +3546 +30224 +19 +31293 +33421 +14369 +8188 +9 +11948 +38207 +2356 +27669 +38208 +4634 +30877 +38209 +1364 +32640 +18798 +27719 +23103 +15718 +33278 +38210 +38211 +16184 +38212 +5313 +77 +1051 +38213 +15718 +38214 +210 +33120 +20280 +38215 +2706 +38216 +32 +30917 +23100 +2561 +38217 +16466 +971 +4714 +38218 +38219 +38220 +4055 +38221 +37556 +9 +5561 +22504 +38222 +36219 +38223 +5340 +27766 +38224 +38225 +647 +1743 +1371 +9129 +38226 +38227 +37556 +38228 +38229 +31293 +33650 +38230 +17911 +18695 +22 +415 +736 +3361 +33627 +27150 +38231 +38232 +2960 +1924 +38233 +201 +38234 +415 +9 +43 +38235 +31873 +14 +38236 +19 +31293 +1710 +817 +43 +25683 +30235 +21627 +209 +910 +279 +349 +554 +43 +33650 +57 +910 +38237 +379 +16981 +29204 +14679 +38238 +8110 +21947 +37128 +38239 +6287 +57 +38240 +38241 +6632 +3994 +2197 +9 +892 +38242 +23103 +21669 +9097 +20 +29056 +13814 +28044 +8115 +16826 +8787 +24303 +38243 +38244 +38245 +38246 +38247 +11754 +17151 +24303 +10935 +30080 +34402 +27178 +24864 +9 +38248 +14846 +15718 +38249 +22 +38250 +21419 +34402 +25 +9543 +1090 +1038 +32 +38251 +38 +28500 +31041 +2694 +38252 +3546 +70 +33 +38253 +590 +18045 +38254 +6232 +349 +7658 +415 +28728 +38255 +27260 +38256 +5317 +1245 +22352 +24303 +25237 +38257 +30877 +24725 +38258 +38259 +24864 +865 +1021 +1493 +38260 +38261 +38262 +9 +720 +38263 +4729 +1425 +15 +30857 +5438 +873 +38264 +16443 +815 +10470 +38265 +286 +38266 +37556 +34180 +38267 +1094 +1578 +38268 +38269 +38270 +38271 +57 +19 +38272 +30877 +1116 +38273 +14369 +11966 +1559 +38274 +15718 +389 +38275 +576 +21031 +38276 +21620 +38277 +1090 +38278 +15718 +7610 +20942 +21947 +931 +17972 +19618 +590 +38279 +16698 +1300 +17058 +31674 +17698 +43 +38280 +43 +32915 +15572 +4116 +38281 +10028 +22 +28317 +23853 +15809 +17151 +188 +10274 +36751 +19618 +38282 +8668 +1168 +17151 +20339 +590 +38283 +1615 +1018 +21947 +2231 +28441 +38284 +13476 +15 +931 +38285 +38286 +3601 +10168 +33650 +38287 +1244 +25140 +35318 +38288 +9497 +21031 +36424 +10 +46 +34066 +29483 +38289 +8549 +1559 +38290 +196 +30877 +30877 +647 +33627 +43 +33120 +16437 +38291 +3978 +1529 +286 +15592 +31873 +25316 +14330 +13361 +15 +38292 +3484 +38293 +19618 +24506 +38294 +27719 +5080 +21947 +25140 +31293 +155 +38295 +37556 +38296 +7553 +38297 +24864 +19573 +38298 +38299 +29204 +2061 +19 +9 +5837 +38300 +38301 +541 +1859 +38302 +38303 +272 +20853 +25943 +30877 +38304 +43 +9 +10936 +38305 +9 +38306 +38307 +37391 +1066 +36735 +38308 +46 +604 +38309 +2064 +24864 +38310 +10553 +9 +38311 +14330 +7260 +3655 +37556 +1090 +827 +15 +25140 +38312 +14852 +1056 +11537 +33120 +15 +38313 +140 +38314 +13623 +31293 +3105 +21947 +38315 +301 +38316 +24725 +1415 +19 +15541 +21947 +38317 +38318 +484 +345 +38319 +1090 +1817 +43 +38320 +720 +27084 +5217 +28480 +28923 +36192 +1090 +33650 +862 +37556 +2694 +38321 +89 +24303 +38322 +915 +1617 +14369 +38323 +38324 +8693 +33627 +38325 +38326 +590 +2859 +31293 +25624 +3976 +1090 +30552 +424 +12308 +38327 +104 +12302 +43 +19 +19 +46 +19 +38328 +1082 +21947 +1217 +38329 +5188 +2640 +27719 +19655 +29204 +17670 +38330 +38331 +38332 +910 +15718 +19918 +19 +3232 +38333 +33177 +21261 +14477 +38334 +38335 +331 +34402 +703 +38336 +38337 +38338 +13150 +14369 +9396 +13721 +14 +38339 +2174 +8297 +3408 +36456 +33730 +38340 +3620 +683 +38341 +738 +7053 +38342 +590 +35224 +34402 +14369 +1870 +38343 +38344 +1090 +38345 +34402 +38346 +1578 +38347 +278 +38348 +15597 +38349 +34 +4055 +14 +38350 +14292 +19 +38351 +38352 +1047 +37588 +12497 +38353 +38354 +342 +19655 +446 +43 +37556 +38 +38355 +179 +7053 +9445 +30877 +38356 +38357 +38358 +671 +38359 +2446 +38360 +14 +38361 +38362 +19231 +43 +34402 +3743 +349 +8249 +10774 +21947 +37556 +2117 +38363 +2325 +19 +38364 +17232 +9 +736 +38365 +38366 +43 +4055 +3508 +38367 +12 +16 +43 +104 +1415 +17911 +35633 +24864 +828 +38368 +38369 +35427 +1082 +9 +33650 +21947 +26854 +38370 +38371 +32410 +202 +38372 +13807 +38373 +1920 +554 +35042 +30794 +21031 +38374 +38375 +26361 +7113 +38376 +2 +38377 +38378 +21947 +5085 +29381 +32 +17340 +34641 +6075 +17144 +20941 +33693 +2260 +38379 +57 +57 +25316 +15718 +38380 +22049 +4055 +377 +2463 +20164 +26361 +38381 +845 +43 +38382 +26355 +1720 +27669 +33120 +38383 +38384 +10356 +12005 +38385 +38386 +22815 +13721 +34402 +9 +96 +32332 +38387 +12552 +9 +971 +484 +38388 +37556 +379 +33650 +242 +15491 +18409 +89 +1090 +38389 +38390 +10482 +67 +38391 +317 +16 +323 +38392 +38393 +25237 +38394 +28317 +9 +38395 +38396 +415 +25683 +38397 +1605 +38398 +2728 +16437 +38399 +38400 +1018 +5415 +23103 +745 +2015 +38401 +19 +46 +38402 +25943 +2492 +38403 +478 +14 +1090 +1251 +4028 +11759 +18013 +38404 +29483 +1300 +25140 +38405 +18548 +12987 +17635 +286 +9897 +33552 +38406 +38407 +16763 +46 +38408 +13179 +286 +25659 +349 +19 +14 +590 +18951 +38409 +2764 +2809 +37556 +19618 +38410 +14 +28502 +31293 +38411 +736 +24045 +31293 +3504 +495 +18440 +19 +33120 +38412 +38413 +27669 +1912 +38414 +5803 +38415 +6341 +38416 +16986 +38417 +5956 +38418 +34433 +5601 +14 +38419 +590 +38420 +19838 +1021 +416 +10028 +28441 +38421 +38422 +12 +23103 +33514 +38423 +38424 +38425 +1291 +2 +38426 +33650 +213 +58 +16183 +43 +24862 +38427 +379 +38428 +38429 +1300 +337 +13721 +1513 +185 +38430 +19 +33693 +38431 +14 +9 +38432 +38433 +5082 +38434 +20555 +13721 +38435 +8766 +337 +28176 +179 +38436 +16 +38437 +19 +33693 +284 +533 +284 +38438 +5188 +2643 +38439 +29483 +18139 +4055 +38440 +32 +15251 +213 +586 +196 +348 +15476 +4055 +18242 +3546 +38441 +3764 +1090 +284 +446 +104 +248 +38442 +703 +38443 +43 +576 +25316 +1090 +1295 +77 +19655 +38444 +13746 +38445 +38446 +38447 +284 +38448 +38449 +36735 +37556 +303 +38450 +7117 +31293 +3105 +38451 +6874 +9 +176 +377 +38452 +77 +13835 +248 +38453 +9 +21947 +16437 +213 +1749 +284 +2694 +9 +21947 +38454 +38455 +8849 +26651 +38456 +248 +22788 +19 +38457 +38458 +37920 +38459 +22922 +38460 +213 +38461 +38462 +2942 +5351 +38463 +14216 +25140 +33650 +33494 +2577 +16830 +38464 +337 +278 +1716 +10973 +19143 +37556 +9 +38465 +20600 +19 +272 +872 +201 +1716 +2029 +38466 +30224 +38467 +35832 +15718 +22963 +352 +176 +21947 +9 +2306 +17537 +25316 +38468 +3 +38469 +33120 +38470 +286 +38471 +38472 +13957 +38473 +16064 +31691 +19 +7084 +38474 +31293 +31098 +27669 +38475 +14363 +15 +248 +37556 +43 +38476 +2410 +4908 +38477 +38478 +30877 +38479 +6052 +38480 +8351 +3981 +31514 +7835 +179 +1531 +38481 +3 +5582 +38482 +9 +14604 +337 +38483 +24864 +43 +22398 +38484 +3353 +38485 +5085 +38486 +533 +38487 +379 +284 +14603 +24896 +38488 +4793 +11754 +38489 +2733 +38490 +2029 +28755 +21947 +14369 +248 +1316 +25316 +3999 +6595 +9 +1234 +38491 +1716 +25316 +270 +38492 +38493 +3559 +38494 +38495 +29381 +5865 +12625 +38496 +38497 +16466 +23477 +38498 +3546 +12013 +38499 +2260 +38500 +38501 +98 +38502 +33627 +38503 +38504 +38505 +590 +10946 +28961 +31575 +33445 +31226 +38506 +2243 +38507 +21947 +38508 +32911 +12254 +43 +464 +38509 +9402 +43 +5188 +37556 +38510 +24896 +2287 +38511 +17911 +2 +29200 +3 +38512 +3541 +5336 +37556 +3317 +28603 +24303 +33061 +4055 +38513 +38514 +38515 +43 +38516 +38517 +2195 +25237 +32 +37556 +38518 +38519 +345 +38520 +1222 +2388 +33627 +720 +38521 +358 +284 +358 +27719 +122 +26361 +9 +248 +10369 +66 +39 +16437 +38522 +14523 +57 +38523 +36735 +38524 +1066 +38525 +17207 +38526 +36019 +478 +14 +38527 +38528 +34402 +3964 +25316 +38529 +38530 +38531 +38532 +554 +25140 +38533 +19 +15718 +2197 +379 +143 +30051 +38534 +38535 +3395 +823 +25237 +29628 +33693 +19 +19144 +7053 +38536 +3546 +19 +248 +38537 +38538 +38539 +177 +77 +26161 +2694 +21698 +536 +16846 +2733 +12987 +38540 +5315 +13801 +15718 +1090 +28494 +2764 +283 +906 +170 +29134 +590 +9 +1082 +38541 +2770 +17872 +19618 +32 +38542 +77 +18045 +38543 +519 +14369 +38544 +440 +38545 +20556 +5117 +22302 +38546 +17 +38547 +1090 +17029 +22797 +11073 +9 +19995 +43 +38548 +411 +38549 +66 +1716 +4055 +4411 +19565 +89 +34433 +265 +14604 +38550 +38551 +590 +38552 +38553 +27719 +38554 +8668 +43 +38555 +38556 +38557 +99 +38558 +12013 +4033 +38559 +38560 +910 +25420 +590 +7053 +1090 +38561 +519 +10946 +38562 +30877 +38563 +1605 +10068 +13786 +10946 +38564 +22552 +19 +37556 +38565 +15718 +17467 +38566 +38567 +178 +10946 +3546 +25943 +38568 +22 +7208 +2635 +38569 +38570 +27669 +38571 +345 +5627 +21947 +9 +37556 +37556 +38572 +38573 +38574 +21947 +38575 +1425 +18503 +22986 +9144 +3330 +38576 +694 +14048 +38577 +38578 +10946 +16981 +38579 +25316 +27669 +17151 +38580 +36037 +9 +19 +23103 +38581 +38582 +38583 +1100 +38584 +14477 +66 +38585 +24207 +33061 +9 +20941 +38586 +38587 +24972 +1181 +1042 +179 +38588 +34402 +12684 +2117 +568 +19 +26519 +31041 +398 +38589 +38590 +28317 +15344 +38591 +29381 +38592 +38593 +31634 +13569 +1401 +31168 +38594 +38595 +4367 +4547 +22420 +38596 +35090 +38597 +5119 +8668 +38598 +9 +213 +36639 +38599 +3030 +10946 +38600 +38601 +1090 +671 +7836 +14369 +24375 +213 +1818 +590 +5784 +36735 +57 +11754 +38602 +14404 +25584 +38603 +213 +57 +6121 +349 +15511 +43 +38604 +38605 +15718 +1502 +7516 +38606 +1426 +4461 +23103 +18616 +38607 +25 +19220 +1082 +38608 +38609 +33650 +815 +36070 +38610 +38611 +671 +5578 +21208 +415 +29540 +5316 +38612 +16574 +12466 +38613 +34181 +37556 +736 +25904 +16 +4452 +38614 +37556 +9 +25316 +19 +31541 +4055 +19702 +37556 +3075 +25316 +38615 +22903 +19 +861 +989 +38616 +38617 +19 +38618 +38619 +22464 +19618 +1090 +38620 +36638 +4124 +25316 +10818 +337 +15718 +31293 +43 +15718 +38621 +16096 +720 +14001 +3543 +38622 +38623 +1090 +38624 +10511 +317 +27669 +590 +38625 +38626 +17 +38627 +38628 +60 +16177 +8716 +5816 +1870 +17911 +971 +809 +7511 +38629 +38630 +736 +284 +6943 +28199 +284 +1224 +651 +248 +38631 +3553 +28666 +12044 +26040 +38632 +38633 +2410 +38634 +5085 +209 +2410 +7053 +15718 +38635 +730 +1090 +31168 +14693 +1606 +736 +590 +21947 +13754 +13848 +31098 +4055 +38636 +21947 +38637 +20700 +8392 +19587 +16511 +38638 +3119 +3546 +213 +4061 +23799 +284 +1817 +38639 +38640 +26142 +5318 +303 +213 +19792 +38641 +14477 +2430 +13721 +16466 +7053 +18061 +28441 +415 +37770 +3943 +38642 +38643 +38644 +13361 +8392 +38645 +286 +14330 +4055 +27575 +1847 +38646 +14795 +38478 +27669 +66 +284 +12911 +284 +38647 +19618 +26475 +38648 +971 +33974 +38649 +201 +38650 +38651 +38652 +20 +38653 +33552 +31293 +12063 +4684 +38654 +284 +38655 +671 +10946 +25129 +21947 +57 +33447 +34641 +38656 +887 +38465 +770 +24860 +38657 +4055 +38658 +809 +21947 +30532 +33494 +13721 +18815 +22556 +5188 +31293 +37556 +38659 +38660 +4647 +7154 +57 +38661 +31787 +17448 +20326 +19 +1779 +1356 +15718 +3391 +9 +38662 +1529 +38663 +38664 +38665 +6364 +38666 +38667 +21947 +31293 +337 +16466 +38668 +30877 +38669 +38670 +10 +18159 +2769 +38671 +2043 +26030 +415 +30877 +38672 +38673 +1090 +30464 +38674 +38675 +1689 +38676 +25140 +38677 +77 +12402 +5614 +14 +284 +201 +38678 +32650 +38679 +38680 +3743 +43 +19 +3147 +30097 +38681 +31293 +32349 +38682 +25943 +9 +28549 +38003 +14001 +17229 +205 +1090 +38683 +20514 +19655 +10718 +19 +23103 +43 +26060 +38684 +19 +342 +32402 +38685 +28302 +31150 +19 +38686 +12741 +284 +8668 +38687 +9 +28199 +3353 +38688 +38689 +37556 +38690 +301 +38691 +38692 +38693 +38694 +24862 +38695 +22809 +15083 +89 +38696 +38697 +2465 +18345 +554 +736 +38698 +11762 +27669 +18019 +38699 +38700 +1710 +345 +5582 +11957 +11158 +37289 +30877 +38701 +38702 +38703 +38704 +57 +4055 +590 +38705 +38706 +23404 +38707 +38708 +38709 +1889 +24862 +31168 +38710 +10624 +3369 +809 +38711 +337 +104 +38712 +21947 +399 +21947 +15718 +33650 +38713 +5089 +3978 +9 +736 +7053 +14935 +22 +38714 +38715 +28423 +19 +38716 +38717 +38718 +1066 +38719 +3994 +27669 +38366 +30917 +43 +365 +38720 +38721 +248 +16466 +9 +28036 +365 +38722 +1109 +38723 +23103 +38724 +38725 +18369 +57 +38726 +12095 +38727 +345 +38728 +554 +17136 +38729 +6514 +38730 +37556 +4055 +27669 +14477 +38731 +38732 +1566 +38733 +9 +32 +27566 +1018 +24864 +29483 +16944 +29381 +38734 +38735 +38736 +38737 +1047 +38738 +38739 +37556 +38740 +38741 +19 +38742 +1655 +32856 +32410 +37556 +28036 +38743 +38744 +590 +38745 +16024 +14597 +21947 +11762 +30933 +38746 +24303 +89 +29629 +30224 +492 +38747 +31047 +15683 +492 +22236 +3546 +38748 +38749 +9 +15 +7629 +23150 +38750 +89 +38751 +19 +745 +1082 +38752 +15 +1082 +21947 +2622 +38499 +38753 +38754 +38755 +4488 +1090 +38756 +270 +38757 +38758 +38759 +19 +38760 +38761 +38762 +4414 +38763 +12722 +1100 +2158 +38764 +155 +4116 +37770 +19 +38765 +286 +14616 +32379 +38766 +21947 +37556 +37556 +29381 +17228 +57 +286 +43 +1847 +3599 +15718 +416 +38767 +28317 +38768 +2567 +5340 +10946 +15 +21947 +9 +272 +1090 +21947 +38769 +38770 +201 +11647 +38771 +38772 +21947 +38773 +573 +14477 +18283 +4701 +323 +37976 +18896 +38774 +9 +38775 +136 +38776 +38777 +38778 +20005 +317 +2694 +1090 +6732 +29628 +38779 +38780 +38781 +25584 +1559 +21045 +1091 +5188 +28649 +18695 +38782 +98 +25 +2762 +38783 +6953 +30117 +17602 +536 +38784 +28893 +10172 +1300 +720 +17144 +2260 +22677 +9870 +33650 +38785 +2770 +38786 +8392 +1514 +15 +38787 +19 +15 +38067 +19694 +677 +4166 +18503 +24458 +16 +7123 +828 +30551 +736 +172 +38788 +43 +14185 +21698 +38789 +38790 +38791 +25 +9 +15718 +558 +349 +43 +38792 +38793 +21336 +24896 +38794 +38795 +17911 +1011 +4441 +38796 +16935 +38797 +33222 +38798 +15824 +9628 +2260 +7053 +38799 +18589 +37204 +35969 +18695 +30051 +29204 +57 +16437 +590 +31293 +38800 +38801 +21947 +37881 +38802 +1710 +38803 +38804 +38805 +484 +16886 +1764 +887 +38806 +25668 +32 +17338 +15649 +4441 +27669 +24864 +21681 +43 +25 +2561 +7835 +43 +373 +38807 +31041 +12417 +99 +19355 +38808 +5803 +22607 +38809 +9 +14604 +3546 +17158 +9 +38810 +38811 +38812 +26389 +38813 +14369 +37959 +70 +8318 +19 +38814 +66 +28219 +38815 +8244 +89 +38816 +38817 +32 +1090 +16447 +43 +38818 +38819 +2061 +38820 +31293 +10946 +38821 +15146 +38822 +38823 +20943 +5627 +38824 +38825 +38826 +15718 +4230 +10946 +11966 +38827 +416 +10583 +38828 +13307 +3546 +99 +34999 +38829 +28474 +5700 +8639 +19 +17338 +38033 +10946 +38830 +3999 +2926 +38831 +736 +57 +21694 +20280 +38832 +17151 +25237 +349 +1716 +38833 +9178 +38834 +16121 +8160 +17151 +38835 +25316 +2982 +188 +38836 +38837 +645 +30051 +38838 +38839 +153 +29483 +19 +38840 +15718 +1716 +397 +38841 +38842 +415 +38843 +2038 +18982 +38844 +31293 +4125 +3492 +38845 +25316 +38846 +31401 +38847 +533 +38848 +18695 +1090 +38849 +35318 +57 +14330 +9 +26320 +38850 +590 +38851 +70 +38852 +38853 +38854 +22 +12200 +38855 +399 +38856 +43 +38857 +38858 +2766 +38859 +38860 +38861 +373 +15718 +2259 +38862 +37556 +25237 +38863 +11461 +14660 +38760 +38864 +38760 +164 +38865 +17033 +22 +18895 +38866 +17054 +1310 +38867 +590 +43 +38868 +38869 +38870 +38871 +38872 +4055 +7745 +27669 +30224 +38873 +1090 +38874 +2197 +27369 +1961 +8727 +1384 +38875 +46 +1513 +38876 +25316 +1531 +21947 +1425 +38877 +1316 +7320 +36492 +17449 +38878 +11539 +4024 +201 +21045 +1797 +9 +38879 +16 +32 +38880 +349 +21874 +1090 +38881 +1716 +1434 +15 +16443 +13721 +38882 +1749 +16648 +38883 +38884 +14363 +38885 +2770 +1169 +11754 +38886 +354 +1415 +384 +140 +20515 +18283 +30877 +18951 +12344 +38887 +38888 +31293 +15951 +2733 +38889 +38890 +38891 +1792 +19618 +38892 +38893 +1562 +38894 +38895 +590 +3767 +32245 +6620 +33494 +19 +38896 +38897 +2197 +25237 +1637 +2318 +22099 +33316 +28625 +38898 +38899 +38900 +24457 +76 +745 +23603 +38901 +3989 +28116 +349 +38902 +2827 +1517 +16 +15699 +7835 +25584 +2561 +20952 +38903 +38774 +38904 +19 +15718 +16327 +197 +707 +38905 +3553 +38906 +3994 +38907 +20898 +720 +38908 +38909 +283 +14520 +29992 +38910 +9 +38911 +30877 +228 +38912 +9 +38913 +13570 +38914 +23418 +2769 +38915 +379 +1382 +13696 +38916 +21947 +3964 +44 +114 +38917 +2988 +16436 +38918 +7939 +379 +6264 +15 +1605 +36735 +26048 +9 +38919 +30877 +1011 +38920 +3509 +10946 +38921 +936 +38922 +554 +15871 +11822 +29278 +1300 +38923 +17872 +38924 +1066 +38925 +38926 +24774 +38927 +38928 +38929 +9 +8367 +3546 +1514 +573 +33494 +38930 +19 +736 +8961 +201 +38931 +34402 +8110 +38932 +66 +5244 +16413 +6321 +1779 +43 +15572 +24144 +38933 +38934 +38935 +6067 +586 +590 +38936 +317 +38937 +38938 +24864 +538 +7516 +2314 +736 +11926 +9 +14477 +16466 +1502 +3376 +21947 +11 +38939 +38940 +19 +37556 +38941 +1048 +970 +519 +23103 +14079 +25237 +1415 +25316 +16060 +38942 +38943 +770 +3976 +30224 +43 +19160 +38944 +38945 +155 +27178 +188 +4055 +646 +5188 +33650 +38946 +38947 +4677 +38948 +25316 +176 +38949 +38950 +377 +24303 +30209 +38951 +14909 +31576 +764 +33650 +38952 +8685 +19542 +209 +4055 +915 +25316 +18283 +38953 +21268 +38954 +38955 +14363 +38956 +4547 +20340 +11639 +38957 +27669 +19 +38958 +34438 +1090 +38959 +24896 +38960 +31346 +38961 +38962 +1471 +30056 +590 +38963 +590 +4012 +38964 +7516 +568 +38965 +38966 +9 +38967 +38968 +38969 +2410 +38970 +15718 +568 +30877 +30877 +38971 +1681 +12987 +38972 +14 +38973 +21947 +38974 +38975 +22 +9210 +155 +286 +31234 +19 +34402 +43 +38976 +21947 +16327 +4682 +38977 +37556 +495 +46 +145 +38978 +22091 +21947 +3376 +23874 +15718 +9 +38979 +38980 +1617 +24972 +25 +1437 +38981 +411 +34889 +38982 +38117 +38983 +36328 +19 +25526 +1575 +3251 +33650 +5085 +196 +286 +38984 +24303 +6877 +14369 +1617 +4055 +8297 +38985 +155 +16234 +38986 +30927 +4461 +7721 +19918 +38987 +7743 +1047 +22798 +38988 +37556 +38989 +2577 +38990 +38991 +1051 +7706 +20 +38992 +1090 +38993 +30051 +20 +12584 +7419 +16437 +38994 +2035 +38995 +155 +38996 +765 +43 +590 +3964 +38997 +38998 +2260 +38999 +39000 +39001 +24303 +39002 +24864 +38465 +15722 +39003 +24303 +27260 +39004 +590 +514 +39005 +39006 +32518 +39007 +39008 +33909 +30224 +35357 +1578 +31293 +7516 +39009 +39010 +43 +39011 +38465 +39012 +32856 +39013 +34402 +39014 +2367 +1617 +19 +39015 +536 +9 +39016 +29204 +448 +17144 +3421 +282 +1768 +39017 +8249 +39018 +1224 +730 +15718 +24725 +31225 +30877 +37556 +8982 +21947 +39019 +57 +35496 +13620 +39020 +32 +39021 +1920 +36735 +17151 +7379 +2764 +21268 +33693 +39022 +39023 +39024 +29483 +37920 +39025 +369 +21947 +18951 +2635 +18045 +6997 +39026 +39027 +24302 +1157 +34171 +28441 +30877 +39028 +9 +39029 +39030 +26496 +21947 +140 +665 +20489 +10946 +21689 +39031 +39032 +19 +33650 +35948 +1961 +39033 +38667 +39034 +36268 +39035 +9 +15718 +958 +590 +38465 +39036 +39037 +39038 +349 +39039 +194 +39040 +8668 +39041 +1989 +39042 +3599 +39043 +39044 +31576 +14327 +2593 +37556 +21947 +7053 +39045 +30224 +17217 +10791 +590 +60 +17040 +39046 +39047 +3542 +228 +22464 +39048 +1364 +6439 +14770 +5582 +30877 +6364 +10946 +30051 +36721 +892 +30417 +39049 +36735 +39050 +2457 +2561 +1732 +1246 +39051 +2040 +21031 +10946 +53 +39052 +286 +1364 +554 +201 +15718 +17151 +2919 +16853 +1090 +14650 +34890 +39053 +39054 +283 +39055 +4028 +39056 +39057 +39058 +39059 +15096 +915 +10147 +39060 +39061 +21732 +10946 +33650 +9 +8334 +39062 +15295 +39063 +43 +33650 +27669 +37556 +27669 +17602 +13375 +39064 +39065 +8639 +9 +27669 +5891 +39066 +1563 +39067 +14477 +39068 +39069 +14477 +6001 +43 +7835 +35318 +286 +39070 +12579 +24896 +7835 +19 +21337 +5344 +28036 +153 +590 +29483 +39071 +39072 +16327 +140 +39073 +18627 +15718 +16466 +39074 +317 +39075 +365 +16437 +46 +590 +8668 +2260 +43 +39076 +142 +1508 +7835 +39077 +16437 +39078 +31293 +16437 +1107 +39079 +39080 +590 +39081 +179 +2550 +30224 +39082 +39083 +27669 +25943 +29483 +39084 +21776 +9 +39085 +39086 +9 +25140 +39087 +16919 +9939 +37588 +39088 +8297 +11096 +19618 +57 +15718 +568 +14271 +16466 +345 +1090 +39089 +13323 +39090 +39091 +3546 +164 +39092 +32763 +1688 +2040 +39093 +39094 +430 +10946 +30877 +7053 +9 +500 +39095 +34204 +39096 +9 +1090 +39097 +39098 +39099 +39100 +39101 +39102 +4055 +736 +14369 +39103 +17151 +37764 +39104 +19 +707 +10946 +16160 +39105 +39106 +39107 +14001 +25983 +39108 +238 +33921 +17151 +736 +39109 +5963 +3959 +9118 +37556 +39110 +39111 +14 +39112 +39113 +39114 +11762 +11013 +29082 +39115 +39116 +1540 +39117 +30794 +9 +32 +21947 +24113 +22 +22197 +39118 +4899 +39119 +5188 +5344 +19 +15 +33438 +4055 +554 +590 +16 +17911 +14604 +379 +27521 +21627 +33650 +17232 +39120 +89 +19797 +36638 +39121 +39122 +39123 +10028 +43 +703 +34944 +39124 +554 +19 +590 +29687 +1920 +30224 +39125 +4055 +533 +39126 +39127 +39128 +99 +39129 +19 +7544 +10 +39130 +15539 +2532 +5188 +39131 +39132 +39133 +19 +178 +39134 +43 +39135 +1013 +30224 +14660 +22799 +1563 +39136 +554 +39137 +57 +39138 +19 +4055 +284 +29381 +1082 +7855 +122 +33447 +67 +9595 +39139 +590 +39140 +104 +39141 +39142 +457 +52 +46 +39143 +39144 +32782 +39145 +39146 +25589 +37556 +39147 +14648 +29204 +5209 +31168 +34 +19178 +1688 +284 +14369 +29483 +39148 +39149 +39150 +39151 +349 +140 +5188 +20677 +3546 +8501 +39152 +39153 +39154 +12202 +10946 +1425 +25316 +39155 +209 +12348 +9 +1090 +39156 +39157 +39158 +7583 +39159 +39160 +39161 +39162 +39163 +57 +28316 +9 +4328 +39164 +39165 +15647 +16447 +39166 +39167 +20442 +303 +590 +15 +10501 +35 +2694 +4765 +19 +35284 +590 +39168 +39169 +12 +19 +15311 +971 +39170 +10147 +12987 +34706 +12969 +39171 +590 +4518 +284 +284 +39172 +9 +21947 +37556 +39173 +39174 +5085 +39175 +30568 +48 +6261 +13905 +7276 +39176 +242 +19 +39177 +28441 +18503 +519 +30224 +2314 +2414 +14 +39178 +17151 +39179 +39180 +3546 +39181 +39182 +30877 +39183 +1090 +6701 +915 +16562 +34402 +39184 +703 +677 +27362 +39185 +1912 +20355 +365 +29172 +24180 +5780 +286 +5784 +11762 +248 +39186 +39187 +46 +22963 +39188 +1710 +9 +14 +43 +39189 +2147 +140 +46 +2281 +14001 +39190 +5499 +9 +21947 +39191 +30051 +39192 +39193 +39194 +39195 +415 +29483 +21947 +1107 +887 +89 +15 +25237 +4116 +39196 +39197 +39198 +39199 +38465 +21947 +286 +10946 +39200 +39201 +358 +43 +43 +14947 +20005 +14914 +30051 +39202 +586 +99 +37556 +38465 +6011 +872 +33650 +248 +39203 +14 +39204 +39205 +39206 +39207 +33650 +39208 +19 +12121 +595 +209 +19 +29130 +39209 +39210 +39211 +39212 +12777 +2419 +33293 +19 +736 +590 +349 +17635 +39213 +24988 +2446 +34402 +155 +1011 +27669 +3759 +2 +1604 +4124 +17911 +24864 +29859 +33627 +24303 +15 +14477 +323 +248 +25237 +379 +39214 +18257 +38760 +5188 +721 +8249 +39215 +39216 +14909 +15710 +3242 +2944 +19 +17911 +15718 +1090 +21268 +39217 +43 +5188 +18954 +4055 +5007 +39218 +5650 +39219 +703 +12005 +1559 +30877 +2804 +39220 +39221 +1244 +1503 +303 +39222 +30877 +8208 +2865 +1090 +3546 +77 +37556 +39223 +33494 +18798 +9 +39224 +21689 +19355 +213 +43 +30223 +39225 +23226 +37556 +30877 +495 +31293 +4055 +4195 +887 +399 +248 +39226 +39227 +4055 +12299 +39228 +37556 +39229 +39230 +39231 +30232 +3655 +24862 +35220 +43 +303 +9 +39232 +39233 +1710 +31852 +39234 +37556 +18951 +39235 +39236 +568 +176 +30877 +39237 +19 +39238 +43 +39239 +140 +9 +39240 +33494 +3858 +4055 +11763 +39241 +21947 +12867 +1716 +5649 +337 +14604 +5904 +20700 +28317 +39242 +10946 +39243 +17 +39244 +31234 +43 +39245 +39246 +39247 +1300 +39248 +12267 +286 +3248 +14079 +39249 +2832 +6344 +27069 +1090 +39250 +1571 +37556 +21947 +39251 +25683 +1090 +33627 +39252 +43 +34719 +17215 +14909 +354 +29483 +39253 +4667 +1291 +703 +19 +9 +19 +89 +15718 +1524 +39254 +39255 +39256 +33120 +1018 +30224 +33758 +27719 +39257 +19 +9 +9 +39258 +10094 +222 +8602 +2197 +38893 +284 +2537 +38381 +31293 +590 +36735 +39259 +29483 +39260 +39261 +75 +43 +357 +39262 +39263 +39264 +39265 +2476 +25316 +39266 +39267 +39268 +768 +815 +32 +201 +38933 +1230 +34433 +31098 +39269 +19 +4463 +35792 +39270 +13848 +39271 +30051 +3440 +179 +21200 +39272 +57 +1961 +3858 +24725 +647 +39273 +337 +99 +39274 +39275 +284 +33650 +39276 +39277 +30230 +39278 +39279 +39280 +46 +1961 +242 +39281 +613 +74 +30005 +845 +28441 +439 +39282 +15216 +8171 +39283 +39284 +643 +817 +39285 +2349 +39286 +39287 +7226 +25237 +6161 +39288 +57 +15324 +21089 +345 +9185 +29381 +39289 +11224 +165 +10946 +39290 +138 +39291 +39292 +337 +39293 +19797 +39294 +39295 +31293 +1090 +39296 +9526 +39297 +8367 +39298 +30877 +39299 +1961 +32 +4907 +11822 +15935 +1139 +1291 +12987 +39300 +33693 +39301 +19965 +554 +2 +25140 +39302 +19318 +936 +39303 +27719 +21947 +38003 +2764 +8668 +15819 +39304 +1223 +464 +31453 +39305 +442 +39306 +39307 +39308 +24896 +39309 +720 +39310 +2733 +39311 +39312 +39313 +11073 +14843 +20 +38760 +1107 +33650 +39314 +677 +39315 +8668 +43 +39316 +39317 +19 +17670 +39318 +19009 +15718 +2804 +26320 +14816 +39319 +11321 +27798 +39320 +39321 +713 +35214 +20102 +39322 +39323 +21947 +27433 +30877 +4055 +2187 +39324 +39325 +39326 +39327 +26789 +25 +39328 +12005 +23935 +25140 +39329 +35427 +39330 +24864 +39331 +39332 +14 +5908 +39333 +25943 +927 +14330 +8787 +16773 +39334 +39335 +39336 +39337 +323 +39338 +379 +16466 +39339 +39340 +34641 +24318 +39341 +39342 +4227 +10246 +1385 +286 +6418 +379 +15718 +2406 +39343 +39344 +213 +39345 +36735 +14369 +5188 +3182 +43 +27719 +39346 +20941 +228 +33650 +39347 +9016 +25 +39348 +9410 +4907 +39349 +1300 +590 +155 +770 +39350 +21947 +39351 +77 +3679 +39352 +19618 +19 +39353 +284 +4518 +39354 +1688 +19048 +39355 +4032 +9096 +20555 +39356 +39357 +19 +39358 +248 +39359 +20 +38893 +14888 +39360 +19030 +39361 +34402 +22 +5923 +39362 +37556 +137 +25237 +6533 +286 +34444 +39363 +24864 +284 +11762 +39364 +39365 +1533 +43 +39366 +39367 +20845 +566 +39368 +1536 +15797 +1066 +39369 +30224 +209 +35155 +39370 +2832 +39371 +39372 +43 +1012 +39373 +30551 +379 +39374 +39375 +2577 +31873 +977 +18064 +39376 +31168 +39377 +286 +15370 +39378 +671 +13375 +39379 +5007 +188 +3480 +39380 +736 +25 +514 +39381 +39382 +19 +1817 +32 +865 +33061 +303 +29483 +39383 +586 +27669 +39384 +15541 +15050 +38760 +4452 +1307 +39385 +1637 +27669 +38465 +39386 +39387 +39388 +26040 +39389 +39390 +39391 +5446 +39392 +21947 +8297 +23103 +39393 +590 +39394 +39395 +39396 +12936 +39397 +39398 +19 +34402 +39399 +98 +39400 +31293 +39401 +13168 +39402 +213 +720 +19 +24051 +373 +1230 +29483 +14693 +16539 +30877 +936 +39403 +22 +39404 +770 +39405 +37556 +39406 +39407 +15341 +31370 +39408 +39409 +19 +101 +39410 +39411 +213 +29483 +39412 +30877 +8210 +248 +9 +31098 +39413 +514 +13648 +39414 +337 +29434 +14477 +495 +337 +415 +7923 +303 +39415 +1157 +39416 +33627 +3317 +39417 +284 +29007 +39418 +30224 +39419 +590 +33627 +345 +1169 +43 +22 +19852 +39420 +13361 +2694 +21947 +8380 +22598 +37556 +29711 +39421 +4055 +5188 +39422 +4055 +14369 +6598 +9948 +1172 +323 +39423 +30224 +35922 +2694 +1082 +31293 +9 +13813 +17348 +33650 +39424 +24307 +19 +4230 +14001 +25140 +14369 +4634 +11321 +39425 +26724 +826 +38465 +39426 +39427 +39428 +5351 +4153 +30224 +39429 +36734 +39430 +3759 +13113 +37556 +865 +36146 +38465 +22842 +590 +39431 +39432 +39433 +14330 +33494 +11312 +21947 +4042 +16466 +31234 +39434 +15718 +15 +39435 +440 +155 +19618 +27669 +6238 +39436 +39437 +30494 +25501 +1442 +28490 +248 +14992 +1384 +43 +36515 +3381 +11484 +39438 +4055 +2804 +37556 +22922 +3546 +39439 +11321 +17385 +39440 +586 +694 +21089 +39441 +14330 +1056 +33951 +5085 +39442 +39443 +39444 +39445 +27669 +21947 +39446 +20700 +39447 +39448 +34752 +19 +39449 +13777 +39450 +12454 +15718 +39451 +36208 +720 +39452 +39453 +13905 +24423 +57 +39454 +19 +14369 +2709 +39455 +671 +39456 +39457 +613 +39458 +25943 +915 +39459 +36218 +39460 +34 +19 +303 +115 +19029 +30224 +25943 +37127 +39461 +39462 +24405 +15 +21947 +39463 +32915 +19 +345 +24862 +39464 +39465 +39466 +19489 +1426 +39467 +39468 +2197 +317 +39469 +29483 +8727 +39470 +19 +14604 +12987 +35214 +27043 +30877 +7471 +103 +32 +23727 +1090 +21776 +39471 +1384 +39472 +39473 +39474 +29406 +39475 +25316 +736 +31041 +17412 +39476 +21947 +9 +31168 +39477 +915 +4330 +15906 +1112 +4808 +39059 +595 +39478 +30877 +39479 +590 +10 +33650 +17670 +33120 +29381 +39480 +22815 +39481 +286 +39482 +201 +39483 +39484 +38523 +24332 +24303 +31575 +17691 +16826 +19655 +1090 +822 +39485 +21947 +38008 +2009 +5071 +39486 +30224 +13424 +1090 +39487 +39488 +39489 +25624 +1513 +554 +25140 +33494 +301 +39490 +323 +39491 +4518 +15 +1083 +39492 +39493 +7810 +21187 +8053 +39494 +1164 +30224 +39495 +57 +39496 +31098 +39497 +11593 +39498 +24725 +736 +1710 +39499 +1212 +39500 +39501 +26361 +39502 +39503 +33758 +31346 +33278 +373 +39504 +39505 +38003 +25683 +14477 +39506 +39507 +415 +272 +39508 +1749 +1765 +39509 +39510 +39511 +2314 +1680 +13988 +39512 +8378 +29204 +35591 +17615 +18695 +31873 +39513 +17385 +22986 +484 +1112 +39514 +16826 +16511 +39515 +30309 +57 +39516 +14369 +43 +590 +39517 +39518 +21269 +28036 +39519 +29483 +18904 +39520 +39521 +7027 +57 +176 +10177 +9 +39522 +39523 +29483 +286 +14586 +10500 +1011 +27719 +21947 +8392 +26928 +39524 +568 +22314 +43 +284 +14330 +9 +10946 +440 +19 +39525 +39526 +39527 +39528 +573 +39529 +25140 +19 +53 +2577 +3260 +665 +31881 +36638 +23112 +39530 +36481 +39531 +3637 +39532 +1428 +201 +39533 +8670 +53 +39534 +25904 +14 +7053 +228 +1082 +1153 +35633 +4124 +15249 +39535 +43 +9 +17295 +14001 +39536 +491 +39537 +39538 +14066 +39539 +39323 +39540 +34 +39541 +590 +39542 +25316 +8890 +13721 +1051 +33116 +39543 +39544 +14369 +27069 +24303 +19209 +39545 +39546 +2764 +24144 +6471 +2 +19 +31225 +554 +9 +24725 +39547 +19618 +1090 +39548 +352 +37388 +14369 +39549 +25237 +21947 +31042 +7053 +39550 +34402 +89 +646 +39551 +39552 +286 +15 +39553 +104 +613 +29204 +21627 +17911 +209 +19 +39554 +57 +7053 +39555 +39556 +16782 +15537 +39557 +22800 +14152 +2739 +15 +21742 +10 +30877 +1141 +34317 +19918 +278 +39558 +39559 +39560 +30449 +33627 +39561 +2733 +2975 +14369 +38523 +28549 +19 +39562 +15718 +39563 +1352 +286 +39564 +39565 +16398 +1172 +18695 +317 +4339 +2009 +21947 +28317 +24303 +24862 +15 +193 +1011 +14840 +39566 +25316 +31293 +39567 +39568 +815 +590 +30051 +209 +1870 +24864 +4650 +4055 +39569 +39570 +15718 +21947 +39571 +5327 +39572 +14001 +39573 +98 +39574 +31098 +349 +1181 +411 +7774 +39575 +39576 +39577 +25683 +17077 +34402 +15671 +39578 +11600 +6883 +576 +910 +24864 +2694 +5188 +1090 +39579 +39580 +39581 +8357 +39582 +39583 +19618 +21947 +19724 +36268 +20677 +1090 +11797 +8356 +39584 +37556 +39585 +39586 +30224 +39587 +38595 +28317 +5231 +10846 +43 +31293 +36783 +39588 +39589 +33627 +31293 +37920 +16 +30224 +12067 +15 +39590 +30221 +39591 +19 +1563 +39592 +39593 +590 +37556 +39594 +4352 +39595 +39596 +18345 +2243 +1562 +17396 +70 +32566 +36268 +29153 +44 +39597 +22 +19 +15547 +2919 +29434 +39598 +39599 +358 +39600 +15370 +1157 +349 +11249 +30458 +39601 +34 +39602 +30877 +39603 +1517 +39604 +16437 +1920 +10677 +3598 +39605 +6122 +19 +16 +317 +1571 +33385 +18283 +11429 +14 +39606 +33709 +24036 +39607 +19 +1212 +39608 +39609 +32 +1090 +20496 +39590 +39610 +39611 +39612 +26922 +13721 +39613 +39614 +32 +354 +590 +39615 +1157 +5627 +30877 +265 +33494 +707 +38760 +15718 +2310 +14856 +286 +23741 +2372 +39616 +39617 +12251 +39618 +57 +39619 +6531 +19655 +39620 +26361 +4055 +7661 +39621 +39622 +30877 +25140 +1011 +39623 +39590 +70 +1011 +53 +39624 +1224 +39625 +39626 +4684 +590 +2031 +39627 +39628 +24864 +1090 +39629 +23103 +19 +25048 +11072 +18045 +33627 +9 +39630 +27669 +13179 +21729 +8297 +9 +411 +39631 +27147 +39632 +861 +30877 +345 +1442 +31172 +39633 +34264 +39634 +2865 +14330 +1013 +33650 +3904 +3601 +33650 +30481 +39635 +43 +39636 +28317 +5065 +39637 +39638 +19 +27224 +39639 +39640 +39641 +39642 +25 +865 +31168 +20158 +4056 +39643 +39644 +8668 +11670 +22844 +3546 +39645 +39646 +39647 +990 +29875 +566 +39648 +37525 +37819 +39649 +37556 +30449 +2755 +39650 +39651 +39652 +3182 +14127 +39653 +66 +4002 +27043 +29483 +39654 +34402 +1107 +39655 +46 +39656 +1870 +19 +39657 +39658 +9440 +5085 +39659 +39660 +33627 +39661 +38527 +32581 +20288 +66 +30580 +17151 +11421 +6571 +13721 +39662 +2187 +39663 +1115 +37556 +39664 +140 +39665 +1384 +5409 +39666 +39667 +39668 +9771 +15718 +3743 +39669 +590 +1410 +39670 +16542 +4808 +32022 +1961 +37556 +9 +43 +39671 +15 +39672 +39673 +30650 +63 +28316 +5293 +39674 +22757 +39675 +1531 +38478 +972 +17267 +19 +36218 +39676 +43 +16 +39677 +6531 +14660 +39678 +39679 +19 +668 +39680 +19 +2804 +39681 +37920 +15698 +33553 +39682 +39683 +39684 +38033 +795 +23103 +39685 +8685 +379 +21521 +7835 +13143 +12589 +1051 +21947 +39686 +209 +39687 +645 +10 +25481 +39688 +19283 +39689 +32520 +39690 +33278 +36268 +39609 +11312 +24303 +39691 +554 +39692 +24889 +1470 +225 +39693 +39694 +39695 +16609 +39696 +39697 +31293 +590 +9 +39698 +533 +13399 +14679 +37290 +39699 +39700 +43 +39701 +8437 +39702 +39703 +39704 +23497 +35948 +16121 +15718 +39705 +2195 +3553 +2604 +4055 +39706 +15718 +849 +892 +558 +14340 +21689 +1454 +39707 +19 +39708 +39709 +39710 +590 +19 +4525 +140 +4274 +39711 +39712 +15 +32190 +39713 +137 +39714 +349 +39715 +5204 +38760 +33650 +554 +24896 +1011 +2694 +39716 +12661 +115 +9573 +25237 +14369 +29381 +36755 +99 +23264 +39717 +30877 +39718 +10 +349 +16826 +43 +29381 +39719 +39720 +23103 +3104 +39721 +39722 +29483 +66 +6294 +39723 +2471 +1765 +2300 +845 +39724 +26496 +6766 +31873 +15718 +16331 +14330 +21338 +10 +12555 +415 +39725 +16437 +30877 +31906 +34402 +31293 +22 +1870 +5877 +39726 +39727 +39728 +13943 +137 +21947 +176 +15718 +24332 +3546 +2795 +39729 +323 +1107 +39730 +13721 +39731 +34402 +29483 +1562 +36268 +36638 +6499 +29483 +37556 +39732 +39733 +31098 +6110 +15 +39734 +19178 +39735 +30224 +317 +5679 +39736 +1577 +32332 +4306 +2577 +39737 +39738 +39739 +39740 +21947 +1090 +39741 +1471 +7960 +31139 +349 +19 +39742 +2325 +39743 +586 +39744 +39745 +39746 +36268 +39747 +39748 +32410 +39749 +39709 +39750 +10946 +365 +554 +43 +39751 +2135 +39752 +39753 +29483 +13905 +701 +345 +22949 +39754 +519 +26657 +33295 +39755 +39756 +33627 +590 +43 +3172 +39757 +39758 +21947 +39759 +28186 +703 +1047 +28965 +19655 +648 +3915 +9 +8727 +17151 +39760 +39761 +39762 +736 +15718 +6072 +31293 +4518 +1018 +19 +1442 +38523 +14025 +17 +37556 +1120 +19995 +39763 +39764 +14909 +43 +357 +39765 +955 +188 +18310 +39766 +39767 +39768 +19994 +39769 +4779 +225 +21672 +36268 +19 +13396 +21947 +39770 +37770 +39771 +39772 +7855 +28317 +7053 +25 +1090 +15 +39773 +19 +39211 +39774 +21947 +34433 +590 +19852 +14477 +39775 +37556 +2764 +57 +39776 +39777 +39778 +39779 +39780 +26496 +38465 +4808 +3553 +39781 +39782 +39783 +39784 +39785 +39786 +20058 +2264 +590 +2804 +39787 +23231 +39788 +32275 +15823 +39789 +970 +3491 +1090 +39790 +21947 +39791 +9 +89 +6499 +39792 +14369 +36268 +5314 +349 +39793 +39794 +1090 +179 +39795 +39796 +3100 +1066 +13474 +109 +27669 +13803 +19058 +39797 +39798 +2097 +399 +4124 +14 +39799 +2532 +24725 +39800 +1090 +36394 +39801 +15461 +736 +31293 +26049 +9 +18310 +24864 +21947 +1090 +317 +31293 +39802 +37504 +39803 +1021 +39804 +39805 +19 +4472 +14689 +39806 +3546 +32410 +43 +4055 +17149 +36218 +39807 +17151 +39808 +25140 +31293 +39809 +736 +39810 +28036 +37556 +286 +37556 +736 +19 +21947 +1051 +12185 +2324 +4441 +37556 +39811 +5642 +1531 +39812 +12005 +30877 +541 +34337 +13349 +19 +9 +39813 +720 +533 +24458 +39814 +18418 +1822 +36218 +1090 +32 +6468 +590 +3764 +13448 +37556 +14330 +11762 +39815 +39816 +39817 +36268 +31098 +39818 +19 +29945 +24303 +533 +20514 +20718 +15718 +43 +39819 +30650 +39820 +39821 +39822 +24896 +14477 +3127 +39823 +15 +23103 +1090 +39824 +33627 +14369 +15718 +39825 +14363 +4461 +39826 +38523 +3296 +21947 +9922 +23103 +5780 +12590 +39827 +16466 +2197 +39828 +1090 +18136 +39829 +10791 +15718 +5153 +39830 +39831 +24725 +39832 +6364 +1559 +39833 +1647 +43 +39834 +713 +31293 +590 +286 +25140 +373 +18310 +39835 +9 +17170 +18896 +2567 +25237 +1481 +9 +17571 +35832 +15718 +26210 +30551 +16239 +1425 +9 +14369 +39836 +39837 +10769 +32332 +30580 +39838 +30224 +39839 +1100 +39840 +7835 +24840 +179 +39841 +22912 +26320 +176 +590 +39842 +34537 +3407 +21949 +2581 +39843 +39844 +38595 +7835 +15068 +39845 +39846 +39847 +39848 +39849 +1116 +14369 +39850 +345 +21776 +16612 +5912 +31041 +1018 +7053 +528 +32 +9 +17602 +39851 +39852 +21947 +39853 +827 +39854 +35076 +39855 +39856 +39857 +26496 +31293 +4439 +39858 +31293 +43 +411 +27669 +379 +39859 +26611 +39860 +29204 +21947 +286 +39861 +39862 +19655 +39863 +21738 +9 +484 +16450 +7732 +29798 +39864 +22176 +39865 +39866 +39867 +5314 +12919 +484 +39868 +140 +29381 +43 +138 +39869 +89 +1280 +8214 +24766 +14477 +4056 +14477 +39870 +1224 +15654 +39871 +39872 +39873 +39874 +39875 +4820 +19284 +19 +29204 +39876 +39877 +19 +43 +29200 +1108 +39878 +39879 +39880 +9 +39881 +39882 +590 +17635 +30877 +36483 +11754 +24322 +28961 +14825 +39883 +14330 +39884 +24324 +1169 +4502 +3994 +29204 +31293 +3904 +6718 +39885 +17151 +39536 +39886 +39887 +1606 +2187 +28317 +745 +19 +9 +39888 +39889 +43 +514 +39890 +1011 +533 +7237 +861 +17897 +16437 +8160 +30224 +39891 +2 +31293 +36268 +39892 +20825 +104 +7835 +590 +19 +1090 +39893 +39894 +39895 +12231 +39896 +39897 +17033 +39898 +30877 +39899 +5737 +554 +586 +142 +528 +18695 +39900 +7855 +13409 +2919 +37556 +39901 +39902 +36218 +9 +457 +39903 +39904 +16443 +566 +39905 +39906 +27122 +34204 +43 +39907 +39908 +24864 +1749 +3030 +39909 +39910 +14 +39911 +373 +26361 +238 +19 +39912 +19618 +32 +39913 +39914 +39915 +616 +19 +4916 +39916 +39917 +39918 +14369 +39919 +2953 +39920 +38465 +39921 +39922 +7027 +25683 +39923 +2865 +21947 +14343 +323 +39924 +6833 +286 +14001 +8282 +31512 +39925 +536 +39926 +15320 +39927 +25943 +9 +832 +39928 +39929 +39930 +19 +39931 +31346 +39932 +21947 +30650 +11430 +16925 +14369 +4521 +14161 +39933 +39934 +18774 +37556 +43 +38303 +39935 +14363 +590 +36457 +39936 +39937 +39938 +39939 +30877 +9 +39940 +58 +39941 +31293 +19 +39942 +3406 +39943 +30650 +222 +1992 +11202 +1852 +2694 +39944 +26724 +39945 +29209 +2314 +39946 +8528 +14102 +28339 +39947 +1082 +24864 +14369 +39948 +21198 +509 +5780 +1720 +43 +14079 +57 +15 +7478 +39949 +3406 +39950 +39951 +39952 +478 +4760 +4055 +185 +39953 +13539 +39954 +3790 +1531 +39955 +514 +24303 +15164 +1716 +21947 +1234 +1310 +31936 +27069 +399 +31293 +5409 +17997 +39956 +31381 +32523 +98 +29483 +31098 +15 +31225 +38729 +34402 +16466 +37556 +2872 +25943 +24864 +1696 +39957 +22823 +31293 +39958 +39959 +7159 +39960 +31002 +43 +1456 +29483 +39961 +39962 +39963 +39964 +39965 +25584 +1090 +12934 +115 +39966 +39967 +39968 +39969 +2356 +15497 +17412 +37556 +31293 +39970 +7053 +31293 +39971 +21947 +9 +28036 +6115 +39972 +7904 +39973 +15 +4463 +3839 +35423 +7302 +39974 +29483 +586 +39975 +7471 +286 +39976 +1013 +880 +39977 +39978 +39979 +29483 +10946 +39980 +16826 +21947 +39981 +30535 +9 +13304 +37556 +39982 +9 +19655 +21973 +2591 +39983 +39984 +5431 +2314 +39985 +18120 +4 +528 +736 +595 +39986 +19 +446 +39987 +39988 +39989 +20851 +4441 +10 +15718 +43 +415 +39990 +11321 +39991 +39992 +39993 +39994 +39995 +357 +39996 +39997 +39998 +30877 +35086 +38003 +43 +881 +39999 +2064 +10 +40000 +1090 +1021 +2315 +30877 +40001 +15718 +40002 +40003 +40004 +19 +36268 +30877 +17911 +14363 +40005 +1508 +40006 +40007 +43 +40008 +40009 +40010 +40011 +7835 +17151 +30877 +40012 +14363 +40013 +12307 +33494 +40014 +30224 +9 +19618 +40015 +40016 +40017 +28384 +30877 +40018 +40019 +33508 +2779 +40020 +1115 +533 +40021 +40022 +5949 +31225 +862 +14 +28317 +30877 +15718 +5780 +40023 +38760 +11607 +7658 +40024 +40025 +19 +27669 +27069 +1956 +40026 +40027 +19618 +40028 +40029 +40030 +40031 +4100 +26020 +558 +40032 +10616 +20423 +29047 +40033 +19 +40034 +40035 +14947 +40036 +40037 +40038 +40039 +34957 +40040 +29172 +40041 +20442 +36735 +34602 +34402 +40042 +19632 +1710 +583 +13405 +4 +7260 +18939 +37631 +416 +40043 +40044 +15398 +37511 +1912 +4425 +25 +15 +564 +140 +43 +66 +33120 +37556 +40045 +4055 +915 +19406 +39983 +40046 +9 +15718 +29628 +1415 +736 +7123 +40047 +40048 +29483 +3148 +30650 +1013 +155 +104 +21269 +32410 +40049 +40050 +27794 +40051 +2117 +40052 +40053 +40054 +2 +34402 +40055 +137 +18695 +40056 +2349 +40057 +40058 +25316 +19 +14369 +40059 +40060 +8362 +29109 +4116 +40061 +14363 +40062 +40063 +882 +2865 +43 +286 +274 +40064 +40065 +31293 +720 +14515 +936 +29914 +14477 +28295 +38987 +40066 +31293 +40067 +40068 +5725 +736 +3050 +5659 +788 +40069 +10 +40070 +2260 +40071 +201 +21947 +40072 +40073 +3119 +590 +1090 +40074 +40075 +1513 +40076 +40077 +40078 +40079 +37556 +1021 +28961 +415 +38523 +8076 +4313 +4735 +25316 +3345 +40080 +3546 +28295 +40081 +37684 +80 +22 +40082 +39709 +19 +40083 +15 +14898 +25943 +40084 +349 +40085 +7624 +18695 +33306 +6950 +11106 +40086 +16437 +597 +15178 +31293 +17273 +14947 +40087 +40088 +40089 +11 +15718 +915 +40090 +1529 +2314 +1503 +21947 +250 +2764 +40091 +14909 +40092 +40093 +13026 +713 +24045 +40094 +36735 +9633 +119 +40095 +40096 +40097 +15 +30224 +31873 +40098 +23855 +40099 +15497 +43 +27719 +155 +31882 +9 +3484 +31293 +33494 +665 +31293 +40100 +1090 +1464 +40101 +27776 +40102 +25140 +40103 +4055 +40104 +37576 +11263 +40105 +15 +40106 +10946 +19 +40107 +40108 +5188 +40109 +1961 +40110 +38705 +17848 +491 +40111 +25245 +34 +21689 +40112 +1710 +590 +40113 +28317 +18684 +32317 +4820 +40114 +597 +40115 +9 +25140 +18684 +29483 +33010 +40116 +46 +40117 +32 +25316 +40118 +32642 +28441 +4055 +3546 +21947 +40119 +14007 +345 +14981 +3842 +10946 +40120 +484 +31098 +19 +29483 +40121 +590 +2410 +915 +365 +40122 +40123 +8186 +40124 +21947 +33627 +5188 +2577 +26027 +19918 +57 +22864 +2257 +25140 +24403 +32920 +1716 +40125 +16 +18045 +19 +411 +40126 +590 +27669 +1612 +736 +40127 +14330 +40128 +625 +40129 +40130 +14398 +2769 +1011 +1021 +989 +9 +31293 +36268 +25237 +1444 +7987 +40131 +3546 +40132 +30051 +331 +30224 +590 +14369 +10946 +38523 +25316 +40133 +19 +37556 +40134 +43 +40135 +31293 +37556 +9 +40136 +14604 +32 +25395 +868 +30144 +32532 +286 +40137 +13108 +15718 +1716 +40138 +31225 +40139 +2342 +28034 +40140 +40141 +33758 +36268 +18862 +2476 +9452 +3553 +40142 +484 +20 +40143 +40144 +36735 +4820 +30051 +39158 +40145 +2410 +31293 +11508 +1090 +18045 +40146 +19963 +33957 +533 +533 +40147 +40148 +40149 +14909 +40150 +36268 +23504 +989 +40151 +14562 +495 +9 +8367 +40152 +40153 +40154 +12936 +4055 +89 +24260 +38180 +1112 +29007 +213 +5014 +43 +20161 +40155 +415 +40156 +23103 +40157 +284 +19264 +18364 +16879 +40158 +40159 +11158 +1352 +25683 +40160 +40161 +1502 +14369 +26987 +40162 +40163 +40164 +2318 +40165 +19 +28317 +377 +284 +13663 +40166 +22963 +32 +40167 +40168 +40169 +40170 +8220 +21261 +10946 +40171 +37556 +845 +40172 +40173 +586 +40174 +1615 +1316 +40175 +43 +1208 +1961 +31293 +40176 +40177 +9 +28491 +40178 +33508 +590 +40179 +25316 +5071 +40180 +40181 +613 +14363 +4547 +1870 +248 +40182 +17799 +16327 +1531 +3601 +15598 +583 +21947 +284 +357 +40183 +40184 +30877 +40185 +720 +35551 +2264 +5780 +8029 +40186 +26361 +40187 +40188 +26496 +14369 +337 +40189 +6439 +40190 +40191 +31293 +337 +18354 +6225 +40192 +40193 +16731 +1799 +7516 +40194 +40195 +3546 +19 +14603 +14022 +26040 +31293 +4055 +40196 +19 +4026 +31168 +1951 +38465 +18684 +40197 +40198 +40199 +31293 +37556 +40200 +40201 +248 +379 +40202 +40203 +40204 +2281 +40205 +40206 +30877 +736 +2314 +40207 +43 +19 +40208 +40209 +1961 +40210 +201 +1082 +15718 +26361 +24862 +25140 +31293 +25965 +40211 +40212 +40213 +17698 +492 +33325 +40214 +554 +3421 +40215 +248 +40216 +845 +29209 +284 +28549 +10946 +286 +40217 +16063 +25943 +9 +17872 +282 +40218 +31293 +337 +20442 +822 +40219 +303 +1966 +29381 +40220 +13752 +27669 +5833 +114 +40221 +213 +40222 +40223 +554 +1300 +158 +20386 +40224 +17635 +40225 +40226 +17911 +155 +40227 +7835 +15 +2260 +34402 +34 +40228 +2804 +32 +40229 +40230 +4606 +2065 +12987 +40231 +40232 +36268 +303 +40233 +248 +40234 +40235 +43 +40236 +338 +7835 +19 +40237 +178 +40238 +40239 +40240 +13390 +40241 +40242 +12304 +40243 +3 +24864 +1364 +1889 +40244 +17603 +34584 +30224 +40245 +9573 +213 +9 +23103 +23925 +140 +31293 +40246 +4414 +40247 +40248 +590 +40249 +18300 +29945 +18807 +40250 +35992 +23166 +40251 +242 +15718 +34342 +3950 +40252 +40253 +21689 +4720 +29317 +19 +25943 +18744 +17 +38241 +568 +6364 +9573 +40254 +40255 +39983 +40256 +10318 +32714 +686 +40257 +5217 +1743 +248 +21417 +21947 +345 +36638 +5067 +40258 +40259 +40260 +1018 +165 +14369 +248 +40261 +29483 +1364 +37556 +40262 +484 +40263 +28494 +3553 +7658 +1502 +11762 +43 +40264 +40265 +40266 +9 +1696 +23103 +25683 +14477 +770 +40267 +31168 +40268 +1090 +40269 +19 +33061 +317 +1765 +590 +40270 +20442 +11522 +4 +14001 +13361 +284 +37556 +19 +16181 +31293 +40271 +21947 +40272 +26496 +14102 +8249 +33650 +677 +19 +40273 +25056 +548 +29483 +1542 +37808 +40274 +4827 +40275 +10880 +590 +40276 +25904 +40277 +37556 +15951 +40278 +37556 +1090 +671 +14369 +40279 +19618 +40280 +349 +40281 +1090 +40282 +40283 +40284 +40285 +9 +40286 +40287 +9 +40288 +4702 +40289 +10930 +40290 +16466 +3251 +40291 +6086 +40292 +14369 +14477 +712 +5409 +213 +213 +40293 +40294 +736 +19 +17151 +40295 +15914 +416 +140 +36639 +213 +40296 +38523 +40297 +377 +32332 +34641 +38042 +40298 +19354 +37556 +40086 +40299 +40300 +38523 +5344 +11664 +9 +24324 +705 +40301 +40302 +40303 +34319 +40304 +40305 +17269 +6060 +22922 +378 +21947 +6341 +17911 +40306 +15511 +40307 +176 +33627 +40308 +349 +1889 +13224 +40309 +40310 +40311 +2140 +446 +1090 +40277 +28745 +15880 +40312 +40313 +1090 +40314 +27069 +1382 +40315 +40316 +8501 +3239 +18369 +24207 +573 +40317 +1382 +1157 +21947 +10600 +40318 +21045 +19618 +37556 +40319 +31293 +643 +15718 +40320 +40321 +2314 +40322 +40323 +40324 +4055 +40325 +25140 +27719 +40326 +14369 +25904 +7053 +646 +28317 +28036 +40327 +40328 +40329 +40330 +7703 +24144 +40331 +37556 +209 +10946 +40332 +5409 +25996 +10791 +12287 +40333 +40334 +40335 +13390 +40336 +1870 +31293 +8392 +9 +29483 +3470 +12674 +2775 +16063 +137 +12989 +40337 +21269 +194 +15027 +40338 +19 +9 +15 +40339 +24303 +228 +1824 +40340 +39926 +40341 +37556 +1765 +13721 +31234 +10960 +38760 +3844 +40342 +15 +40343 +40344 +43 +1234 +40345 +40346 +176 +32 +11762 +1090 +16798 +19095 +576 +40347 +36736 +491 +15683 +7458 +12590 +40348 +18750 +39709 +1010 +34 +705 +29427 +27669 +40349 +11762 +9 +8780 +31293 +40350 +40351 +15718 +24421 +303 +29483 +40352 +586 +1563 +12987 +40353 +40354 +590 +15 +2383 +15 +4055 +40355 +40356 +8670 +19 +1444 +26708 +1090 +40357 +115 +40358 +35224 +21947 +40359 +20340 +40360 +12080 +1710 +1364 +19042 +29483 +1870 +40361 +590 +19797 +40362 +140 +40363 +30230 +25996 +40364 +40365 +14369 +9629 +40366 +40367 +40368 +38465 +15718 +40369 +317 +16472 +40370 +40371 +20984 +40372 +4278 +35244 +40373 +736 +3994 +36268 +176 +37556 +345 +3243 +40374 +373 +27669 +815 +11273 +590 +40375 +197 +31293 +37385 +30877 +40376 +39709 +9 +40377 +40378 +4055 +40379 +40380 +5188 +40381 +3 +6075 +40382 +2476 +14369 +14363 +30224 +416 +40383 +222 +40384 +910 +27669 +23103 +36736 +19 +19 +4055 +31168 +14025 +40385 +40386 +10 +40387 +1291 +18717 +21832 +28549 +40388 +20700 +40389 +19500 +14604 +39838 +8386 +40390 +2064 +36268 +28317 +4242 +14369 +5650 +40391 +40392 +7964 +40393 +20223 +40394 +43 +14947 +40395 +14079 +40396 +3055 +30051 +11762 +7516 +31679 +40397 +40398 +349 +15 +40399 +1332 +43 +40400 +37556 +40401 +26744 +28206 +40402 +40403 +21947 +566 +677 +40404 +5188 +38944 +2314 +34402 +19 +22 +40405 +37556 +21947 +2243 +20258 +29483 +9389 +13315 +11483 +40406 +40407 +40408 +40409 +66 +40410 +915 +40411 +16323 +14369 +21689 +5313 +39709 +1502 +30051 +2259 +1090 +21133 +40412 +790 +15 +40413 +4713 +5662 +40414 +2039 +1090 +1700 +40415 +12013 +39709 +12402 +40416 +8297 +5803 +2694 +3353 +1054 +2260 +43 +40417 +24303 +1680 +4 +40418 +1169 +30224 +1808 +40419 +40420 +352 +40421 +31346 +40422 +38523 +26157 +40423 +40424 +40425 +3 +164 +25316 +40426 +40427 +40428 +21947 +10 +40429 +1710 +40430 +77 +6095 +1677 +8249 +40431 +829 +1109 +20600 +40432 +17632 +40433 +30458 +29483 +4752 +40434 +40435 +590 +40436 +373 +30051 +3543 +40437 +40438 +349 +40439 +5188 +40440 +31293 +21947 +40441 +37556 +30224 +286 +590 +3546 +3976 +43 +20 +14369 +21947 +40442 +1090 +40443 +33758 +713 +1021 +30917 +3020 +7817 +9607 +25611 +11551 +40444 +40445 +40446 +46 +40447 +6123 +40448 +1090 +5119 +40449 +34402 +9 +40450 +40451 +34712 +19618 +2 +259 +14 +8867 +40452 +40453 +10004 +40454 +40455 +827 +1100 +40456 +19618 +15 +15718 +40457 +249 +40458 +40459 +40460 +21947 +40461 +89 +37556 +8513 +40462 +2038 +40463 +36735 +40464 +2315 +18045 +40465 +590 +40466 +3417 +3950 +28333 +40467 +1774 +40468 +40469 +40470 +34454 +40471 +40472 +21947 +40473 +40474 +823 +5582 +5085 +2 +4230 +40475 +7053 +30877 +98 +12821 +36761 +31293 +40298 +5773 +7053 +31293 +19 +34433 +40476 +24412 +40477 +40478 +40479 +31293 +1684 +13131 +40480 +1870 +270 +33120 +31718 +33650 +14604 +2043 +26779 +40481 +19 +7908 +40482 +22412 +40483 +822 +36279 +43 +28441 +33490 +21947 +40484 +345 +40485 +16978 +865 +40486 +1991 +40487 +1442 +40488 +40489 +18045 +286 +317 +30877 +40490 +27669 +5075 +11541 +39709 +21796 +40491 +40492 +40493 +24482 +590 +40494 +33138 +2619 +14369 +2593 +29179 +40495 +46 +15 +13874 +7521 +14914 +40496 +40497 +10946 +30081 +354 +40498 +7154 +32 +19 +17093 +27669 +40499 +30209 +5188 +40500 +19 +40501 +40502 +40503 +40504 +1716 +24864 +345 +19 +590 +40505 +40506 +540 +15718 +40507 +1907 +29956 +40508 +1566 +40509 +7095 +40510 +153 +38732 +40511 +29639 +140 +40512 +22990 +40513 +590 +40514 +40515 +40516 +29172 +25316 +32275 +43 +736 +14869 +40517 +14369 +40518 +40519 +40520 +7658 +13390 +40521 +40522 +40523 +36218 +6883 +40524 +28219 +40525 +15 +40526 +40527 +36268 +24896 +14020 +40528 +29483 +40529 +31541 +31168 +43 +21947 +29381 +40530 +5092 +2836 +1508 +24864 +23493 +15595 +26040 +2578 +9 +40531 +46 +40532 +40533 +40534 +12827 +37556 +915 +18982 +36683 +40535 +6123 +40536 +39983 +12479 +16437 +9 +31293 +40537 +40538 +3546 +4634 +89 +21947 +25140 +31041 +20 +40539 +40540 +37920 +40541 +2537 +40542 +40543 +30877 +29483 +33627 +1090 +1870 +1090 +40544 +40545 +31293 +14369 +40546 +4055 +345 +1090 +29483 +18310 +36268 +1385 +40547 +14369 +4634 +2 +4684 +25316 +60 +40548 +19 +20600 +40549 +1090 +40550 +40551 +40552 +4411 +40553 +40554 +40555 +115 +31098 +18394 +9 +40556 +4765 +43 +15476 +4028 +40557 +15451 +40558 +40559 +40560 +34402 +104 +4086 +40561 +5649 +30877 +24864 +1454 +342 +30051 +40562 +11822 +8110 +24144 +14369 +40563 +416 +15718 +29483 +36307 +8171 +9 +40564 +16466 +18695 +155 +155 +40565 +31293 +1013 +40566 +77 +28036 +2243 +20161 +5314 +40567 +40568 +2694 +37556 +15718 +3546 +19 +40569 +1384 +21947 +40570 +89 +30139 +40570 +30877 +15718 +3559 +31293 +533 +6275 +21947 +33061 +43 +40571 +736 +155 +14546 +30224 +536 +11822 +590 +491 +4634 +40572 +40573 +40574 +40575 +2779 +31906 +40576 +40577 +2514 +20 +31293 +4123 +16 +14369 +16375 +15718 +10727 +40578 +15474 +18310 +8249 +40579 +40580 +40581 +40582 +36218 +40583 +40584 +25943 +155 +40585 +40586 +269 +1021 +28549 +39980 +40587 +40588 +40589 +40590 +1517 +40591 +40592 +1090 +179 +17151 +317 +2882 +40593 +37556 +564 +40594 +57 +40595 +40596 +286 +40597 +14604 +40598 +21947 +15718 +22 +40599 +24953 +40600 +40601 +590 +40602 +1612 +40603 +33758 +12987 +14477 +11034 +40604 +4055 +40605 +11964 +1961 +9 +1745 +39927 +40606 +5007 +40607 +11402 +40608 +2577 +402 +14532 +5665 +21947 +14909 +27069 +40609 +9 +8280 +18176 +11315 +40610 +39036 +21947 +40611 +43 +33693 +27669 +37556 +40612 +3061 +36736 +40613 +28549 +40614 +40615 +40616 +40617 +10699 +11906 +40618 +13390 +17749 +40570 +40619 +40620 +31139 +40621 +40622 +1415 +40623 +40624 +14369 +14330 +12800 +40625 +40626 +14666 +19 +40627 +40628 +40629 +17340 +40630 +28036 +4745 +40631 +379 +14330 +2 +2593 +40632 +23401 +286 +115 +35665 +40633 +40634 +40635 +713 +40636 +37556 +19 +40570 +40637 +2158 +26387 +3287 +2260 +40638 +6304 +317 +30224 +15592 +40639 +37411 +566 +40640 +31293 +37556 +6616 +23591 +7830 +6335 +40641 +140 +14330 +11907 +13390 +3343 +7053 +16 +9 +33120 +32449 +21947 +155 +38465 +40642 +32603 +114 +29 +40643 +39998 +32 +8994 +35672 +24303 +40570 +590 +17031 +40644 +770 +317 +5188 +155 +533 +30877 +40645 +872 +40646 +40570 +40647 +40648 +40649 +24129 +40650 +590 +1383 +1072 +40651 +13390 +31225 +40652 +40653 +22537 +345 +7658 +19 +40654 +40655 +14369 +5704 +791 +40570 +2043 +40656 +237 +19 +40657 +17810 +40658 +40659 +40660 +38465 +40570 +40661 +40570 +40662 +25140 +19095 +31293 +1637 +20442 +40663 +14330 +33627 +40664 +40665 +27669 +32041 +13807 +40666 +21947 +28339 +4227 +1090 +1228 +31041 +39709 +21947 +40667 +484 +5791 +1300 +29639 +20442 +4055 +22496 +32253 +40668 +40570 +15096 +1867 +40669 +29204 +19 +40570 +40670 +9 +102 +915 +342 +40671 +14369 +40570 +40672 +31293 +35551 +40673 +232 +3546 +40674 +40675 +9 +12281 +40676 +25683 +13829 +27719 +286 +40677 +377 +354 +15718 +40678 +1513 +4441 +2988 +40679 +9 +491 +1674 +40680 +36683 +8297 +40681 +40570 +590 +40682 +29204 +9210 +40683 +827 +21031 +449 +40684 +21947 +1425 +2721 +28345 +2029 +40685 +5627 +36485 +40686 +10574 +179 +14887 +536 +4544 +2446 +21947 +40570 +2537 +5071 +9 +40687 +40688 +7418 +40689 +155 +915 +416 +40690 +40691 +26496 +40692 +60 +27669 +4634 +4230 +15718 +7553 +31516 +15718 +31364 +3546 +40693 +7904 +6048 +40694 +536 +21031 +39552 +22 +40695 +178 +30877 +21045 +40696 +590 +24421 +38667 +9 +5559 +14225 +33650 +25316 +9 +23103 +40697 +140 +40570 +15718 +4 +18394 +34107 +33120 +170 +40698 +40699 +1090 +60 +43 +22963 +37556 +31293 +19 +40700 +40701 +40702 +29628 +155 +40703 +19 +1090 +25316 +33120 +8668 +30051 +3553 +40704 +15 +15718 +155 +40705 +25316 +4963 +768 +37556 +22898 +29483 +40706 +4055 +40707 +16258 +5188 +9402 +40708 +40570 +40709 +34410 +40710 +586 +15 +19 +43 +43 +14330 +19 +35425 +9 +24303 +1011 +4518 +3406 +40711 +40712 +9 +40570 +40713 +40570 +828 +8244 +35318 +201 +31293 +10946 +12095 +40714 +15 +21031 +3296 +15718 +40715 +40716 +590 +176 +1012 +13390 +24303 +3546 +28316 +32438 +915 +40717 +15 +27069 +19 +19 +40718 +40719 +25237 +1508 +2315 +30224 +40570 +13390 +33650 +1710 +6070 +40720 +590 +13207 +25683 +24200 +40721 +30877 +39746 +31293 +18448 +39709 +20700 +40722 +40723 +43 +40724 +349 +9 +40725 +21947 +1716 +28441 +9 +40726 +155 +1385 +40727 +12397 +40728 +40729 +40730 +40731 +30877 +40732 +40733 +32616 +141 +43 +31098 +1011 +18553 +7208 +7516 +861 +519 +16375 +77 +15718 +2882 +89 +17151 +19 +416 +19 +40734 +15718 +16772 +18951 +40735 +19653 +2680 +15951 +40736 +188 +4055 +39983 +379 +155 +40737 +40738 +25316 +31293 +736 +37556 +3 +6364 +3546 +1047 +40739 +155 +155 +533 +1091 +25 +38117 +2537 +4055 +28317 +9573 +20914 +40740 +40741 +286 +33494 +590 +40570 +872 +40742 +25237 +40743 +37556 +40744 +1604 +21947 +8483 +40745 +16586 +1879 +40746 +15 +25140 +19 +29200 +40747 +725 +25316 +46 +19 +19 +24309 +815 +4055 +189 +36268 +40748 +25315 +40749 +40750 +40751 +28317 +9449 +40752 +40753 +26744 +26779 +1013 +1503 +2318 +1382 +38 +43 +40754 +20162 +39709 +40755 +29483 +40756 +40757 +40758 +12152 +2347 +36442 +29733 +358 +40759 +19 +3546 +21947 +7860 +10583 +15504 +40760 +34433 +40761 +40762 +209 +12832 +809 +14369 +34864 +10946 +155 +40763 +14363 +40764 +43 +1529 +1901 +6468 +14 +10946 +40765 +40766 +15 +24864 +33120 +40143 +9460 +9012 +16 +31293 +40570 +40767 +7379 +671 +14330 +193 +936 +15718 +17911 +40768 +822 +155 +31293 +40769 +32438 +24811 +40770 +40771 +40772 +17385 +40773 +40774 +40775 +5808 +40776 +27669 +31293 +40777 +613 +286 +40778 +20340 +40779 +22141 +40780 +40781 +40570 +40782 +40570 +8813 +10 +33113 +15970 +36268 +1107 +26199 +40783 +15718 +27669 +40784 +43 +15220 +31375 +43 +12434 +155 +28036 +24192 +40785 +1571 +40570 +705 +6732 +14369 +457 +4055 +712 +40570 +155 +40786 +3839 +36638 +3119 +1529 +32 +37476 +8569 +76 +40787 +590 +9 +25943 +958 +7786 +5773 +1604 +7123 +30877 +31293 +37556 +40788 +40789 +21947 +29200 +20757 +736 +40790 +19852 +28441 +40791 +40792 +9 +37556 +34602 +138 +13390 +40793 +40794 +40795 +30877 +40796 +19 +21947 +40797 +40798 +40799 +40800 +40801 +31293 +32 +7564 +40802 +1090 +1382 +29200 +40803 +33445 +14330 +1656 +9894 +40804 +30307 +1508 +40570 +357 +40805 +31852 +7276 +31168 +30877 +40806 +9941 +40807 +14369 +1251 +4055 +14240 +40808 +40570 +16437 +21947 +40809 +21947 +40810 +40811 +7260 +12534 +15384 +2006 +15411 +40812 +3978 +16535 +14369 +40813 +40814 +40815 +19 +18577 +8392 +40816 +19318 +29381 +40817 +970 +30877 +40818 +16437 +16 +40819 +40820 +9 +24303 +31293 +37556 +40570 +43 +40821 +590 +40822 +12800 +9 +40823 +9 +2577 +286 +21796 +31293 +345 +24339 +40824 +40825 +301 +861 +32299 +40570 +40826 +2372 +15718 +5188 +40827 +5629 +155 +40828 +40829 +3976 +40830 +4 +721 +25281 +29 +40417 +1961 +30846 +8967 +1961 +19618 +40591 +40831 +590 +40832 +17 +40833 +40834 +19618 +40835 +40836 +40837 +40838 +40839 +323 +24864 +8846 +17911 +40840 +43 +10662 +40841 +40842 +40843 +21947 +590 +40844 +3351 +40845 +40846 +18811 +35224 +286 +36268 +37920 +317 +5119 +40847 +40848 +19095 +40849 +9934 +4115 +31293 +30877 +14102 +40850 +38944 +40851 +40852 +40853 +40854 +37556 +40855 +18744 +26496 +40856 +43 +40857 +17872 +40858 +7860 +40859 +827 +538 +286 +19 +104 +40860 +595 +155 +89 +155 +40861 +5344 +2540 +25164 +249 +19 +40862 +40863 +35692 +40864 +36483 +352 +2694 +16571 +19 +1272 +40865 +21629 +40866 +40867 +16017 +40868 +9 +40869 +1385 +31293 +155 +1090 +17911 +30877 +25316 +5448 +155 +29639 +17635 +40870 +13390 +40871 +554 +915 +2694 +1710 +40872 +15 +694 +40873 +17385 +31293 +7835 +40874 +3061 +30917 +30877 +14369 +40875 +36858 +40570 +40876 +1090 +33627 +4263 +2561 +1847 +155 +40877 +40878 +15 +40570 +15 +6627 +3601 +19 +40879 +40880 +25871 +40570 +15572 +32896 +165 +40881 +19618 +40882 +2635 +5662 +155 +40883 +40884 +30650 +40885 +2865 +540 +855 +178 +40570 +27669 +40886 +27069 +40887 +1790 +40888 +89 +40889 +40890 +31293 +26744 +19 +1681 +40891 +33061 +30877 +33116 +46 +40892 +872 +9 +40893 +155 +31293 +40894 +40895 +17810 +40896 +14369 +33120 +446 +38465 +892 +8668 +40897 +40898 +197 +27447 +40899 +40900 +28036 +10946 +19 +448 +104 +21657 +40901 +40902 +39563 +40903 +155 +40904 +29483 +25943 +4550 +40339 +40905 +40906 +4075 +2694 +40907 +36928 +40908 +40570 +155 +9 +20514 +1224 +590 +39344 +40909 +40910 +40911 +19618 +40912 +30542 +33469 +28295 +28549 +21027 +35656 +11697 +40913 +40914 +2022 +19 +40915 +53 +40916 +286 +40570 +40917 +15718 +16437 +18473 +5601 +43 +13905 +399 +31995 +13807 +40918 +491 +18300 +2694 +40919 +40920 +9 +40921 +40922 +40923 +12987 +536 +21259 +33627 +20443 +40924 +30051 +17730 +301 +40925 +31225 +13307 +19 +40926 +1536 +27861 +40570 +317 +19 +14369 +820 +2254 +40927 +40928 +40929 +6595 +155 +40930 +40931 +40932 +20560 +736 +1115 +155 +40933 +284 +40934 +40935 +31293 +1907 +2195 +40936 +40937 +337 +40938 +1157 +140 +14001 +8483 +40570 +40939 +40940 +18516 +15718 +22673 +24303 +40941 +31293 +7585 +31293 +40942 +303 +1013 +270 +354 +155 +40943 +27669 +40944 +40945 +40946 +40947 +10841 +40948 +2877 +6505 +2015 +40949 +40950 +284 +40951 +12696 +43 +155 +40952 +40953 +3 +40954 +40955 +40956 +3976 +40957 +8560 +303 +14477 +5700 +14330 +40958 +40959 +15364 +40960 +10847 +40961 +28441 +597 +342 +213 +40962 +1710 +823 +37556 +40963 +6294 +1765 +40964 +201 +40965 +40966 +3601 +9 +40967 +19 +34488 +17 +40968 +14369 +40969 +40970 +40971 +590 +29381 +6095 +40972 +2314 +4414 +37556 +40973 +40974 +1787 +6728 +40975 +822 +10946 +303 +40976 +40977 +40570 +25237 +31293 +19655 +39709 +5399 +40978 +22 +40979 +40980 +33758 +40981 +8297 +5188 +40570 +40982 +40983 +3601 +613 +248 +3171 +25140 +40984 +736 +303 +213 +40985 +103 +6341 +3826 +40986 +736 +19 +23103 +40570 +40987 +40988 +40989 +1082 +40990 +40570 +26452 +12005 +14369 +40991 +9 +40992 +1469 +40993 +40994 +40995 +209 +40996 +40997 +40998 +19 +40570 +6468 +11321 +415 +228 +281 +66 +155 +40999 +17385 +41000 +13474 +39709 +41001 +1090 +6054 +30877 +9988 +33758 +41002 +1090 +41003 +9 +40570 +31873 +21947 +41004 +41005 +41006 +209 +66 +22 +751 +31293 +337 +41007 +2234 +31293 +29483 +41008 +39709 +2372 +30224 +21947 +701 +22963 +57 +345 +25871 +6316 +41009 +33650 +30224 +41010 +41011 +41012 +4317 +345 +21729 +28317 +40570 +34402 +28549 +41013 +21089 +41014 +533 +286 +4055 +41015 +28317 +41016 +41017 +41018 +15 +41019 +41020 +13390 +41021 +2998 +323 +590 +1222 +17151 +3546 +15718 +41022 +554 +41023 +185 +19 +37556 +14477 +137 +41024 +7855 +41025 +1291 +41026 +6054 +958 +21947 +155 +31293 +41027 +31293 +809 +41028 +27669 +225 +140 +8297 +3546 +209 +40570 +41029 +337 +155 +41030 +41031 +3182 +399 +736 +25868 +2471 +9 +41032 +41033 +5188 +249 +41034 +41035 +41036 +41037 +4425 +41038 +24725 +39536 +491 +28629 +8367 +1090 +15718 +14369 +1710 +1013 +10230 +41039 +1867 +5791 +4518 +41040 +41041 +19 +14369 +41042 +26127 +19 +28490 +20442 +24864 +248 +41043 +41044 +41045 +14477 +41046 +36735 +41047 +3546 +16798 +8668 +41048 +2728 +14477 +41049 +40570 +5085 +41050 +41051 +57 +15718 +76 +590 +40570 +904 +40394 +19 +41052 +41053 +38536 +29483 +41054 +41055 +19 +1208 +41056 +41057 +21776 +41058 +40570 +19 +19 +41059 +2686 +41060 +21947 +41061 +590 +19109 +41062 +33627 +1090 +29251 +41063 +41064 +13675 +9 +40570 +155 +41065 +15718 +10946 +8282 +26355 +31168 +24896 +2550 +36483 +1112 +14216 +38003 +12800 +248 +41066 +41067 +41068 +41069 +40570 +41070 +13390 +41071 +43 +3317 +41072 +33650 +15914 +41073 +11522 +40570 +14001 +41074 +15102 +2038 +1090 +30458 +99 +18418 +303 +31293 +41075 +29483 +41076 +5297 +41077 +21947 +590 +41078 +41079 +41080 +694 +6306 +9440 +842 +41081 +33496 +4518 +2830 +31293 +41082 +1047 +2728 +13528 +41083 +41084 +337 +11192 +265 +18569 +284 +31661 +31293 +40570 +32897 +41085 +19 +1090 +33693 +2577 +6006 +4637 +34402 +28317 +39250 +41086 +25382 +41087 +36946 +9 +43 +36268 +213 +15718 +590 +21947 +41088 +669 +1716 +21269 +1090 +648 +248 +112 +15718 +1456 +25316 +17691 +1969 +41089 +104 +18283 +37556 +301 +9 +2064 +1386 +2254 +4502 +40570 +38760 +41090 +10 +41091 +164 +35870 +21131 +41092 +3553 +41093 +30209 +41094 +43 +11 +3417 +39709 +24896 +352 +32856 +40570 +736 +6893 +18631 +19 +31293 +37556 +41095 +7276 +30814 +19 +60 +590 +41096 +41097 +345 +41098 +155 +9 +9 +9 +15 +7658 +41099 +20223 +41100 +8763 +1234 +41101 +29483 +41102 +20413 +213 +12067 +41103 +13143 +2833 +28237 +41104 +41105 +6341 +9713 +6287 +1961 +265 +13390 +41106 +40570 +9 +41107 +32087 +89 +41108 +770 +590 +41109 +41110 +41111 +8772 +77 +41112 +31293 +4463 +41113 +16772 +23103 +31293 +28490 +41114 +38760 +28035 +43 +21669 +8961 +33650 +213 +41115 +213 +41116 +19 +36076 +5410 +13390 +41117 +14369 +15718 +155 +20280 +590 +37556 +41118 +8668 +41119 +14330 +39709 +37556 +41120 +41121 +25584 +40570 +41122 +4055 +495 +41123 +32 +28490 +24864 +41124 +11824 +412 +41125 +33141 +89 +41126 +38687 +33650 +25859 +13721 +41127 +137 +41128 +37556 +33650 +1870 +16826 +2410 +41129 +2314 +24725 +41130 +9 +590 +2917 +43 +17687 +41131 +41132 +9 +41133 +1615 +31293 +1208 +21027 +21947 +137 +7516 +40570 +284 +213 +337 +41134 +41135 +41136 +337 +1716 +41137 +20445 +31293 +19 +33627 +40570 +1514 +21947 +30877 +17602 +301 +491 +41138 +13045 +32871 +17382 +201 +3601 +41139 +31575 +41140 +41141 +30877 +40570 +13721 +303 +20774 +41142 +29483 +21262 +26416 +39709 +32871 +248 +31249 +284 +41143 +41144 +9 +9 +41145 +3546 +19405 +16437 +41146 +43 +41147 +4055 +286 +590 +4116 +15718 +140 +16437 +41148 +1823 +337 +41149 +41150 +34752 +41151 +41152 +337 +213 +1228 +41153 +41154 +9 +40029 +41155 +21729 +41156 +29153 +613 +40472 +41157 +1090 +213 +248 +15655 +5025 +915 +41158 +7516 +36268 +123 +41159 +9 +40570 +15498 +41160 +14330 +31293 +284 +41161 +9 +41162 +41163 +20555 +10946 +41164 +10946 +41165 +38595 +9 +38760 +9 +31703 +15718 +12987 +20 +41166 +17042 +14534 +15718 +22337 +18258 +3790 +590 +31098 +40483 +31383 +38465 +31189 +41167 +40570 +568 +9 +41168 +19 +37556 +6518 +1090 +11801 +41169 +41170 +671 +41171 +41172 +41173 +41174 +112 +41175 +14330 +37556 +10601 +8210 +18145 +36452 +20 +19 +19 +41176 +1531 +37211 +40570 +33278 +1330 +29483 +1224 +41177 +1529 +155 +248 +40570 +27669 +41178 +15718 +38421 +41179 +3030 +14330 +41180 +5415 +37556 +228 +155 +15718 +1766 +41181 +15718 +27619 +29381 +37920 +41182 +30580 +1010 +46 +19 +176 +213 +37556 +40712 +155 +17144 +30877 +8717 +2 +23322 +5204 +40570 +27178 +4055 +31293 +11087 +1186 +8297 +25316 +41183 +25237 +9410 +19095 +1047 +19 +43 +40570 +411 +33863 +41184 +41185 +24864 +17151 +33624 +317 +41186 +41187 +19 +41188 +30877 +9 +27954 +29483 +41189 +77 +5071 +16466 +40570 +41190 +33627 +5409 +29381 +533 +16798 +41191 +41192 +41193 +286 +43 +40570 +43 +30291 +41194 +41195 +39709 +14369 +20 +416 +2410 +31293 +3597 +8210 +317 +57 +30650 +1502 +36268 +155 +40570 +26022 +27669 +24725 +24864 +40570 +37556 +41196 +11010 +1716 +28745 +33650 +24303 +36268 +15718 +17144 +13390 +41197 +155 +6950 +24045 +303 +41198 +41199 +141 +2410 +1870 +1090 +41200 +665 +164 +15718 +2121 +41201 +5080 +16539 +33650 +40570 +41202 +10659 +4026 +1090 +31293 +12800 +36735 +34402 +33061 +41203 +41204 +24300 +41205 +2476 +3978 +345 +41206 +30224 +8668 +7516 +21689 +11620 +14477 +41207 +533 +41208 +2764 +41209 +155 +41210 +41211 +27669 +4627 +14477 +41212 +41213 +35883 +8670 +10356 +39709 +3100 +41214 +31603 +24864 +5169 +31293 +14693 +21947 +30877 +9 +14477 +41215 +21947 +41216 +41217 +736 +554 +32 +41218 +41219 +41220 +41221 +209 +15718 +41222 +40591 +32022 +41223 +1090 +9 +6468 +40570 +26043 +19 +19 +18310 +41224 +33627 +21791 +36268 +19 +19 +284 +23150 +590 +2061 +37556 +40570 +25 +1157 +43 +12788 +1244 +41225 +21791 +36492 +345 +26040 +1559 +41226 +41227 +41228 +142 +440 +41229 +41230 +33445 +21791 +41231 +3732 +31293 +41232 +27669 +398 +33120 +3546 +21968 +41233 +17872 +893 +176 +38760 +590 +6038 +41234 +7324 +41235 +37556 +31293 +14017 +13721 +29172 +41236 +10946 +30224 +41237 +21089 +89 +2493 +19792 +40591 +5577 +349 +41238 +41239 +41240 +41241 +34 +9410 +1295 +31995 +6496 +41242 +41243 +41244 +31293 +1795 +31293 +33758 +37556 +31293 +21698 +12404 +15645 +43 +19 +41245 +25164 +36268 +41246 +5085 +2591 +5188 +41247 +9 +41248 +155 +41249 +38760 +155 +17937 +22 +41250 +32 +38893 +41251 +2 +41252 +15 +42 +17872 +57 +3958 +36268 +9 +41253 +989 +41254 +1090 +41255 +303 +791 +41256 +18045 +4722 +22468 +12582 +2577 +41257 +17911 +25316 +41258 +15718 +41259 +40570 +41260 +12959 +8668 +34242 +3553 +185 +887 +24324 +41261 +155 +41262 +37556 +822 +40570 +41263 +40591 +41264 +5065 +5130 +40861 +43 +41265 +13390 +3375 +41266 +19 +41267 +41268 +24303 +413 +9558 +41269 +25237 +1107 +11026 +3814 +40570 +29483 +1090 +40570 +2264 +20247 +1051 +19109 +201 +21947 +41270 +23103 +41271 +21947 +29381 +41272 +9 +40570 +7053 +39 +28317 +15718 +41273 +7852 +28490 +43 +671 +41274 +29200 +41275 +41276 +41277 +19 +41278 +115 +41279 +33330 +34402 +30650 +40570 +41280 +14510 +155 +478 +2410 +41281 +41282 +41283 +478 +1169 +24864 +345 +18233 +31995 +1224 +46 +41284 +41285 +40570 +1224 +31293 +32410 +41286 +43 +41287 +41288 +43 +41289 +41290 +5071 +25140 +19 +46 +41291 +41292 +17151 +30551 +2136 +13390 +1374 +39 +29620 +6038 +41293 +16258 +13390 +37556 +41294 +41295 +26027 +41296 +19 +41297 +9 +41298 +31691 +41299 +16640 +17174 +15148 +1513 +41300 +21947 +43 +43 +3008 +41301 +179 +41302 +41303 +41304 +209 +19 +323 +40591 +201 +14330 +4053 +19852 +37556 +33818 +21947 +3546 +41305 +41306 +41307 +41308 +5188 +7419 +33038 +32 +14330 +41309 +21947 +41310 +41311 +15 +41312 +41313 +10846 +27522 +27117 +41314 +6115 +25316 +1090 +14330 +41315 +40570 +15797 +6499 +41316 +6935 +6571 +19 +1870 +41317 +41318 +6011 +19 +37202 +36218 +41319 +27669 +1688 +14102 +1863 +41320 +41321 +1251 +38760 +15718 +41322 +30877 +21947 +17508 +57 +165 +155 +16790 +736 +1912 +31873 +614 +41323 +9 +29628 +4028 +14001 +205 +29434 +41324 +1763 +38315 +1013 +40570 +18956 +4441 +41325 +4151 +21947 +20161 +155 +41326 +26361 +1116 +41327 +989 +15810 +10 +30877 +41328 +8424 +19 +9 +345 +15 +41329 +18208 +14369 +39709 +17151 +33650 +541 +2356 +2446 +36683 +22552 +41330 +14001 +2060 +411 +41331 +23150 +32449 +33061 +20785 +1244 +41332 +41333 +41334 +41335 +41336 +41337 +1208 +41338 +41339 +862 +41340 +201 +41341 +915 +19 +18045 +12987 +29381 +31293 +41342 +37556 +7014 +26470 +33120 +41343 +155 +41344 +41345 +3546 +958 +1018 +2121 +10418 +155 +41346 +43 +1529 +41347 +66 +155 +33650 +41348 +41349 +29483 +30794 +8304 +18045 +8845 +514 +25316 +25996 +345 +25528 +40570 +41350 +17911 +31293 +41351 +41352 +33123 +41353 +14962 +19 +10265 +21269 +41354 +10482 +41355 +43 +41356 +3601 +41357 +40570 +41358 +1154 +41359 +5204 +24303 +36054 +18683 +29981 +6441 +41360 +1870 +13721 +13290 +33693 +648 +41361 +33786 +11158 +41362 +9 +24862 +15 +41363 +14477 +37556 +41364 +31293 +583 +23727 +41365 +13390 +16375 +1956 +1090 +41366 +10 +7835 +41367 +31293 +823 +30877 +34283 +41368 +33141 +2287 +2828 +41369 +3067 +13390 +41370 +155 +31293 +41371 +41372 +872 +790 +41373 +4055 +15541 +41374 +41375 +5438 +40570 +41376 +4808 +29815 +1716 +377 +28961 +416 +41377 +41378 +33627 +155 +1520 +21689 +30051 +35339 +349 +10727 +19618 +4053 +29483 +1307 +41379 +2764 +36736 +1502 +155 +495 +41380 +23226 +41381 +41382 +5075 +41383 +22355 +37556 +41384 +41385 +41386 +41387 +41388 +1444 +7835 +15718 +27669 +41389 +3981 +41390 +41391 +41392 +155 +24725 +41393 +21947 +4028 +41394 +155 +7183 +25316 +41395 +41396 +590 +43 +6341 +41397 +5627 +32275 +1090 +41398 +25 +21947 +41399 +40570 +15718 +17911 +30224 +2260 +41400 +5326 +6284 +15718 +15 +31293 +41401 +341 +14369 +30877 +41402 +41403 +41404 +37556 +123 +29483 +17356 +9 +41405 +31422 +41406 +1812 +41407 +595 +2015 +25316 +178 +37556 +554 +4055 +14369 +415 +349 +17982 +861 +41408 +15718 +9 +14604 +41409 +20941 +33650 +30877 +41410 +1224 +37573 +41411 +41412 +40570 +40570 +37556 +30877 +14 +41413 +29200 +720 +33120 +13390 +20329 +19 +41414 +5659 +590 +14330 +41415 +40570 +1536 +19 +2101 +1172 +12800 +345 +270 +41416 +21947 +4028 +41417 +2043 +8188 +14330 +936 +9 +18683 +13390 +17277 +15914 +41418 +590 +41419 +28194 +33436 +7521 +33627 +2197 +1364 +41420 +6728 +41421 +40877 +43 +1160 +15768 +823 +31293 +1668 +41422 +41423 +40570 +707 +24811 +31293 +352 +286 +6341 +7413 +29483 +849 +41424 +554 +41425 +36735 +41426 +20 +19 +9410 +41427 +32386 +41428 +41429 +3598 +25237 +19 +15342 +36268 +41430 +1992 +41431 +5629 +19 +17911 +14000 +41432 +41433 +41434 +41435 +5790 +34517 +345 +41436 +40570 +41437 +43 +915 +3546 +33438 +19 +41438 +19618 +41439 +41440 +2121 +176 +17911 +13390 +40570 +9 +250 +41441 +37990 +41442 +40570 +590 +40570 +2859 +345 +39783 +6627 +41443 +41444 +41445 +643 +201 +27669 +29716 +2694 +43 +41446 +495 +21947 +12479 +43 +18045 +1765 +1228 +41447 +21027 +176 +1870 +1578 +41448 +286 +41449 +29483 +37556 +21947 +137 +514 +13740 +19406 +1905 +43 +842 +41450 +41451 +464 +169 +19 +29483 +397 +41452 +40570 +8772 +10115 +1082 +31293 +5908 +7835 +41117 +37556 +8545 +35788 +3950 +41453 +41454 +41455 +41456 +33693 +28036 +41457 +34165 +41458 +41459 +20700 +41460 +40591 +41461 +41462 +272 +41463 +14660 +21776 +14477 +41464 +41465 +15718 +14330 +41466 +41467 +41468 +41469 +2410 +671 +1051 +41470 +41471 +38275 +416 +41472 +41473 +41474 +41475 +32410 +412 +41476 +11763 +4821 +41477 +25140 +34710 +30051 +31293 +665 +554 +41478 +284 +4293 +43 +29483 +240 +37556 +1765 +41479 +1710 +25316 +41480 +41481 +16437 +41482 +57 +10642 +19634 +41483 +33508 +41484 +37556 +34752 +40570 +1920 +1513 +370 +21947 +115 +41485 +30877 +41486 +41487 +41488 +41489 +89 +4055 +24303 +41490 +40570 +14330 +24864 +37139 +1987 +4461 +41491 +40570 +15 +31019 +41492 +46 +317 +249 +14369 +41493 +41494 +26361 +41495 +10028 +41496 +38374 +14369 +377 +8297 +13905 +5252 +19168 +22507 +14363 +286 +21947 +41497 +11176 +23150 +37556 +41498 +10984 +4824 +24303 +41499 +41500 +41501 +19 +10946 +41502 +41503 +41504 +41505 +12976 +41506 +41507 +11459 +9 +278 +41508 +19 +41509 +40570 +115 +41510 +24725 +1559 +13390 +39593 +41511 +40570 +1090 +19618 +41512 +41513 +155 +317 +1045 +41514 +6571 +9 +590 +41515 +8946 +4631 +41516 +28208 +28755 +77 +27719 +31639 +21947 +36282 +32 +41517 +6294 +40570 +41518 +15718 +40570 +6086 +28317 +3546 +14369 +6214 +590 +5629 +4518 +41519 +14477 +1090 +14477 +25943 +41520 +15439 +26361 +1131 +31293 +41521 +8392 +11754 +41522 +8053 +37556 +6038 +10946 +35107 +1765 +41523 +9 +96 +2859 +286 +26496 +5085 +41524 +827 +7053 +27669 +14 +41525 +19655 +41526 +178 +1369 +11362 +13528 +1300 +41527 +9 +28935 +7697 +30224 +3964 +6015 +34402 +41528 +24144 +21947 +6010 +1090 +41529 +12995 +286 +41530 +41531 +5071 +2649 +8188 +41532 +41533 +12479 +41534 +38760 +1978 +6499 +30051 +2038 +41535 +29483 +38760 +43 +41536 +22901 +41537 +41538 +14369 +31293 +41539 +33128 +36735 +11321 +33650 +16466 +41540 +41541 +13207 +39709 +41542 +2561 +613 +40570 +189 +41543 +41544 +34804 +41545 +2308 +67 +40570 +32332 +23303 +40570 +41546 +29483 +31293 +188 +37556 +4364 +25402 +41547 +32563 +36054 +21947 +4502 +17901 +19618 +36253 +21947 +5923 +4461 +24864 +29275 +41548 +491 +1090 +6869 +9 +35784 +910 +572 +665 +41549 +5085 +1090 +41550 +41551 +41552 +33627 +155 +1425 +32 +41553 +41554 +590 +2577 +41555 +26277 +19 +1604 +40570 +29200 +41556 +201 +28845 +11428 +41557 +41558 +25237 +40570 +36 +36268 +38760 +19318 +9 +2537 +29032 +9 +41559 +1374 +598 +770 +41560 +41561 +41562 +43 +28845 +41563 +2577 +7835 +33650 +41564 +16102 +155 +30051 +971 +41565 +35120 +41566 +415 +14369 +9 +16124 +40570 +13765 +14477 +25683 +38760 +41567 +165 +41568 +13390 +14527 +119 +41569 +5650 +24154 +4364 +41570 +4677 +9 +115 +41571 +19 +832 +4461 +677 +40472 +790 +31293 +22 +2841 +1606 +19 +29204 +209 +41572 +25237 +28845 +41573 +155 +23343 +29244 +30650 +2064 +19 +1875 +12722 +32 +41574 +41575 +27669 +28845 +415 +849 +14330 +958 +1991 +34650 +3330 +5803 +155 +12987 +25237 +41576 +41577 +41578 +41579 +24864 +8351 +15718 +30051 +41580 +39536 +411 +2610 +3553 +18896 +28672 +41581 +24144 +41582 +40570 +27669 +41583 +41584 +1090 +30056 +209 +36268 +21713 +41585 +41586 +18077 +28295 +4760 +7835 +34160 +27615 +20700 +41587 +18815 +41588 +41589 +1364 +4124 +41590 +10 +13721 +41591 +5204 +9 +99 +786 +41592 +5085 +41593 +41594 +31293 +41595 +25140 +41596 +9 +4055 +41597 +41598 +4388 +29967 +17151 +33758 +14420 +40570 +34351 +10 +15 +40570 +41599 +40570 +41600 +2811 +40570 +17345 +41601 +104 +28317 +5791 +317 +40570 +41602 +15718 +41603 +39211 +31257 +713 +28317 +41604 +41605 +196 +33650 +2308 +38653 +21669 +4075 +38465 +15471 +41606 +28036 +26158 +32538 +41607 +41608 +32885 +9543 +495 +29951 +41609 +41610 +8367 +41611 +1018 +41612 +21947 +2314 +41613 +155 +41614 +32 +41615 +155 +41616 +41617 +37411 +36736 +3480 +41618 +37556 +19 +41619 +19 +29483 +7253 +25943 +34047 +41620 +13959 +79 +41621 +16178 +22735 +3842 +2700 +20339 +19618 +41622 +41623 +31824 +41624 +41625 +30551 +24460 +40570 +26142 +19 +377 +9913 +4821 +37556 +41626 +1224 +14369 +41627 +28845 +3509 +15718 +13390 +15989 +41628 +19618 +736 +41629 +41630 +17281 +2832 +30051 +41631 +7516 +13943 +2764 +41632 +1517 +28845 +3842 +31293 +41633 +41634 +41635 +41636 +41637 +41638 +17385 +1562 +41639 +41640 +41641 +19 +20518 +41642 +31603 +28845 +16371 +43 +13578 +41643 +41644 +41645 +24666 +14369 +41646 +13390 +41647 +14369 +5737 +19 +2560 +30191 +10470 +41648 +41649 +26724 +43 +41650 +32019 +40570 +20974 +9 +41651 +41652 +28251 +39111 +38465 +41653 +6595 +30051 +77 +41654 +28317 +1502 +37588 +30589 +40176 +41655 +41656 +41657 +3964 +21947 +41658 +155 +590 +1860 +40570 +43 +41659 +41660 +155 +41661 +43 +17698 +25316 +41662 +586 +2694 +41663 +29483 +40570 +3417 +41664 +1090 +41665 +41666 +32455 +27669 +41667 +24864 +19 +41668 +1688 +16443 +179 +41669 +41670 +12987 +21947 +379 +179 +7977 +2 +41671 +40570 +11702 +484 +2314 +1090 +16102 +5085 +34408 +41672 +41673 +25943 +12907 +33627 +41674 +5803 +41675 +40911 +9 +590 +30051 +4055 +16443 +28845 +286 +21030 +2577 +1863 +41676 +41677 +9400 +41678 +41679 +41680 +8338 +41681 +1172 +19 +41682 +590 +25943 +41683 +15718 +31293 +21947 +31293 +30877 +7835 +590 +2314 +736 +27954 +38419 +16826 +2040 +155 +6928 +415 +155 +37476 +5085 +745 +37808 +25316 +6261 +34402 +1536 +9 +32 +41684 +40570 +13801 +29483 +13283 +4028 +41685 +22815 +3528 +41686 +5075 +30224 +41687 +13390 +9 +40841 +5908 +41688 +155 +27669 +32275 +41689 +43 +40570 +41690 +41691 +41692 +41693 +31293 +828 +31293 +15718 +284 +40570 +317 +41694 +36594 +35497 +37556 +3546 +21947 +38667 +18045 +7658 +26641 +41695 +41696 +7835 +41681 +41697 +41698 +41699 +41700 +7835 +209 +19494 +2254 +19 +31293 +40570 +303 +41701 +16437 +41702 +2971 +6305 +303 +1870 +19 +17670 +41703 +28845 +4803 +40570 +9548 +41704 +43 +29483 +41705 +31293 +43 +491 +37808 +13848 +41706 +9 +248 +38033 +41707 +484 +41708 +41709 +41710 +20700 +41711 +33120 +15718 +40570 +41712 +41713 +337 +41714 +2061 +6952 +16437 +29597 +345 +57 +30974 +41715 +40570 +4 +41716 +9 +1100 +41717 +41718 +41719 +41720 +790 +736 +41721 +41722 +41723 +23487 +9 +4001 +40226 +590 +33709 +41724 +41725 +4055 +1262 +40570 +14604 +23277 +41726 +7379 +41727 +25 +41728 +41729 +915 +32953 +25237 +3546 +41687 +41730 +1765 +41731 +41732 +35613 +2040 +41733 +41734 +250 +4028 +915 +41735 +41736 +1090 +352 +99 +33758 +40067 +22587 +33627 +41737 +41738 +41739 +41740 +8994 +31225 +37556 +41741 +7835 +14477 +15514 +21947 +19 +590 +41742 +2117 +19618 +15906 +19 +41743 +41744 +41745 +4761 +349 +41746 +484 +41747 +17386 +873 +2733 +41748 +14947 +29956 +533 +165 +16102 +41749 +415 +41750 +20 +41751 +41752 +41753 +29628 +15718 +41754 +43 +16798 +6612 +20 +41755 +36686 +6935 +1223 +28929 +11601 +3994 +41756 +5601 +37556 +495 +41757 +12869 +41758 +1112 +1444 +645 +12013 +41759 +41760 +41761 +20442 +41762 +13721 +40570 +41763 +21276 +25129 +303 +41764 +41765 +38760 +41766 +8367 +613 +817 +33726 +43 +24332 +40570 +41767 +1011 +21398 +41695 +40570 +33627 +33758 +19792 +41768 +7123 +41769 +41770 +41771 +5409 +21941 +41772 +41773 +28194 +30051 +41774 +22 +41775 +43 +40570 +765 +1018 +590 +284 +349 +41776 +21669 +41777 +213 +19 +41778 +2029 +4364 +41779 +41780 +14448 +41781 +41782 +41783 +41784 +41785 +24896 +179 +286 +313 +41786 +30650 +6744 +1870 +41787 +41788 +1536 +29591 +12055 +13570 +31041 +24045 +41789 +40570 +41790 +337 +16413 +41791 +38944 +41792 +24864 +41793 +38760 +8110 +34936 +41794 +41795 +19 +437 +37556 +43 +1262 +14330 +155 +15718 +19057 +41796 +616 +31293 +1481 +41797 +11966 +41798 +41799 +412 +18919 +713 +11940 +17412 +16140 +4502 +19237 +323 +4441 +41800 +225 +41801 +3330 +3353 +31073 +41802 +155 +827 +14477 +25237 +8668 +41803 +41804 +533 +41805 +33650 +19618 +8668 +29007 +41806 +282 +41807 +19618 +41808 +18242 +39346 +24864 +40570 +707 +377 +41809 +533 +21947 +1961 +872 +284 +1090 +201 +41810 +41811 +41812 +590 +41813 +15942 +41814 +41815 +41816 +19 +41817 +21947 +41818 +32909 +41819 +41820 +5409 +5916 +31293 +713 +4055 +28845 +34402 +9 +41821 +41822 +1812 +36735 +21947 +41823 +37556 +31293 +32150 +30917 +28845 +29204 +41824 +1090 +13131 +41825 +33141 +155 +23103 +77 +41826 +40570 +37920 +35316 +37556 +41827 +41828 +41829 +24896 +27669 +269 +41830 +736 +155 +40570 +14369 +6275 +34402 +927 +41831 +41832 +41833 +5650 +41834 +28317 +41835 +29483 +40570 +41836 +15320 +4855 +910 +41837 +286 +41838 +2187 +41839 +41840 +28234 +989 +41841 +10736 +41842 +6171 +179 +14330 +13693 +590 +590 +15183 +24045 +41843 +155 +590 +9 +41844 +40570 +27900 +41845 +41846 +18695 +20616 +9925 +8611 +19 +9 +31873 +12987 +1157 +41847 +29483 +41687 +41848 +41849 +41850 +29628 +20 +597 +25 +41851 +15718 +41852 +259 +1090 +21373 +25129 +25 +1749 +41853 +2043 +16413 +24207 +176 +13943 +1310 +16687 +3790 +41854 +2694 +31293 +41855 +24862 +590 +41856 +14369 +1090 +41857 +41858 +41859 +31896 +25241 +15 +41860 +14330 +1208 +590 +19618 +936 +41861 +2944 +26209 +2314 +41862 +41863 +2770 +41864 +2 +1542 +2253 +41865 +31225 +6384 +155 +2694 +13390 +12987 +31225 +284 +37154 +43 +201 +31773 +284 +5780 +3838 +31168 +590 +41866 +41867 +101 +16102 +41868 +40570 +28317 +41869 +41870 +37808 +28923 +41871 +41872 +41873 +41874 +57 +155 +41875 +41876 +248 +41877 +31691 +43 +41878 +12005 +17385 +21669 +41879 +60 +14369 +41880 +31293 +41881 +41882 +18024 +41883 +1764 +15 +41884 +12532 +590 +28317 +41885 +2561 +114 +41886 +19 +9210 +40570 +40570 +27669 +40570 +28490 +28036 +43 +301 +34650 +248 +345 +41887 +32 +16618 +41888 +13039 +41622 +337 +32 +41889 +41890 +284 +694 +22098 +3100 +590 +416 +41891 +13848 +337 +6210 +4820 +284 +41892 +34681 +41893 +29381 +590 +4028 +41894 +249 +286 +33278 +41895 +17083 +31168 +8508 +284 +41896 +41897 +39709 +40570 +13390 +1965 +8864 +41898 +15763 +17228 +4028 +686 +41899 +25140 +41900 +13721 +41901 +17338 +14203 +41902 +15 +3841 +15 +43 +2 +354 +46 +41903 +248 +41904 +590 +514 +33120 +41905 +14 +32 +337 +272 +22 +19 +41906 +41907 +1817 +249 +41908 +41909 +213 +1745 +3330 +41910 +10720 +41911 +41912 +15718 +12916 +1524 +41913 +3 +303 +6341 +41914 +53 +41915 +27719 +8297 +248 +41916 +1513 +41917 +17228 +30224 +248 +590 +1112 +41918 +13905 +16 +41919 +40570 +1090 +28845 +25140 +41695 +41920 +705 +1134 +2593 +21689 +209 +41921 +30224 +16524 +41922 +41923 +872 +14369 +14369 +41924 +15993 +26892 +14604 +19 +41925 +41926 +41927 +3480 +21669 +41928 +41929 +21669 +16437 +25237 +17635 +270 +140 +41930 +41931 +41932 +37881 +41933 +8156 +21947 +34681 +40570 +36932 +13377 +8668 +17911 +201 +5204 +3553 +41595 +41934 +6354 +10355 +13582 +41935 +77 +41936 +41937 +21669 +970 +41938 +31225 +377 +1681 +2410 +40570 +41939 +41940 +41941 +31293 +38465 +41942 +41943 +228 +5438 +41944 +5188 +5409 +663 +41945 +9 +41946 +9 +21200 +41947 +12555 +9 +5780 +25943 +15718 +38760 +41948 +31293 +2834 +77 +41949 +15718 +41950 +29483 +26229 +41951 +5343 +21031 +41952 +41953 +21576 +34944 +41954 +41955 +31293 +16258 +12807 +16375 +30224 +41956 +41957 +19 +7137 +339 +41958 +9 +4179 +36735 +10677 +1369 +178 +21947 +41959 +41960 +41961 +41962 +322 +1090 +248 +40570 +415 +28317 +484 +41963 +41964 +17920 +20 +155 +36483 +41965 +377 +41966 +213 +31168 +41967 +4055 +270 +29639 +4055 +41968 +2388 +24225 +540 +424 +10946 +8036 +14369 +41969 +41970 +33650 +590 +41971 +41972 +19304 +41973 +41974 +140 +17972 +2064 +18128 +33061 +16466 +155 +28845 +41975 +21947 +41976 +31293 +34 +41977 +41978 +40570 +213 +29628 +37556 +41979 +41980 +31293 +1987 +23495 +41981 +41982 +17151 +41983 +2694 +3743 +155 +15 +41984 +21947 +13390 +21947 +41985 +40658 +155 +41986 +5318 +41987 +29483 +41988 +20514 +21947 +40570 +12828 +41989 +3978 +40589 +1765 +38760 +123 +155 +31356 +21947 +19 +43 +41990 +41991 +19 +24683 +1051 +41181 +31873 +2476 +41992 +31293 +30051 +41993 +28845 +36268 +6430 +41994 +41995 +590 +15018 +41996 +40570 +5780 +36212 +41997 +41998 +7743 +19 +9 +29483 +2787 +41999 +42000 +18780 +15476 +42001 +30051 +28845 +40570 +46 +10505 +37556 +892 +19655 +18503 +19 +42002 +26666 +42003 +40893 +1090 +942 +42004 +42005 +24144 +42006 +42007 +337 +15 +42008 +28845 +40570 +19 +155 +42009 +284 +42010 +10274 +42011 +31139 +28845 +42012 +12299 +2274 +2356 +42013 +77 +42014 +19655 +42015 +32402 +9 +42016 +31293 +2015 +2260 +286 +9 +2537 +2427 +26835 +42017 +42018 +590 +42019 +12050 +25316 +370 +70 +14369 +42020 +42021 +176 +42022 +20 +25 +37411 +14666 +15511 +9 +21947 +29850 +651 +40570 +42023 +22 +42024 +141 +57 +1090 +43 +42025 +20700 +42026 +8668 +42027 +34602 +42028 +590 +11321 +827 +155 +24021 +40570 +31293 +42029 +42030 +42031 +42032 +19 +19956 +286 +42033 +42034 +42035 +28490 +42036 +590 +42037 +42038 +24144 +28036 +736 +2029 +40570 +4502 +42039 +42040 +725 +42041 +42042 +27069 +15718 +42043 +15718 +13566 +30051 +40570 +42044 +29483 +42045 +269 +42046 +42047 +42048 +692 +16527 +14502 +42049 +42050 +11925 +1470 +42051 +1870 +27719 +28845 +345 +42 +42052 +16798 +6171 +10960 +42053 +37556 +22 +33729 +27884 +42054 +24864 +6121 +40067 +42055 +42056 +29483 +140 +590 +18707 +38760 +15384 +21947 +42057 +3867 +3866 +41919 +3353 +42058 +9954 +155 +19 +4502 +21947 +42059 +42060 +41695 +42061 +40570 +42062 +42063 +42064 +519 +21947 +42065 +42066 +42067 +42068 +2341 +42069 +29483 +21689 +42070 +872 +42071 +201 +37168 +33914 +42072 +4155 +35967 +41664 +398 +42073 +19 +2005 +4855 +42074 +42075 +8297 +3406 +42076 +42077 +42078 +98 +554 +9389 +18314 +18999 +301 +1991 +15353 +30877 +42079 +33560 +24727 +30877 +42080 +42081 +40570 +42082 +9934 +14909 +831 +33141 +349 +37556 +7053 +39536 +42083 +42084 +42085 +36735 +17911 +28845 +42086 +42087 +28845 +42088 +554 +20161 +5990 +42089 +155 +39489 +27669 +333 +31234 +42090 +42091 +8053 +1310 +2593 +42092 +11312 +1082 +42093 +31293 +36478 +11482 +29483 +42094 +4116 +42095 +42096 +9 +4422 +736 +20340 +24896 +960 +39865 +31270 +33627 +2577 +42097 +1870 +29926 +42098 +3976 +7717 +2728 +42099 +377 +19160 +42100 +42101 +42102 +481 +1090 +471 +165 +5316 +42103 +34181 +42104 +25237 +4055 +21947 +7923 +6877 +42105 +25030 +822 +4 +6660 +27669 +4982 +42106 +42107 +17828 +42108 +42109 +14625 +15683 +18364 +40570 +590 +9 +21669 +42110 +42111 +349 +31293 +12987 +24140 +42112 +28845 +41234 +2040 +42113 +4055 +15 +40143 +20384 +39709 +4155 +21669 +36452 +27069 +13049 +42114 +25237 +37556 +42115 +42116 +15 +31293 +42117 +165 +3038 +42118 +18045 +37556 +42119 +33627 +5409 +12013 +19684 +1090 +4055 +8297 +27669 +41919 +42120 +16019 +42121 +38893 +39709 +15 +29483 +4463 +42122 +42123 +15539 +29483 +20 +2649 +42124 +42125 +1621 +2064 +42126 +27117 +10 +398 +42127 +42128 +42129 +42130 +29483 +155 +42131 +1688 +590 +17 +41919 +42132 +42133 +286 +42134 +2410 +1385 +8297 +5188 +42135 +5188 +4020 +19618 +5627 +7516 +31293 +2465 +42136 +19618 +1912 +9 +9 +31041 +42137 +694 +27843 +42138 +41695 +42139 +40696 +42140 +42141 +42142 +1870 +42143 +42144 +8668 +5627 +590 +42145 +42146 +57 +33650 +966 +42147 +286 +7790 +2 +15 +42148 +26096 +21669 +23103 +28480 +19 +10367 +28845 +24144 +29730 +7835 +42149 +42150 +33226 +42151 +42152 +29483 +14369 +42153 +42154 +42155 +24864 +41396 +42156 +2181 +42157 +7835 +30224 +42158 +42159 +42160 +5409 +11374 +16466 +11660 +19 +24725 +15398 +345 +1273 +35104 +41919 +42161 +42162 +1251 +42163 +42164 +8701 +42165 +42166 +77 +916 +42167 +9144 +42168 +42169 +42170 +42171 +27669 +9 +23931 +2202 +40570 +32401 +42172 +42173 +349 +14520 +42174 +2349 +42175 +4055 +155 +31293 +42176 +5071 +42177 +42178 +9 +89 +1927 +41695 +42179 +26559 +8593 +2410 +12871 +42180 +32 +317 +4531 +14590 +17772 +42181 +43 +42182 +2988 +41881 +662 +42183 +4461 +41567 +41043 +9095 +22270 +42184 +21669 +1808 +301 +42185 +5806 +42186 +872 +42187 +3743 +590 +42188 +15 +42189 +42190 +3072 +42191 +42192 +7253 +8668 +19 +1817 +42193 +42194 +8994 +42195 +3601 +1082 +6260 +9095 +32871 +40570 +19 +42196 +15824 +22 +42197 +42198 +42199 +41919 +21669 +6928 +42200 +7838 +40208 +41904 +42201 +42202 +3104 +19 +98 +28036 +16437 +990 +7987 +1011 +42203 +16865 +155 +713 +42204 +42205 +28696 +15 +24321 +36735 +5119 +41684 +42206 +42207 +31995 +155 +42208 +19 +42209 +849 +5318 +42210 +19 +42211 +43 +42212 +40570 +32965 +37556 +57 +6463 +42064 +590 +40570 +140 +23322 +34602 +32 +29483 +43 +277 +590 +8198 +3999 +36 +42213 +25387 +31293 +23103 +41919 +40570 +36268 +42214 +31326 +42215 +42216 +15 +155 +29483 +338 +42217 +42218 +3030 +21669 +18314 +590 +42219 +590 +1090 +28845 +22898 +178 +536 +42220 +42221 +40570 +42222 +21669 +2043 +42223 +14363 +42224 +42225 +1090 +43 +573 +38893 +42226 +42227 +1716 +286 +1688 +19 +42228 +42229 +34944 +30551 +42230 +28845 +8849 +26081 +8483 +179 +491 +41687 +1896 +42231 +28845 +9 +42232 +35153 +155 +1157 +42233 +31293 +25309 +28317 +41273 +42234 +713 +809 +26161 +25683 +89 +9232 +2049 +41581 +6068 +3601 +26657 +19 +4684 +8867 +42235 +42236 +28845 +411 +2944 +27669 +43 +12063 +5188 +13721 +19111 +14477 +38760 +3406 +2006 +40570 +18045 +41858 +42237 +42238 +38499 +10846 +21947 +42239 +44 +42240 +713 +17698 +13721 +155 +16315 +20679 +42241 +42242 +31873 +736 +37510 +42243 +42244 +42245 +15718 +2039 +915 +15718 +1559 +16375 +19 +595 +42246 +286 +25316 +1047 +38900 +13116 +42247 +31293 +42248 +31423 +42249 +155 +17042 +42250 +20315 +3055 +42251 +42252 +42253 +25 +19655 +33650 +42254 +736 +21689 +42255 +19 +46 +7053 +9 +16 +18683 +42256 +31293 +5085 +42257 +42258 +42259 +31293 +7379 +8367 +590 +42260 +37404 +790 +42261 +31293 +3981 +42262 +42263 +155 +21310 +43 +42264 +29200 +6341 +301 +42265 +21947 +21669 +28845 +14909 +140 +31293 +42266 +1047 +12 +2318 +18045 +42267 +4055 +42268 +42269 +21947 +28845 +16375 +40591 +19 +17353 +40570 +36735 +24725 +34804 +42270 +34402 +209 +42271 +3030 +31293 +155 +23103 +6726 +17670 +42272 +40570 +1234 +42273 +16085 +40570 +33627 +42274 +40570 +27011 +12987 +7065 +155 +89 +42275 +42276 +21669 +42277 +29381 +29483 +42278 +42279 +42280 +22065 +13579 +20487 +36268 +42281 +42282 +19 +30650 +42283 +42284 +40570 +153 +40570 +17151 +42285 +16437 +13390 +19618 +13826 +24725 +21669 +39434 +5297 +1051 +42286 +398 +46 +6508 +42287 +40570 +42288 +15506 +26498 +19 +18589 +42289 +3546 +19797 +29628 +21947 +155 +23121 +19655 +165 +42290 +42291 +29200 +42292 +30458 +13760 +42293 +42294 +42295 +1823 +40570 +736 +9 +13390 +42296 +42297 +24074 +57 +42298 +19 +1090 +42299 +42300 +42301 +33650 +590 +2561 +40570 +42302 +155 +5409 +42303 +28339 +42304 +42305 +12093 +5080 +42306 +869 +29204 +42307 +42308 +21689 +21947 +1169 +23103 +5088 +20 +27669 +38465 +27147 +9 +671 +1090 +2000 +5409 +42309 +42310 +4047 +32332 +42311 +16316 +43 +13615 +345 +10699 +42312 +18045 +42313 +42314 +40570 +20839 +21947 +554 +40570 +43 +40570 +19 +29483 +42205 +42315 +16121 +1244 +42316 +24161 +6582 +19 +12628 +42317 +1169 +42318 +42319 +42320 +28845 +9 +5041 +155 +699 +19223 +42321 +42322 +19 +42323 +2944 +155 +590 +42324 +42325 +30051 +9095 +32 +20442 +42326 +28317 +42327 +42328 +42329 +40570 +12366 +29483 +14856 +1481 +2197 +989 +42330 +28755 +13895 +42331 +42332 +416 +155 +77 +25237 +29483 +31168 +28219 +40707 +42333 +41944 +42334 +42335 +19 +14369 +14330 +20442 +4055 +27669 +1559 +736 +42336 +27798 +586 +15718 +155 +42337 +42338 +25683 +42339 +42340 +18334 +6935 +42341 +42342 +42343 +140 +42344 +671 +34518 +21947 +3601 +42345 +5773 +42346 +209 +6054 +37556 +590 +6627 +42347 +1559 +29434 +915 +25 +29483 +19618 +22476 +18780 +13323 +6441 +42348 +18310 +42349 +28643 +8483 +42350 +42351 +42352 +4245 +42353 +43 +42354 +21947 +57 +42355 +40570 +10117 +42356 +41919 +42357 +43 +29381 +9 +38033 +29483 +42358 +10320 +42359 +24303 +15718 +42360 +286 +30814 +42361 +40570 +37556 +40570 +21689 +15820 +14477 +37154 +28490 +19618 +424 +42362 +8849 +19 +40570 +42363 +931 +46 +10782 +872 +16413 +155 +14604 +42364 +1364 +42365 +43 +42366 +42367 +19795 +9 +27669 +342 +42368 +590 +42369 +42370 +13390 +42371 +42372 +430 +42373 +5925 +29483 +42374 +586 +41695 +19 +41919 +9 +1384 +249 +38760 +38760 +42375 +42376 +590 +42377 +42275 +31293 +205 +4230 +31293 +42378 +554 +41919 +29483 +20507 +11328 +1134 +29628 +42379 +42380 +21947 +7379 +15 +12005 +25237 +15718 +590 +22717 +7276 +42381 +42382 +5022 +28845 +573 +7276 +42383 +42384 +42385 +30224 +3743 +42386 +42387 +34402 +40570 +37790 +31293 +9 +1090 +31293 +4963 +31098 +3546 +27794 +1054 +42388 +1465 +42389 +533 +9 +40570 +24144 +21947 +42390 +2841 +1571 +33650 +23103 +36 +40570 +42391 +42392 +42393 +23103 +24864 +12684 +24303 +1615 +42394 +42395 +42396 +30917 +590 +42397 +10946 +40570 +25260 +42398 +4363 +242 +30877 +16437 +42399 +42400 +29483 +42401 +42402 +42403 +42404 +42405 +1384 +10464 +3944 +27905 +42406 +12500 +3978 +21947 +31293 +1090 +736 +42407 +42408 +32 +958 +31293 +301 +42409 +19852 +1154 +42410 +28317 +590 +34402 +4055 +590 +42411 +42412 +42413 +6839 +19523 +42414 +42415 +42416 +42417 +42418 +42419 +31293 +14369 +42420 +42421 +4028 +42422 +24864 +155 +1384 +42423 +34227 +1524 +2310 +42424 +872 +42425 +33469 +36735 +42228 +1082 +9148 +19030 +42426 +42427 +28845 +22 +39520 +19 +42428 +155 +9384 +42429 +41919 +42430 +18045 +323 +42431 +42432 +42433 +21089 +188 +32410 +42434 +31293 +1090 +42435 +1045 +2604 +22986 +25683 +4502 +42436 +590 +13365 +43 +25943 +14330 +42437 +3528 +1157 +14369 +42438 +42439 +29981 +43 +42440 +42441 +989 +225 +27117 +48 +17653 +42442 +42443 +42444 +27025 +15354 +5231 +590 +14369 +9254 +7617 +1026 +43 +15498 +42445 +16443 +27310 +67 +42446 +40570 +11702 +40570 +42246 +30224 +19287 +42447 +27669 +42448 +42449 +25106 +40570 +1531 +42450 +42451 +42452 +19618 +37556 +1021 +42453 +21947 +42454 +41919 +33650 +15533 +42455 +1404 +21045 +25683 +1169 +10262 +15 +10052 +42456 +42457 +19655 +42458 +42459 +14369 +349 +442 +40570 +27843 +1847 +38465 +4116 +349 +28490 +1870 +17472 +14369 +42460 +19 +164 +42461 +874 +28845 +42462 +155 +4055 +42463 +7855 +590 +21730 +21947 +30705 +42464 +4055 +42465 +18991 +15718 +33061 +46 +9 +28845 +42466 +23150 +42467 +43 +9 +27857 +42468 +33758 +42469 +27069 +42470 +41695 +25140 +5858 +3 +19 +42471 +42472 +13390 +8249 +42473 +176 +42474 +514 +23518 +42475 +42476 +26361 +42477 +25047 +720 +43 +66 +19 +2762 +42478 +42479 +89 +42480 +1203 +29483 +1870 +30051 +1021 +677 +42481 +259 +4528 +5188 +42482 +11273 +18684 +42483 +42484 +21089 +42485 +349 +42486 +32410 +66 +349 +16 +30224 +24864 +42487 +22787 +7362 +28845 +21947 +2009 +31293 +5344 +823 +323 +42488 +42489 +42490 +1090 +31293 +8668 +590 +42491 +25237 +15718 +7698 +7799 +42492 +39434 +15 +42493 +29204 +42494 +1222 +42495 +21689 +7419 +42496 +2727 +41919 +40570 +3452 +16466 +42497 +13390 +19167 +20673 +60 +17151 +42498 +286 +936 +42499 +893 +15718 +42500 +736 +42501 +533 +2260 +42502 +42503 +20514 +8668 +28036 +13390 +42504 +40570 +42505 +92 +42506 +583 +155 +19618 +25316 +720 +114 +736 +8849 +5188 +40570 +42507 +185 +42508 +15718 +42509 +14330 +42510 +31293 +24303 +20175 +42511 +12307 +42512 +35489 +24896 +9 +28317 +415 +14 +42513 +595 +8668 +38465 +31522 +155 +30794 +38760 +42514 +42515 +8787 +14369 +42516 +40570 +42517 +10846 +33650 +42518 +42519 +42520 +9 +27669 +15054 +42521 +40570 +35316 +29483 +5085 +140 +25 +33627 +32 +209 +42522 +2854 +43 +34402 +42523 +42524 +19655 +209 +155 +34944 +13721 +42525 +42526 +196 +42527 +10 +27669 +14363 +23111 +41919 +42528 +24410 +19 +815 +31293 +42529 +27669 +1543 +13390 +7658 +42530 +865 +5085 +42531 +519 +19655 +42532 +8668 +42533 +42534 +14108 +30224 +4598 +9 +28845 +2164 +15914 +14369 +42535 +42536 +38033 +590 +2015 +228 +42537 +29157 +1120 +89 +42538 +31293 +24709 +42539 +31293 +9 +42540 +5188 +590 +39363 +15 +42541 +12987 +42542 +15845 +15720 +1157 +42543 +2476 +11369 +1924 +33627 +29483 +36736 +42544 +42545 +2372 +17385 +4055 +42546 +42547 +41603 +18695 +16466 +46 +40570 +33627 +42548 +9396 +19 +42549 +155 +27669 +34402 +77 +43 +3764 +15398 +42550 +42551 +24303 +915 +8367 +32790 +42552 +42553 +23005 +37556 +42554 +9 +10935 +42555 +1710 +42556 +1378 +22963 +514 +42557 +28036 +22808 +42558 +40570 +42559 +38893 +22986 +42560 +14381 +40097 +7253 +42561 +24144 +40570 +42562 +42563 +37556 +590 +42564 +42565 +41117 +42566 +42567 +25316 +9097 +16440 +42568 +42569 +22898 +42570 +8668 +887 +42571 +38465 +1517 +3875 +42572 +19167 +42573 +11389 +42574 +40570 +1991 +34 +35224 +23547 +36268 +42575 +495 +42576 +5085 +37958 +39713 +25584 +42577 +42578 +27829 +43 +42579 +43 +13824 +30051 +21947 +42483 +42580 +41117 +42581 +38760 +12158 +6004 +42582 +42583 +6335 +42584 +37556 +42585 +32 +42586 +32 +13390 +33650 +28845 +34454 +42587 +42588 +57 +42589 +21669 +1224 +27669 +42590 +21689 +42316 +42591 +42592 +29483 +2064 +15718 +8427 +23103 +23103 +958 +40570 +42593 +597 +323 +42594 +42595 +42596 +41117 +2289 +27104 +15718 +42597 +41687 +4403 +19 +42598 +1562 +18045 +15718 +42599 +13390 +33650 +345 +42600 +15718 +1444 +1234 +19 +5874 +28936 +1090 +17951 +265 +15 +41273 +533 +9 +572 +41941 +42601 +9452 +34402 +14887 +3369 +43 +155 +42602 +817 +42603 +514 +222 +13390 +42604 +26815 +17911 +42605 +32467 +26496 +42606 +554 +42607 +42608 +42609 +11328 +1425 +17911 +42610 +37411 +19167 +24303 +42611 +21521 +745 +155 +27669 +46 +42612 +4116 +35624 +6669 +29483 +42613 +42614 +42615 +38527 +40570 +41919 +42616 +42617 +36436 +155 +694 +42618 +32 +8103 +42619 +19 +42620 +42621 +42622 +21791 +42623 +179 +13721 +671 +21947 +42624 +42625 +3 +13129 +29483 +736 +7276 +42626 +28845 +42627 +17698 +21947 +42628 +42629 +1559 +40570 +751 +32 +40570 +6122 +4124 +42630 +42631 +28845 +19655 +42632 +42633 +9 +21947 +2427 +42634 +1961 +40570 +7944 +36674 +24324 +155 +19618 +42635 +1090 +10946 +42636 +16798 +26496 +11733 +42637 +12013 +42638 +33061 +42639 +41567 +736 +25921 +42640 +28168 +42641 +32642 +560 +17151 +4808 +42642 +14079 +42643 +42644 +849 +42645 +5391 +42646 +10642 +42647 +1566 +155 +7835 +36735 +30209 +1889 +42648 +33627 +31293 +13528 +1531 +42649 +18846 +14668 +42650 +694 +42651 +28845 +28036 +42652 +42653 +42654 +40570 +42655 +32477 +42656 +42657 +42658 +155 +42659 +1082 +42660 +19 +37556 +42661 +42662 +42663 +42664 +5041 +42665 +42666 +13390 +590 +42667 +23103 +9441 +4806 +33330 +42668 +42669 +42670 +24864 +21126 +32190 +10 +2015 +43 +42671 +155 +1961 +42672 +21947 +9688 +34758 +19 +42673 +590 +42674 +43 +2325 +21947 +42675 +42676 +42677 +19 +201 +42678 +38760 +42679 +1090 +1090 +42680 +1224 +26959 +40570 +42681 +40570 +42682 +18695 +28845 +9024 +40570 +36727 +19 +42683 +1335 +342 +155 +2694 +208 +37556 +42684 +17911 +2476 +26157 +42685 +42686 +66 +1502 +42687 +33627 +1444 +42688 +21602 +560 +42689 +317 +42690 +28845 +7053 +40570 +42691 +42692 +26496 +42693 +28845 +33650 +6744 +32449 +2314 +12120 +42694 +1090 +2896 +9 +13905 +286 +736 +11822 +7835 +5601 +24864 +41919 +178 +15802 +11683 +25237 +29424 +16437 +18561 +53 +41919 +28219 +18176 +26389 +19 +791 +40570 +42695 +18553 +42696 +21669 +2314 +10859 +14369 +9 +42697 +491 +42542 +36735 +815 +1090 +448 +415 +29200 +42698 +42699 +2243 +19 +1920 +42700 +15 +14330 +29770 +284 +1112 +9234 +31293 +26705 +42701 +25 +15824 +42702 +17911 +5080 +29483 +42703 +21947 +213 +42704 +590 +10527 +23103 +21175 +35594 +42705 +42706 +42707 +40570 +42708 +2372 +29 +42709 +12203 +8727 +378 +42710 +284 +23821 +1511 +5499 +31098 +6985 +42711 +42712 +713 +29381 +43 +29675 +40570 +284 +42713 +42714 +5409 +17749 +42715 +349 +28317 +1090 +42716 +156 +31293 +21669 +40570 +823 +42717 +29483 +42718 +5780 +248 +19 +36943 +42719 +42720 +42721 +590 +18951 +42722 +40570 +42723 +13390 +155 +28845 +31293 +42724 +42725 +284 +24207 +140 +1090 +42726 +34650 +42727 +21947 +590 +390 +2653 +42728 +42729 +17385 +30224 +284 +38358 +8668 +19167 +42730 +38064 +39053 +213 +42731 +15 +29483 +284 +40591 +42732 +31293 +42733 +32332 +21947 +248 +42734 +27669 +42735 +7053 +791 +31293 +42736 +28845 +5285 +15718 +36639 +34641 +21947 +42737 +42738 +42739 +1168 +24045 +18488 +43 +33302 +40591 +114 +14 +21269 +42740 +42741 +40570 +1090 +3698 +39709 +21689 +42742 +303 +42743 +155 +248 +42744 +5952 +6008 +25140 +36851 +40570 +39926 +43 +1200 +25943 +42745 +41266 +38465 +303 +21669 +6877 +42746 +19 +213 +17894 +31293 +1688 +1091 +3544 +4226 +42012 +14369 +37556 +42747 +9396 +42748 +19655 +7907 +14477 +213 +42749 +484 +14604 +671 +42750 +16693 +19 +42751 +303 +41342 +31293 +12302 +21669 +27669 +248 +41919 +42752 +42753 +21669 +21947 +42754 +42755 +573 +155 +210 +15712 +33650 +822 +590 +37556 +10973 +42756 +41622 +31293 +42757 +248 +13576 +196 +42758 +30816 +42759 +2476 +495 +303 +42760 +1652 +20785 +28845 +42761 +29483 +1224 +349 +42762 +24458 +8668 +42763 +37556 +16121 +42764 +18037 +42765 +28845 +25316 +42766 +21669 +3908 +27669 +42767 +42768 +284 +38465 +554 +29381 +9 +16966 +28845 +28845 +13905 +18503 +41695 +40570 +590 +14947 +213 +31225 +506 +1090 +36322 +1112 +42769 +40570 +42770 +42771 +849 +41880 +42772 +213 +4855 +37556 +42773 +36546 +38234 +155 +21669 +31885 +33650 +590 +42774 +42775 +41919 +25683 +19 +38607 +42776 +42777 +9422 +12118 +179 +42778 +42779 +10475 +42780 +3238 +42781 +57 +42782 +15718 +29483 +28490 +683 +42012 +40570 +42783 +21947 +19 +303 +22962 +648 +46 +24864 +22 +21279 +42784 +19 +42785 +42786 +590 +21398 +99 +541 +41919 +40570 +42787 +99 +42788 +14 +533 +42789 +27895 +46 +20514 +42790 +42791 +28459 +713 +364 +30551 +9 +42792 +42793 +42794 +40570 +30246 +19142 +6439 +19 +32 +25237 +42795 +21598 +1847 +1907 +4765 +42796 +19 +9898 +46 +42797 +42798 +25237 +40570 +201 +915 +42799 +43 +42800 +42801 +42802 +21669 +33714 +31293 +8338 +21669 +31098 +14369 +57 +9112 +13390 +3155 +17754 +41622 +3790 +3950 +377 +28845 +42803 +42804 +42805 +25683 +42806 +31293 +42807 +209 +42808 +42809 +13721 +4226 +1107 +5579 +35272 +28845 +337 +12987 +40570 +12936 +1384 +2649 +17911 +19 +1543 +5499 +39709 +284 +42810 +155 +9 +24081 +42811 +40939 +42812 +42813 +42814 +1559 +4985 +9 +3055 +713 +42815 +104 +4847 +3196 +28845 +23103 +42816 +248 +41397 +3863 +26549 +30209 +495 +20600 +13390 +42817 +40570 +42818 +14192 +436 +42819 +155 +415 +19 +32896 +21947 +14603 +15275 +42820 +15 +42821 +38760 +16 +42822 +42823 +1021 +42824 +16941 +42825 +936 +177 +42826 +21669 +354 +22 +42827 +42828 +42829 +16609 +40570 +554 +31293 +28317 +38003 +42830 +21947 +25943 +28845 +42831 +43 +14330 +3546 +40570 +42832 +42833 +12152 +42834 +155 +12479 +2694 +34327 +35592 +42835 +42836 +39709 +21947 +42837 +398 +345 +31293 +10 +42838 +42839 +36403 +42840 +21947 +42841 +16 +42842 +155 +12020 +42843 +42844 +42845 +34506 +28577 +37770 +250 +42846 +29687 +28799 +21947 +21669 +446 +10298 +42847 +18045 +27719 +30580 +42848 +42849 +2769 +24896 +42850 +37556 +2310 +35085 +12987 +42851 +303 +1169 +42852 +42853 +40570 +16413 +52 +5065 +29483 +42854 +41919 +337 +33937 +42855 +1090 +34103 +42856 +43 +42857 +27455 +42858 +42859 +43 +19218 +2164 +18477 +165 +18683 +7488 +42860 +11808 +21947 +5188 +140 +26496 +9 +35224 +28845 +31603 +42861 +35158 +42862 +16443 +41919 +112 +42863 +42864 +822 +42865 +37556 +38465 +42866 +39593 +31346 +38465 +213 +155 +21791 +19 +2581 +6364 +16826 +936 +42867 +30224 +21947 +18317 +42868 +42869 +17698 +29716 +40570 +42870 +30224 +42871 +42872 +8070 +42873 +40570 +42874 +42875 +43 +19618 +21947 +4699 +554 +42876 +576 +213 +155 +155 +5188 +39709 +19167 +42877 +155 +42878 +5409 +3241 +25140 +24144 +10946 +1090 +656 +42879 +2694 +42880 +42881 +42882 +554 +42883 +590 +40570 +42884 +10946 +42885 +42886 +42887 +22380 +25584 +42888 +249 +42889 +492 +28845 +42890 +9 +554 +42891 +28212 +43 +317 +955 +8867 +41919 +2052 +2514 +2415 +42892 +98 +27819 +736 +19582 +26943 +31293 +8919 +19 +30580 +42893 +14369 +32931 +16828 +12281 +42894 +42895 +15477 +32 +21027 +42896 +16089 +40570 +7385 +2919 +42897 +21947 +42898 +33445 +42899 +1090 +26496 +40570 +3644 +13390 +2488 +43 +19 +42900 +42901 +42902 +616 +37556 +590 +41890 +31293 +42903 +21947 +42904 +23103 +42905 +42906 +416 +248 +19 +2457 +37556 +28317 +18045 +15718 +213 +42907 +42908 +37770 +42909 +42910 +11966 +40570 +24862 +30224 +20700 +6096 +42911 +15718 +33650 +42912 +42913 +42914 +509 +736 +29483 +19 +42915 +21179 +26361 +25683 +42916 +42917 +713 +155 +31873 +1013 +8541 +42918 +42919 +250 +573 +40570 +590 +2692 +178 +213 +155 +34264 +42920 +41687 +14330 +42921 +720 +4908 +345 +42922 +24303 +14871 +40022 +15810 +42923 +42924 +1442 +42925 +9 +590 +31437 +248 +42926 +17911 +43 +6785 +5791 +16375 +788 +42927 +15718 +19618 +42928 +42929 +179 +32920 +42930 +42931 +3252 +9005 +41890 +42932 +337 +40928 +597 +699 +17670 +2260 +25683 +7486 +32920 +42933 +21698 +1051 +2260 +155 +42934 +11321 +1291 +19852 +303 +33650 +14824 +7117 +1774 +303 +337 +4028 +11754 +24458 +21049 +590 +155 +42935 +286 +35624 +40570 +42936 +42937 +4538 +1559 +17228 +284 +34402 +303 +19 +33650 +42938 +42939 +17635 +1012 +25316 +29381 +42940 +26361 +303 +42941 +40570 +4471 +501 +178 +42942 +25316 +317 +46 +26669 +34402 +42943 +590 +42192 +38284 +30580 +24496 +4441 +37556 +33349 +29483 +103 +533 +42944 +5065 +40570 +42945 +2672 +42946 +21947 +12020 +41695 +2672 +40928 +4155 +42947 +37556 +248 +42948 +41919 +9902 +41890 +41890 +15 +31293 +955 +13036 +42949 +590 +18988 +13390 +41687 +6121 +15718 +284 +42950 +294 +42951 +4463 +342 +42952 +57 +42953 +1291 +28845 +5188 +2672 +9 +42954 +12351 +554 +971 +23103 +42955 +15718 +42956 +41919 +34613 +21947 +7451 +1716 +42957 +42958 +42959 +26361 +21947 +42960 +30221 +29381 +42421 +345 +12722 +1465 +41890 +42961 +42962 +42963 +42964 +42965 +41890 +42966 +42967 +33627 +29874 +155 +42968 +30224 +42969 +20443 +42970 +27669 +815 +28845 +42971 +34448 +18740 +9 +42972 +31246 +42973 +4055 +42974 +42975 +77 +24864 +46 +736 +10946 +42976 +46 +8367 +12642 +3599 +248 +25 +24045 +21689 +10932 +16891 +28845 +42977 +14477 +40570 +554 +42978 +42979 +43 +42980 +41890 +3034 +41890 +37556 +41890 +155 +41890 +42981 +29 +42982 +31454 +31964 +42983 +42984 +42985 +42986 +42987 +29483 +4123 +4313 +16 +16443 +4463 +41919 +2287 +19 +345 +16205 +14001 +25142 +14079 +42988 +17911 +33002 +478 +42989 +4055 +41890 +41890 +29484 +317 +1961 +42990 +3318 +155 +41890 +1716 +9194 +303 +34402 +2779 +42991 +42992 +42993 +42994 +42995 +15683 +43 +21089 +41890 +42996 +26040 +1109 +25624 +40570 +42997 +8668 +72 +19091 +42998 +42999 +43000 +43001 +43002 +4264 +43003 +155 +11869 +13390 +3034 +19918 +41890 +43004 +43005 +43006 +36268 +25316 +34613 +40570 +41890 +41890 +29483 +43 +43007 +36483 +24038 +3601 +9 +21947 +43008 +791 +43009 +43010 +29687 +18276 +41890 +43011 +41890 +30051 +43012 +41890 +41890 +41890 +14133 +43013 +43014 +378 +7231 +411 +8807 +8248 +33627 +41890 +15 +43015 +22922 +9 +37077 +917 +43 +19 +41890 +28845 +43016 +861 +77 +19 +3598 +14369 +41890 +41890 +43017 +19 +43018 +30224 +31293 +24144 +5963 +34496 +41890 +39080 +42962 +20514 +25237 +35926 +4288 +2043 +29483 +43019 +43020 +43021 +29381 +554 +43022 +41890 +41890 +2315 +19 +40570 +40570 +21947 +41890 +1157 +43023 +1961 +1774 +43024 +39371 +5065 +7014 +15 +41890 +18746 +3551 +41919 +41890 +19 +24303 +590 +43025 +24303 +28845 +41890 +597 +2121 +104 +41890 +4263 +27669 +26040 +41890 +28597 +43026 +43027 +41890 +43028 +43029 +28845 +155 +1605 +29483 +13390 +40570 +43030 +25683 +40570 +43031 +41890 +41890 +43032 +46 +41890 +20514 +43033 +40570 +7987 +6245 +43034 +43035 +43036 +41890 +25 +1444 +23103 +4518 +43037 +2029 +1543 +43038 +193 +41890 +43039 +28845 +43040 +43 +4808 +37556 +33693 +43041 +43042 +30209 +42421 +43043 +43044 +43045 +57 +590 +33627 +40570 +41890 +40570 +43046 +41890 +23752 +41890 +14869 +27669 +31293 +37556 +15718 +26158 +21947 +20340 +21105 +15 +43047 +43048 +43049 +15718 +21031 +37556 +7912 +41890 +31098 +15193 +558 +43050 +32456 +23271 +43051 +43052 +2577 +15718 +13405 +43053 +22 +21947 +331 +36639 +27669 +2029 +41890 +28845 +155 +29381 +40570 +43054 +1817 +43055 +590 +222 +43056 +4028 +16437 +43 +35769 +43 +155 +25683 +845 +3546 +349 +29707 +41890 +41890 +41890 +155 +43057 +1051 +342 +4603 +43058 +6571 +41890 +43059 +43060 +43061 +16466 +43062 +40570 +2463 +3669 +14962 +7978 +21947 +41890 +40570 +43063 +41890 +41890 +9918 +40570 +41890 +43064 +40570 +1442 +1090 +43065 +30224 +15718 +41890 +339 +43066 +41919 +155 +5409 +43067 +22552 +554 +1870 +43068 +43069 +13721 +28441 +43070 +43071 +43072 +43073 +19918 +33758 +1066 +43074 +24454 +41890 +495 +41890 +43075 +43076 +41890 +41890 +1824 +1090 +41890 +31503 +33444 +3252 +19 +43077 +43078 +40570 +41890 +33650 +41890 +41890 +19655 +43079 +17911 +43080 +29483 +43081 +40570 +2064 +19655 +43082 +9 +41890 +43083 +41890 +2465 +6571 +40062 +33141 +19 +31139 +41890 +25316 +41890 +41890 +415 +41890 +43084 +155 +165 +41890 +155 +155 +43085 +16375 +41890 +720 +41687 +1038 +41890 +43086 +43087 +43088 +13361 +41890 +41890 +43089 +41890 +41890 +43090 +40570 +43091 +736 +9228 +5188 +2733 +12828 +43092 +41890 +43093 +41919 +10482 +60 +34402 +590 +26946 +43094 +41890 +43095 +11315 +1364 +317 +30877 +43096 +43097 +2314 +15718 +646 +19 +43098 +43099 +41919 +41890 +41890 +43100 +21669 +37556 +40570 +43101 +43102 +41890 +28845 +41890 +43103 +32 +41890 +20356 +41890 +41890 +14369 +21261 +43104 +9772 +6086 +43105 +365 +25140 +41890 +41890 +478 +15483 +43106 +43107 +43108 +41890 +43109 +41890 +43110 +41890 +14909 +10745 +43111 +43112 +41890 +43113 +43114 +41890 +33650 +43115 +34264 +179 +41890 +43116 +31293 +41890 +34 +2791 +43117 +33627 +41890 +77 +41890 +209 +19618 +1018 +43118 +41890 +533 +41890 +41890 +43119 +43120 +41890 +41890 +1090 +38465 +4055 +700 +43121 +43122 +3239 +43123 +713 +40264 +41890 +514 +43124 +41890 +41890 +40570 +2197 +43125 +38003 +43126 +43127 +43128 +354 +21669 +15018 +43129 +43130 +43131 +41890 +19655 +41890 +41919 +41890 +19355 +41890 +21669 +27069 +33494 +43132 +323 +41890 +46 +26744 +12479 +43133 +9 +43134 +4441 +3553 +41890 +5188 +42000 +43135 +41890 +41890 +24303 +41890 +17911 +28845 +28845 +41890 +43136 +43 +2872 +19 +19 +41890 +43137 +28845 +43138 +43139 +41890 +41890 +43140 +176 +43141 +25316 +43142 +43143 +43144 +41890 +9 +8833 +26900 +41890 +41890 +155 +46 +43145 +41890 +36823 +4 +43146 +43147 +43148 +41890 +20700 +568 +8668 +40570 +19 +41890 +5780 +41890 +41890 +43149 +43150 +43151 +39709 +112 +43152 +41890 +43153 +19 +43154 +1090 +43155 +1090 +21669 +41890 +19655 +41155 +39536 +887 +40570 +155 +43156 +155 +36735 +1234 +1471 +40570 +3311 +42711 +43157 +43158 +43159 +21669 +41890 +41890 +349 +41890 +41890 +46 +43160 +980 +43161 +11907 +416 +43162 +41890 +910 +31293 +36268 +41890 +41890 +41890 +43163 +3484 +1870 +39709 +26361 +736 +1907 +590 +21947 +43164 +43165 +1384 +1961 +41890 +41890 +41890 +29639 +586 +41890 +9 +43166 +41890 +41890 +41890 +491 +17 +43167 +43168 +43169 +10909 +43170 +43171 +43172 +21089 +41890 +43173 +590 +43174 +36736 +17472 +25 +43175 +155 +41890 +41890 +43176 +41890 +41890 +13390 +1829 +43177 +15216 +41890 +41890 +38789 +2254 +43 +2260 +11757 +36268 +41890 +43178 +43179 +43180 +41890 +15552 +41890 +41890 +9 +41890 +41890 +41890 +15 +14369 +43181 +43182 +19792 +31293 +41890 +29483 +14176 +14077 +41890 +43183 +41890 +41890 +872 +6077 +41890 +41890 +43184 +43185 +2727 +41890 +43186 +590 +43187 +41890 +43188 +29733 +43189 +43190 +43191 +43192 +41890 +43193 +155 +8864 +33765 +43194 +43195 +43196 +41080 +43197 +34488 +3369 +34579 +15718 +43198 +43199 +42259 +5188 +21669 +13528 +2804 +18061 +40570 +41890 +27178 +43200 +457 +6617 +41890 +412 +43201 +41890 +43202 +43203 +43204 +41890 +41890 +809 +5627 +1112 +30877 +31168 +20167 +43205 +357 +13390 +43206 +43207 +43208 +22901 +41890 +25237 +43209 +33916 +43210 +43211 +43212 +40570 +40143 +3994 +1090 +1307 +25237 +41499 +29254 +21669 +9 +78 +7191 +43213 +43214 +41890 +41890 +43215 +21669 +43216 +41890 +43217 +13360 +43218 +861 +43219 +34641 +66 +27291 +43220 +43221 +43222 +41890 +791 +43223 +41890 +112 +40570 +43224 +41890 +20340 +36268 +43225 +165 +8297 +43226 +3559 +1310 +35536 +43227 +24864 +43228 +21947 +1765 +5791 +43 +43229 +43230 +43231 +43232 +43233 +22986 +9 +43234 +9 +671 +41890 +41890 +43235 +14369 +33024 +21669 +22963 +43212 +713 +554 +41890 +20593 +33120 +41890 +41890 +31293 +57 +43236 +25683 +14810 +43237 +1153 +43238 +31293 +43239 +43240 +14467 +1011 +41890 +43241 +590 +41890 +41175 +43242 +19 +33524 +43243 +43244 +30650 +43245 +43246 +29483 +38758 +15718 +30551 +21947 +43247 +43248 +43249 +28295 +18283 +41890 +15718 +155 +41890 +32915 +21669 +41890 +41890 +9573 +12013 +41567 +41890 +43250 +41890 +7631 +15 +43251 +32 +155 +5780 +33650 +1112 +564 +598 +41890 +12231 +43252 +43253 +41890 +41890 +43254 +41890 +41890 +43255 +40591 +6543 +8128 +41890 +8668 +41890 +43256 +21669 +2356 +43257 +41890 +43258 +41890 +41890 +37556 +3553 +5293 +38529 +5188 +4637 +4055 +21732 +42290 +5409 +5860 +43168 +28846 +41890 +13270 +43259 +20078 +28740 +41890 +2314 +41890 +43260 +43261 +43262 +41890 +41890 +7658 +43263 +2859 +43264 +43265 +43266 +24603 +43267 +31293 +43249 +43268 +25848 +43269 +41890 +30109 +21669 +1013 +5764 +15 +43099 +43270 +43271 +36483 +1090 +30650 +540 +32 +43272 +30224 +41890 +43273 +41890 +43274 +41890 +41890 +5582 +7762 +6996 +43275 +5601 +43276 +41890 +39709 +43277 +43278 +41890 +12518 +57 +43279 +25237 +3844 +43280 +19 +43281 +14330 +43282 +41890 +1797 +103 +43283 +43284 +40861 +38465 +4278 +41890 +33627 +1920 +12020 +41890 +21689 +43 +60 +43285 +8668 +41890 +21947 +6086 +2865 +43286 +41890 +13390 +201 +8501 +41890 +24762 +10987 +43 +43287 +1090 +40570 +43288 +41890 +155 +41890 +8160 +43289 +43290 +40570 +36735 +26953 +43291 +12178 +43292 +43293 +23528 +43249 +41890 +43294 +43295 +41890 +43296 +41890 +1172 +43297 +18695 +40570 +10946 +41890 +41890 +43298 +43299 +41890 +16437 +41707 +40067 +21089 +98 +43300 +41890 +41890 +31293 +8896 +43301 +41890 +41890 +41890 +24045 +43302 +283 +41890 +8668 +16798 +43303 +590 +43 +43304 +43305 +43306 +43307 +41890 +33120 +41890 +41890 +43308 +43309 +31139 +29204 +14017 +29836 +43310 +33627 +16466 +19655 +43311 +43312 +41890 +43313 +1186 +12 +29483 +43314 +19655 +21669 +24324 +39709 +41890 +14399 +43315 +31098 +43316 +543 +14604 +43317 +41890 +23479 +43318 +41890 +43319 +43320 +37556 +41890 +4441 +41890 +21947 +31293 +21627 +19618 +43321 +46 +41890 +43322 +317 +40570 +40570 +43323 +13390 +43324 +14947 +14719 +29483 +6505 +41890 +43325 +2427 +590 +265 +43326 +21312 +4196 +19655 +2015 +43327 +43328 +43329 +41890 +43330 +590 +5489 +34402 +26738 +5916 +791 +41890 +43331 +43332 +28000 +43333 +41890 +43334 +18045 +9 +43335 +20876 +43336 +89 +43337 +27798 +43338 +43339 +745 +37768 +31293 +43340 +745 +43341 +41890 +15 +41890 +20700 +416 +43342 +43 +43343 +16437 +2410 +7930 +41890 +40570 +43344 +19 +2236 +41890 +3598 +1533 +43345 +24864 +41890 +43346 +43347 +43348 +41890 +43349 +43350 +41890 +41890 +21669 +41890 +16437 +41890 +46 +41890 +41890 +3994 +15914 +3949 +40591 +13998 +2161 +43351 +34435 +43352 +12254 +1524 +39709 +43353 +43354 +43355 +25144 +43356 +41890 +21669 +41890 +43357 +36143 +43358 +36027 +16966 +43359 +24303 +43360 +43361 +707 +736 +41890 +155 +17151 +4258 +41890 +15718 +23833 +21947 +30224 +41890 +249 +41890 +40570 +40570 +43362 +15718 +43363 +13566 +249 +43364 +15718 +43365 +4245 +41890 +9 +14330 +41890 +11966 +1992 +41890 +41890 +249 +46 +29483 +43366 +299 +41890 +5344 +1559 +140 +41890 +9356 +43367 +43368 +6225 +29434 +7658 +210 +41890 +574 +41890 +43369 +20984 +43347 +40570 +2243 +19 +41890 +155 +554 +41890 +201 +43370 +597 +1688 +286 +43371 +15971 +323 +41890 +31293 +41890 +41890 +518 +41890 +14087 +41890 +2318 +6217 +8668 +33185 +31225 +2410 +16618 +41890 +24864 +43372 +40570 +34435 +41890 +12450 +43373 +15718 +24303 +43374 +5085 +5773 +41890 +41890 +43375 +37556 +17947 +37291 +43376 +43347 +12987 +43377 +41890 +14 +41890 +41890 +41890 +18869 +590 +43378 +41890 +41890 +6364 +41890 +41890 +38381 +16443 +2744 +41890 +41919 +42349 +17698 +34 +37556 +3 +43379 +23103 +43380 +2330 +16375 +41687 +19792 +19 +11855 +1425 +41567 +8357 +1090 +411 +41890 +6441 +43381 +43382 +43383 +564 +19713 +43384 +43385 +32 +1961 +43386 +590 +41890 +43387 +43388 +43389 +5647 +4411 +333 +41890 +41890 +5612 +43390 +43391 +43392 +286 +43393 +18561 +43394 +43395 +6058 +19 +31098 +21131 +44 +5071 +1559 +43396 +43397 +41890 +15718 +21669 +43398 +43399 +46 +43400 +43401 +671 +1013 +590 +43402 +41890 +17911 +43403 +142 +5780 +36665 +43404 +1961 +1524 +41890 +43405 +41890 +43406 +41890 +41890 +17385 +12081 +41890 +43 +40570 +32920 +43407 +43408 +43409 +43410 +43411 +15824 +41890 +19 +21947 +30224 +415 +1615 +14369 +41890 +2577 +42483 +43412 +17894 +19655 +28845 +8668 +41890 +41890 +17523 +43413 +43414 +43415 +9 +349 +41890 +43416 +31293 +31293 +33524 +1021 +43417 +43418 +41890 +30551 +20 +2476 +41890 +41890 +15026 +17119 +21669 +21947 +43419 +20 +573 +155 +40570 +446 +43420 +13361 +43421 +38219 +9 +37881 +4518 +43422 +1090 +464 +41890 +736 +590 +41890 +9245 +9217 +43423 +43424 +16905 +43425 +41890 +43426 +31293 +41919 +37576 +8407 +43427 +43428 +43429 +41890 +22327 +43430 +30481 +43431 +41890 +40570 +43432 +40570 +41890 +29962 +736 +43433 +41890 +43434 +4455 +41890 +43435 +590 +20700 +43436 +43437 +43438 +41890 +41890 +41890 +683 +43439 +23103 +40570 +2694 +32 +41890 +6284 +41890 +29200 +13307 +887 +41890 +41890 +41890 +11449 +1716 +41890 +19 +345 +1495 +43440 +1502 +41890 +9 +3 +43441 +43442 +43443 +2228 +43444 +43445 +43446 +25584 +3415 +155 +42483 +30179 +41890 +41890 +43447 +43448 +41890 +13390 +21669 +26342 +43449 +41890 +43450 +43451 +19 +19852 +358 +9497 +20677 +41890 +41890 +15718 +41890 +19 +41890 +590 +32229 +41567 +43452 +40570 +43453 +19 +43454 +41919 +43455 +43456 +41890 +43457 +41796 +21522 +43458 +3908 +43 +41890 +41890 +155 +43459 +20 +5188 +43 +41419 +43460 +41890 +17571 +43 +27669 +26040 +31293 +43461 +41890 +14369 +41890 +43462 +683 +1112 +2566 +43463 +19 +41890 +31603 +41890 +590 +28923 +1051 +30576 +8160 +41890 +12445 +41890 +43464 +89 +1085 +41639 +25281 +13907 +43465 +43466 +7107 +1090 +36268 +43467 +43468 +27185 +41890 +5188 +590 +23103 +4242 +43469 +41890 +43470 +6874 +989 +43471 +28317 +5409 +43472 +25584 +43473 +736 +43474 +43475 +43476 +590 +27669 +651 +28845 +41890 +41890 +16466 +43477 +1090 +18045 +43478 +27719 +41890 +41890 +19 +41890 +573 +3317 +2434 +34706 +41890 +1021 +20700 +41890 +7553 +9 +43479 +16375 +41890 +942 +43480 +41890 +43481 +24303 +26040 +1090 +41890 +30762 +43482 +29483 +43483 +40570 +16640 +20941 +41890 +58 +41890 +43484 +397 +14330 +43485 +9 +41890 +19 +41890 +43486 +28845 +41890 +43487 +491 +19545 +41890 +43488 +41890 +30805 +41890 +15718 +43489 +1742 +41890 +25943 +40893 +41890 +36366 +1529 +43490 +23975 +43491 +3601 +41890 +39709 +19091 +21947 +41890 +43492 +41890 +43493 +43494 +3 +8670 +41890 +137 +705 +43495 +43496 +43497 +41890 +43498 +10 +34402 +20677 +137 +43499 +43500 +5243 +613 +41890 +43501 +41890 +43502 +43503 +32188 +30051 +41890 +9160 +41890 +43504 +20677 +15718 +41890 +39746 +590 +1049 +41890 +43505 +43506 +140 +41890 +40570 +43507 +43 +43508 +25943 +41890 +14369 +43509 +41890 +43510 +41890 +33442 +41890 +15718 +43511 +20442 +43512 +4 +30580 +16974 +41890 +43513 +43514 +43515 +29483 +43516 +519 +19095 +590 +11572 +41890 +43517 +15700 +13390 +5045 +43518 +40570 +43519 +43520 +464 +29483 +28897 +41890 +1107 +2289 +43521 +7048 +41890 +43522 +5679 +41890 +10360 +33541 +40605 +33510 +1224 +3 +40939 +43249 +28845 +827 +554 +590 +31293 +8919 +1316 +590 +43523 +19618 +43524 +43525 +4055 +43526 +3484 +41890 +43527 +16375 +43528 +38465 +377 +213 +1384 +21947 +29483 +41890 +213 +29381 +590 +43 +213 +13279 +8338 +14369 +43 +34433 +41890 +16 +155 +26229 +41919 +21669 +1566 +29200 +6595 +26496 +2694 +43529 +23805 +18863 +7854 +34641 +43530 +284 +28036 +43531 +41890 +41890 +43532 +43533 +43534 +43 +284 +25237 +43535 +38758 +43536 +155 +590 +23469 +41890 +8668 +5071 +41890 +303 +21947 +43537 +21053 +41890 +15718 +40570 +43538 +41890 +19 +43539 +41890 +1011 +41890 +1870 +2561 +8668 +1112 +41890 +6732 +707 +41890 +41890 +8392 +43540 +19 +248 +43541 +43542 +43543 +41904 +826 +14330 +3323 +43544 +10030 +416 +2040 +303 +43545 +41890 +76 +43546 +99 +5075 +19 +30224 +5650 +736 +4116 +41890 +40570 +43547 +213 +43548 +10869 +43549 +4196 +19 +99 +43550 +13390 +337 +1224 +41890 +213 +9446 +2406 +164 +590 +284 +89 +16707 +303 +140 +43551 +41890 +38 +43552 +43347 +13959 +10176 +16798 +1870 +41890 +10306 +21803 +15718 +9 +317 +19 +41890 +43553 +3 +41890 +24303 +43554 +21947 +464 +43555 +28441 +41890 +41890 +41890 +284 +43556 +250 +19 +213 +41890 +43557 +43486 +43558 +21947 +41890 +43559 +41890 +31293 +29483 +43560 +1812 +31168 +2655 +43561 +43562 +43 +2550 +22 +41890 +9 +27798 +43563 +43 +41890 +30877 +43564 +43565 +41890 +41117 +337 +303 +284 +1648 +284 +40570 +40570 +29483 +1592 +41890 +41890 +43566 +736 +43567 +41890 +15720 +43568 +248 +248 +491 +43108 +38310 +43569 +43570 +46 +15 +41890 +20 +14957 +1517 +337 +43571 +43572 +213 +28845 +25140 +41890 +9 +43573 +41890 +14420 +43574 +43575 +43576 +43577 +15720 +41890 +40570 +41890 +41890 +15831 +7053 +26496 +736 +284 +41890 +213 +27669 +38465 +41890 +43578 +41890 +41890 +225 +41890 +41890 +43256 +27656 +43579 +41890 +37790 +43580 +36218 +41890 +43581 +37961 +14369 +43582 +43583 +17869 +43584 +209 +39709 +213 +213 +29483 +40570 +43585 +43586 +7868 +43587 +36452 +29483 +16466 +41890 +259 +43588 +303 +284 +21947 +41890 +15718 +15718 +43 +1364 +41890 +11273 +9696 +21947 +33650 +10946 +31168 +43589 +43590 +3033 +57 +29204 +43591 +284 +41890 +4414 +140 +41622 +14330 +576 +43580 +7855 +19 +402 +1514 +5409 +43592 +43593 +43594 +213 +13807 +14603 +41890 +43595 +5085 +43596 +43597 +43598 +43599 +188 +43600 +43601 +35351 +40825 +43602 +28845 +29483 +713 +41890 +41890 +25605 +1524 +31293 +14102 +849 +43347 +41890 +43603 +13307 +41890 +3172 +827 +2919 +66 +41890 +43604 +38072 +40570 +42511 +9 +349 +317 +39709 +41890 +19695 +43605 +41890 +24303 +43606 +533 +41890 +1338 +41919 +43607 +5119 +43608 +43609 +41890 +40570 +16437 +18045 +1224 +41890 +40570 +25316 +41890 +6499 +57 +43610 +29483 +43611 +21947 +41890 +15718 +31293 +41919 +827 +43612 +4441 +36639 +13703 +43613 +155 +10389 +43614 +138 +140 +33650 +43615 +37338 +20340 +43 +43616 +4055 +1090 +178 +14693 +42290 +43617 +14603 +3 +3994 +140 +21669 +1991 +2728 +43618 +58 +43619 +30877 +9305 +2988 +43620 +1522 +2471 +43621 +43622 +43623 +1082 +41890 +7716 +29381 +15 +25316 +13150 +43624 +43625 +1018 +2008 +590 +38141 +41890 +21947 +18816 +43626 +8210 +4055 +40570 +34264 +323 +43627 +28549 +14330 +248 +43628 +41890 +43629 +41890 +41890 +41890 +34402 +40570 +1139 +28845 +41890 +43630 +41890 +43574 +2733 +18856 +41890 +41919 +155 +43631 +43632 +24725 +33569 +6441 +28845 +43633 +15 +861 +41890 +25237 +41890 +30209 +24662 +248 +349 +17385 +40570 +43634 +720 +15 +41890 +354 +43 +872 +13390 +41890 +43635 +1107 +6335 +10946 +213 +20087 +43636 +10946 +43637 +2804 +248 +43638 +43639 +22900 +43640 +43641 +13390 +43642 +43643 +2314 +41890 +13721 +10946 +43644 +28845 +2310 +8208 +43645 +11321 +43646 +43647 +5614 +8868 +21947 +1606 +12987 +43648 +43649 +41890 +15 +28845 +40570 +43650 +33650 +9 +43651 +7486 +14477 +43652 +14342 +24045 +43653 +6874 +43654 +4631 +43655 +248 +24864 +41890 +16367 +1584 +650 +14604 +41890 +5409 +27447 +43656 +43657 +3055 +43658 +19 +43 +15572 +27836 +41890 +41890 +8460 +41890 +43659 +14330 +21947 +284 +21669 +25237 +40570 +179 +1042 +33627 +34339 +21089 +41890 +41890 +33024 +43660 +354 +43661 +1870 +40591 +22 +41890 +43662 +43663 +38789 +738 +41919 +1905 +37556 +41890 +14369 +337 +590 +43664 +43665 +43666 +43667 +915 +43668 +9 +18956 +28845 +19046 +4344 +43669 +25 +39709 +43670 +9 +1157 +5780 +41890 +228 +14369 +43671 +25 +2310 +43672 +24908 +41890 +43673 +41890 +590 +5188 +915 +43674 +337 +43675 +41890 +41890 +1090 +43676 +31293 +590 +43 +4055 +33627 +36072 +337 +43677 +43678 +3078 +43679 +15 +43680 +41890 +43681 +337 +41890 +43 +41890 +7912 +40570 +40570 +36218 +29172 +43 +40570 +736 +24144 +4055 +41890 +19740 +590 +7360 +337 +554 +213 +865 +33109 +13390 +43682 +27719 +19 +4658 +9 +43683 +694 +23395 +43684 +14102 +7501 +31293 +43685 +41890 +43686 +10946 +41890 +43687 +4518 +43688 +43689 +41890 +41471 +7881 +43690 +15718 +1090 +43691 +41890 +11822 +14921 +43692 +14369 +11471 +43693 +43694 +43695 +41890 +43696 +337 +43697 +41890 +43698 +43699 +13215 +19 +41890 +41890 +41890 +41890 +41890 +43700 +13390 +43701 +19 +43702 +41890 +278 +1010 +6341 +5392 +213 +16437 +176 +26503 +34402 +24338 +43703 +677 +43704 +43705 +40570 +1765 +19918 +43706 +41890 +43707 +32332 +2415 +43708 +43709 +43108 +43710 +16437 +40570 +416 +43711 +9741 +41890 +43712 +28441 +43713 +43714 +43715 +7914 +41890 +43716 +43717 +4764 +15 +24303 +43718 +43719 +43720 +40570 +19 +12 +9233 +3 +1774 +43721 +41890 +41890 +19 +19 +43722 +5601 +19 +43723 +43724 +40591 +14086 +5119 +43725 +43726 +43727 +41890 +1090 +43728 +1716 +598 +19 +23103 +43729 +29381 +41890 +484 +4055 +41890 +43730 +41890 +2135 +30835 +43731 +533 +14330 +41890 +41890 +41890 +31293 +43732 +43733 +24144 +41890 +29381 +40570 +43734 +25683 +43 +6341 +4684 +14369 +32429 +30479 +194 +7516 +1090 +41890 +41890 +43735 +41890 +43736 +43737 +43738 +3709 +31168 +671 +25316 +958 +31603 +303 +38595 +41890 +43739 +40881 +3601 +20941 +21947 +491 +1524 +43740 +43741 +43742 +8668 +4364 +14266 +43743 +9 +43744 +155 +3858 +14620 +872 +25426 +41890 +590 +21669 +14477 +416 +19167 +15718 +12118 +14330 +30209 +4808 +43745 +24144 +1720 +33469 +22294 +37556 +43746 +43747 +398 +43 +41890 +43748 +19 +3772 +398 +29483 +5877 +8367 +43749 +36177 +43750 +43751 +28549 +15 +21903 +41890 +43752 +28036 +41305 +10946 +30224 +9 +42421 +2764 +41890 +41687 +21947 +41890 +41890 +28199 +20514 +41890 +25140 +43753 +33650 +5188 +1330 +3978 +37556 +29483 +790 +21026 +34402 +29483 +43754 +2085 +36333 +1090 +41890 +21669 +32642 +34402 +32925 +40570 +43755 +21669 +40570 +12 +43756 +43757 +2697 +43758 +286 +155 +35838 +19 +5085 +43759 +43760 +39709 +41890 +9688 +33496 +40570 +3 +4075 +41890 +43761 +43762 +19 +201 +21947 +15 +41890 +1090 +9696 +16443 +25140 +43763 +36328 +21947 +9 +41890 +43120 +21669 +1090 +43764 +103 +29483 +17943 +41890 +41890 +31041 +4764 +41890 +43765 +98 +41890 +8994 +41890 +33650 +1451 +713 +26744 +41890 +5582 +43766 +23518 +43767 +43768 +43769 +43770 +35224 +1172 +28845 +41890 +43771 +43772 +8512 +590 +19618 +43773 +43774 +24678 +352 +155 +26496 +35246 +19 +43775 +41890 +140 +6877 +1090 +5438 +43776 +46 +1615 +14330 +42000 +41890 +43777 +66 +155 +43 +43778 +43779 +43780 +37556 +354 +19472 +39709 +43781 +28845 +20497 +43782 +41890 +16443 +155 +15 +43783 +9460 +43 +43784 +41890 +21947 +43785 +43786 +25627 +10946 +590 +43787 +43788 +43 +43789 +14369 +43790 +24303 +249 +32410 +28845 +43791 +25 +43792 +28441 +43793 +713 +19 +26320 +43794 +30877 +37556 +43795 +28599 +43796 +20600 +43797 +20442 +92 +1905 +43798 +17338 +41890 +3553 +36921 +43799 +1481 +35224 +28441 +8392 +41890 +14604 +43800 +1768 +15718 +43801 +4245 +112 +41890 +11420 +32402 +41890 +43802 +43803 +43804 +30902 +2882 +14102 +43805 +43806 +43807 +32410 +19579 +43808 +155 +43809 +1907 +19 +25683 +14025 +43810 +9 +43811 +40570 +41890 +43812 +43338 +323 +41890 +41890 +43 +28845 +14562 +41890 +9364 +43813 +40570 +12629 +43814 +21251 +43815 +41567 +989 +43816 +19 +4050 +37364 +15718 +43817 +42741 +43818 +25407 +43819 +43820 +43821 +40570 +41890 +40570 +3546 +736 +590 +41890 +43822 +36735 +17911 +43823 +40570 +155 +40591 +34402 +31098 +14330 +33650 +41890 +1961 +826 +2 +259 +18334 +41890 +33278 +43486 +41890 +41890 +43824 +17675 +21669 +345 +43825 +1109 +41890 +43826 +43827 +14961 +43828 +43829 +43830 +31293 +35624 +31833 +43 +17898 +10946 +41890 +21947 +43831 +16618 +43832 +910 +43833 +43834 +9011 +13528 +43835 +345 +43836 +40439 +43837 +303 +34402 +4897 +303 +43838 +43839 +1051 +1853 +36268 +10946 +18045 +43840 +21947 +32 +29126 +41919 +43841 +9696 +43 +43842 +41890 +41890 +36218 +43843 +30224 +43844 +43845 +15 +43846 +27669 +43847 +43 +41890 +43848 +41890 +2971 +43849 +41890 +349 +42000 +41890 +36054 +41890 +41890 +41890 +43850 +1356 +342 +13482 +29483 +43851 +9 +823 +26361 +554 +5188 +43852 +41890 +41919 +41890 +590 +37888 +41890 +40570 +11683 +43853 +43854 +17670 +21947 +41890 +25624 +35025 +34181 +15766 +41890 +43855 +34 +19 +41890 +43856 +41890 +43857 +21027 +5409 +3994 +155 +4144 +43858 +16 +28845 +11754 +43859 +43860 +41890 +40570 +6165 +29483 +6766 +4108 +43861 +349 +43862 +576 +43863 +37556 +41890 +41890 +41890 +41890 +43 +41890 +15718 +43864 +5904 +342 +15158 +43865 +43866 +9 +43867 +33650 +27157 +41890 +155 +14369 +16437 +29381 +1011 +41890 +41890 +22620 +43868 +41890 +29483 +40570 +4055 +43869 +6400 +34402 +373 +41890 +41890 +43870 +27848 +43871 +40570 +43872 +41890 +41890 +155 +1100 +43873 +43874 +41890 +16466 +21669 +43875 +323 +43876 +43 +4683 +41890 +41890 +2164 +41890 +249 +910 +43877 +37790 +40570 +19 +349 +155 +43878 +43879 +26404 +19 +1385 +155 +15718 +43880 +29483 +41890 +5085 +31041 +590 +41890 +43881 +22065 +46 +41890 +43882 +23603 +41890 +43883 +19655 +43884 +4439 +43885 +43886 +43887 +40570 +43888 +41890 +43889 +36131 +43890 +41890 +14240 +1245 +41890 +1051 +43891 +43892 +43893 +417 +20308 +41890 +24896 +41890 +188 +29483 +43894 +43895 +43896 +1870 +3944 +43108 +155 +6439 +29628 +41890 +41890 +38 +21027 +33445 +19618 +155 +43897 +43347 +43898 +554 +23815 +41890 +19 +43899 +41890 +17151 +707 +43900 +43901 +43902 +1502 +18846 +43903 +43904 +28549 +43905 +115 +43906 +98 +3317 +1406 +37556 +40570 +1168 +16205 +43907 +42252 +43908 +41890 +533 +2919 +43909 +590 +13390 +43910 +41890 +41890 +43911 +26361 +41890 +19847 +89 +43912 +17911 +1364 +19 +43913 +43914 +3601 +13390 +46 +43915 +39709 +43916 +41890 +31168 +43917 +43918 +28317 +809 +57 +25943 +43919 +1453 +29381 +1011 +9 +43920 +1847 +354 +41890 +41890 +43921 +41890 +40570 +19206 +140 +2197 +43922 +5045 +16277 +43923 +19 +14962 +43924 +41919 +32646 +43362 +43925 +16413 +822 +4124 +19 +43926 +41890 +19 +1562 +2129 +25088 +41890 +10031 +43927 +2919 +43928 +43929 +41890 +10946 +33650 +41890 +176 +43550 +29204 +41890 +43930 +43931 +43932 +43933 +43934 +19 +41890 +155 +39588 +41890 +43935 +9 +41890 +9 +19582 +15824 +43936 +43937 +43938 +14477 +41890 +43939 +41890 +1502 +13228 +1172 +37556 +43940 +41919 +19 +43941 +43942 +730 +43 +43943 +1382 +20215 +28317 +25237 +6496 +43944 +40570 +43 +43945 +43946 +13721 +43947 +4288 +43948 +43949 +43950 +595 +6096 +41890 +41890 +42624 +43951 +41890 +554 +43952 +28845 +3432 +5188 +43338 +40570 +43953 +34402 +43954 +1090 +590 +958 +43955 +43956 +34903 +43957 +43958 +7658 +41890 +43959 +43960 +43961 +8685 +21973 +14477 +43962 +2787 +43963 +1615 +43964 +8668 +39709 +3601 +40570 +887 +24725 +41890 +3908 +43965 +31293 +4 +43 +315 +28845 +42483 +29381 +528 +15 +9497 +43966 +43967 +14660 +43968 +41890 +46 +43969 +43970 +1082 +4550 +24864 +41890 +554 +24864 +34402 +613 +16991 +41890 +40570 +20 +17151 +43971 +398 +25237 +1112 +40570 +1870 +31293 +590 +43972 +43973 +3491 +25973 +20677 +22804 +34402 +41890 +7522 +11751 +597 +43974 +40903 +2287 +31873 +19 +19655 +7379 +43975 +41890 +19 +14947 +19995 +43976 +5949 +15718 +37556 +40570 +185 +89 +43977 +24303 +43978 +2998 +43 +12553 +736 +23103 +12013 +43979 +42067 +4941 +41890 +20677 +30224 +43980 +1310 +1716 +14330 +43981 +43982 +29977 +31293 +34444 +18804 +29200 +43983 +2136 +41890 +2944 +41890 +736 +40591 +41890 +15718 +30224 +41890 +155 +41890 +41890 +43984 +41890 +21947 +43108 +43985 +736 +41890 +33627 +178 +41890 +5970 +43986 +43987 +15629 +41890 +43988 +540 +29483 +19 +43989 +43 +43990 +16437 +24324 +41890 +41890 +43991 +7053 +30972 +28845 +4301 +14887 +6272 +66 +43550 +43992 +28845 +29483 +43993 +358 +34 +4055 +7407 +41890 +179 +13405 +43994 +41919 +43995 +43996 +25 +43997 +43998 +43999 +31293 +28845 +44000 +377 +40570 +15 +44001 +44002 +2181 +37556 +2591 +4055 +44003 +41890 +24324 +41890 +44004 +13959 +22290 +41890 +41890 +17257 +677 +1680 +44005 +19 +5409 +40498 +1364 +22 +44006 +590 +4413 +44007 +28845 +44008 +29483 +2694 +44009 +20700 +41890 +43 +19 +44010 +28845 +41890 +44011 +44012 +46 +44013 +44014 +2770 +41890 +41687 +14527 +1820 +29387 +155 +41890 +554 +13390 +14504 +15461 +41890 +14869 +44015 +44016 +19579 +41890 +41890 +2728 +1605 +44017 +590 +4055 +40570 +1090 +43 +44018 +2577 +44019 +41919 +823 +44020 +44021 +1090 +2314 +41890 +6121 +21972 +40027 +155 +4174 +4055 +33141 +44022 +44023 +153 +43 +44024 +30224 +32696 +44025 +28772 +44026 +12875 +7379 +6480 +44027 +43550 +398 +44028 +28845 +12560 +14330 +10727 +12588 +44029 +33061 +28845 +44030 +11762 +590 +10614 +44031 +41890 +10946 +44032 +2029 +554 +44033 +24195 +20700 +41890 +44034 +44035 +44036 +44037 +9 +155 +9 +495 +44038 +34264 +30224 +40591 +20105 +3655 +46 +44039 +44040 +21947 +41919 +20304 +44041 +44042 +43442 +44043 +58 +12067 +1745 +104 +44044 +41890 +2804 +21947 +30224 +44045 +41890 +44046 +16 +155 +8357 +19020 +21669 +40570 +41890 +14369 +31150 +827 +44047 +44048 +41890 +44049 +44050 +495 +44051 +1021 +44052 +28845 +6612 +42000 +44053 +41890 +155 +40591 +6058 +44054 +8226 +25 +439 +12987 +41890 +44055 +41890 +228 +25624 +41890 +44056 +4055 +44057 +67 +41890 +7208 +44058 +10961 +43 +44059 +41890 +41890 +13897 +31168 +44060 +44061 +41890 +44062 +41890 +44063 +44064 +43990 +44065 +38033 +25237 +4364 +3844 +38235 +43 +10642 +1384 +44066 +21669 +2762 +44067 +44068 +19 +4426 +28295 +1688 +44069 +279 +751 +44070 +44071 +354 +25237 +5601 +44072 +33650 +38113 +42421 +37556 +140 +41890 +586 +41890 +44073 +24303 +44074 +13570 +5085 +44075 +1870 +44076 +41890 +44077 +1716 +4124 +1961 +44078 +30051 +19 +44079 +44080 +6726 +2577 +197 +41890 +44081 +9 +44082 +44083 +41890 +41890 +18327 +44084 +43 +721 +10147 +44085 +44086 +32 +44087 +13154 +2724 +44088 +10407 +955 +41890 +17143 +19 +41890 +1684 +35498 +44089 +286 +43 +44090 +41890 +590 +18742 +40570 +32 +274 +44091 +19 +44092 +9 +44093 +44094 +44095 +41890 +274 +22 +345 +44096 +590 +41890 +31293 +6728 +44097 +21947 +1011 +286 +40570 +41890 +34402 +44098 +44099 +40570 +42483 +1172 +44100 +44101 +44102 +155 +19 +44103 +35260 +44104 +44105 +9674 +41890 +14404 +30724 +42406 +13721 +40570 +29204 +25237 +2043 +20374 +13539 +41890 +44106 +17 +29381 +21947 +41890 +44107 +9 +28845 +1779 +44108 +44109 +44110 +41687 +41890 +44111 +590 +613 +43 +31293 +41890 +25237 +30580 +44112 +44113 +13390 +20941 +43347 +41890 +13721 +41890 +66 +44114 +20339 +34025 +44115 +37556 +41890 +35832 +39911 +44116 +24864 +41890 +9 +3050 +41890 +25316 +2009 +44117 +44118 +40658 +22512 +104 +15 +41890 +40570 +446 +44119 +34402 +44120 +14369 +44121 +6251 +44122 +3553 +1189 +44123 +34402 +2314 +44124 +915 +39536 +44125 +10946 +4 +44126 +41890 +19398 +43651 +10313 +46 +41890 +15104 +19618 +1817 +44127 +44128 +57 +40570 +21669 +13390 +703 +20 +24324 +44129 +57 +590 +42416 +41890 +15914 +30224 +44130 +44131 +2999 +31852 +44132 +23814 +44133 +590 +349 +9163 +209 +887 +44134 +795 +44135 +3546 +155 +1224 +44136 +44137 +1364 +4547 +317 +399 +14477 +40570 +1090 +5085 +41890 +44138 +44139 +149 +24410 +44140 +2764 +13390 +30224 +44141 +44142 +44143 +14013 +21947 +16 +16413 +14342 +31293 +44144 +9 +44145 +44146 +44147 +15718 +20443 +57 +44148 +43 +2029 +44149 +21947 +9 +44150 +20600 +44151 +44152 +34402 +1508 +29483 +21947 +29381 +44153 +17320 +1011 +590 +23150 +377 +155 +1090 +33650 +44154 +1562 +595 +40570 +44155 +24324 +44156 +590 +24454 +24664 +176 +44157 +665 +44158 +11647 +872 +8721 +1743 +590 +41890 +41890 +736 +44159 +44160 +989 +2253 +19618 +41890 +44161 +44162 +2488 +671 +10 +44163 +16437 +17911 +12214 +590 +4387 +43550 +31293 +60 +44164 +3323 +21947 +155 +41919 +590 +44165 +1508 +44166 +25237 +155 +44167 +44168 +1956 +13390 +44169 +41890 +823 +20 +41890 +44170 +43 +44171 +14 +19576 +770 +44172 +21947 +1716 +44173 +44174 +44175 +32 +44176 +3417 +44177 +6095 +4403 +185 +14369 +590 +41890 +9922 +1648 +44178 +5925 +358 +16024 +552 +41890 +44179 +44180 +352 +28845 +43550 +5990 +2410 +44181 +18982 +349 +44182 +845 +1013 +25140 +41890 +44183 +44184 +4 +21227 +2410 +44185 +15718 +1716 +44186 +44187 +44188 +11263 +44189 +41890 +10482 +44190 +44191 +155 +40591 +27719 +41890 +1710 +44192 +44193 +43 +44194 +41890 +13721 +10946 +14947 +541 +6218 +41728 +20 +44195 +44196 +44197 +416 +44198 +41890 +44199 +25316 +43365 +31873 +4293 +46 +24102 +16437 +44200 +41890 +29628 +142 +44201 +40570 +24058 +44202 +29483 +44203 +14869 +44204 +41890 +44205 +44206 +40996 +590 +44207 +40570 +44208 +41890 +2649 +5662 +155 +46 +140 +44209 +43005 +19451 +43 +44210 +910 +44211 +44212 +2804 +15 +42421 +28845 +9435 +1606 +9 +25316 +44213 +18176 +44214 +28480 +44215 +821 +5865 +9 +44216 +5627 +138 +14477 +21947 +35318 +20823 +363 +37556 +44217 +40570 +9 +707 +3422 +9 +39295 +44218 +66 +44219 +28845 +44220 +22124 +21947 +6847 +19 +44221 +44222 +44223 +1090 +18711 +44224 +155 +40570 +179 +44225 +44226 +12 +15993 +44227 +44228 +590 +22 +4965 +44229 +44230 +44231 +44232 +44233 +590 +5169 +21947 +12000 +44234 +23103 +665 +44235 +44236 +41890 +44237 +29007 +1559 +1051 +6207 +2476 +44238 +1090 +2260 +7553 +12321 +44239 +44240 +41890 +16437 +44241 +18798 +44242 +43550 +3844 +40570 +41075 +283 +7896 +1991 +44243 +9682 +115 +19 +44244 +44245 +2728 +887 +1889 +3484 +44246 +44247 +44248 +44249 +44250 +44251 +15 +44252 +31293 +44253 +11192 +19 +576 +44254 +25943 +44255 +44256 +14477 +44257 +40570 +590 +46 +317 +13150 +44258 +1786 +17635 +30224 +25555 +19794 +44259 +44260 +44261 +44262 +44263 +77 +44264 +9 +2672 +44265 +44266 +38461 +44267 +15997 +44268 +2591 +28549 +44269 +14660 +40012 +3626 +44270 +31098 +40570 +15989 +1090 +40570 +41434 +31293 +915 +44271 +44272 +554 +44273 +155 +19 +3291 +44274 +44275 +43 +44276 +44277 +36736 +44278 +42746 +44279 +8826 +9967 +41660 +44280 +861 +5803 +5601 +44281 +1090 +40570 +357 +30224 +17932 +19 +44282 +41890 +27293 +44283 +7048 +44284 +25237 +11963 +44285 +21669 +590 +44286 +44211 +484 +25237 +44287 +99 +40570 +155 +24725 +1364 +30551 +28031 +17048 +44288 +44289 +44290 +44291 +21669 +44292 +18045 +22850 +31293 +38021 +44293 +40591 +40570 +44294 +38308 +38033 +19 +28845 +155 +25 +590 +44295 +44296 +9 +44297 +27855 +44298 +43290 +44299 +25943 +40570 +27669 +44300 +228 +40570 +1090 +590 +286 +4055 +44301 +4033 +44302 +495 +14477 +44303 +12377 +16437 +42483 +28845 +8548 +345 +36735 +16281 +10960 +40570 +1090 +590 +345 +44304 +32105 +28845 +44305 +12255 +43550 +18627 +25237 +57 +827 +29483 +44306 +44307 +1295 +40570 +1090 +5780 +40570 +44308 +32 +44309 +15718 +44249 +155 +22317 +24144 +13803 +29204 +44310 +25683 +19 +823 +44311 +34602 +14369 +30051 +41890 +19167 +41890 +44312 +44313 +44314 +44315 +1991 +9 +44316 +44317 +44318 +44319 +155 +29424 +19 +3252 +44320 +259 +44321 +41890 +24303 +44322 +41890 +4432 +40570 +25584 +44323 +14852 +155 +44324 +44325 +43848 +29483 +21947 +30877 +4299 +1812 +32 +1316 +155 +22234 +8616 +89 +31400 +34337 +25683 +36218 +15 +38758 +44326 +155 +44327 +44328 +44329 +44330 +4856 +41890 +40893 +770 +155 +36268 +44331 +519 +26744 +590 +27669 +44332 +37556 +15 +44333 +41890 +44334 +1385 +40570 +41890 +44335 +286 +23585 +41890 +46 +32 +44336 +44337 +36735 +2136 +1310 +44338 +873 +2514 +29628 +21669 +44339 +44340 +89 +22065 +44341 +1559 +44342 +44343 +1247 +3343 +15498 +11472 +720 +19 +44344 +44345 +38465 +5780 +2043 +41890 +9 +14330 +8670 +44346 +25683 +22463 +44347 +15 +44348 +44349 +10117 +1514 +2410 +4693 +44350 +20514 +44351 +3484 +11762 +15 +5071 +24207 +44352 +7835 +29956 +1224 +29629 +23853 +44353 +44354 +21947 +5409 +11321 +514 +40570 +28961 +44355 +4684 +1100 +590 +18054 +12722 +44356 +18310 +446 +20781 +44357 +2694 +37556 +3328 +42483 +18310 +44358 +25943 +31293 +40570 +18453 +29628 +44359 +15718 +2865 +33295 +44360 +19 +66 +33380 +44361 +9 +415 +1559 +43 +99 +43550 +40570 +37556 +44362 +44363 +1385 +12987 +41890 +40990 +44364 +44342 +44365 +43 +42746 +46 +44366 +44367 +34402 +21689 +44368 +15 +279 +590 +23593 +18120 +14001 +9 +40570 +12151 +44369 +44370 +28845 +155 +155 +28295 +44371 +41890 +19 +15 +19837 +597 +13361 +58 +705 +44372 +44373 +41890 +34402 +31168 +415 +15718 +590 +936 +44374 +29483 +20280 +17911 +1520 +44375 +8668 +379 +40251 +44376 +34951 +33627 +44377 +9337 +23368 +3638 +33693 +34944 +9900 +16437 +590 +30224 +44378 +29483 +9 +5627 +44379 +41890 +44380 +44381 +2622 +34364 +44382 +2260 +44383 +24864 +44384 +17782 +44385 +3858 +764 +20052 +40073 +24207 +7353 +41890 +14660 +44386 +22570 +2804 +2724 +41919 +44387 +44388 +9095 +32275 +19 +77 +574 +15471 +44389 +7743 +185 +8668 +44390 +44391 +15718 +2865 +44392 +155 +44393 +13390 +31293 +20 +44394 +533 +14276 +44395 +44396 +44397 +12047 +44398 +44399 +44400 +44401 +42390 +15018 +2449 +44402 +1536 +36461 +44403 +15718 +44404 +40570 +44405 +1011 +33141 +44406 +24864 +44407 +30650 +44408 +23103 +44409 +44249 +44410 +22154 +13139 +12191 +44411 +40143 +41890 +44412 +44413 +43939 +41890 +31293 +1330 +44414 +155 +155 +33693 +44415 +44249 +38179 +41890 +2015 +44416 +19 +44417 +2832 +1720 +44418 +5769 +44419 +5409 +9662 +5780 +3317 +44420 +29400 +44421 +41890 +25584 +44422 +44423 +155 +178 +19 +339 +44424 +44425 +155 +6766 +39709 +44426 +44427 +44428 +39 +590 +6364 +37355 +44429 +44430 +40570 +30224 +1961 +44431 +736 +44432 +27798 +89 +1961 +514 +412 +3330 +31293 +5601 +44433 +8005 +44434 +21947 +590 +44435 +17507 +32410 +736 +33627 +44436 +44437 +28845 +44438 +2832 +19 +44439 +44440 +13570 +21947 +14477 +43 +155 +44441 +14017 +16074 +9 +44442 +44443 +25 +44444 +44445 +40570 +44446 +9567 +15384 +44447 +26585 +8668 +19 +44448 +44449 +21045 +42483 +42421 +155 +2601 +17 +44450 +9440 +19 +44451 +831 +40570 +17790 +40570 +16437 +12987 +28845 +44452 +44453 +44454 +495 +39783 +20113 +42962 +37556 +9 +44455 +480 +14369 +44456 +19 +19655 +677 +29483 +2314 +15824 +44457 +736 +44458 +19 +44459 +30224 +44460 +35656 +16466 +4518 +21276 +25829 +4502 +44461 +44462 +6620 +44463 +44464 +44465 +14770 +165 +44466 +19 +736 +142 +23670 +590 +554 +41567 +28845 +41919 +892 +44467 +44468 +34319 +44469 +44470 +9 +2287 +12987 +28212 +140 +40570 +24864 +44471 +44472 +701 +694 +1021 +43998 +35224 +1208 +14369 +23477 +44473 +41265 +44474 +44475 +44476 +38937 +12987 +2287 +41567 +3509 +19618 +41890 +17247 +31293 +19 +31098 +44477 +44478 +9 +4055 +286 +4055 +44479 +4463 +713 +44480 +16839 +44481 +44482 +20 +17 +6217 +10946 +11995 +24303 +44483 +44484 +21947 +1716 +44485 +21947 +1364 +4055 +14102 +790 +736 +44486 +44487 +317 +44488 +9 +17911 +155 +44489 +44490 +1901 +44491 +44492 +44493 +7313 +31293 +25983 +44494 +44495 +21089 +38465 +5085 +1561 +2410 +11621 +31293 +44496 +44497 +3759 +44358 +31168 +44498 +44328 +402 +20 +31293 +44499 +44500 +40472 +23103 +28845 +36737 +44501 +597 +42237 +44502 +44503 +44504 +43280 +4055 +44505 +7522 +40570 +28961 +25237 +349 +317 +7964 +34181 +44506 +44507 +373 +2537 +9543 +17691 +31293 +21947 +39593 +415 +5912 +197 +44508 +554 +40570 +352 +22990 +29200 +25683 +9020 +28317 +14330 +590 +44509 +377 +2009 +3874 +36735 +541 +5963 +18751 +13390 +650 +19655 +38033 +345 +44510 +37232 +1710 +37588 +19 +44511 +3598 +44512 +155 +44513 +44514 +41890 +17911 +28845 +44515 +44516 +44517 +44518 +9060 +24324 +21689 +43 +44519 +18169 +44520 +44521 +2537 +99 +44522 +44523 +703 +44524 +140 +25 +2347 +1442 +14477 +4055 +44525 +22684 +39520 +13390 +44526 +44527 +31293 +1047 +15718 +25620 +19618 +36735 +40570 +37808 +40289 +18919 +2460 +44528 +26081 +40311 +44529 +1157 +29047 +44530 +44531 +1900 +44532 +41919 +66 +14477 +44533 +44534 +15718 +44535 +39410 +345 +19 +14660 +44536 +44537 +38550 +44538 +44539 +19655 +568 +13255 +209 +44540 +1090 +44541 +43 +89 +41919 +17911 +272 +10982 +9 +24896 +44542 +16707 +2314 +9 +44543 +30209 +15718 +43 +43 +23103 +44544 +13848 +14369 +44545 +28845 +44546 +354 +40570 +14477 +31293 +262 +58 +1684 +41919 +14369 +19 +44547 +6130 +3105 +21563 +26544 +7835 +10639 +44548 +44549 +44550 +3514 +40605 +3119 +44551 +18310 +44552 +12548 +25237 +155 +41117 +19 +44553 +44554 +44555 +43 +44556 +43108 +43550 +44557 +44558 +44559 +44560 +3995 +2356 +155 +44249 +18553 +590 +21045 +3732 +43651 +44561 +24896 +24303 +29381 +44562 +44563 +44564 +2476 +26680 +44565 +44566 +43 +9 +574 +12671 +36218 +30224 +44567 +44568 +14660 +34 +14079 +44569 +284 +303 +34032 +44570 +7516 +736 +37556 +1090 +20533 +751 +44571 +44572 +40570 +44573 +38596 +40570 +44574 +9460 +19618 +284 +25316 +44575 +40570 +3353 +5660 +44576 +24303 +44176 +28036 +7455 +40570 +213 +43 +46 +44577 +44578 +44579 +284 +3759 +5188 +28845 +34703 +44580 +44581 +44582 +30041 +44583 +44584 +28845 +89 +27669 +44585 +32644 +7053 +303 +44586 +44587 +20110 +43 +32 +28845 +25237 +595 +225 +5601 +337 +41919 +286 +27754 +1011 +7516 +823 +20458 +616 +6877 +28036 +213 +19 +213 +44588 +1912 +11286 +23528 +41868 +33650 +58 +43347 +2591 +44589 +12402 +44590 +213 +284 +248 +349 +44591 +201 +213 +44592 +19 +248 +31293 +303 +337 +286 +893 +18310 +14174 +15718 +694 +29483 +379 +303 +44593 +40570 +44594 +28845 +44595 +337 +284 +44596 +44597 +29757 +44598 +411 +44599 +19947 +44600 +18045 +44601 +4002 +44602 +44603 +8683 +44604 +337 +18951 +25237 +89 +284 +30230 +33650 +44605 +44606 +44607 +44608 +248 +44609 +44610 +18934 +16798 +14216 +955 +44611 +44612 +13576 +43550 +17872 +44613 +40570 +303 +44614 +11754 +2 +29483 +337 +44249 +713 +14660 +44615 +31650 +13543 +44616 +2356 +415 +44617 +25316 +19 +213 +12397 +44618 +9367 +31293 +44619 +6595 +23103 +9 +21947 +44620 +44621 +8362 +2762 +5085 +37556 +155 +44622 +20401 +21947 +27719 +43 +142 +44623 +28845 +44624 +1443 +1090 +16166 +36019 +19 +26452 +669 +44625 +44626 +736 +44627 +1021 +17810 +25316 +44537 +44628 +1247 +9217 +25935 +44629 +317 +77 +43 +22922 +259 +44630 +248 +15718 +7835 +44631 +30224 +44632 +44633 +43 +44634 +19 +16826 +44635 +44636 +44637 +31293 +2117 +736 +43 +37556 +40570 +40570 +44638 +303 +44639 +44640 +44641 +2577 +14363 +8849 +44642 +44643 +44644 +44645 +44646 +24864 +1481 +317 +14342 +736 +8732 +44647 +44648 +44649 +44650 +105 +44651 +41890 +397 +28845 +40570 +44652 +9 +155 +154 From ae784ebff963cb41ad1b7cdfc20630a30531bc6d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 7 Oct 2016 10:09:54 -0400 Subject: [PATCH 046/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.10 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 65d6754..26b41dc 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.10-SNAPSHOT + 0.1.10 jar 1.6 From 044cd07d46f41e90747e687a90677aa19ec8aea3 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 7 Oct 2016 10:09:57 -0400 Subject: [PATCH 047/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 26b41dc..1ac9188 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.10 + 0.1.11-SNAPSHOT jar 1.6 From d8579079b1e38e46324e88b19cdae5336fa8a5a6 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 7 Oct 2016 10:14:17 -0400 Subject: [PATCH 048/170] Trimming imports. --- .../me/lemire/integercompression/ResourcedTest.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/test/java/me/lemire/integercompression/ResourcedTest.java b/src/test/java/me/lemire/integercompression/ResourcedTest.java index b4cb5aa..61b8e58 100644 --- a/src/test/java/me/lemire/integercompression/ResourcedTest.java +++ b/src/test/java/me/lemire/integercompression/ResourcedTest.java @@ -1,25 +1,14 @@ package me.lemire.integercompression; import java.util.ArrayList; -import java.util.Arrays; - -import me.lemire.integercompression.differential.Delta; -import me.lemire.integercompression.differential.IntegratedBinaryPacking; -import me.lemire.integercompression.differential.IntegratedByteIntegerCODEC; -import me.lemire.integercompression.differential.IntegratedComposition; import me.lemire.integercompression.differential.IntegratedIntCompressor; -import me.lemire.integercompression.differential.IntegratedIntegerCODEC; -import me.lemire.integercompression.differential.IntegratedVariableByte; import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC; -import me.lemire.integercompression.differential.XorBinaryPacking; import java.io.BufferedReader; import java.io.File; import org.junit.Assert; import java.io.FileReader; import java.io.IOException; -import java.nio.file.*; -import java.util.stream.Stream; import org.junit.Test; From 8daf7e73b170d6af560a0cd00b18938d54eb8a93 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 25 Oct 2016 17:11:53 -0400 Subject: [PATCH 049/170] minor update --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index bc7a4aa..1f9c2e7 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,8 @@ Really simple usage: For more examples, see example.java or the examples folder. +JavaFastPFOR supports compressing and uncompressing data in chunks (e.g., see ``advancedExample`` in [https://github.com/lemire/JavaFastPFOR/blob/master/example.java#L185-L190](example.java)). + Some CODECs ("integrated codecs") assume that the integers are in sorted orders and use differential coding (they compress deltas). They can be found in the package me.lemire.integercompression.differential. From 1f00b8028b6bb022cde3a8720e7ba503b03d764f Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 25 Oct 2016 17:13:52 -0400 Subject: [PATCH 050/170] removing line marker --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f9c2e7..98b5a0d 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Really simple usage: For more examples, see example.java or the examples folder. -JavaFastPFOR supports compressing and uncompressing data in chunks (e.g., see ``advancedExample`` in [https://github.com/lemire/JavaFastPFOR/blob/master/example.java#L185-L190](example.java)). +JavaFastPFOR supports compressing and uncompressing data in chunks (e.g., see ``advancedExample`` in [https://github.com/lemire/JavaFastPFOR/blob/master/example.java](example.java)). Some CODECs ("integrated codecs") assume that the integers are in sorted orders and use differential coding (they compress deltas). From 80d95b4413c88f41c4365505c6b8eaddc682692d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 19 Dec 2016 09:09:04 -0500 Subject: [PATCH 051/170] Upgrading jacoco --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ac9188..7177854 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,7 @@ org.jacoco jacoco-maven-plugin - 0.7.6.201602180812 + 0.7.8 com/kamikaze/pfordelta/* From 5846d86f72b1fb6bb97b7f8e405892e13095c497 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 21 Dec 2016 14:06:34 -0500 Subject: [PATCH 052/170] https://github.com/lemire/JavaFastPFOR/issues/38#issuecomment-268606648 --- src/main/java/me/lemire/integercompression/FastPFOR.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index bc9cbec..d31a4da 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -14,7 +14,7 @@ * This is a patching scheme designed for speed. * It encodes integers in blocks of integers within pages of * up to 65536 integers. Note that it is important, to get good - * compression and good performance, to use sizeable blocks (greater than 1024 integers). + * compression and good performance, to use sizeable arrays (greater than 1024 integers). * For arrays containing a number of integers that is not divisible by BLOCK_SIZE, you should use * it in conjunction with another CODEC: * From 32cb776ee66b13f0ee5f7a1cec1f3118875dd917 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 25 Jan 2017 16:54:11 -0500 Subject: [PATCH 053/170] Link to Pinot --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 98b5a0d..02b0fb8 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ This library can decompress integers at a rate of over 1.2 billions per second (4.5 GB/s). It is significantly faster than generic codecs (such as Snappy, LZ4 and so on) when compressing arrays of integers. +The library is used in [LinkedIn Pinot](https://github.com/linkedin/pinot), a realtime distributed OLAP datastore. Part of this library has been integrated in Parquet (http://parquet.io/). A modified version of the library is included in the search engine Terrier (http://terrier.org/). This libary is used by ClueWeb From 35fdd7249648ecae32140276fc73bd6ac33fe6ec Mon Sep 17 00:00:00 2001 From: Balz Date: Sun, 2 Apr 2017 16:44:27 -0700 Subject: [PATCH 054/170] Make direct buffer allocation optional This is a minor refactoring of all codecs that directly allocate Java `ByteBuffers`: instead of making a direct call to `ByteBuffer#allocate()`, the codec invokes a protected method `makeBuffer(size)`. This allows a user to subclass the codec and override the method to customize the buffer allocation. In particular, this enables users to use heap-buffers and/or buffer pooling. The latter is essential for reducing memory churn. In a JVM benchmark (not included) on some real-world data, this refactoring did not decrease performance. (Notice that dropping `final` from some classes does not stop the JVM from inlining, such as in [monomorphic callsites](https://shipilev.net/blog/2015/black-magic-method-dispatch/).) --- .../DeltaZigzagVariableByte.java | 15 +++++++++++++-- .../me/lemire/integercompression/FastPFOR.java | 15 +++++++++++++-- .../me/lemire/integercompression/FastPFOR128.java | 15 +++++++++++++-- .../lemire/integercompression/VariableByte.java | 12 +++++++++++- .../differential/IntegratedVariableByte.java | 14 ++++++++++++-- 5 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java b/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java index 1988d47..4b2f896 100644 --- a/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java +++ b/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java @@ -13,7 +13,7 @@ * * @author MURAOKA Taro http://github.com/koron */ -public final class DeltaZigzagVariableByte implements IntegerCODEC { +public class DeltaZigzagVariableByte implements IntegerCODEC { @Override public String toString() { @@ -27,7 +27,7 @@ public void compress(int[] inBuf, IntWrapper inPos, int inLen, return; } - ByteBuffer byteBuf = ByteBuffer.allocateDirect(inLen * 5 + 3); + ByteBuffer byteBuf = makeBuffer(inLen * 5 + 3); DeltaZigzagEncoding.Encoder ctx = new DeltaZigzagEncoding.Encoder(0); // Delta+Zigzag+VariableByte encoding. @@ -127,4 +127,15 @@ public void uncompress(int[] inBuf, IntWrapper inPos, int inLen, outPos.set(op); inPos.set(inPosLast); } + + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this method + * with a custom behavior. The default implementation allocates a new Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } } diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index d31a4da..36226c0 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -38,7 +38,7 @@ * * @author Daniel Lemire */ -public final class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { +public class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { final static int OVERHEAD_OF_EACH_EXCEPT = 8; /** * @@ -68,7 +68,7 @@ public final class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { private FastPFOR(int pagesize) { pageSize = pagesize; // Initiate arrrays. - byteContainer = ByteBuffer.allocateDirect(3 * pageSize + byteContainer = makeBuffer(3 * pageSize / BLOCK_SIZE + pageSize); byteContainer.order(ByteOrder.LITTLE_ENDIAN); for (int k = 1; k < dataTobePacked.length; ++k) @@ -329,4 +329,15 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, public String toString() { return this.getClass().getSimpleName(); } + + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this method + * with a custom behavior. The default implementation allocates a new Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } } diff --git a/src/main/java/me/lemire/integercompression/FastPFOR128.java b/src/main/java/me/lemire/integercompression/FastPFOR128.java index c1efa94..b124072 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR128.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR128.java @@ -21,7 +21,7 @@ * * @author Daniel Lemire */ -public final class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC { +public class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC { final static int OVERHEAD_OF_EACH_EXCEPT = 8; /** * @@ -50,7 +50,7 @@ public final class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC { public FastPFOR128(int pagesize) { pageSize = pagesize; // Initiate arrrays. - byteContainer = ByteBuffer.allocateDirect(3 * pageSize + byteContainer = makeBuffer(3 * pageSize / BLOCK_SIZE + pageSize); byteContainer.order(ByteOrder.LITTLE_ENDIAN); for (int k = 1; k < dataTobePacked.length; ++k) @@ -310,4 +310,15 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, public String toString() { return this.getClass().getSimpleName(); } + + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this method + * with a custom behavior. The default implementation allocates a new Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } } diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index 8e3ce12..5b25c43 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -39,7 +39,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out IntWrapper outpos) { if (inlength == 0) return; - ByteBuffer buf = ByteBuffer.allocateDirect(inlength * 8); + ByteBuffer buf = makeBuffer(inlength * 8); buf.order(ByteOrder.LITTLE_ENDIAN); for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { final long val = in[k] & 0xFFFFFFFFL; // To be consistent with @@ -202,4 +202,14 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o inpos.set(p + (s!=0 ? 1 : 0)); } + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this method + * with a custom behavior. The default implementation allocates a new Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } } diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java index 4352ebb..626954c 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java @@ -38,7 +38,7 @@ public void compress(int[] in, IntWrapper inpos, int inlength, if (inlength == 0) return; int initoffset = 0; - ByteBuffer buf = ByteBuffer.allocateDirect(inlength * 8); + ByteBuffer buf = makeBuffer(inlength * 8); buf.order(ByteOrder.LITTLE_ENDIAN); for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { final long val = (in[k] - initoffset) & 0xFFFFFFFFL; // To be consistent with unsigned integers in C/C++ @@ -187,7 +187,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, return; int initoffset = initvalue.get(); initvalue.set(in[inpos.get()+inlength -1]); - ByteBuffer buf = ByteBuffer.allocateDirect(inlength * 8); + ByteBuffer buf = makeBuffer(inlength * 8); buf.order(ByteOrder.LITTLE_ENDIAN); for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { final long val = (in[k] - initoffset) & 0xFFFFFFFFL; // To be consistent with unsigned integers in C/C++ @@ -253,4 +253,14 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, inpos.set(p + (s!=0 ? 1 : 0)); } + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this method + * with a custom behavior. The default implementation allocates a new Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } } From d5bb308849f4d4bcd2f2a3860bc37c552e2573bc Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 3 Apr 2017 10:57:33 -0400 Subject: [PATCH 055/170] Excluding kamikaze from coverage --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 7177854..8a7e83f 100644 --- a/pom.xml +++ b/pom.xml @@ -132,6 +132,7 @@ 0.7.8 + me/lemire/integercompression/Kamikaze com/kamikaze/pfordelta/* me/lemire/integercompression/benchmarktools/* From 1bee071241ba89684555840ab248ff2b50054604 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 3 Apr 2017 11:10:28 -0400 Subject: [PATCH 056/170] Adding GroupSimple9 to tests. --- src/test/java/me/lemire/integercompression/BasicTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java index cbdb60e..e88293e 100644 --- a/src/test/java/me/lemire/integercompression/BasicTest.java +++ b/src/test/java/me/lemire/integercompression/BasicTest.java @@ -27,6 +27,7 @@ public class BasicTest { new IntegratedVariableByte()), new JustCopy(), new VariableByte(), + new GroupSimple9(), new IntegratedVariableByte(), new Composition(new BinaryPacking(), new VariableByte()), new Composition(new NewPFD(), new VariableByte()), From 8b60b5d0ac6e8a75e2f727e03e198649273f79aa Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 3 Apr 2017 11:14:50 -0400 Subject: [PATCH 057/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.11 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8a7e83f..1734447 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.11-SNAPSHOT + 0.1.11 jar 1.6 From 3d46796f4eecaa984e66e05b13b327193e99e575 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 3 Apr 2017 11:14:55 -0400 Subject: [PATCH 058/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1734447..52dc4ca 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.11 + 0.1.12-SNAPSHOT jar 1.6 From 41b06d84995c1eb508b28ec27e56f7ce321fc51b Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 14 Aug 2017 16:13:57 -0400 Subject: [PATCH 059/170] Removing Oracle JDK 7 --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 49ed971..cdccaf3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: java jdk: - - oraclejdk7 - oraclejdk8 install: true From 403cb6344ea6a112c814980beba04d6659d34bf7 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 22 Aug 2017 20:18:53 -0400 Subject: [PATCH 060/170] adding ref --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02b0fb8..58adcd1 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ A modified version of the library is included in the search engine Terrier (http://terrier.org/). This libary is used by ClueWeb Tools (https://github.com/lintool/clueweb). -This library inspired a compression scheme used by Apache Lucene (e.g., see +This library inspired a compression scheme used by Apache Lucene and Apache Lucene.NET (e.g., see http://lucene.apache.org/core/4_6_1/core/org/apache/lucene/util/PForDeltaDocIdSet.html ). It is a java port of the fastpfor C++ library (https://github.com/lemire/FastPFor). From 0710f3a1f9ed7509eddd752878e272e7bfca4345 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 22 Aug 2017 20:26:51 -0400 Subject: [PATCH 061/170] adding ref --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 58adcd1..90ec5ce 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ The library is used in [LinkedIn Pinot](https://github.com/linkedin/pinot), a re Part of this library has been integrated in Parquet (http://parquet.io/). A modified version of the library is included in the search engine Terrier (http://terrier.org/). This libary is used by ClueWeb -Tools (https://github.com/lintool/clueweb). +Tools (https://github.com/lintool/clueweb). It is also used by [Apache NiFi](https://nifi.apache.org). This library inspired a compression scheme used by Apache Lucene and Apache Lucene.NET (e.g., see http://lucene.apache.org/core/4_6_1/core/org/apache/lucene/util/PForDeltaDocIdSet.html ). From b8fabb548a640e87e5841dd1bb1d1be84aaafc35 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 27 Sep 2017 12:04:42 -0400 Subject: [PATCH 062/170] ref --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 90ec5ce..b0d4f8e 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,8 @@ http://dx.doi.org/10.1007/978-3-319-06028-6_30 We wrote several research papers documenting many of the CODECs implemented here: -* Daniel Lemire, Leonid Boytsov, Nathan Kurz, SIMD Compression and the Intersection of Sorted Integers, Software Practice & Experience (to appear) http://arxiv.org/abs/1401.6399 +* Daniel Lemire, Nathan Kurz, Christoph Rupp, Stream VByte: Faster Byte-Oriented Integer Compression, Information Processing Letters (to appear) https://arxiv.org/abs/1709.08990 +* Daniel Lemire, Leonid Boytsov, Nathan Kurz, SIMD Compression and the Intersection of Sorted Integers, Software Practice & Experience Volume 46, Issue 6, pages 723-749, June 2016 http://arxiv.org/abs/1401.6399 * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second through vectorization, Software Practice & Experience 45 (1), 2015. http://arxiv.org/abs/1209.2137 http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract * Jeff Plaisance, Nathan Kurz, Daniel Lemire, Vectorized VByte Decoding, International Symposium on Web Algorithms 2015, 2015. http://arxiv.org/abs/1503.07387 * Wayne Xin Zhao, Xudong Zhang, Daniel Lemire, Dongdong Shan, Jian-Yun Nie, Hongfei Yan, Ji-Rong Wen, A General SIMD-based Approach to Accelerating Compression Algorithms, ACM Transactions on Information Systems 33 (3), 2015. http://arxiv.org/abs/1502.01916 From 65d968259bdb1ef67069731dbc1ec77e2b171819 Mon Sep 17 00:00:00 2001 From: Bright Fulton Date: Sun, 12 Nov 2017 15:58:58 -0500 Subject: [PATCH 063/170] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0d4f8e..acaaf83 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ We found no library that implemented state-of-the-art integer coding techniques such as Binary Packing, NewPFD, OptPFD, Variable Byte, Simple 9 and so on in Java. We wrote one. -Thread safery +Thread safety ---- Some codecs are thread-safe while others are not. From 2f28fc110cf9cc3de01710aa4550d3fa905f9c6d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 13 Dec 2017 10:22:08 -0500 Subject: [PATCH 064/170] Adding jdk9... --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index cdccaf3..427b879 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: java jdk: - oraclejdk8 + - oraclejdk9 install: true From 9492f7d77970a96663180a4cb1dcadfc13f7c094 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 9 Apr 2018 11:23:48 -0400 Subject: [PATCH 065/170] Fix for https://github.com/lemire/JavaFastPFOR/issues/41 --- .../SkippableComposition.java | 8 ++ .../differential/IntegratedBinaryPacking.java | 2 + .../differential/IntegratedVariableByte.java | 6 +- .../SkippableIntegratedComposition.java | 10 ++- .../lemire/integercompression/AdhocTest.java | 79 ++++++++++++++++++- 5 files changed, 100 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/SkippableComposition.java b/src/main/java/me/lemire/integercompression/SkippableComposition.java index ed0f0de..a235c47 100644 --- a/src/main/java/me/lemire/integercompression/SkippableComposition.java +++ b/src/main/java/me/lemire/integercompression/SkippableComposition.java @@ -38,7 +38,12 @@ public SkippableComposition(SkippableIntegerCODEC f1, public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { int init = inpos.get(); + int outposInit = outpos.get(); F1.headlessCompress(in, inpos, inlength, out, outpos); + if (outpos.get() == outposInit) { + out[outposInit] = 0; + outpos.increment(); + } inlength -= inpos.get() - init; F2.headlessCompress(in, inpos, inlength, out, outpos); } @@ -48,6 +53,9 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o IntWrapper outpos, int num) { int init = inpos.get(); F1.headlessUncompress(in, inpos, inlength, out, outpos, num); + if (inpos.get() == init) { + inpos.increment(); + } inlength -= inpos.get() - init; num -= outpos.get(); F2.headlessUncompress(in, inpos, inlength, out, outpos, num); diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java index 0dd2a96..7e1c161 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java @@ -7,6 +7,7 @@ package me.lemire.integercompression.differential; +import me.lemire.integercompression.BitPacking; import me.lemire.integercompression.IntWrapper; import me.lemire.integercompression.Util; @@ -83,6 +84,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, if (inlength == 0) return; int tmpoutpos = outpos.get(); + int initoffset = initvalue.get(); initvalue.set(in[inpos.get()+inlength -1]); int s = inpos.get(); diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java index 626954c..918a900 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java @@ -229,18 +229,22 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num, IntWrapper initvalue) { int s = 0; int val = 0; + int p = inpos.get(); int initoffset = initvalue.get(); int tmpoutpos = outpos.get(); int finaloutpos = num + tmpoutpos; for (int v = 0, shift = 0; tmpoutpos < finaloutpos;) { + val = in[p]; - int c = val >>> s; + int c = (byte) (val >>> s); s += 8; p += s>>5; s = s & 31; v += ((c & 127) << shift); + if ((c & 128) == 128) { + out[tmpoutpos++] = (initoffset = initoffset + v); v = 0; shift = 0; diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java index 2dd79a4..09c4dd8 100644 --- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java +++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java @@ -49,9 +49,11 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, if (inlength == 0) return; final int init = inpos.get(); + int outposInit = outpos.get(); + F1.headlessCompress(in, inpos, inlength, out, outpos, initvalue); - if (outpos.get() == 0) { - out[0] = 0; + if (outpos.get() == outposInit) { + out[outposInit] = 0; outpos.increment(); } inlength -= inpos.get() - init; @@ -65,7 +67,11 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, return; int init = inpos.get(); F1.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue); + if (inpos.get() == init) { + inpos.increment(); + } inlength -= inpos.get() - init; + num -= outpos.get(); F2.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue); } diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java index 5195fef..bced6c0 100644 --- a/src/test/java/me/lemire/integercompression/AdhocTest.java +++ b/src/test/java/me/lemire/integercompression/AdhocTest.java @@ -1,15 +1,90 @@ package me.lemire.integercompression; +import org.junit.Assert; import org.junit.Test; + +import me.lemire.integercompression.differential.*; + import static me.lemire.integercompression.TestUtils.*; +import java.util.Arrays; + /** * Collection of adhoc tests. */ @SuppressWarnings({ "static-method" }) -public class AdhocTest -{ +public class AdhocTest { + + + /** + * + */ + @Test + public void testIssue29() { + for(int x = 0; x < 64; x++) { + int[] a = {2, 3, 4, 5}; + int[] b = new int[90]; + int[] c = new int[a.length]; + IntegerCODEC codec = new Composition(new BinaryPacking(), new VariableByte()); + + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + codec.compress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + codec.uncompress(b, bOffset, len, c, cOffset); + Assert.assertArrayEquals(a,c); + } + } + + /** + * + */ + @Test + public void testIssue29b() { + for(int x = 0; x < 64; x++) { + int[] a = {2, 3, 4, 5}; + int[] b = new int[90]; + int[] c = new int[a.length]; + SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + codec.headlessCompress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length); + Assert.assertArrayEquals(a,c); + } + } + + /** + * + */ + @Test + public void testIssue41() { + for (int x = 0; x < 64; x++) { + int[] a = { 2, 3, 4, 5 }; + int[] b = new int[90]; + int[] c = new int[a.length]; + SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + IntWrapper initValue = new IntWrapper(0); + + codec.headlessCompress(a, aOffset, a.length, b, bOffset, initValue); + int len = bOffset.get() - x; + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + initValue = new IntWrapper(0); + codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length, initValue); + Assert.assertArrayEquals(a, c); + } + } + /** * a test */ From 2d510d9b7b16adc71f8603afd99bf515817a901d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 9 Apr 2018 11:26:28 -0400 Subject: [PATCH 066/170] [maven-release-plugin] prepare release JavaFastPFOR-0.1.12 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 52dc4ca..e00649f 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.12-SNAPSHOT + 0.1.12 jar 1.6 From ffeea61ab2fdb3854da7b0a557f8d22d674477f4 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 9 Apr 2018 11:26:34 -0400 Subject: [PATCH 067/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e00649f..7a36b12 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.12 + 0.1.13-SNAPSHOT jar 1.6 From 1d650e40f6ce3052042871161488971052c9fd32 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Thu, 4 Jul 2019 21:27:34 -0400 Subject: [PATCH 068/170] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index acaaf83..0fea928 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ JavaFastPFOR: A simple integer compression library in Java [![Build Status](https://travis-ci.org/lemire/JavaFastPFOR.png)](https://travis-ci.org/lemire/JavaFastPFOR) [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] [![Coverage Status](https://coveralls.io/repos/github/lemire/JavaFastPFOR/badge.svg?branch=master)](https://coveralls.io/github/lemire/JavaFastPFOR?branch=master) +[![Code Quality: Cpp](https://img.shields.io/lgtm/grade/java/g/lemire/JavaFastPFOR.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/lemire/JavaFastPFOR/context:java) + + License ------- From 34e39a54d78e281f3ee713ee01b46303b23e2cd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Oct 2020 20:51:30 +0000 Subject: [PATCH 069/170] Bump junit from 4.10 to 4.13.1 Bumps [junit](https://github.com/junit-team/junit4) from 4.10 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.10.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.10...r4.13.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7a36b12..cc309d9 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ junit junit - 4.10 + 4.13.1 test From 522ed5a716c09458d4dfd23e30b9a953eea4e8e9 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Tue, 21 Jun 2022 09:27:12 -0400 Subject: [PATCH 070/170] Update README.md --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0fea928..000695c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ JavaFastPFOR: A simple integer compression library in Java ========================================================== - -[![Build Status](https://travis-ci.org/lemire/JavaFastPFOR.png)](https://travis-ci.org/lemire/JavaFastPFOR) [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] -[![Coverage Status](https://coveralls.io/repos/github/lemire/JavaFastPFOR/badge.svg?branch=master)](https://coveralls.io/github/lemire/JavaFastPFOR?branch=master) + [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] [![Code Quality: Cpp](https://img.shields.io/lgtm/grade/java/g/lemire/JavaFastPFOR.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/lemire/JavaFastPFOR/context:java) @@ -53,7 +51,7 @@ Usage Really simple usage: -``` +```java IntegratedIntCompressor iic = new IntegratedIntCompressor(); int[] data = ... ; // to be compressed int[] compressed = iic.compress(data); // compressed array @@ -76,7 +74,7 @@ Maven central repository Using this code in your own project is easy with maven, just add the following code in your pom.xml file: - +```xml me.lemire.integercompression @@ -84,6 +82,7 @@ the following code in your pom.xml file: [0.1,) +``` Naturally, you should replace "version" by the version you desire. From 94190a3c06f9ea457680c68043588de54d916711 Mon Sep 17 00:00:00 2001 From: Mulugeta Mammo Date: Thu, 6 Oct 2022 20:04:32 +0000 Subject: [PATCH 071/170] Add a vector implementation for FastPFOR. This patch: - adds a vector implementation for FastPFOR and provides an example of usage. - modifies pom.xml and build.xml files to conditionally support Java Vector API use. - upgrades a few dependencies for compatibility with latest JDK versions. - adds an explanation on how to build JavaFastPFOR with vector support. Signed-off-by: Mulugeta Mammo --- README.md | 15 + build.xml | 10 + examples/vector/Example.java | 67 + examples/vector/README.md | 12 + pom.xml | 41 +- .../vector/VectorBitPacker.java | 12790 ++++++++++++++++ .../vector/VectorBitPackerTerse.java | 963 ++ .../vector/VectorFastPFOR.java | 361 + src/main/java/module-info.java | 8 + 9 files changed, 14260 insertions(+), 7 deletions(-) create mode 100644 examples/vector/Example.java create mode 100644 examples/vector/README.md create mode 100644 src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java create mode 100644 src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java create mode 100644 src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java create mode 100644 src/main/java/module-info.java diff --git a/README.md b/README.md index 000695c..46f771d 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,10 @@ in sorted orders and use differential coding (they compress deltas). They can be found in the package me.lemire.integercompression.differential. Most others do not. +The Java Team at Intel (R) introduced the vector implementation for FastPFOR +based on the Java Vector API that showed significant gains over the +non-vectorized implementation. For an example usage, see +examples/vector/Example.java. The feature requires JDK 19+. Maven central repository ------------------------ @@ -123,6 +127,7 @@ with contributions by * Di Wu, http://www.facebook.com/diwu1989 * Stefan Ackermann, https://github.com/Stivo * Samit Roy, https://github.com/roysamit +* Mulugeta Mammo, https://github.com/mulugetam (for VectorFastPFOR) How does it compare to the Kamikaze PForDelta library? ------------------------------------------------------ @@ -161,7 +166,17 @@ Speed is always reported in millions of integers per second. For Maven users --------------- +If you are running JDK 19+ + +``` mvn compile +``` + +If you are running earlier versions of JDK + +``` +mvn compiler:compile@default-compile +``` mvn exec:java diff --git a/build.xml b/build.xml index 974a14c..d02cddd 100644 --- a/build.xml +++ b/build.xml @@ -8,6 +8,16 @@ + + + + + + + + + + diff --git a/examples/vector/Example.java b/examples/vector/Example.java new file mode 100644 index 0000000..e8d2455 --- /dev/null +++ b/examples/vector/Example.java @@ -0,0 +1,67 @@ +// Copyright (C) 2022 Intel Corporation + +// SPDX-License-Identifier: Apache-2.0 + +import java.util.Arrays; +import me.lemire.integercompression.FastPFOR; +import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.Composition; +import me.lemire.integercompression.IntegerCODEC; +import me.lemire.integercompression.VariableByte; +import me.lemire.integercompression.vector.VectorFastPFOR; + +public class Example { + public static void main(String[] args) { + if (args.length == 0) + throw new IllegalArgumentException(); + + // pass 0 for Vector compressor , non-zero for default compressor + int compressorToUse = Integer.parseInt(args[0]); + + final int N = 1310720; + int[] data = new int[N]; + + // 2-bit data + for (int k = 0; k < N; k += 1) + data[k] = 3; + + // a few large values + for (int k = 0; k < N; k += 5) + data[k] = 100; + for (int k = 0; k < N; k += 533) + data[k] = 10000; + + int[] compressed = new int[N + 1024]; + + IntegerCODEC codec = new Composition( + compressorToUse == 0 ? new VectorFastPFOR() : new FastPFOR(), + new VariableByte()); + + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + + System.out.println("compressed unsorted integers from " + + data.length * 4 / 1024 + "KB to " + + outputoffset.intValue() * 4 / 1024 + "KB"); + + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + int[] recovered = new int[N]; + IntWrapper recoffset = new IntWrapper(0); + + codec.uncompress(compressed, new IntWrapper(0), compressed.length, + recovered, recoffset); + + System.out.println("compressed length = " + compressed.length + + ", uncompressed length = " + recoffset.intValue()); + + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + + System.out.println(); + } +} diff --git a/examples/vector/README.md b/examples/vector/README.md new file mode 100644 index 0000000..cbcbfeb --- /dev/null +++ b/examples/vector/README.md @@ -0,0 +1,12 @@ +Compile +------- +``` +javac -cp Example.java +``` + +Run +--- +``` +java --add-modules jdk.incubator.vector -cp Example 0 +``` + diff --git a/pom.xml b/pom.xml index 7a36b12..551e508 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 0.1.13-SNAPSHOT jar - 1.6 - 1.6 + 1.7 + 1.7 UTF-8 @@ -60,6 +60,36 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + + default-compile + compile + + compile + + + + me/lemire/integercompression/vector/* + module-info.java + + + + + vector-fastpfor + compile + + compile + + + 19 + + + + org.apache.felix maven-bundle-plugin @@ -78,9 +108,6 @@ 1.1 me.lemire.integercompression.benchmarktools.Benchmark - @@ -100,7 +127,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.8 + 3.0.0 com.kamikaze.pfordelta:me.lemire.integercompression.benchmarktools @@ -129,7 +156,7 @@ org.jacoco jacoco-maven-plugin - 0.7.8 + 0.8.8 me/lemire/integercompression/Kamikaze diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java new file mode 100644 index 0000000..9b2e1ca --- /dev/null +++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPacker.java @@ -0,0 +1,12790 @@ +// Copyright (C) 2022 Intel Corporation + +// SPDX-License-Identifier: Apache-2.0 + +package me.lemire.integercompression.vector; + +import java.util.Arrays; +import jdk.incubator.vector.*; + +/** + * Vectorized bitpacking routines. This class is a version of the + * VectorBitPackerTerse class that with less branch instructions. + * + * The code is machine generated from VectorBitPackerTerse.java using helper + * classes. + * + */ +public class VectorBitPacker { + private static final VectorSpecies SPECIES_512 = + IntVector.SPECIES_512; + private static final VectorSpecies SPECIES_256 = + IntVector.SPECIES_256; + private static final int VLEN_512 = 16; + private static final int VLEN_256 = 8; + private static final int BLOCK_SIZE = 256; + + private static final IntVector MASK_1 = + IntVector.broadcast(SPECIES_256, (1 << 1) - 1); + private static final IntVector MASK_2 = + IntVector.broadcast(SPECIES_512, (1 << 2) - 1); + private static final IntVector MASK_3 = + IntVector.broadcast(SPECIES_256, (1 << 3) - 1); + private static final IntVector MASK_4 = + IntVector.broadcast(SPECIES_512, (1 << 4) - 1); + private static final IntVector MASK_5 = + IntVector.broadcast(SPECIES_256, (1 << 5) - 1); + private static final IntVector MASK_6 = + IntVector.broadcast(SPECIES_512, (1 << 6) - 1); + private static final IntVector MASK_7 = + IntVector.broadcast(SPECIES_256, (1 << 7) - 1); + private static final IntVector MASK_8 = + IntVector.broadcast(SPECIES_512, (1 << 8) - 1); + private static final IntVector MASK_9 = + IntVector.broadcast(SPECIES_256, (1 << 9) - 1); + private static final IntVector MASK_10 = + IntVector.broadcast(SPECIES_512, (1 << 10) - 1); + private static final IntVector MASK_11 = + IntVector.broadcast(SPECIES_256, (1 << 11) - 1); + private static final IntVector MASK_12 = + IntVector.broadcast(SPECIES_512, (1 << 12) - 1); + private static final IntVector MASK_13 = + IntVector.broadcast(SPECIES_256, (1 << 13) - 1); + private static final IntVector MASK_14 = + IntVector.broadcast(SPECIES_512, (1 << 14) - 1); + private static final IntVector MASK_15 = + IntVector.broadcast(SPECIES_256, (1 << 15) - 1); + private static final IntVector MASK_16 = + IntVector.broadcast(SPECIES_512, (1 << 16) - 1); + private static final IntVector MASK_17 = + IntVector.broadcast(SPECIES_256, (1 << 17) - 1); + private static final IntVector MASK_18 = + IntVector.broadcast(SPECIES_512, (1 << 18) - 1); + private static final IntVector MASK_19 = + IntVector.broadcast(SPECIES_256, (1 << 19) - 1); + private static final IntVector MASK_20 = + IntVector.broadcast(SPECIES_512, (1 << 20) - 1); + private static final IntVector MASK_21 = + IntVector.broadcast(SPECIES_256, (1 << 21) - 1); + private static final IntVector MASK_22 = + IntVector.broadcast(SPECIES_512, (1 << 22) - 1); + private static final IntVector MASK_23 = + IntVector.broadcast(SPECIES_256, (1 << 23) - 1); + private static final IntVector MASK_24 = + IntVector.broadcast(SPECIES_512, (1 << 24) - 1); + private static final IntVector MASK_25 = + IntVector.broadcast(SPECIES_256, (1 << 25) - 1); + private static final IntVector MASK_26 = + IntVector.broadcast(SPECIES_512, (1 << 26) - 1); + private static final IntVector MASK_27 = + IntVector.broadcast(SPECIES_256, (1 << 27) - 1); + private static final IntVector MASK_28 = + IntVector.broadcast(SPECIES_512, (1 << 28) - 1); + private static final IntVector MASK_29 = + IntVector.broadcast(SPECIES_256, (1 << 29) - 1); + private static final IntVector MASK_30 = + IntVector.broadcast(SPECIES_512, (1 << 30) - 1); + private static final IntVector MASK_31 = + IntVector.broadcast(SPECIES_256, (1 << 31) - 1); + + /** + * Pack 32 integers + * + * @param in + * source array + * @param inpos + * position in source array + * @param out + * output array + * @param outpos + * position in output array + * @param b + * number of bits to use per integer + */ + public static void fastpack(final int[] in, int inpos, final int[] out, + int outpos, int b) { + switch (b) { + case 0: + break; + case 1: + fastpack1(in, inpos, out, outpos); + break; + case 2: + fastpack2(in, inpos, out, outpos); + break; + case 3: + fastpack3(in, inpos, out, outpos); + break; + case 4: + fastpack4(in, inpos, out, outpos); + break; + case 5: + fastpack5(in, inpos, out, outpos); + break; + case 6: + fastpack6(in, inpos, out, outpos); + break; + case 7: + fastpack7(in, inpos, out, outpos); + break; + case 8: + fastpack8(in, inpos, out, outpos); + break; + case 9: + fastpack9(in, inpos, out, outpos); + break; + case 10: + fastpack10(in, inpos, out, outpos); + break; + case 11: + fastpack11(in, inpos, out, outpos); + break; + case 12: + fastpack12(in, inpos, out, outpos); + break; + case 13: + fastpack13(in, inpos, out, outpos); + break; + case 14: + fastpack14(in, inpos, out, outpos); + break; + case 15: + fastpack15(in, inpos, out, outpos); + break; + case 16: + fastpack16(in, inpos, out, outpos); + break; + case 17: + fastpack17(in, inpos, out, outpos); + break; + case 18: + fastpack18(in, inpos, out, outpos); + break; + case 19: + fastpack19(in, inpos, out, outpos); + break; + case 20: + fastpack20(in, inpos, out, outpos); + break; + case 21: + fastpack21(in, inpos, out, outpos); + break; + case 22: + fastpack22(in, inpos, out, outpos); + break; + case 23: + fastpack23(in, inpos, out, outpos); + break; + case 24: + fastpack24(in, inpos, out, outpos); + break; + case 25: + fastpack25(in, inpos, out, outpos); + break; + case 26: + fastpack26(in, inpos, out, outpos); + break; + case 27: + fastpack27(in, inpos, out, outpos); + break; + case 28: + fastpack28(in, inpos, out, outpos); + break; + case 29: + fastpack29(in, inpos, out, outpos); + break; + case 30: + fastpack30(in, inpos, out, outpos); + break; + case 31: + fastpack31(in, inpos, out, outpos); + break; + case 32: + System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE); + break; + } + } + + static void fastpackNoMask(final int[] in, int inpos, final int[] out, + int outpos, int b) { + switch (b) { + case 0: + break; + case 1: + fastpackNoMask1(in, inpos, out, outpos); + break; + case 2: + fastpackNoMask2(in, inpos, out, outpos); + break; + case 3: + fastpackNoMask3(in, inpos, out, outpos); + break; + case 4: + fastpackNoMask4(in, inpos, out, outpos); + break; + case 5: + fastpackNoMask5(in, inpos, out, outpos); + break; + case 6: + fastpackNoMask6(in, inpos, out, outpos); + break; + case 7: + fastpackNoMask7(in, inpos, out, outpos); + break; + case 8: + fastpackNoMask8(in, inpos, out, outpos); + break; + case 9: + fastpackNoMask9(in, inpos, out, outpos); + break; + case 10: + fastpackNoMask10(in, inpos, out, outpos); + break; + case 11: + fastpackNoMask11(in, inpos, out, outpos); + break; + case 12: + fastpackNoMask12(in, inpos, out, outpos); + break; + case 13: + fastpackNoMask13(in, inpos, out, outpos); + break; + case 14: + fastpackNoMask14(in, inpos, out, outpos); + break; + case 15: + fastpackNoMask15(in, inpos, out, outpos); + break; + case 16: + fastpackNoMask16(in, inpos, out, outpos); + break; + case 17: + fastpackNoMask17(in, inpos, out, outpos); + break; + case 18: + fastpackNoMask18(in, inpos, out, outpos); + break; + case 19: + fastpackNoMask19(in, inpos, out, outpos); + break; + case 20: + fastpackNoMask20(in, inpos, out, outpos); + break; + case 21: + fastpackNoMask21(in, inpos, out, outpos); + break; + case 22: + fastpackNoMask22(in, inpos, out, outpos); + break; + case 23: + fastpackNoMask23(in, inpos, out, outpos); + break; + case 24: + fastpackNoMask24(in, inpos, out, outpos); + break; + case 25: + fastpackNoMask25(in, inpos, out, outpos); + break; + case 26: + fastpackNoMask26(in, inpos, out, outpos); + break; + case 27: + fastpackNoMask27(in, inpos, out, outpos); + break; + case 28: + fastpackNoMask28(in, inpos, out, outpos); + break; + case 29: + fastpackNoMask29(in, inpos, out, outpos); + break; + case 30: + fastpackNoMask30(in, inpos, out, outpos); + break; + case 31: + fastpackNoMask31(in, inpos, out, outpos); + break; + case 32: + System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE); + break; + } + } + + /** + * Unpack 32 integers + * + * @param in + * source array + * @param inpos + * position in source array + * @param out + * output array + * @param outpos + * position in output array + * @param b + * number of bits to use per integer + */ + public static void fastunpack(final int[] in, int inpos, final int[] out, + int outpos, int b) { + switch (b) { + case 0: + Arrays.fill(out, outpos, outpos + 256, 0); + break; + case 1: + fastunpack1(in, inpos, out, outpos); + break; + case 2: + fastunpack2(in, inpos, out, outpos); + break; + case 3: + fastunpack3(in, inpos, out, outpos); + break; + case 4: + fastunpack4(in, inpos, out, outpos); + break; + case 5: + fastunpack5(in, inpos, out, outpos); + break; + case 6: + fastunpack6(in, inpos, out, outpos); + break; + case 7: + fastunpack7(in, inpos, out, outpos); + break; + case 8: + fastunpack8(in, inpos, out, outpos); + break; + case 9: + fastunpack9(in, inpos, out, outpos); + break; + case 10: + fastunpack10(in, inpos, out, outpos); + break; + case 11: + fastunpack11(in, inpos, out, outpos); + break; + case 12: + fastunpack12(in, inpos, out, outpos); + break; + case 13: + fastunpack13(in, inpos, out, outpos); + break; + case 14: + fastunpack14(in, inpos, out, outpos); + break; + case 15: + fastunpack15(in, inpos, out, outpos); + break; + case 16: + fastunpack16(in, inpos, out, outpos); + break; + case 17: + fastunpack17(in, inpos, out, outpos); + break; + case 18: + fastunpack18(in, inpos, out, outpos); + break; + case 19: + fastunpack19(in, inpos, out, outpos); + break; + case 20: + fastunpack20(in, inpos, out, outpos); + break; + case 21: + fastunpack21(in, inpos, out, outpos); + break; + case 22: + fastunpack22(in, inpos, out, outpos); + break; + case 23: + fastunpack23(in, inpos, out, outpos); + break; + case 24: + fastunpack24(in, inpos, out, outpos); + break; + case 25: + fastunpack25(in, inpos, out, outpos); + break; + case 26: + fastunpack26(in, inpos, out, outpos); + break; + case 27: + fastunpack27(in, inpos, out, outpos); + break; + case 28: + fastunpack28(in, inpos, out, outpos); + break; + case 29: + fastunpack29(in, inpos, out, outpos); + break; + case 30: + fastunpack30(in, inpos, out, outpos); + break; + case 31: + fastunpack31(in, inpos, out, outpos); + break; + case 32: + System.arraycopy(in, inpos, out, outpos, BLOCK_SIZE); + break; + } + } + + public static int slowpack(final int[] in, int inpos, int inlen, + final int[] out, int outpos, int b) { + if (inlen == 0) + return outpos; + if (b == 32) { + System.arraycopy(in, inpos, out, outpos, inlen); + return outpos + inlen; + } + int mask = (1 << b) - 1; + int c = 0; + int l = 0; + int r = 0; + int val = 0; + for (int i = 0; i < inlen; i++) { + val = in[inpos + i] & mask; + out[outpos] |= val << (c + r); + c += b; + l = (32 - r) % b; + if (c + r >= 32) { + if (i < inlen - 1 || l != 0) + outpos++; + r = l == 0 ? 0 : b - l; + if (l != 0) + out[outpos] = val >> (b - r); + c = 0; + } + } + return outpos; + } + + public static int slowunpack(final int[] in, int inpos, final int[] out, + int outpos, int outlen, int b) { + if (outlen == 0) { + return inpos; + } + if (b == 32) { + System.arraycopy(in, inpos, out, outpos, outlen); + return inpos + outlen; + } + int mask = (1 << b) - 1; + int limit = outpos + outlen; + int r = 0; + int val = 0; + int i = 0; + for (; outpos < limit; i++) { + if (r > 0) + out[outpos++] = + (val >>> (32 - (b - r))) | ((in[inpos + i] << (b - r)) & mask); + val = in[inpos + i]; + int j = 0; + int l = 32 - r; + int ll = l % b == 0 ? l : l - b; + while (j < ll && outpos < limit) { + out[outpos++] = (val >> (j + r)) & mask; + j += b; + } + r = l % b == 0 ? 0 : b - (l % b); + } + return inpos + i; + } + + public static int numCompressedInts(int n, int b) { + int width = b % 2 == 0 ? VLEN_512 : VLEN_256; + if (n <= width) + return n; + int intsPerVec = (32 / b) * width; + int q = (n + intsPerVec - 1) / intsPerVec; + return q * width; + } + + private static void fastpack1(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_1); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 25).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 27).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 28).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 29).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 30).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_1).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack2(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_2); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 28).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_2).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack3(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_3); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 27).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 25).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 28).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_3).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack4(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_4); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_4).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack5(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_5); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 25).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_5).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack6(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_6); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_6).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack7(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_7); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_7).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack8(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_8); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_8).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack9(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_9); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_9).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack10(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_10); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_10).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack11(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_11); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_11).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack12(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_12); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_12).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack13(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_13); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_13).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack14(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_14); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_14).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack15(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_15); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_15).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack16(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_16); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_16).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack17(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_17); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_17).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack18(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_18); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_18).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack19(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_19); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_19).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack20(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_20); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_20).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack21(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_21); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_21).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack22(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_22); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_22).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack23(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_23); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_23).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack24(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_24); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_24).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack25(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_25); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_25).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack26(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_26); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_26).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack27(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_27); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_27).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack28(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_28); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_28).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_28).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack29(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_29); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 28); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_29).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack30(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(MASK_30); + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHR, 28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.and(MASK_30).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpack31(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(MASK_31); + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 28); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHR, 30); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.and(MASK_31).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask1(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask2(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask3(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask4(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask5(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask6(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask7(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask8(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask9(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask10(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask11(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask12(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask13(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask14(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask15(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask16(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask17(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask18(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask19(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask20(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask21(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask22(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask23(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask24(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask25(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask26(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask27(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask28(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.or(oV); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask29(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask30(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastpackNoMask31(final int[] in, int inpos, + final int[] out, int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.lanewise(VectorOperators.LSHL, 31).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 1); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 248); + oV = iV.lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + } + + private static void fastunpack1(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 21).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 23).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 25).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 26).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 27).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 28).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 29).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 30).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 31).and(MASK_1).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack2(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 26).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 28).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 30).and(MASK_2).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack3(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 21).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 27).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 25).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 28).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_3); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 23).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 26).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 29).and(MASK_3).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack4(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.and(MASK_4); + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xf).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 28).and(MASK_4).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack5(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 25).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 23).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 21).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 26).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_5); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 27).and(MASK_5).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack6(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_6); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 26).and(MASK_6).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack7(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 21).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 23).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_7); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 25).and(MASK_7).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack8(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.and(MASK_8); + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 24).and(MASK_8).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack9(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 21).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_9); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 23).and(MASK_9).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack10(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_10); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 22).and(MASK_10).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack11(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_11); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 21).and(MASK_11).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack12(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xfff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_12); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 20).and(MASK_12).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack13(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_13); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 19).and(MASK_13).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack14(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_14); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 18).and(MASK_14).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack15(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_15); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 17).and(MASK_15).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack16(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.and(MASK_16); + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0xffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 16).and(MASK_16).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack17(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_17); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 15).and(MASK_17).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack18(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_18); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 14).and(MASK_18).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack19(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_19); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 13).and(MASK_19).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack20(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xfffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_20); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 12).and(MASK_20).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack21(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_21); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 11).and(MASK_21).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack22(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_22).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_22).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_22).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_22).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_22).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_22); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 10).and(MASK_22).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack23(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_23); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 9).and(MASK_23).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack24(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_24).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xffffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0xffffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(0xffffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_24); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 8).and(MASK_24).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack25(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_25); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 7).and(MASK_25).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack26(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_26).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_26).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_26).intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_26); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 6).and(MASK_26).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack27(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_27).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_27).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_27).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_27).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_27).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(0x1ffffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_27); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 5).and(MASK_27).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack28(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_28).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos); + outpos += VLEN_512; + + oV = oV.zero(SPECIES_512); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0xfffffff).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_28); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 4).and(MASK_28).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack29(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_29).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_29).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0xfffffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0x1ffffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_29).intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(0x7ffffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_29); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 3).and(MASK_29).intoArray(out, outpos); + outpos += VLEN_256; + } + + private static void fastunpack30(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + iV.and(MASK_30).intoArray(out, outpos); + outpos += VLEN_512; + + var oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 16); + oV = iV.and(0xfffffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 32); + oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 48); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 64); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 80); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 96); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 112); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 128); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 144); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 160); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 176); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 192); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 208); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_30); + + iV = IntVector.fromArray(SPECIES_512, in, inpos + 224); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_512; + + iV.lanewise(VectorOperators.LSHR, 2).and(MASK_30).intoArray(out, outpos); + outpos += VLEN_512; + } + + private static void fastunpack31(final int[] in, int inpos, final int[] out, + int outpos) { + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + iV.and(MASK_31).intoArray(out, outpos); + outpos += VLEN_256; + + var oV = iV.lanewise(VectorOperators.LSHR, 31).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 8); + oV = iV.and(0x3fffffff).lanewise(VectorOperators.LSHL, 1).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 30).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 16); + oV = iV.and(0x1fffffff).lanewise(VectorOperators.LSHL, 2).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 29).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 24); + oV = iV.and(0xfffffff).lanewise(VectorOperators.LSHL, 3).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 28).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 32); + oV = iV.and(0x7ffffff).lanewise(VectorOperators.LSHL, 4).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 27).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 40); + oV = iV.and(0x3ffffff).lanewise(VectorOperators.LSHL, 5).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 26).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 48); + oV = iV.and(0x1ffffff).lanewise(VectorOperators.LSHL, 6).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 25).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 56); + oV = iV.and(0xffffff).lanewise(VectorOperators.LSHL, 7).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 24).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 64); + oV = iV.and(0x7fffff).lanewise(VectorOperators.LSHL, 8).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 23).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 72); + oV = iV.and(0x3fffff).lanewise(VectorOperators.LSHL, 9).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 22).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 80); + oV = iV.and(0x1fffff).lanewise(VectorOperators.LSHL, 10).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 21).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 88); + oV = iV.and(0xfffff).lanewise(VectorOperators.LSHL, 11).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 20).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 96); + oV = iV.and(0x7ffff).lanewise(VectorOperators.LSHL, 12).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 19).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 104); + oV = iV.and(0x3ffff).lanewise(VectorOperators.LSHL, 13).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 18).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 112); + oV = iV.and(0x1ffff).lanewise(VectorOperators.LSHL, 14).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 17).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 120); + oV = iV.and(0xffff).lanewise(VectorOperators.LSHL, 15).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 16).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 128); + oV = iV.and(0x7fff).lanewise(VectorOperators.LSHL, 16).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 15).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 136); + oV = iV.and(0x3fff).lanewise(VectorOperators.LSHL, 17).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 14).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 144); + oV = iV.and(0x1fff).lanewise(VectorOperators.LSHL, 18).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 13).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 152); + oV = iV.and(0xfff).lanewise(VectorOperators.LSHL, 19).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 12).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 160); + oV = iV.and(0x7ff).lanewise(VectorOperators.LSHL, 20).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 11).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 168); + oV = iV.and(0x3ff).lanewise(VectorOperators.LSHL, 21).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 10).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 176); + oV = iV.and(0x1ff).lanewise(VectorOperators.LSHL, 22).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 9).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 184); + oV = iV.and(0xff).lanewise(VectorOperators.LSHL, 23).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 8).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 192); + oV = iV.and(0x7f).lanewise(VectorOperators.LSHL, 24).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 7).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 200); + oV = iV.and(0x3f).lanewise(VectorOperators.LSHL, 25).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 6).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 208); + oV = iV.and(0x1f).lanewise(VectorOperators.LSHL, 26).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 5).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 216); + oV = iV.and(0xf).lanewise(VectorOperators.LSHL, 27).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 4).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 224); + oV = iV.and(7).lanewise(VectorOperators.LSHL, 28).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 3).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 232); + oV = iV.and(3).lanewise(VectorOperators.LSHL, 29).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + oV = iV.lanewise(VectorOperators.LSHR, 2).and(MASK_31); + + iV = IntVector.fromArray(SPECIES_256, in, inpos + 240); + oV = iV.and(1).lanewise(VectorOperators.LSHL, 30).or(oV); + + oV.intoArray(out, outpos); + outpos += VLEN_256; + + iV.lanewise(VectorOperators.LSHR, 1).and(MASK_31).intoArray(out, outpos); + outpos += VLEN_256; + } +} diff --git a/src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java new file mode 100644 index 0000000..62a8cc7 --- /dev/null +++ b/src/main/java/me/lemire/integercompression/vector/VectorBitPackerTerse.java @@ -0,0 +1,963 @@ +// Copyright (C) 2022 Intel Corporation + +// SPDX-License-Identifier: Apache-2.0 + +package me.lemire.integercompression.vector; + +import java.util.Arrays; +import jdk.incubator.vector.*; + +/** + * This is a readable but less efficient version of the VectorBitPacker class. + * + */ +public class VectorBitPackerTerse { + static final VectorSpecies SPECIES_512 = IntVector.SPECIES_512; + static final VectorSpecies SPECIES_256 = IntVector.SPECIES_256; + static final int VLEN_512 = 16; + static final int VLEN_256 = 8; + static final int BLOCK_SIZE = 256; + + private static void fastpackOddBit(final int[] in, int inpos, final int[] out, + int outpos, int b, final int[] ho, + final int[] lc) { + final int mask = (1 << b) - 1; + final int N = 31 / b; + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV.and(mask); + int n = 1; + for (; n <= N; n++) { + iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256); + oV = iV.and(mask).lanewise(VectorOperators.LSHL, b * n).or(oV); + } + oV.intoArray(out, outpos); + outpos += VLEN_256; + + final int L = b - 1; + for (int i = 0; i < L; i++) { + oV = iV.and(mask).lanewise(VectorOperators.LSHR, ho[i]); + for (int j = 0; j < lc[i]; j++) { + iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256); + oV = iV.and(mask) + .lanewise(VectorOperators.LSHL, b * j + (b - ho[i])) + .or(oV); + n++; + } + oV.intoArray(out, outpos); + outpos += VLEN_256; + } + } + + private static void fastpackOddBitNoMask(final int[] in, int inpos, + final int[] out, int outpos, int b, + final int[] ho, final int[] lc) { + final int N = 31 / b; + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + var oV = iV; + int n = 1; + for (; n <= N; n++) { + iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256); + oV = iV.lanewise(VectorOperators.LSHL, b * n).or(oV); + } + oV.intoArray(out, outpos); + outpos += VLEN_256; + + final int L = b - 1; + for (int i = 0; i < L; i++) { + oV = iV.lanewise(VectorOperators.LSHR, ho[i]); + for (int j = 0; j < lc[i]; j++) { + iV = IntVector.fromArray(SPECIES_256, in, inpos + n * VLEN_256); + oV = iV.lanewise(VectorOperators.LSHL, b * j + (b - ho[i])).or(oV); + n++; + } + oV.intoArray(out, outpos); + outpos += VLEN_256; + } + } + + private static void fastUnpackOddBit(final int[] in, int inpos, + final int[] out, int outpos, int b, + final int[] lo, int[] masks, int[] lc) { + final int mask = (1 << b) - 1; + final int N = 32 / b; + var iV = IntVector.fromArray(SPECIES_256, in, inpos); + int n = 0; + for (; n < N; n++) { + iV.lanewise(VectorOperators.LSHR, b * n).and(mask).intoArray(out, outpos); + outpos += VLEN_256; + } + var oV = iV.lanewise(VectorOperators.LSHR, b * n).and(mask); + + final int L = b - 1; + for (int i = 0; i < L; i++) { + iV = IntVector.fromArray(SPECIES_256, in, inpos + (i + 1) * VLEN_256); + oV = iV.and(masks[i]).lanewise(VectorOperators.LSHL, b - lo[i]).or(oV); + oV.intoArray(out, outpos); + outpos += VLEN_256; + int j = 0; + for (; j < lc[i]; j++) { + iV.lanewise(VectorOperators.LSHR, b * j + lo[i]) + .and(mask) + .intoArray(out, outpos); + outpos += VLEN_256; + n++; + } + oV = iV.lanewise(VectorOperators.LSHR, b * j + lo[i]).and(mask); + } + } + + private static void fastpackEvenBit(final int[] in, int inpos, + final int[] out, int outpos, int b, + final int[] ho, final int[] lc) { + final int mask = (1 << b) - 1; + final int N = 32 % b == 0 ? (32 / b) - 1 : 32 / b; + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV.and(mask); + int n = 1; + for (; n <= N; n++) { + iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512); + oV = iV.and(mask).lanewise(VectorOperators.LSHL, b * n).or(oV); + } + oV.intoArray(out, outpos); + outpos += VLEN_512; + + final int L = (b >>> 1) - 1; + for (int i = 0; i < L; i++) { + if (ho[i] != b) + oV = iV.and(mask).lanewise(VectorOperators.LSHR, ho[i]); + else + oV = oV.zero(SPECIES_512); + for (int j = 0; j < lc[i]; j++) { + iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512); + oV = iV.and(mask) + .lanewise(VectorOperators.LSHL, b * j + (b - ho[i])) + .or(oV); + n++; + } + oV.intoArray(out, outpos); + outpos += VLEN_512; + } + } + + private static void fastpackEvenBitNoMask(final int[] in, int inpos, + final int[] out, int outpos, int b, + final int[] ho, final int[] lc) { + final int N = 32 % b == 0 ? (32 / b) - 1 : 32 / b; + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + var oV = iV; + int n = 1; + for (; n <= N; n++) { + iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512); + oV = iV.lanewise(VectorOperators.LSHL, b * n).or(oV); + } + oV.intoArray(out, outpos); + outpos += VLEN_512; + + final int L = (b >>> 1) - 1; + for (int i = 0; i < L; i++) { + if (ho[i] != b) + oV = iV.lanewise(VectorOperators.LSHR, ho[i]); + else + oV = oV.zero(SPECIES_512); + for (int j = 0; j < lc[i]; j++) { + iV = IntVector.fromArray(SPECIES_512, in, inpos + n * VLEN_512); + oV = iV.lanewise(VectorOperators.LSHL, b * j + (b - ho[i])).or(oV); + n++; + } + oV.intoArray(out, outpos); + outpos += VLEN_512; + } + } + + private static void fastUnpackEventBit(final int[] in, int inpos, + final int[] out, int outpos, int b, + final int[] lo, int[] masks, + int[] lc) { + final int mask = (1 << b) - 1; + final int N = 32 / b; + var iV = IntVector.fromArray(SPECIES_512, in, inpos); + int n = 0; + for (; n < N; n++) { + iV.lanewise(VectorOperators.LSHR, b * n).and(mask).intoArray(out, outpos); + outpos += VLEN_512; + } + var oV = iV.lanewise(VectorOperators.LSHR, b * n).and(mask); + if ((b & (b - 1)) == 0) + oV = oV.zero(SPECIES_512); + + final int L = (b >>> 1) - 1; + for (int i = 0; i < L; i++) { + iV = IntVector.fromArray(SPECIES_512, in, inpos + (i + 1) * VLEN_512); + oV = iV.and(masks[i]).lanewise(VectorOperators.LSHL, b - lo[i]).or(oV); + oV.intoArray(out, outpos); + outpos += VLEN_512; + int j = 0; + for (; j < lc[i]; j++) { + iV.lanewise(VectorOperators.LSHR, b * j + lo[i]) + .and(mask) + .intoArray(out, outpos); + outpos += VLEN_512; + n++; + } + if ((32 - lo[i]) % b != 0) + oV = iV.lanewise(VectorOperators.LSHR, b * j + lo[i]).and(mask); + else + oV = oV.zero(SPECIES_512); + } + } + + public static int slowpack(final int[] in, int inpos, int inlen, + final int[] out, int outpos, int b) { + if (inlen == 0) + return outpos; + if (b == 32) { + System.arraycopy(in, inpos, out, outpos, inlen); + return outpos + inlen; + } + int mask = (1 << b) - 1; + int c = 0; + int l = 0; + int r = 0; + int val = 0; + for (int i = 0; i < inlen; i++) { + val = in[inpos + i] & mask; + out[outpos] |= val << (c + r); + c += b; + l = (32 - r) % b; + if (c + r >= 32) { + if (i < inlen - 1 || l != 0) + outpos++; + r = l == 0 ? 0 : b - l; + if (l != 0) + out[outpos] = val >> (b - r); + c = 0; + } + } + return outpos; + } + + public static int slowunpack(final int[] in, int inpos, final int[] out, + int outpos, int outlen, int b) { + if (outlen == 0) { + return inpos; + } + if (b == 32) { + System.arraycopy(in, inpos, out, outpos, outlen); + return inpos + outlen; + } + int mask = (1 << b) - 1; + int limit = outpos + outlen; + int r = 0; + int val = 0; + int i = 0; + for (; outpos < limit; i++) { + if (r > 0) + out[outpos++] = + (val >>> (32 - (b - r))) | ((in[inpos + i] << (b - r)) & mask); + val = in[inpos + i]; + int j = 0; + int l = 32 - r; + int ll = l % b == 0 ? l : l - b; + while (j < ll && outpos < limit) { + out[outpos++] = (val >> (j + r)) & mask; + j += b; + } + r = l % b == 0 ? 0 : b - (l % b); + } + return inpos + i; + } + + public static int numCompressedInts(int n, int b) { + int width = b % 2 == 0 ? VLEN_512 : VLEN_256; + if (n <= width) + return n; + int intsPerVec = (32 / b) * width; + int q = (n + intsPerVec - 1) / intsPerVec; + return q * width; + } + + public static void fastpack(final int[] in, int inpos, final int[] out, + int outpos, int b) { + switch (b) { + case 0: + break; + case 1: + fastpackOddBit(in, inpos, out, outpos, 1, new int[] {}, new int[] {}); + break; + case 2: + fastpackEvenBit(in, inpos, out, outpos, 2, new int[] {}, new int[] {}); + break; + case 3: + fastpackOddBit(in, inpos, out, outpos, 3, new int[] {0x2, 0x1}, + new int[] {0xb, 0xa}); + break; + case 4: + fastpackEvenBit(in, inpos, out, outpos, 4, new int[] {0x4}, + new int[] {0x8}); + break; + case 5: + fastpackOddBit(in, inpos, out, outpos, 5, new int[] {0x2, 0x4, 0x1, 0x3}, + new int[] {0x6, 0x7, 0x6, 0x6}); + break; + case 6: + fastpackEvenBit(in, inpos, out, outpos, 6, new int[] {0x2, 0x4}, + new int[] {0x5, 0x5}); + break; + case 7: + fastpackOddBit(in, inpos, out, outpos, 7, + new int[] {0x4, 0x1, 0x5, 0x2, 0x6, 0x3}, + new int[] {0x5, 0x4, 0x5, 0x4, 0x5, 0x4}); + break; + case 8: + fastpackEvenBit(in, inpos, out, outpos, 8, new int[] {0x8, 0x8, 0x8}, + new int[] {0x4, 0x4, 0x4}); + break; + case 9: + fastpackOddBit(in, inpos, out, outpos, 9, + new int[] {0x5, 0x1, 0x6, 0x2, 0x7, 0x3, 0x8, 0x4}, + new int[] {0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3}); + break; + case 10: + fastpackEvenBit(in, inpos, out, outpos, 10, + new int[] {0x2, 0x4, 0x6, 0x8}, + new int[] {0x3, 0x3, 0x3, 0x3}); + break; + case 11: + fastpackOddBit( + in, inpos, out, outpos, 11, + new int[] {0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1}, + new int[] {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2}); + break; + case 12: + fastpackEvenBit(in, inpos, out, outpos, 12, + new int[] {0x8, 0x4, 0xc, 0x8, 0x4}, + new int[] {0x3, 0x2, 0x3, 0x3, 0x2}); + break; + case 13: + fastpackOddBit(in, inpos, out, outpos, 13, + new int[] {0x6, 0xc, 0x5, 0xb, 0x4, 0xa, 0x3, 0x9, 0x2, + 0x8, 0x1, 0x7}, + new int[] {0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, + 0x3, 0x2, 0x2}); + break; + case 14: + fastpackEvenBit(in, inpos, out, outpos, 14, + new int[] {0x4, 0x8, 0xc, 0x2, 0x6, 0xa}, + new int[] {0x2, 0x2, 0x3, 0x2, 0x2, 0x2}); + break; + case 15: + fastpackOddBit(in, inpos, out, outpos, 15, + new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x1, 0x3, + 0x5, 0x7, 0x9, 0xb, 0xd}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2}); + break; + case 16: + fastpackEvenBit(in, inpos, out, outpos, 16, + new int[] {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}); + break; + case 17: + fastpackOddBit(in, inpos, out, outpos, 17, + new int[] {0xf, 0xd, 0xb, 0x9, 0x7, 0x5, 0x3, 0x1, 0x10, + 0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1}); + break; + case 18: + fastpackEvenBit(in, inpos, out, outpos, 18, + new int[] {0xe, 0xa, 0x6, 0x2, 0x10, 0xc, 0x8, 0x4}, + new int[] {0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x1}); + break; + case 19: + fastpackOddBit(in, inpos, out, outpos, 19, + new int[] {0xd, 0x7, 0x1, 0xe, 0x8, 0x2, 0xf, 0x9, 0x3, + 0x10, 0xa, 0x4, 0x11, 0xb, 0x5, 0x12, 0xc, 0x6}, + new int[] {0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1, + 0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1}); + break; + case 20: + fastpackEvenBit( + in, inpos, out, outpos, 20, + new int[] {0xc, 0x4, 0x10, 0x8, 0x14, 0xc, 0x4, 0x10, 0x8}, + new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x1}); + break; + case 21: + fastpackOddBit( + in, inpos, out, outpos, 21, + new int[] {0xb, 0x1, 0xc, 0x2, 0xd, 0x3, 0xe, 0x4, 0xf, 0x5, + 0x10, 0x6, 0x11, 0x7, 0x12, 0x8, 0x13, 0x9, 0x14, 0xa}, + new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, + 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1}); + break; + case 22: + fastpackEvenBit( + in, inpos, out, outpos, 22, + new int[] {0xa, 0x14, 0x8, 0x12, 0x6, 0x10, 0x4, 0xe, 0x2, 0xc}, + new int[] {0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1}); + break; + case 23: + fastpackOddBit(in, inpos, out, outpos, 23, + new int[] {0x9, 0x12, 0x4, 0xd, 0x16, 0x8, 0x11, 0x3, + 0xc, 0x15, 0x7, 0x10, 0x2, 0xb, 0x14, 0x6, + 0xf, 0x1, 0xa, 0x13, 0x5, 0xe}, + new int[] {0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, + 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, + 0x2, 0x1, 0x1, 0x2, 0x1, 0x1}); + break; + case 24: + fastpackEvenBit( + in, inpos, out, outpos, 24, + new int[] {0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8, + 0x10}, + new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1}); + break; + case 25: + fastpackOddBit(in, inpos, out, outpos, 25, + new int[] {0x7, 0xe, 0x15, 0x3, 0xa, 0x11, 0x18, 0x6, + 0xd, 0x14, 0x2, 0x9, 0x10, 0x17, 0x5, 0xc, + 0x13, 0x1, 0x8, 0xf, 0x16, 0x4, 0xb, 0x12}, + new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, + 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1}); + break; + case 26: + fastpackEvenBit(in, inpos, out, outpos, 26, + new int[] {0x6, 0xc, 0x12, 0x18, 0x4, 0xa, 0x10, 0x16, + 0x2, 0x8, 0xe, 0x14}, + new int[] {0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x1, 0x1}); + break; + case 27: + fastpackOddBit(in, inpos, out, outpos, 27, + new int[] {0x5, 0xa, 0xf, 0x14, 0x19, 0x3, 0x8, + 0xd, 0x12, 0x17, 0x1, 0x6, 0xb, 0x10, + 0x15, 0x1a, 0x4, 0x9, 0xe, 0x13, 0x18, + 0x2, 0x7, 0xc, 0x11, 0x16}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, + 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, + 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 28: + fastpackEvenBit(in, inpos, out, outpos, 28, + new int[] {0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, 0x4, + 0x8, 0xc, 0x10, 0x14, 0x18}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1}); + break; + case 29: + fastpackOddBit( + in, inpos, out, outpos, 29, + new int[] {0x3, 0x6, 0x9, 0xc, 0xf, 0x12, 0x15, 0x18, 0x1b, 0x1, + 0x4, 0x7, 0xa, 0xd, 0x10, 0x13, 0x16, 0x19, 0x1c, 0x2, + 0x5, 0x8, 0xb, 0xe, 0x11, 0x14, 0x17, 0x1a}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 30: + fastpackEvenBit(in, inpos, out, outpos, 30, + new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x12, + 0x14, 0x16, 0x18, 0x1a, 0x1c}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 31: + fastpackOddBit(in, inpos, out, outpos, 31, + new int[] {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, + 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 32: + System.arraycopy(in, inpos, out, outpos, 256); + break; + } + } + + public static void fastpackNoMask(final int[] in, int inpos, final int[] out, + int outpos, int b) { + switch (b) { + case 0: + break; + case 1: + fastpackOddBitNoMask(in, inpos, out, outpos, 1, new int[] {}, + new int[] {}); + break; + case 2: + fastpackEvenBitNoMask(in, inpos, out, outpos, 2, new int[] {}, + new int[] {}); + break; + case 3: + fastpackOddBitNoMask(in, inpos, out, outpos, 3, new int[] {0x2, 0x1}, + new int[] {0xb, 0xa}); + break; + case 4: + fastpackEvenBitNoMask(in, inpos, out, outpos, 4, new int[] {0x4}, + new int[] {0x8}); + break; + case 5: + fastpackOddBitNoMask(in, inpos, out, outpos, 5, + new int[] {0x2, 0x4, 0x1, 0x3}, + new int[] {0x6, 0x7, 0x6, 0x6}); + break; + case 6: + fastpackEvenBitNoMask(in, inpos, out, outpos, 6, new int[] {0x2, 0x4}, + new int[] {0x5, 0x5}); + break; + case 7: + fastpackOddBitNoMask(in, inpos, out, outpos, 7, + new int[] {0x4, 0x1, 0x5, 0x2, 0x6, 0x3}, + new int[] {0x5, 0x4, 0x5, 0x4, 0x5, 0x4}); + break; + case 8: + fastpackEvenBitNoMask(in, inpos, out, outpos, 8, + new int[] {0x8, 0x8, 0x8}, + new int[] {0x4, 0x4, 0x4}); + break; + case 9: + fastpackOddBitNoMask(in, inpos, out, outpos, 9, + new int[] {0x5, 0x1, 0x6, 0x2, 0x7, 0x3, 0x8, 0x4}, + new int[] {0x4, 0x3, 0x4, 0x3, 0x4, 0x3, 0x4, 0x3}); + break; + case 10: + fastpackEvenBitNoMask(in, inpos, out, outpos, 10, + new int[] {0x2, 0x4, 0x6, 0x8}, + new int[] {0x3, 0x3, 0x3, 0x3}); + break; + case 11: + fastpackOddBitNoMask( + in, inpos, out, outpos, 11, + new int[] {0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1}, + new int[] {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2}); + break; + case 12: + fastpackEvenBitNoMask(in, inpos, out, outpos, 12, + new int[] {0x8, 0x4, 0xc, 0x8, 0x4}, + new int[] {0x3, 0x2, 0x3, 0x3, 0x2}); + break; + case 13: + fastpackOddBitNoMask(in, inpos, out, outpos, 13, + new int[] {0x6, 0xc, 0x5, 0xb, 0x4, 0xa, 0x3, 0x9, + 0x2, 0x8, 0x1, 0x7}, + new int[] {0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, + 0x2, 0x3, 0x2, 0x2}); + break; + case 14: + fastpackEvenBitNoMask(in, inpos, out, outpos, 14, + new int[] {0x4, 0x8, 0xc, 0x2, 0x6, 0xa}, + new int[] {0x2, 0x2, 0x3, 0x2, 0x2, 0x2}); + break; + case 15: + fastpackOddBitNoMask(in, inpos, out, outpos, 15, + new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x1, + 0x3, 0x5, 0x7, 0x9, 0xb, 0xd}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x3, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}); + break; + case 16: + fastpackEvenBitNoMask( + in, inpos, out, outpos, 16, + new int[] {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}); + break; + case 17: + fastpackOddBitNoMask(in, inpos, out, outpos, 17, + new int[] {0xf, 0xd, 0xb, 0x9, 0x7, 0x5, 0x3, 0x1, + 0x10, 0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1}); + break; + case 18: + fastpackEvenBitNoMask(in, inpos, out, outpos, 18, + new int[] {0xe, 0xa, 0x6, 0x2, 0x10, 0xc, 0x8, 0x4}, + new int[] {0x2, 0x2, 0x2, 0x1, 0x2, 0x2, 0x2, 0x1}); + break; + case 19: + fastpackOddBitNoMask( + in, inpos, out, outpos, 19, + new int[] {0xd, 0x7, 0x1, 0xe, 0x8, 0x2, 0xf, 0x9, 0x3, 0x10, 0xa, + 0x4, 0x11, 0xb, 0x5, 0x12, 0xc, 0x6}, + new int[] {0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x1, + 0x2, 0x2, 0x1, 0x2, 0x2, 0x1}); + break; + case 20: + fastpackEvenBitNoMask( + in, inpos, out, outpos, 20, + new int[] {0xc, 0x4, 0x10, 0x8, 0x14, 0xc, 0x4, 0x10, 0x8}, + new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x2, 0x1, 0x2, 0x1}); + break; + case 21: + fastpackOddBitNoMask( + in, inpos, out, outpos, 21, + new int[] {0xb, 0x1, 0xc, 0x2, 0xd, 0x3, 0xe, 0x4, 0xf, 0x5, + 0x10, 0x6, 0x11, 0x7, 0x12, 0x8, 0x13, 0x9, 0x14, 0xa}, + new int[] {0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, + 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1}); + break; + case 22: + fastpackEvenBitNoMask( + in, inpos, out, outpos, 22, + new int[] {0xa, 0x14, 0x8, 0x12, 0x6, 0x10, 0x4, 0xe, 0x2, 0xc}, + new int[] {0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1}); + break; + case 23: + fastpackOddBitNoMask( + in, inpos, out, outpos, 23, + new int[] {0x9, 0x12, 0x4, 0xd, 0x16, 0x8, 0x11, 0x3, + 0xc, 0x15, 0x7, 0x10, 0x2, 0xb, 0x14, 0x6, + 0xf, 0x1, 0xa, 0x13, 0x5, 0xe}, + new int[] {0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, + 0x2, 0x1, 0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1}); + break; + case 24: + fastpackEvenBitNoMask( + in, inpos, out, outpos, 24, + new int[] {0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8, 0x10, 0x18, 0x8, + 0x10}, + new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, 0x1}); + break; + case 25: + fastpackOddBitNoMask(in, inpos, out, outpos, 25, + new int[] {0x7, 0xe, 0x15, 0x3, 0xa, 0x11, + 0x18, 0x6, 0xd, 0x14, 0x2, 0x9, + 0x10, 0x17, 0x5, 0xc, 0x13, 0x1, + 0x8, 0xf, 0x16, 0x4, 0xb, 0x12}, + new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, + 0x2, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1}); + break; + case 26: + fastpackEvenBitNoMask(in, inpos, out, outpos, 26, + new int[] {0x6, 0xc, 0x12, 0x18, 0x4, 0xa, 0x10, + 0x16, 0x2, 0x8, 0xe, 0x14}, + new int[] {0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x2, + 0x1, 0x1, 0x1, 0x1}); + break; + case 27: + fastpackOddBitNoMask( + in, inpos, out, outpos, 27, + new int[] {0x5, 0xa, 0xf, 0x14, 0x19, 0x3, 0x8, 0xd, 0x12, + 0x17, 0x1, 0x6, 0xb, 0x10, 0x15, 0x1a, 0x4, 0x9, + 0xe, 0x13, 0x18, 0x2, 0x7, 0xc, 0x11, 0x16}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, + 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, + 0x1, 0x1, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 28: + fastpackEvenBitNoMask(in, inpos, out, outpos, 28, + new int[] {0x4, 0x8, 0xc, 0x10, 0x14, 0x18, 0x1c, + 0x4, 0x8, 0xc, 0x10, 0x14, 0x18}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 29: + fastpackOddBitNoMask( + in, inpos, out, outpos, 29, + new int[] {0x3, 0x6, 0x9, 0xc, 0xf, 0x12, 0x15, 0x18, 0x1b, 0x1, + 0x4, 0x7, 0xa, 0xd, 0x10, 0x13, 0x16, 0x19, 0x1c, 0x2, + 0x5, 0x8, 0xb, 0xe, 0x11, 0x14, 0x17, 0x1a}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 30: + fastpackEvenBitNoMask(in, inpos, out, outpos, 30, + new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, + 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 31: + fastpackOddBitNoMask( + in, inpos, out, outpos, 31, + new int[] {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, + 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 32: + System.arraycopy(in, inpos, out, outpos, 256); + break; + } + } + + public static void fastunpack(final int[] in, int inpos, final int[] out, + int outpos, int b) { + switch (b) { + case 0: + Arrays.fill(out, outpos, outpos + 256, 0); + break; + case 1: + fastUnpackOddBit(in, inpos, out, outpos, 1, new int[] {}, new int[] {}, + new int[] {}); + break; + case 2: + fastUnpackEventBit(in, inpos, out, outpos, 2, new int[] {}, new int[] {}, + new int[] {}); + break; + case 3: + fastUnpackOddBit(in, inpos, out, outpos, 3, new int[] {0x1, 0x2}, + new int[] {0x1, 0x3}, new int[] {0xa, 0xa}); + break; + case 4: + fastUnpackEventBit(in, inpos, out, outpos, 4, new int[] {0x4}, + new int[] {0xf}, new int[] {0x7}); + break; + case 5: + fastUnpackOddBit( + in, inpos, out, outpos, 5, new int[] {0x3, 0x1, 0x4, 0x2}, + new int[] {0x7, 0x1, 0xf, 0x3}, new int[] {0x5, 0x6, 0x5, 0x6}); + break; + case 6: + fastUnpackEventBit(in, inpos, out, outpos, 6, new int[] {0x4, 0x2}, + new int[] {0xf, 0x3}, new int[] {0x4, 0x5}); + break; + case 7: + fastUnpackOddBit(in, inpos, out, outpos, 7, + new int[] {0x3, 0x6, 0x2, 0x5, 0x1, 0x4}, + new int[] {0x7, 0x3f, 0x3, 0x1f, 0x1, 0xf}, + new int[] {0x4, 0x3, 0x4, 0x3, 0x4, 0x4}); + break; + case 8: + fastUnpackEventBit(in, inpos, out, outpos, 8, new int[] {0x8, 0x8, 0x8}, + new int[] {0xff, 0xff, 0xff}, + new int[] {0x3, 0x3, 0x3}); + break; + case 9: + fastUnpackOddBit(in, inpos, out, outpos, 9, + new int[] {0x4, 0x8, 0x3, 0x7, 0x2, 0x6, 0x1, 0x5}, + new int[] {0xf, 0xff, 0x7, 0x7f, 0x3, 0x3f, 0x1, 0x1f}, + new int[] {0x3, 0x2, 0x3, 0x2, 0x3, 0x2, 0x3, 0x3}); + break; + case 10: + fastUnpackEventBit( + in, inpos, out, outpos, 10, new int[] {0x8, 0x6, 0x4, 0x2}, + new int[] {0xff, 0x3f, 0xf, 0x3}, new int[] {0x2, 0x2, 0x2, 0x3}); + break; + case 11: + fastUnpackOddBit( + in, inpos, out, outpos, 11, + new int[] {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa}, + new int[] {0x1, 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff}, + new int[] {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}); + break; + case 12: + fastUnpackEventBit(in, inpos, out, outpos, 12, + new int[] {0x4, 0x8, 0xc, 0x4, 0x8}, + new int[] {0xf, 0xff, 0xfff, 0xf, 0xff}, + new int[] {0x2, 0x2, 0x1, 0x2, 0x2}); + break; + case 13: + fastUnpackOddBit(in, inpos, out, outpos, 13, + new int[] {0x7, 0x1, 0x8, 0x2, 0x9, 0x3, 0xa, 0x4, 0xb, + 0x5, 0xc, 0x6}, + new int[] {0x7f, 0x1, 0xff, 0x3, 0x1ff, 0x7, 0x3ff, 0xf, + 0x7ff, 0x1f, 0xfff, 0x3f}, + new int[] {0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, 0x2, 0x1, + 0x2, 0x1, 0x2}); + break; + case 14: + fastUnpackEventBit(in, inpos, out, outpos, 14, + new int[] {0xa, 0x6, 0x2, 0xc, 0x8, 0x4}, + new int[] {0x3ff, 0x3f, 0x3, 0xfff, 0xff, 0xf}, + new int[] {0x1, 0x1, 0x2, 0x1, 0x1, 0x2}); + break; + case 15: + fastUnpackOddBit(in, inpos, out, outpos, 15, + new int[] {0xd, 0xb, 0x9, 0x7, 0x5, 0x3, 0x1, 0xe, 0xc, + 0xa, 0x8, 0x6, 0x4, 0x2}, + new int[] {0x1fff, 0x7ff, 0x1ff, 0x7f, 0x1f, 0x7, 0x1, + 0x3fff, 0xfff, 0x3ff, 0xff, 0x3f, 0xf, 0x3}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x2}); + break; + case 16: + fastUnpackEventBit( + in, inpos, out, outpos, 16, + new int[] {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, + new int[] {0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 17: + fastUnpackOddBit(in, inpos, out, outpos, 17, + new int[] {0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10, 0x1, + 0x3, 0x5, 0x7, 0x9, 0xb, 0xd, 0xf}, + new int[] {0x3, 0xf, 0x3f, 0xff, 0x3ff, 0xfff, 0x3fff, + 0xffff, 0x1, 0x7, 0x1f, 0x7f, 0x1ff, 0x7ff, + 0x1fff, 0x7fff}, + new int[] {0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x1, + 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}); + break; + case 18: + fastUnpackEventBit( + in, inpos, out, outpos, 18, + new int[] {0x4, 0x8, 0xc, 0x10, 0x2, 0x6, 0xa, 0xe}, + new int[] {0xf, 0xff, 0xfff, 0xffff, 0x3, 0x3f, 0x3ff, 0x3fff}, + new int[] {0x1, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1}); + break; + case 19: + fastUnpackOddBit(in, inpos, out, outpos, 19, + new int[] {0x6, 0xc, 0x12, 0x5, 0xb, 0x11, 0x4, 0xa, + 0x10, 0x3, 0x9, 0xf, 0x2, 0x8, 0xe, 0x1, 0x7, + 0xd}, + new int[] {0x3f, 0xfff, 0x3ffff, 0x1f, 0x7ff, 0x1ffff, + 0xf, 0x3ff, 0xffff, 0x7, 0x1ff, 0x7fff, 0x3, + 0xff, 0x3fff, 0x1, 0x7f, 0x1fff}, + new int[] {0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, + 0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x1, 0x1}); + break; + case 20: + fastUnpackEventBit( + in, inpos, out, outpos, 20, + new int[] {0x8, 0x10, 0x4, 0xc, 0x14, 0x8, 0x10, 0x4, 0xc}, + new int[] {0xff, 0xffff, 0xf, 0xfff, 0xfffff, 0xff, 0xffff, 0xf, + 0xfff}, + new int[] {0x1, 0x0, 0x1, 0x1, 0x0, 0x1, 0x0, 0x1, 0x1}); + break; + case 21: + fastUnpackOddBit( + in, inpos, out, outpos, 21, + new int[] {0xa, 0x14, 0x9, 0x13, 0x8, 0x12, 0x7, 0x11, 0x6, 0x10, + 0x5, 0xf, 0x4, 0xe, 0x3, 0xd, 0x2, 0xc, 0x1, 0xb}, + new int[] {0x3ff, 0xfffff, 0x1ff, 0x7ffff, 0xff, 0x3ffff, 0x7f, + 0x1ffff, 0x3f, 0xffff, 0x1f, 0x7fff, 0xf, 0x3fff, + 0x7, 0x1fff, 0x3, 0xfff, 0x1, 0x7ff}, + new int[] {0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, + 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x1}); + break; + case 22: + fastUnpackEventBit( + in, inpos, out, outpos, 22, + new int[] {0xc, 0x2, 0xe, 0x4, 0x10, 0x6, 0x12, 0x8, 0x14, 0xa}, + new int[] {0xfff, 0x3, 0x3fff, 0xf, 0xffff, 0x3f, 0x3ffff, 0xff, + 0xfffff, 0x3ff}, + new int[] {0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1}); + break; + case 23: + fastUnpackOddBit( + in, inpos, out, outpos, 23, + new int[] {0xe, 0x5, 0x13, 0xa, 0x1, 0xf, 0x6, 0x14, + 0xb, 0x2, 0x10, 0x7, 0x15, 0xc, 0x3, 0x11, + 0x8, 0x16, 0xd, 0x4, 0x12, 0x9}, + new int[] {0x3fff, 0x1f, 0x7ffff, 0x3ff, 0x1, 0x7fff, + 0x3f, 0xfffff, 0x7ff, 0x3, 0xffff, 0x7f, + 0x1fffff, 0xfff, 0x7, 0x1ffff, 0xff, 0x3fffff, + 0x1fff, 0xf, 0x3ffff, 0x1ff}, + new int[] {0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, + 0x1, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x1}); + break; + case 24: + fastUnpackEventBit( + in, inpos, out, outpos, 24, + new int[] {0x10, 0x8, 0x18, 0x10, 0x8, 0x18, 0x10, 0x8, 0x18, 0x10, + 0x8}, + new int[] {0xffff, 0xff, 0xffffff, 0xffff, 0xff, 0xffffff, 0xffff, + 0xff, 0xffffff, 0xffff, 0xff}, + new int[] {0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1}); + break; + case 25: + fastUnpackOddBit( + in, inpos, out, outpos, 25, + new int[] {0x12, 0xb, 0x4, 0x16, 0xf, 0x8, 0x1, 0x13, + 0xc, 0x5, 0x17, 0x10, 0x9, 0x2, 0x14, 0xd, + 0x6, 0x18, 0x11, 0xa, 0x3, 0x15, 0xe, 0x7}, + new int[] {0x3ffff, 0x7ff, 0xf, 0x3fffff, 0x7fff, 0xff, + 0x1, 0x7ffff, 0xfff, 0x1f, 0x7fffff, 0xffff, + 0x1ff, 0x3, 0xfffff, 0x1fff, 0x3f, 0xffffff, + 0x1ffff, 0x3ff, 0x7, 0x1fffff, 0x3fff, 0x7f}, + new int[] {0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, + 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1}); + break; + case 26: + fastUnpackEventBit(in, inpos, out, outpos, 26, + new int[] {0x14, 0xe, 0x8, 0x2, 0x16, 0x10, 0xa, 0x4, + 0x18, 0x12, 0xc, 0x6}, + new int[] {0xfffff, 0x3fff, 0xff, 0x3, 0x3fffff, + 0xffff, 0x3ff, 0xf, 0xffffff, 0x3ffff, + 0xfff, 0x3f}, + new int[] {0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x0, 0x1}); + break; + case 27: + fastUnpackOddBit( + in, inpos, out, outpos, 27, + new int[] {0x16, 0x11, 0xc, 0x7, 0x2, 0x18, 0x13, 0xe, 0x9, + 0x4, 0x1a, 0x15, 0x10, 0xb, 0x6, 0x1, 0x17, 0x12, + 0xd, 0x8, 0x3, 0x19, 0x14, 0xf, 0xa, 0x5}, + new int[] {0x3fffff, 0x1ffff, 0xfff, 0x7f, 0x3, 0xffffff, + 0x7ffff, 0x3fff, 0x1ff, 0xf, 0x3ffffff, 0x1fffff, + 0xffff, 0x7ff, 0x3f, 0x1, 0x7fffff, 0x3ffff, + 0x1fff, 0xff, 0x7, 0x1ffffff, 0xfffff, 0x7fff, + 0x3ff, 0x1f}, + new int[] {0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1}); + break; + case 28: + fastUnpackEventBit(in, inpos, out, outpos, 28, + new int[] {0x18, 0x14, 0x10, 0xc, 0x8, 0x4, 0x1c, 0x18, + 0x14, 0x10, 0xc, 0x8, 0x4}, + new int[] {0xffffff, 0xfffff, 0xffff, 0xfff, 0xff, 0xf, + 0xfffffff, 0xffffff, 0xfffff, 0xffff, 0xfff, + 0xff, 0xf}, + new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1}); + break; + case 29: + fastUnpackOddBit( + in, inpos, out, outpos, 29, + new int[] {0x1a, 0x17, 0x14, 0x11, 0xe, 0xb, 0x8, 0x5, 0x2, 0x1c, + 0x19, 0x16, 0x13, 0x10, 0xd, 0xa, 0x7, 0x4, 0x1, 0x1b, + 0x18, 0x15, 0x12, 0xf, 0xc, 0x9, 0x6, 0x3}, + new int[] {0x3ffffff, 0x7fffff, 0xfffff, 0x1ffff, 0x3fff, + 0x7ff, 0xff, 0x1f, 0x3, 0xfffffff, + 0x1ffffff, 0x3fffff, 0x7ffff, 0xffff, 0x1fff, + 0x3ff, 0x7f, 0xf, 0x1, 0x7ffffff, + 0xffffff, 0x1fffff, 0x3ffff, 0x7fff, 0xfff, + 0x1ff, 0x3f, 0x7}, + new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}); + break; + case 30: + fastUnpackEventBit(in, inpos, out, outpos, 30, + new int[] {0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10, + 0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2}, + new int[] {0xfffffff, 0x3ffffff, 0xffffff, 0x3fffff, + 0xfffff, 0x3ffff, 0xffff, 0x3fff, 0xfff, + 0x3ff, 0xff, 0x3f, 0xf, 0x3}, + new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1}); + break; + case 31: + fastUnpackOddBit( + in, inpos, out, outpos, 31, + new int[] {0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18, 0x17, 0x16, 0x15, + 0x14, 0x13, 0x12, 0x11, 0x10, 0xf, 0xe, 0xd, 0xc, 0xb, + 0xa, 0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1}, + new int[] {0x3fffffff, 0x1fffffff, 0xfffffff, 0x7ffffff, 0x3ffffff, + 0x1ffffff, 0xffffff, 0x7fffff, 0x3fffff, 0x1fffff, + 0xfffff, 0x7ffff, 0x3ffff, 0x1ffff, 0xffff, + 0x7fff, 0x3fff, 0x1fff, 0xfff, 0x7ff, + 0x3ff, 0x1ff, 0xff, 0x7f, 0x3f, + 0x1f, 0xf, 0x7, 0x3, 0x1}, + new int[] {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}); + break; + + case 32: + System.arraycopy(in, inpos, out, outpos, 256); + break; + } + } +} diff --git a/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java new file mode 100644 index 0000000..0b6ca17 --- /dev/null +++ b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java @@ -0,0 +1,361 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + * (c) Intel Corp. (for Vector implementation) + */ +package me.lemire.integercompression.vector; + +import java.nio.ByteBuffer; +import java.util.Arrays; +import me.lemire.integercompression.IntegerCODEC; +import me.lemire.integercompression.SkippableIntegerCODEC; +import me.lemire.integercompression.IntWrapper; + +/** + * This is a patching scheme designed for speed. + * It encodes integers in blocks of integers within pages of + * up to 65536 integers. Note that it is important, to get good + * compression and good performance, to use sizeable arrays (greater than 1024 + * integers). For arrays containing a number of integers that is not divisible + * by BLOCK_SIZE, you should use it in conjunction with another CODEC: + * + * IntegerCODEC ic = new Composition(new VectorFastPFOR(), new VariableByte()). + *

    + * For details, please see: + *

    + *

    For sufficiently compressible and long arrays, it is faster and better + * than other PFOR schemes.

    + * + * Note that this does not use differential coding: if you are working on sorted + * lists, you should first compute deltas, @see + * me.lemire.integercompression.differential.Delta#delta. + * + * For multi-threaded applications, each thread should use its own FastPFOR + * object. + * + * @author Daniel Lemire + */ +public class VectorFastPFOR implements IntegerCODEC, SkippableIntegerCODEC { + private final static int OVERHEAD_OF_EACH_EXCEPT = 8; + public final static int DEFAULT_PAGE_SIZE = 64 << 10; + + public final static int BLOCK_SIZE = 256; + private final static int INTS_PER_BLOCK = BLOCK_SIZE >>> 5; + + private final int pageSize; + private final int[][] dataTobePacked = new int[33][]; + private int[] exceptData = null; + + // Working area for compress and uncompress. + private final int[] dataPointers = new int[33]; + private final int[] freqs = new int[33]; + private final byte[] bem; + /** + * Construct the FastPFOR CODEC. + * + * @param pagesize + * the desired page size (recommended value is + * FastPFOR.DEFAULT_PAGE_SIZE) + */ + private VectorFastPFOR(int pagesize) { + pageSize = pagesize; + // Initiate arrrays. + bem = new byte[3 * pageSize / BLOCK_SIZE + pagesize]; + for (int k = 1; k < dataTobePacked.length; ++k) + dataTobePacked[k] = new int[pageSize / 32 * 4]; // heuristic + exceptData = new int[pageSize * 4]; + } + + /** + * Construct the fastPFOR CODEC with default parameters. + */ + public VectorFastPFOR() { this(DEFAULT_PAGE_SIZE); } + + /** + * Compress data in blocks of BLOCK_SIZE integers (if fewer than BLOCK_SIZE + * integers are provided, nothing is done). + * + * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper) + */ + @Override + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, + int[] out, IntWrapper outpos) { + inlength = inlength - inlength % BLOCK_SIZE; + // Allocate memory for working area. + + final int finalinpos = inpos.get() + inlength; + while (inpos.get() != finalinpos) { + int thissize = Math.min(pageSize, finalinpos - inpos.get()); + encodePage(in, inpos, thissize, out, outpos); + } + } + + private void getBestBitSize(int[] in, int pos, int index) { + Arrays.fill(freqs, 0); + for (int i = pos, limit = pos + BLOCK_SIZE; i < limit; i++) { + freqs[32 - Integer.numberOfLeadingZeros(in[i])]++; + } + bem[index] = 32; + while (freqs[bem[index]] == 0) + bem[index]--; + bem[index + 2] = bem[index]; + int maxb = bem[index + 2]; + int bestcost = bem[index] * BLOCK_SIZE; + int cexcept = 0; + bem[index + 1] = 0; + for (int b = bem[index] - 1; b >= 0; --b) { + cexcept += freqs[b + 1]; + if (cexcept == BLOCK_SIZE) + break; + // the extra 8 is the cost of storing maxbits + int thiscost = cexcept * OVERHEAD_OF_EACH_EXCEPT + cexcept * (maxb - b) + + b * BLOCK_SIZE + 8; + if (maxb - b == 1) + thiscost -= cexcept; + if (thiscost < bestcost) { + bestcost = thiscost; + bem[index] = (byte)b; + bem[index + 1] = (byte)cexcept; + } + } + } + + private void encodePage(int[] in, IntWrapper inpos, int thissize, int[] out, + IntWrapper outpos) { + final int headerpos = outpos.get(); + outpos.increment(); + int tmpoutpos = outpos.get(); + + // Clear working area. + Arrays.fill(dataPointers, 0); + Arrays.fill(bem, (byte)0); + + int tmpinpos = inpos.get(); + final int finalinpos = tmpinpos + thissize - BLOCK_SIZE; + int bindex = 0; + for (; tmpinpos <= finalinpos; tmpinpos += BLOCK_SIZE) { + getBestBitSize(in, tmpinpos, bindex); + final int tmpexcept = bem[bindex + 1] & 0xFF; + final int tmpbestb = bem[bindex]; + if (tmpexcept > 0) { + final int index = bem[bindex + 2] - tmpbestb; + if (dataPointers[index] + tmpexcept >= dataTobePacked[index].length) { + int newsize = 2 * (dataPointers[index] + tmpexcept); + int val = newsize + BLOCK_SIZE - 1; + newsize = val - val % BLOCK_SIZE; + dataTobePacked[index] = Arrays.copyOf(dataTobePacked[index], newsize); + } + bindex += 3; + for (int k = 0; k < BLOCK_SIZE; ++k) { + if ((in[k + tmpinpos] >>> tmpbestb) != 0) { + // we have an exception + bem[bindex++] = (byte)k; + dataTobePacked[index][dataPointers[index]++] = + in[k + tmpinpos] >>> tmpbestb; + } + } + } else { + bindex += 2; + } + VectorBitPacker.fastpack(in, tmpinpos, out, tmpoutpos, tmpbestb); + tmpoutpos += INTS_PER_BLOCK * tmpbestb; + } + inpos.set(tmpinpos); + out[headerpos] = tmpoutpos - headerpos; + + int bytesize = bindex; + out[tmpoutpos++] = bytesize; + + bytesize = bytesize % 4 == 0 ? bytesize : (bytesize / 4) * 4 + 4; + for (int i = 0; i <= bytesize - 4; i += 4) { + out[tmpoutpos] = bem[i] & 0xFF; + out[tmpoutpos] |= (bem[i + 1] & 0xFF) << 8; + out[tmpoutpos] |= (bem[i + 2] & 0xFF) << 16; + out[tmpoutpos] |= (bem[i + 3] & 0xFF) << 24; + tmpoutpos++; + } + + int bitmap = 0; + for (int k = 2; k <= 32; ++k) { + if (dataPointers[k] != 0) + bitmap |= (1 << (k - 1)); + } + out[tmpoutpos++] = bitmap; + + for (int k = 2; k <= 32; ++k) { + if (dataPointers[k] != 0) { + out[tmpoutpos++] = dataPointers[k]; // size + int j = 0; + int n = (dataPointers[k] / BLOCK_SIZE) * BLOCK_SIZE; + for (; j < n; j += BLOCK_SIZE) { + VectorBitPacker.fastpackNoMask(dataTobePacked[k], j, out, tmpoutpos, + k); + tmpoutpos += INTS_PER_BLOCK * k; + } + int r = dataPointers[k] % BLOCK_SIZE; + if (r != 0) { + tmpoutpos = VectorBitPacker.slowpack(dataTobePacked[k], j, r, out, + tmpoutpos, k); + tmpoutpos++; + } + } + } + outpos.set(tmpoutpos); + } + + /** + * Uncompress data in blocks of integers. In this particular case, + * the inlength parameter is ignored: it is deduced from the compressed + * data. + * + * @see IntegerCODEC#compress(int[], IntWrapper, int, int[], IntWrapper) + */ + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, + int[] out, IntWrapper outpos, int mynvalue) { + mynvalue = mynvalue - mynvalue % BLOCK_SIZE; + int finalout = outpos.get() + mynvalue; + while (outpos.get() != finalout) { + int thissize = Math.min(pageSize, finalout - outpos.get()); + decodePage(in, inpos, out, outpos, thissize); + } + } + + private void loadMetaData(int[] in, int inexcept, int bytesize) { + // Arrays.fill(bem, (byte)0); + int len = (bytesize + 3) / 4; + int lc = 0; + for (int i = 0; i < len; i++) { + bem[lc++] = (byte)(in[inexcept + i]); + bem[lc++] = (byte)(in[inexcept + i] >>> 8); + bem[lc++] = (byte)(in[inexcept + i] >>> 16); + bem[lc++] = (byte)(in[inexcept + i] >>> 24); + } + } + + private void decodePage(int[] in, IntWrapper inpos, int[] out, + IntWrapper outpos, int thissize) { + final int initpos = inpos.get(); + final int wheremeta = in[inpos.get()]; + inpos.increment(); + int inexcept = initpos + wheremeta; + + final int bytesize = in[inexcept++]; + loadMetaData(in, inexcept, bytesize); + inexcept += (bytesize + 3) / 4; + final int bitmap = in[inexcept++]; + for (int k = 2; k <= 32; ++k) { + if ((bitmap & (1 << (k - 1))) != 0) { + int size = in[inexcept++]; + int val = size + BLOCK_SIZE - 1; + int roundedup = val - val % BLOCK_SIZE; + if (dataTobePacked[k].length < roundedup) + dataTobePacked[k] = new int[roundedup]; + if (inexcept + roundedup / 32 * k <= in.length) { + int j = 0; + int len = (size / BLOCK_SIZE) * BLOCK_SIZE; + for (; j < len; j += BLOCK_SIZE) { + VectorBitPacker.fastunpack(in, inexcept, dataTobePacked[k], j, k); + inexcept += INTS_PER_BLOCK * k; + } + int r = size % BLOCK_SIZE; + inexcept = VectorBitPacker.slowunpack(in, inexcept, dataTobePacked[k], + j, r, k); + } else { + int j = 0; + val = roundedup / 32 * k + BLOCK_SIZE - 1; + int[] buf = new int[val - val % BLOCK_SIZE]; + int initinexcept = inexcept; + System.arraycopy(in, inexcept, buf, 0, in.length - inexcept); + int l = (size / BLOCK_SIZE) * BLOCK_SIZE; + for (; j < l; j += BLOCK_SIZE) { + VectorBitPacker.fastunpack(buf, inexcept - initinexcept, + dataTobePacked[k], j, k); + inexcept += INTS_PER_BLOCK * k; + } + int r = size % BLOCK_SIZE; + inexcept = VectorBitPacker.slowunpack(in, inexcept, dataTobePacked[k], + j, r, k); + } + } + } + Arrays.fill(dataPointers, 0); + int tmpoutpos = outpos.get(); + int tmpinpos = inpos.get(); + int idx = 0; + for (int run = 0, run_end = thissize / BLOCK_SIZE; run < run_end; + ++run, tmpoutpos += BLOCK_SIZE) { + final int b = bem[idx]; // byteContainer.get(); + final int cexcept = bem[idx + 1] & 0xFF; // byteContainer.get() & 0xFF; + VectorBitPacker.fastunpack(in, tmpinpos, out, tmpoutpos, b); + tmpinpos += INTS_PER_BLOCK * b; + if (cexcept > 0) { + final int maxbits = bem[idx + 2]; // byteContainer.get(); + idx += 3; + final int index = maxbits - b; + if (index == 1) { + for (int k = 0; k < cexcept; ++k) { + final int pos = bem[idx++] & 0xFF; // byteContainer.get() & 0xFF; + out[pos + tmpoutpos] |= 1 << b; + } + } else { + for (int k = 0; k < cexcept; ++k) { + final int pos = bem[idx++] & 0xFF; // byteContainer.get() & 0xFF; + final int exceptvalue = + dataTobePacked[index][dataPointers[index]++]; + out[pos + tmpoutpos] |= exceptvalue << b; + } + } + } else { + idx += 2; + } + } + outpos.set(tmpoutpos); + inpos.set(inexcept); + } + + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, + IntWrapper outpos) { + inlength = inlength - inlength % BLOCK_SIZE; + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } + + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, + IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); + } + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this + * method with a custom behavior. The default implementation allocates a new + * Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..14e4c1c --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,8 @@ +// Copyright (C) 2022 Intel Corporation + +// SPDX-License-Identifier: Apache-2.0 +module me.lemire.integercompression { + requires jdk.incubator.vector; + exports me.lemire.integercompression; + exports me.lemire.integercompression.vector; +} From a131d14fbc80192a0e75526f9c1b5bb82ba42e1c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 16 Nov 2022 08:35:06 -0500 Subject: [PATCH 072/170] Update link to Ikhtear's thesis --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46f771d..05800b6 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,7 @@ We wrote several research papers documenting many of the CODECs implemented here Ikhtear Sharif wrote his M.Sc. thesis on this library: Ikhtear Sharif, Performance Evaluation of Fast Integer Compression Techniques Over Tables, M.Sc. thesis, UNB 2013. -http://lemire.me/fr/documents/thesis/IkhtearThesis.pdf +https://unbscholar.lib.unb.ca/islandora/object/unbscholar%3A9399/datastream/PDF/view He also posted his slides online: http://www.slideshare.net/ikhtearSharif/ikhtear-defense From 6ecb497531bcf6095f7ff0c02f04834316bb4ed0 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:07:53 -0500 Subject: [PATCH 073/170] Adding github actions. --- .github/workflows/basic.yml | 24 ++++++++++++++++++++++++ README.md | 15 +++++---------- example.java | 3 +-- pom.xml | 11 ++++++++--- 4 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 .github/workflows/basic.yml diff --git a/.github/workflows/basic.yml b/.github/workflows/basic.yml new file mode 100644 index 0000000..c110525 --- /dev/null +++ b/.github/workflows/basic.yml @@ -0,0 +1,24 @@ +name: Java CI + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + java: [ 11, 16 ] + steps: + - uses: actions/checkout@v2 + - name: Set up JDK + uses: actions/setup-java@v2.5.0 + with: + java-version: ${{ matrix.java }} + distribution: 'adopt' + - name: Build and test with Maven + run: mvn package + - name: Build example + run: javac -cp target/classes/:. example.java + - name: Run example + run: java -cp target/classes/:. example \ No newline at end of file diff --git a/README.md b/README.md index 05800b6..833014b 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,8 @@ Most others do not. The Java Team at Intel (R) introduced the vector implementation for FastPFOR based on the Java Vector API that showed significant gains over the non-vectorized implementation. For an example usage, see -examples/vector/Example.java. The feature requires JDK 19+. +examples/vector/Example.java. The feature requires JDK 19+ and is currently for +advanced users. Maven central repository ------------------------ @@ -166,21 +167,15 @@ Speed is always reported in millions of integers per second. For Maven users --------------- -If you are running JDK 19+ -``` -mvn compile -``` - -If you are running earlier versions of JDK ``` -mvn compiler:compile@default-compile +mvn compile +mvn exec:java ``` -mvn exec:java -For ant users +For ant users (legacy, currently untested) ------------- If you use Apache ant, please try this: diff --git a/example.java b/example.java index 6569ebd..817e94f 100644 --- a/example.java +++ b/example.java @@ -88,8 +88,7 @@ public static void basicExample() { /** * Like the basicExample, but we store the input array size manually. */ - @Test - public void basicExampleHeadless() { + public static void basicExampleHeadless() { int[] data = new int[2342351]; System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); // data should be sorted for best diff --git a/pom.xml b/pom.xml index 855aa92..c007aa8 100644 --- a/pom.xml +++ b/pom.xml @@ -64,6 +64,10 @@ org.apache.maven.plugins maven-compiler-plugin 3.8.0 + + 11 + 11 + default-compile @@ -84,9 +88,10 @@ compile - + + @@ -127,7 +132,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.0.0 + 3.4.1 com.kamikaze.pfordelta:me.lemire.integercompression.benchmarktools From 3a6c3e41ca37329bdc11a3e6d34e402c360bbf6d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:29:55 -0500 Subject: [PATCH 074/170] We are not going to rely on the vector module by default for now. --- pom.xml | 14 +++++++------- src/main/java/module-info.java | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index c007aa8..f37ef66 100644 --- a/pom.xml +++ b/pom.xml @@ -80,19 +80,19 @@ me/lemire/integercompression/vector/* module-info.java - - - + + + + - - + + --> diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 14e4c1c..d2a749c 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -2,7 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 module me.lemire.integercompression { - requires jdk.incubator.vector; + // This is currently only for advanced users: + // requires jdk.incubator.vector; exports me.lemire.integercompression; exports me.lemire.integercompression.vector; } From 2c28f54b1a1c62b9beb6aef39731db6158821514 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:31:29 -0500 Subject: [PATCH 075/170] Adding more documentation. --- .github/workflows/basic.yml | 2 +- README.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/basic.yml b/.github/workflows/basic.yml index c110525..cb3e3e8 100644 --- a/.github/workflows/basic.yml +++ b/.github/workflows/basic.yml @@ -19,6 +19,6 @@ jobs: - name: Build and test with Maven run: mvn package - name: Build example - run: javac -cp target/classes/:. example.java + run: javac -cp target/classes/:. example.java - name: Run example run: java -cp target/classes/:. example \ No newline at end of file diff --git a/README.md b/README.md index 833014b..c65513a 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,13 @@ mvn compile mvn exec:java ``` +You may run our examples as follows: + +```` +mvn package +javac -cp target/classes/:. example.java +java -cp target/classes/:. example +``` For ant users (legacy, currently untested) ------------- From 25840b455b307073d1b890179494523f1ae9e37e Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:44:47 -0500 Subject: [PATCH 076/170] Excluding vector from javadoc --- README.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c65513a..c421a00 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ Speed is always reported in millions of integers per second. For Maven users --------------- - +The current development versions assume JDK 11 or better. ``` mvn compile diff --git a/pom.xml b/pom.xml index f37ef66..fc6912b 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,7 @@ maven-javadoc-plugin 3.4.1 - com.kamikaze.pfordelta:me.lemire.integercompression.benchmarktools + me.lemire.integercompression.vector;com.kamikaze.pfordelta:me.lemire.integercompression.benchmarktools From f5f64f1eb736c6909d208fc0d3472038dae29499 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:49:21 -0500 Subject: [PATCH 077/170] Fixing documentation. --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c421a00..19046ad 100644 --- a/README.md +++ b/README.md @@ -147,19 +147,16 @@ Reference: Requirements ------------ -A recent Java compiler. Java 7 or better is recommended. +Releases up to 0.1.12 require Java 7 or better. -Good instructions on installing Java 7 on Linux: +The current development versions assume JDK 11 or better. -http://forums.linuxmint.com/viewtopic.php?f=42&t=93052 How fast is it? --------------- -Compile the code and execute me.lemire.integercompression.benchmarktools.Benchmark. - -I recommend running all the benchmarks with the "-server" flag on a desktop machine. +Compile the code and execute `me.lemire.integercompression.benchmarktools.Benchmark`. Speed is always reported in millions of integers per second. @@ -167,7 +164,6 @@ Speed is always reported in millions of integers per second. For Maven users --------------- -The current development versions assume JDK 11 or better. ``` mvn compile From 0847f6942e9a40b4512c187669d00f8927ed9b72 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:53:58 -0500 Subject: [PATCH 078/170] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 19046ad..51d16cf 100644 --- a/README.md +++ b/README.md @@ -172,7 +172,7 @@ mvn exec:java You may run our examples as follows: -```` +``` mvn package javac -cp target/classes/:. example.java java -cp target/classes/:. example From 16a89d759dd5ed80578f1ca7175c8e314e5e9780 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 25 Nov 2022 10:54:51 -0500 Subject: [PATCH 079/170] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51d16cf..f629b5e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ JavaFastPFOR: A simple integer compression library in Java ========================================================== [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] [![Code Quality: Cpp](https://img.shields.io/lgtm/grade/java/g/lemire/JavaFastPFOR.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/lemire/JavaFastPFOR/context:java) - +[![Java CI](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml/badge.svg)](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml) License From c628213c23a5b17f78c2ec1ba53f036e9dd8347a Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Sat, 26 Nov 2022 11:19:18 +0400 Subject: [PATCH 080/170] Introduce LongVariableBytex --- .gitignore | 1 + .../integercompression/ByteIntegerCODEC.java | 4 +- .../DeltaZigzagVariableByte.java | 2 +- .../integercompression/IntegerCODEC.java | 4 +- .../SkippableIntegerCODEC.java | 6 +- .../integercompression/VariableByte.java | 14 +- .../lemire/longcompression/ByteLongCODEC.java | 62 ++++ .../me/lemire/longcompression/LongCODEC.java | 62 ++++ .../lemire/longcompression/LongJustCopy.java | 52 +++ .../me/lemire/longcompression/LongUtil.java | 15 + .../longcompression/LongVariableByte.java | 342 ++++++++++++++++++ .../longcompression/SkippableLongCODEC.java | 69 ++++ .../lemire/integercompression/TestUtils.java | 2 +- .../lemire/longcompression/LongTestUtils.java | 126 +++++++ .../longcompression/SkippableBasicTest.java | 138 +++++++ .../longcompression/TestLongVariableByte.java | 68 ++++ 16 files changed, 954 insertions(+), 13 deletions(-) create mode 100644 src/main/java/me/lemire/longcompression/ByteLongCODEC.java create mode 100644 src/main/java/me/lemire/longcompression/LongCODEC.java create mode 100644 src/main/java/me/lemire/longcompression/LongJustCopy.java create mode 100644 src/main/java/me/lemire/longcompression/LongUtil.java create mode 100644 src/main/java/me/lemire/longcompression/LongVariableByte.java create mode 100644 src/main/java/me/lemire/longcompression/SkippableLongCODEC.java create mode 100644 src/test/java/me/lemire/longcompression/LongTestUtils.java create mode 100644 src/test/java/me/lemire/longcompression/SkippableBasicTest.java create mode 100644 src/test/java/me/lemire/longcompression/TestLongVariableByte.java diff --git a/.gitignore b/.gitignore index 53960d2..88b3320 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .classpath +.settings .project *.class *.csv diff --git a/src/main/java/me/lemire/integercompression/ByteIntegerCODEC.java b/src/main/java/me/lemire/integercompression/ByteIntegerCODEC.java index 47d4f57..6e8f903 100644 --- a/src/main/java/me/lemire/integercompression/ByteIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/ByteIntegerCODEC.java @@ -18,9 +18,9 @@ public interface ByteIntegerCODEC { * Compress data from an array to another array. * * Both inpos and outpos are modified to represent how much data was - * read and written to if 12 ints (inlength = 12) are compressed to 3 + * read and written to. If 12 ints (inlength = 12) are compressed to 3 * bytes, then inpos will be incremented by 12 while outpos will be - * incremented by 3 we use IntWrapper to pass the values by reference. + * incremented by 3. We use IntWrapper to pass the values by reference. * * @param in * input array diff --git a/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java b/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java index 4b2f896..ca9d0ad 100644 --- a/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java +++ b/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java @@ -105,7 +105,7 @@ public void uncompress(int[] inBuf, IntWrapper inPos, int inLen, int ip = inPos.get(); int op = outPos.get(); - int vbcNum = 0, vbcShift = 24; // Varialbe Byte Context. + int vbcNum = 0, vbcShift = 24; // Variable Byte Context. final int inPosLast = ip + inLen; while (ip < inPosLast) { // Fetch a byte value. diff --git a/src/main/java/me/lemire/integercompression/IntegerCODEC.java b/src/main/java/me/lemire/integercompression/IntegerCODEC.java index 7929e48..f2c9c7a 100644 --- a/src/main/java/me/lemire/integercompression/IntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/IntegerCODEC.java @@ -18,9 +18,9 @@ public interface IntegerCODEC { * Compress data from an array to another array. * * Both inpos and outpos are modified to represent how much data was - * read and written to if 12 ints (inlength = 12) are compressed to 3 + * read and written to. If 12 ints (inlength = 12) are compressed to 3 * ints, then inpos will be incremented by 12 while outpos will be - * incremented by 3 we use IntWrapper to pass the values by reference. + * incremented by 3. We use IntWrapper to pass the values by reference. * * @param in * input array diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java index c10d2f0..4568d71 100644 --- a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java @@ -10,7 +10,7 @@ /** * Interface describing a standard CODEC to compress integers. This is a - * variation on the IntegerCODEC interface meant to be used for random access. + * variation on the IntegerCODEC interface meant to be used for head access. * * The main difference is that we must specify the number of integers we wish to * decode. This information should be stored elsewhere. @@ -25,8 +25,8 @@ public interface SkippableIntegerCODEC { * Compress data from an array to another array. * * Both inpos and outpos are modified to represent how much data was read - * and written to if 12 ints (inlength = 12) are compressed to 3 ints, then - * inpos will be incremented by 12 while outpos will be incremented by 3 we + * and written to. If 12 ints (inlength = 12) are compressed to 3 ints, then + * inpos will be incremented by 12 while outpos will be incremented by 3. We * use IntWrapper to pass the values by reference. * * @param in diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index 5b25c43..7854b24 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -122,8 +122,11 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, for (int v = 0, shift = 0; p < finalp;) { val = in[p]; int c = (byte) (val >>> s); + // Shift to next byte s += 8; + // Shift to next integer if s==32 p += s>>5; + // cycle from 31 to 0 s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { @@ -186,10 +189,13 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o int finaloutpos = num + tmpoutpos; for (int v = 0, shift = 0; tmpoutpos < finaloutpos;) { val = in[p]; - int c = val >>> s; - s += 8; - p += s>>5; - s = s & 31; + int c = val >>> s; + // Shift to next byte + s += 8; + // Shift to next integer if s==32 + p += s>>5; + // cycle from 31 to 0 + s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { out[tmpoutpos++] = v; diff --git a/src/main/java/me/lemire/longcompression/ByteLongCODEC.java b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java new file mode 100644 index 0000000..e405370 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java @@ -0,0 +1,62 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import me.lemire.integercompression.IntWrapper; + +/** + * Interface describing a CODEC to compress longs to bytes. + * + * @author Benoit Lacelle + * + */ +public interface ByteLongCODEC { + /** + * Compress data from an array to another array. + * + * Both inpos and outpos are modified to represent how much data was + * read and written to. If 12 longs (inlength = 12) are compressed to 3 + * bytes, then inpos will be incremented by 12 while outpos will be + * incremented by 3. We use IntWrapper to pass the values by reference. + * + * @param in + * input array + * @param inpos + * location in the input array + * @param inlength + * how many longs to compress + * @param out + * output array + * @param outpos + * where to write in the output array + */ + public void compress(long[] in, IntWrapper inpos, int inlength, + byte[] out, IntWrapper outpos); + + /** + * Uncompress data from an array to another array. + * + * Both inpos and outpos parameters are modified to indicate new + * positions after read/write. + * + * @param in + * array containing data in compressed form + * @param inpos + * where to start reading in the array + * @param inlength + * length of the compressed data (ignored by some + * schemes) + * @param out + * array where to write the compressed output + * @param outpos + * where to write the compressed output in out + */ + public void uncompress(byte[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos); + +} diff --git a/src/main/java/me/lemire/longcompression/LongCODEC.java b/src/main/java/me/lemire/longcompression/LongCODEC.java new file mode 100644 index 0000000..c0f67b2 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongCODEC.java @@ -0,0 +1,62 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import me.lemire.integercompression.IntWrapper; + +/** + * Interface describing a standard CODEC to compress longs. + * + * @author Benoit Lacelle + * + */ +public interface LongCODEC { + /** + * Compress data from an array to another array. + * + * Both inpos and outpos are modified to represent how much data was + * read and written to. If 12 longs (inlength = 12) are compressed to 3 + * longs, then inpos will be incremented by 12 while outpos will be + * incremented by 3. We use IntWrapper to pass the values by reference. + * + * @param in + * input array + * @param inpos + * location in the input array + * @param inlength + * how many longs to compress + * @param out + * output array + * @param outpos + * where to write in the output array + */ + public void compress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos); + + /** + * Uncompress data from an array to another array. + * + * Both inpos and outpos parameters are modified to indicate new + * positions after read/write. + * + * @param in + * array containing data in compressed form + * @param inpos + * where to start reading in the array + * @param inlength + * length of the compressed data (ignored by some + * schemes) + * @param out + * array where to write the compressed output + * @param outpos + * where to write the compressed output in out + */ + public void uncompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos); + +} diff --git a/src/main/java/me/lemire/longcompression/LongJustCopy.java b/src/main/java/me/lemire/longcompression/LongJustCopy.java new file mode 100644 index 0000000..7a5a67a --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongJustCopy.java @@ -0,0 +1,52 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import me.lemire.integercompression.IntWrapper; + +/** + * @author Benoit lacelle + * + */ +public final class LongJustCopy implements LongCODEC, SkippableLongCODEC { + + @Override + public void headlessCompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + System.arraycopy(in, inpos.get(), out, outpos.get(), inlength); + inpos.add(inlength); + outpos.add(inlength); + } + + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + headlessUncompress(in,inpos,inlength,out,outpos,inlength); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + @Override + public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos, int num) { + System.arraycopy(in, inpos.get(), out, outpos.get(), num); + inpos.add(num); + outpos.add(num); + + } + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + headlessCompress(in,inpos,inlength,out,outpos); + } + +} diff --git a/src/main/java/me/lemire/longcompression/LongUtil.java b/src/main/java/me/lemire/longcompression/LongUtil.java new file mode 100644 index 0000000..6ebbfb7 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongUtil.java @@ -0,0 +1,15 @@ +package me.lemire.longcompression; + +/** + * These are unofficial helpers related to long compression + * + * @author Benoit Lacelle + * + */ +@Deprecated +public class LongUtil { + + protected static String longToBinaryWithLeading(long l) { + return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); + } +} diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java new file mode 100644 index 0000000..a2db990 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -0,0 +1,342 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ +package me.lemire.longcompression; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.LongBuffer; + +import me.lemire.integercompression.IntWrapper; + +/** + * Implementation of variable-byte. For best performance, use it using the + * ByteLongCODEC interface. + * + * Note that this does not use differential coding: if you are working on sorted + * lists, you must compute the deltas separately. + * + * @author Benoit Lacelle + */ +public class LongVariableByte implements LongCODEC, ByteLongCODEC, SkippableLongCODEC { + + private static byte extract7bits(int i, long val) { + return (byte) ((val >>> (7 * i)) & ((1 << 7) - 1)); + } + + private static byte extract7bitsmaskless(int i, long val) { + return (byte) ((val >>> (7 * i))); + } + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos) { + headlessCompress(in, inpos, inlength, out, outpos); + } + + @Override + public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos) { + if (inlength == 0) + return; + ByteBuffer buf = makeBuffer(inlength * 16); + buf.order(ByteOrder.LITTLE_ENDIAN); + for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { + final long val = in[k]; + // System.out.println(LongUtil.longToBinaryWithLeading(val)); + if (val >= 0 && val < (1 << 7)) { + buf.put((byte) (val | (1 << 7))); + } else if (val >= 0 && val < (1 << 14)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) (extract7bitsmaskless(1, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 21)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) (extract7bitsmaskless(2, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 28)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) (extract7bitsmaskless(3, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 35)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) extract7bits(3, val)); + buf.put((byte) (extract7bitsmaskless(4, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 42)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) extract7bits(3, val)); + buf.put((byte) extract7bits(4, val)); + buf.put((byte) (extract7bitsmaskless(5, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 49)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) extract7bits(3, val)); + buf.put((byte) extract7bits(4, val)); + buf.put((byte) extract7bits(5, val)); + buf.put((byte) (extract7bitsmaskless(6, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 56)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) extract7bits(3, val)); + buf.put((byte) extract7bits(4, val)); + buf.put((byte) extract7bits(5, val)); + buf.put((byte) extract7bits(6, val)); + buf.put((byte) (extract7bitsmaskless(7, (val)) | (1 << 7))); + } else if (val >= 0 && val < (1 << 63)) { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) extract7bits(3, val)); + buf.put((byte) extract7bits(4, val)); + buf.put((byte) extract7bits(5, val)); + buf.put((byte) extract7bits(6, val)); + buf.put((byte) extract7bits(7, val)); + buf.put((byte) (extract7bitsmaskless(8, (val)) | (1 << 7))); + } else { + buf.put((byte) extract7bits(0, val)); + buf.put((byte) extract7bits(1, val)); + buf.put((byte) extract7bits(2, val)); + buf.put((byte) extract7bits(3, val)); + buf.put((byte) extract7bits(4, val)); + buf.put((byte) extract7bits(5, val)); + buf.put((byte) extract7bits(6, val)); + buf.put((byte) extract7bits(7, val)); + buf.put((byte) extract7bits(8, val)); + buf.put((byte) (extract7bitsmaskless(9, (val)) | (1 << 7))); + } + } + while (buf.position() % 8 != 0) + buf.put((byte) 0); + final int length = buf.position(); + buf.flip(); + LongBuffer ibuf = buf.asLongBuffer(); + ibuf.get(out, outpos.get(), length / 8); + outpos.add(length / 8); + inpos.add(inlength); + } + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, + IntWrapper outpos) { + if (inlength == 0) + return; + int outpostmp = outpos.get(); + for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { + final long val = in[k]; + if (val >= 0 && val < (1 << 7)) { + out[outpostmp++] = (byte) (val | (1 << 7)); + } else if (val >= 0 && val < (1 << 14)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(1, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 21)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(2, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 28)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(3, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 35)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) extract7bits(3, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(4, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 42)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) extract7bits(3, val); + out[outpostmp++] = (byte) extract7bits(4, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(5, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 49)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) extract7bits(3, val); + out[outpostmp++] = (byte) extract7bits(4, val); + out[outpostmp++] = (byte) extract7bits(5, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(6, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 56)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) extract7bits(3, val); + out[outpostmp++] = (byte) extract7bits(4, val); + out[outpostmp++] = (byte) extract7bits(5, val); + out[outpostmp++] = (byte) extract7bits(6, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(7, (val)) | (1 << 7)); + } else if (val >= 0 && val < (1 << 63)) { + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) extract7bits(3, val); + out[outpostmp++] = (byte) extract7bits(4, val); + out[outpostmp++] = (byte) extract7bits(5, val); + out[outpostmp++] = (byte) extract7bits(6, val); + out[outpostmp++] = (byte) extract7bits(7, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(8, (val)) | (1 << 7)); + } else { + // System.out.println(LongUtil.longToBinaryWithLeading(val)); + out[outpostmp++] = (byte) extract7bits(0, val); + out[outpostmp++] = (byte) extract7bits(1, val); + out[outpostmp++] = (byte) extract7bits(2, val); + out[outpostmp++] = (byte) extract7bits(3, val); + out[outpostmp++] = (byte) extract7bits(4, val); + out[outpostmp++] = (byte) extract7bits(5, val); + out[outpostmp++] = (byte) extract7bits(6, val); + out[outpostmp++] = (byte) extract7bits(7, val); + out[outpostmp++] = (byte) extract7bits(8, val); + out[outpostmp++] = (byte) (extract7bitsmaskless(9, (val)) | (1 << 7)); + } + } + outpos.set(outpostmp); + inpos.add(inlength); + } + + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos) { + int s = 0; + long val = 0; + int p = inpos.get(); + int finalp = inpos.get() + inlength; + int tmpoutpos = outpos.get(); + for (long v = 0, shift = 0; p < finalp;) { + val = in[p]; + // System.out.println(LongUtil.longToBinaryWithLeading(val)); + long c = (byte) (val >>> s); + // Shift to next byte + s += 8; + // Shift to next long if s==64 + p += s>>6; + // cycle from 63 to 0 + s = s & 63; + v += ((c & 127) << shift); + if ((c & 128) == 128) { + out[tmpoutpos++] = v; + v = 0; + shift = 0; + } else + shift += 7; + assert shift < 64; + } + outpos.set(tmpoutpos); + inpos.add(inlength); + } + + @Override + public void uncompress(byte[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + int p = inpos.get(); + int finalp = inpos.get() + inlength; + int tmpoutpos = outpos.get(); + for (long v = 0; p < finalp; out[tmpoutpos++] = v) { + v = in[p] & 0x7F; + if (in[p] < 0) { + p += 1; + continue; + } + v = ((in[p + 1] & 0x7F) << 7) | v; + if (in[p + 1] < 0) { + p += 2; + continue; + } + v = ((in[p + 2] & 0x7F) << 14) | v; + if (in[p + 2] < 0 ) { + p += 3; + continue; + } + v = ((in[p + 3] & 0x7F) << 21) | v; + if (in[p + 3] < 0) { + p += 4; + continue; + } + v = (((long) in[p + 4] & 0x7F) << 28) | v; + if (in[p + 4] < 0) { + p += 5; + continue; + } + v = (((long) in[p + 5] & 0x7F) << 35) | v; + if (in[p + 5] < 0) { + p += 6; + continue; + } + v = (((long) in[p + 6] & 0x7F) << 42) | v; + if (in[p + 6] < 0) { + p += 7; + continue; + } + v = (((long) in[p + 7] & 0x7F) << 49) | v; + if (in[p + 7] < 0) { + p += 8; + continue; + } + v = (((long) in[p + 8] & 0x7F) << 56) | v; + if (in[p + 8] < 0) { + p += 9; + continue; + } + v = (((long) in[p + 9] & 0x7F) << 63) | v; + p += 10; + } + outpos.set(tmpoutpos); + inpos.add(p); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + @Override + public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos, int num) { + int s = 0; + long val = 0; + int p = inpos.get(); + int tmpoutpos = outpos.get(); + int finaloutpos = num + tmpoutpos; + for (long v = 0, shift = 0; tmpoutpos < finaloutpos;) { + val = in[p]; + // System.out.println(longToBinaryWithLeading(val)); + long c = val >>> s; + // Shift to next byte + s += 8; + // Shift to next long if s == 64 + p += s>>6; + // cycle from 63 to 0 + s = s & 63; + v += ((c & 127) << shift); + if ((c & 128) == 128) { + out[tmpoutpos++] = v; + v = 0; + shift = 0; + } else + shift += 7; + assert shift < 64; + } + outpos.set(tmpoutpos); + inpos.set(p + (s!=0 ? 1 : 0)); + } + + /** + * Creates a new buffer of the requested size. + * + * In case you need a different way to allocate buffers, you can override this method + * with a custom behavior. The default implementation allocates a new Java direct + * {@link ByteBuffer} on each invocation. + */ + protected ByteBuffer makeBuffer(int sizeInBytes) { + return ByteBuffer.allocateDirect(sizeInBytes); + } +} diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java new file mode 100644 index 0000000..e3e7b84 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java @@ -0,0 +1,69 @@ +/** + * This is code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import me.lemire.integercompression.IntWrapper; + +/** + * Interface describing a standard CODEC to compress longs. This is a + * variation on the LongCODEC interface meant to be used for head access. + * + * The main difference is that we must specify the number of longs we wish to + * decode. This information should be stored elsewhere. + * + * This interface was designed by the Terrier team for their search engine. + * + * @author Benoit Lacelle + * + */ +public interface SkippableLongCODEC { + /** + * Compress data from an array to another array. + * + * Both inpos and outpos are modified to represent how much data was read + * and written to. If 12 longs (inlength = 12) are compressed to 3 longs, then + * inpos will be incremented by 12 while outpos will be incremented by 3. We + * use IntWrapper to pass the values by reference. + * + * @param in + * input array + * @param inpos + * location in the input array + * @param inlength + * how many longs to compress + * @param out + * output array + * @param outpos + * where to write in the output array + */ + public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos); + + /** + * Uncompress data from an array to another array. + * + * Both inpos and outpos parameters are modified to indicate new positions + * after read/write. + * + * @param in + * array containing data in compressed form + * @param inpos + * where to start reading in the array + * @param inlength + * length of the compressed data (ignored by some schemes) + * @param out + * array where to write the compressed output + * @param outpos + * where to write the compressed output in out + * @param num + * number of longs we want to decode, the actual number of longs decoded can be less + */ + public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos, int num); + +} diff --git a/src/test/java/me/lemire/integercompression/TestUtils.java b/src/test/java/me/lemire/integercompression/TestUtils.java index a0820ab..7350fb8 100644 --- a/src/test/java/me/lemire/integercompression/TestUtils.java +++ b/src/test/java/me/lemire/integercompression/TestUtils.java @@ -123,7 +123,7 @@ public static void assertSymmetry(IntegerCODEC codec, int... orig) { assertArrayEquals(orig, target); } - protected static int[] compress(IntegerCODEC codec, int[] data) { + public static int[] compress(IntegerCODEC codec, int[] data) { int[] outBuf = new int[data.length * 4]; IntWrapper inPos = new IntWrapper(); IntWrapper outPos = new IntWrapper(); diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java new file mode 100644 index 0000000..f7a6f1b --- /dev/null +++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java @@ -0,0 +1,126 @@ +package me.lemire.longcompression; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; + +import me.lemire.integercompression.IntWrapper; + +/** + * Static utility methods for test. + */ +public class LongTestUtils { + + protected static void dumpIntArray(long[] data, String label) { + System.out.print(label); + for (int i = 0; i < data.length; ++i) { + if (i % 6 == 0) { + System.out.println(); + } + System.out.format(" %1$11d", data[i]); + } + System.out.println(); + } + + protected static void dumpIntArrayAsHex(long[] data, String label) { + System.out.print(label); + for (int i = 0; i < data.length; ++i) { + if (i % 8 == 0) { + System.out.println(); + } + System.out.format(" %1$08X", data[i]); + } + System.out.println(); + } + + /** + * Check that compress and uncompress keep original array. + * + * @param codec CODEC to test. + * @param orig original integers + */ + public static void assertSymmetry(LongCODEC codec, long... orig) { + // There are some cases that compressed array is bigger than original + // array. So output array for compress must be larger. + // + // Example: + // - VariableByte compresses an array like [ -1 ]. + // - Composition compresses a short array. + final int EXTEND = 1; + + long[] compressed = new long[orig.length + EXTEND]; + IntWrapper c_inpos = new IntWrapper(0); + IntWrapper c_outpos = new IntWrapper(0); + codec.compress(orig, c_inpos, orig.length, compressed, + c_outpos); + + assertTrue(c_outpos.get() <= orig.length + EXTEND); + + // Uncompress an array. + long[] uncompressed = new long[orig.length]; + IntWrapper u_inpos = new IntWrapper(0); + IntWrapper u_outpos = new IntWrapper(0); + codec.uncompress(compressed, u_inpos, c_outpos.get(), + uncompressed, u_outpos); + + // Compare between uncompressed and orig arrays. + long[] target = Arrays.copyOf(uncompressed, u_outpos.get()); + assertArrayEquals(orig, target); + } + + protected static long[] compress(LongCODEC codec, long[] data) { + long[] outBuf = new long[data.length * 4]; + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + codec.compress(data, inPos, data.length, outBuf, outPos); + return Arrays.copyOf(outBuf, outPos.get()); + } + + protected static long[] uncompress(LongCODEC codec, long[] data, int len) { + long[] outBuf = new long[len + 1024]; + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + codec.uncompress(data, inPos, data.length, outBuf, outPos); + return Arrays.copyOf(outBuf, outPos.get()); + } + + + + protected static byte[] compress(ByteLongCODEC codec, long[] data) { + byte[] outBuf = new byte[data.length * 4 * 4]; + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + codec.compress(data, inPos, data.length, outBuf, outPos); + return Arrays.copyOf(outBuf, outPos.get()); + } + + protected static long[] uncompress(ByteLongCODEC codec, byte[] data, int len) { + long[] outBuf = new long[len + 1024]; + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + codec.uncompress(data, inPos, data.length, outBuf, outPos); + return Arrays.copyOf(outBuf, outPos.get()); + } + + protected static long[] compressHeadless(SkippableLongCODEC codec, long[] data) { + long[] outBuf = new long[data.length * 4]; + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + codec.headlessCompress(data, inPos, data.length, outBuf, outPos); + return Arrays.copyOf(outBuf, outPos.get()); + } + + protected static long[] uncompressHeadless(SkippableLongCODEC codec, long[] data, int len) { + long[] outBuf = new long[len + 1024]; + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + codec.headlessUncompress(data, inPos, data.length, outBuf, outPos,len); + if(outPos.get() < len) throw new RuntimeException("Insufficient output."); + return Arrays.copyOf(outBuf, outPos.get()); + } + + public static String longToBinaryWithLeading(long l) { + return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); + } +} diff --git a/src/test/java/me/lemire/longcompression/SkippableBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableBasicTest.java new file mode 100644 index 0000000..9f8f1fa --- /dev/null +++ b/src/test/java/me/lemire/longcompression/SkippableBasicTest.java @@ -0,0 +1,138 @@ +package me.lemire.longcompression; + +import java.util.Arrays; + +import org.junit.Test; + +import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.TestUtils; +import me.lemire.integercompression.VariableByte; + + +/** + * Just some basic sanity tests. + * + * @author Daniel Lemire + */ +@SuppressWarnings({ "static-method" }) +public class SkippableBasicTest { + SkippableLongCODEC[] codecs = { + new LongJustCopy(), + new LongVariableByte(), }; + + + /** + * + */ + @Test + public void consistentTest() { + int N = 4096; + long[] data = new long[N]; + long[] rev = new long[N]; + for (int k = 0; k < N; ++k) + data[k] = k % 128; + for (SkippableLongCODEC c : codecs) { + System.out.println("[SkippeableBasicTest.consistentTest] codec = " + + c); + long[] outBuf = new long[N + 1024]; + for (int n = 0; n <= N; ++n) { + IntWrapper inPos = new IntWrapper(); + IntWrapper outPos = new IntWrapper(); + c.headlessCompress(data, inPos, n, outBuf, outPos); + + IntWrapper inPoso = new IntWrapper(); + IntWrapper outPoso = new IntWrapper(); + c.headlessUncompress(outBuf, inPoso, outPos.get(), rev, + outPoso, n); + if (outPoso.get() != n) { + throw new RuntimeException("bug "+n); + } + if (inPoso.get() != outPos.get()) { + throw new RuntimeException("bug "+n+" "+inPoso.get()+" "+outPos.get()); + } + for (int j = 0; j < n; ++j) + if (data[j] != rev[j]) { + throw new RuntimeException("bug"); + } + } + } + } + + + /** + * + */ + @Test + public void varyingLengthTest() { + int N = 4096; + long[] data = new long[N]; + for (int k = 0; k < N; ++k) + data[k] = k; + for (SkippableLongCODEC c : codecs) { + System.out.println("[SkippeableBasicTest.varyingLengthTest] codec = "+c); + for (int L = 1; L <= 128; L++) { + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug "+c.toString()+" "+k+" "+answer[k]+" "+data[k]); + } + for (int L = 128; L <= N; L *= 2) { + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug"); + } + + } + } + + /** + * + */ + @Test + public void varyingLengthTest2() { + int N = 128; + long[] data = new long[N]; + data[127] = -1; + for (SkippableLongCODEC c : codecs) { + System.out.println("[SkippeableBasicTest.varyingLengthTest2] codec = "+c); + + try { + // CODEC Simple9 is limited to "small" integers. + if (c.getClass().equals( + Class.forName("me.lemire.integercompression.Simple9"))) + continue; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + try { + // CODEC Simple16 is limited to "small" integers. + if (c.getClass().equals( + Class.forName("me.lemire.integercompression.Simple16"))) + continue; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + for (int L = 1; L <= 128; L++) { + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) { + throw new RuntimeException("L=" + L + ": bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString()); + } + } + for (int L = 128; L <= N; L *= 2) { + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug"); + } + + } + } + + +} diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java new file mode 100644 index 0000000..38cc061 --- /dev/null +++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java @@ -0,0 +1,68 @@ +package me.lemire.longcompression; + +import java.util.stream.LongStream; + +import org.junit.Assert; +import org.junit.Test; + +public class TestLongVariableByte { + final LongVariableByte codec = new LongVariableByte(); + + private void checkConsistency(LongCODEC codec, long[] array) { + { + long[] compressed = LongTestUtils.compress(codec, array); + long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof SkippableLongCODEC) { + long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); + long[] uncompressed = + LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof ByteLongCODEC) { + byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); + long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + } + + @Test + public void testCodec_ZeroMinus1() { + checkConsistency(codec, new long[] { -1 }); + } + + @Test + public void testCodec_ZeroTimes8Minus1() { + checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); + } + + @Test + public void testCodec_ZeroTimes127Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_ZeroTimes128Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_MinValue() { + checkConsistency(codec, new long[] { Long.MIN_VALUE }); + } + + @Test + public void testCodec_ZeroMinValue() { + checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); + } +} From 6101e24df17cdda8f0d329a030dd96372187dfc1 Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Sat, 26 Nov 2022 11:23:11 +0400 Subject: [PATCH 081/170] Small adjustments --- .../me/lemire/integercompression/VariableByte.java | 12 ++++++------ .../integercompression/SkippableBasicTest.java | 2 +- ...bleBasicTest.java => SkippableLongBasicTest.java} | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) rename src/test/java/me/lemire/longcompression/{SkippableBasicTest.java => SkippableLongBasicTest.java} (97%) diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index 7854b24..e0e3e25 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -190,12 +190,12 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o for (int v = 0, shift = 0; tmpoutpos < finaloutpos;) { val = in[p]; int c = val >>> s; - // Shift to next byte - s += 8; - // Shift to next integer if s==32 - p += s>>5; - // cycle from 31 to 0 - s = s & 31; + // Shift to next byte + s += 8; + // Shift to next integer if s==32 + p += s>>5; + // cycle from 31 to 0 + s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { out[tmpoutpos++] = v; diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java index d965992..d2cda12 100644 --- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java @@ -12,7 +12,7 @@ */ @SuppressWarnings({ "static-method" }) public class SkippableBasicTest { - SkippableIntegerCODEC[] codecs = { + final SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(), new SkippableComposition(new BinaryPacking(), new VariableByte()), diff --git a/src/test/java/me/lemire/longcompression/SkippableBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java similarity index 97% rename from src/test/java/me/lemire/longcompression/SkippableBasicTest.java rename to src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java index 9f8f1fa..aea7dc8 100644 --- a/src/test/java/me/lemire/longcompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java @@ -12,11 +12,11 @@ /** * Just some basic sanity tests. * - * @author Daniel Lemire + * @author Benoit Lacelle */ @SuppressWarnings({ "static-method" }) -public class SkippableBasicTest { - SkippableLongCODEC[] codecs = { +public class SkippableLongBasicTest { + final SkippableLongCODEC[] codecs = { new LongJustCopy(), new LongVariableByte(), }; From 924274f51a5b4ed87701d3cf2429da236dfe1630 Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Sat, 26 Nov 2022 11:27:11 +0400 Subject: [PATCH 082/170] Adjust license headers --- .../java/me/lemire/longcompression/LongUtil.java | 7 +++++++ .../java/me/lemire/integercompression/AdhocTest.java | 7 +++++++ .../java/me/lemire/integercompression/BasicTest.java | 7 +++++++ .../me/lemire/integercompression/BoundaryTest.java | 7 +++++++ .../me/lemire/integercompression/ByteBasicTest.java | 7 +++++++ .../integercompression/DeltaZigzagEncodingTest.java | 5 ++++- .../me/lemire/integercompression/ExampleTest.java | 7 +++++++ .../lemire/integercompression/IntCompressorTest.java | 7 +++++++ .../me/lemire/integercompression/ResourcedTest.java | 7 +++++++ .../integercompression/SkippableBasicTest.java | 7 +++++++ .../java/me/lemire/integercompression/TestUtils.java | 7 +++++++ .../integercompression/XorBinaryPackingTest.java | 3 +++ .../me/lemire/longcompression/LongTestUtils.java | 7 +++++++ .../longcompression/SkippableLongBasicTest.java | 7 +++++++ .../lemire/longcompression/TestLongVariableByte.java | 12 ++++++++++++ 15 files changed, 103 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/lemire/longcompression/LongUtil.java b/src/main/java/me/lemire/longcompression/LongUtil.java index 6ebbfb7..c06433f 100644 --- a/src/main/java/me/lemire/longcompression/LongUtil.java +++ b/src/main/java/me/lemire/longcompression/LongUtil.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.longcompression; /** diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java index bced6c0..8fd4049 100644 --- a/src/test/java/me/lemire/integercompression/AdhocTest.java +++ b/src/test/java/me/lemire/integercompression/AdhocTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import org.junit.Assert; diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java index e88293e..459fbdd 100644 --- a/src/test/java/me/lemire/integercompression/BasicTest.java +++ b/src/test/java/me/lemire/integercompression/BasicTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/integercompression/BoundaryTest.java b/src/test/java/me/lemire/integercompression/BoundaryTest.java index ede2e9f..128b431 100644 --- a/src/test/java/me/lemire/integercompression/BoundaryTest.java +++ b/src/test/java/me/lemire/integercompression/BoundaryTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/integercompression/ByteBasicTest.java b/src/test/java/me/lemire/integercompression/ByteBasicTest.java index c2f5b6f..93112c3 100644 --- a/src/test/java/me/lemire/integercompression/ByteBasicTest.java +++ b/src/test/java/me/lemire/integercompression/ByteBasicTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java b/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java index 5e0923d..ae42c1d 100644 --- a/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java +++ b/src/test/java/me/lemire/integercompression/DeltaZigzagEncodingTest.java @@ -1,7 +1,10 @@ -/* +/** * This code is released under the * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ */ + package me.lemire.integercompression; import org.junit.Test; diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java index 300983c..f6038b8 100644 --- a/src/test/java/me/lemire/integercompression/ExampleTest.java +++ b/src/test/java/me/lemire/integercompression/ExampleTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import me.lemire.integercompression.differential.*; diff --git a/src/test/java/me/lemire/integercompression/IntCompressorTest.java b/src/test/java/me/lemire/integercompression/IntCompressorTest.java index 34b8946..79e51fc 100644 --- a/src/test/java/me/lemire/integercompression/IntCompressorTest.java +++ b/src/test/java/me/lemire/integercompression/IntCompressorTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/integercompression/ResourcedTest.java b/src/test/java/me/lemire/integercompression/ResourcedTest.java index 61b8e58..34f1d05 100644 --- a/src/test/java/me/lemire/integercompression/ResourcedTest.java +++ b/src/test/java/me/lemire/integercompression/ResourcedTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.ArrayList; diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java index d2cda12..93c1784 100644 --- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/integercompression/TestUtils.java b/src/test/java/me/lemire/integercompression/TestUtils.java index 7350fb8..7ce51b3 100644 --- a/src/test/java/me/lemire/integercompression/TestUtils.java +++ b/src/test/java/me/lemire/integercompression/TestUtils.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/integercompression/XorBinaryPackingTest.java b/src/test/java/me/lemire/integercompression/XorBinaryPackingTest.java index 3201b02..650eb4b 100644 --- a/src/test/java/me/lemire/integercompression/XorBinaryPackingTest.java +++ b/src/test/java/me/lemire/integercompression/XorBinaryPackingTest.java @@ -1,7 +1,10 @@ /** * This code is released under the * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ */ + package me.lemire.integercompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java index f7a6f1b..23baaaf 100644 --- a/src/test/java/me/lemire/longcompression/LongTestUtils.java +++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.longcompression; import static org.junit.Assert.assertArrayEquals; diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java index aea7dc8..e900c9c 100644 --- a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.longcompression; import java.util.Arrays; diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java index 38cc061..eab3c63 100644 --- a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java +++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java @@ -1,3 +1,10 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + package me.lemire.longcompression; import java.util.stream.LongStream; @@ -5,6 +12,11 @@ import org.junit.Assert; import org.junit.Test; +/** + * Edge-cases having caused issue specifically with LongVariableByte. + * + * @author Benoit Lacelle + */ public class TestLongVariableByte { final LongVariableByte codec = new LongVariableByte(); From bb82f92a5728ae8e4b25098b3fc0eed7fc9e701c Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Sat, 26 Nov 2022 11:28:19 +0400 Subject: [PATCH 083/170] Fix indentation --- .../me/lemire/integercompression/VariableByte.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index e0e3e25..09e479b 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -189,13 +189,13 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o int finaloutpos = num + tmpoutpos; for (int v = 0, shift = 0; tmpoutpos < finaloutpos;) { val = in[p]; - int c = val >>> s; - // Shift to next byte - s += 8; - // Shift to next integer if s==32 - p += s>>5; - // cycle from 31 to 0 - s = s & 31; + int c = val >>> s; + // Shift to next byte + s += 8; + // Shift to next integer if s==32 + p += s>>5; + // cycle from 31 to 0 + s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { out[tmpoutpos++] = v; From 416a7d449e7e098226bfa0296cc485bc8c4dec3d Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Sat, 26 Nov 2022 12:19:10 +0400 Subject: [PATCH 084/170] Fix bugs detected by LGTM --- .../longcompression/LongVariableByte.java | 20 +++++----- .../longcompression/TestLongVariableByte.java | 37 +++++++++++++++---- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index a2db990..2212e7f 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -60,20 +60,20 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); buf.put((byte) (extract7bitsmaskless(3, (val)) | (1 << 7))); - } else if (val >= 0 && val < (1 << 35)) { + } else if (val >= 0 && val < (1L << 35)) { buf.put((byte) extract7bits(0, val)); buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); buf.put((byte) extract7bits(3, val)); buf.put((byte) (extract7bitsmaskless(4, (val)) | (1 << 7))); - } else if (val >= 0 && val < (1 << 42)) { + } else if (val >= 0 && val < (1L << 42)) { buf.put((byte) extract7bits(0, val)); buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); buf.put((byte) extract7bits(3, val)); buf.put((byte) extract7bits(4, val)); buf.put((byte) (extract7bitsmaskless(5, (val)) | (1 << 7))); - } else if (val >= 0 && val < (1 << 49)) { + } else if (val >= 0 && val < (1L << 49)) { buf.put((byte) extract7bits(0, val)); buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); @@ -81,7 +81,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o buf.put((byte) extract7bits(4, val)); buf.put((byte) extract7bits(5, val)); buf.put((byte) (extract7bitsmaskless(6, (val)) | (1 << 7))); - } else if (val >= 0 && val < (1 << 56)) { + } else if (val >= 0 && val < (1L << 56)) { buf.put((byte) extract7bits(0, val)); buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); @@ -90,7 +90,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o buf.put((byte) extract7bits(5, val)); buf.put((byte) extract7bits(6, val)); buf.put((byte) (extract7bitsmaskless(7, (val)) | (1 << 7))); - } else if (val >= 0 && val < (1 << 63)) { + } else if (val >= 0 && val < (1L << 63)) { buf.put((byte) extract7bits(0, val)); buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); @@ -145,20 +145,20 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); out[outpostmp++] = (byte) (extract7bitsmaskless(3, (val)) | (1 << 7)); - } else if (val >= 0 && val < (1 << 35)) { + } else if (val >= 0 && val < (1L << 35)) { out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); out[outpostmp++] = (byte) extract7bits(3, val); out[outpostmp++] = (byte) (extract7bitsmaskless(4, (val)) | (1 << 7)); - } else if (val >= 0 && val < (1 << 42)) { + } else if (val >= 0 && val < (1L << 42)) { out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); out[outpostmp++] = (byte) extract7bits(3, val); out[outpostmp++] = (byte) extract7bits(4, val); out[outpostmp++] = (byte) (extract7bitsmaskless(5, (val)) | (1 << 7)); - } else if (val >= 0 && val < (1 << 49)) { + } else if (val >= 0 && val < (1L << 49)) { out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); @@ -166,7 +166,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, out[outpostmp++] = (byte) extract7bits(4, val); out[outpostmp++] = (byte) extract7bits(5, val); out[outpostmp++] = (byte) (extract7bitsmaskless(6, (val)) | (1 << 7)); - } else if (val >= 0 && val < (1 << 56)) { + } else if (val >= 0 && val < (1L << 56)) { out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); @@ -175,7 +175,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, out[outpostmp++] = (byte) extract7bits(5, val); out[outpostmp++] = (byte) extract7bits(6, val); out[outpostmp++] = (byte) (extract7bitsmaskless(7, (val)) | (1 << 7)); - } else if (val >= 0 && val < (1 << 63)) { + } else if (val >= 0 && val < (1L << 63)) { out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java index eab3c63..15613f2 100644 --- a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java +++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java @@ -28,17 +28,17 @@ private void checkConsistency(LongCODEC codec, long[] array) { Assert.assertArrayEquals(array, uncompressed); } - if (codec instanceof SkippableLongCODEC) { - long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); - long[] uncompressed = - LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); + if (codec instanceof ByteLongCODEC) { + byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); + long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); Assert.assertArrayEquals(array, uncompressed); } - if (codec instanceof ByteLongCODEC) { - byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); - long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); + if (codec instanceof SkippableLongCODEC) { + long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); + long[] uncompressed = + LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); Assert.assertArrayEquals(array, uncompressed); } @@ -77,4 +77,27 @@ public void testCodec_MinValue() { public void testCodec_ZeroMinValue() { checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); } + + @Test + public void testCodec_allPowerOfTwo() { + checkConsistency(codec, new long[] { 1L << 42 }); + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 1L << i }); + } + } + + @Test + public void testCodec_ZeroThenAllPowerOfTwo() { + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 0, 1L << i }); + } + } + + @Test + public void testCodec_intermediateHighPowerOfTwo() { + Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); + Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length); + Assert.assertEquals(1, LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length); + } + } From 3e1d40b82e724a6a489b50a294ab3c82b6c9680a Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Sat, 26 Nov 2022 18:02:52 +0400 Subject: [PATCH 085/170] Add utility classes (Comnposition, Delta), Introduce LongAs2IntsCodec --- pom.xml | 6 + .../longcompression/IntegratedLongCODEC.java | 11 + .../longcompression/LongAs2IntsCodec.java | 189 +++++++++ .../longcompression/LongComposition.java | 71 ++++ .../longcompression/LongVariableByte.java | 1 + .../longcompression/RoaringIntPacking.java | 108 +++++ .../SkippableLongComposition.java | 70 ++++ .../differential/LongDelta.java | 150 +++++++ .../lemire/integercompression/BasicTest.java | 4 +- .../lemire/longcompression/LongBasicTest.java | 396 ++++++++++++++++++ .../lemire/longcompression/LongTestUtils.java | 2 +- .../longcompression/TestLongAs2IntsCodec.java | 106 +++++ .../synth/LongClusteredDataGenerator.java | 91 ++++ .../synth/LongUniformDataGenerator.java | 125 ++++++ 14 files changed, 1327 insertions(+), 3 deletions(-) create mode 100644 src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java create mode 100644 src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java create mode 100644 src/main/java/me/lemire/longcompression/LongComposition.java create mode 100644 src/main/java/me/lemire/longcompression/RoaringIntPacking.java create mode 100644 src/main/java/me/lemire/longcompression/SkippableLongComposition.java create mode 100644 src/main/java/me/lemire/longcompression/differential/LongDelta.java create mode 100644 src/test/java/me/lemire/longcompression/LongBasicTest.java create mode 100644 src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java create mode 100644 src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java create mode 100644 src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java diff --git a/pom.xml b/pom.xml index fc6912b..a960b2c 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,12 @@ 4.13.1 test + + org.roaringbitmap + RoaringBitmap + 0.9.35 + test + GitHub Issue Tracking diff --git a/src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java b/src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java new file mode 100644 index 0000000..b21ef68 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/IntegratedLongCODEC.java @@ -0,0 +1,11 @@ +package me.lemire.longcompression; + +/** + * This is just like LongCODEC, except that it indicates that delta coding is + * "integrated", so that you don't need a separate step for delta coding. + * + * @author Benoit Lacelle + */ +public interface IntegratedLongCODEC extends LongCODEC { + +} diff --git a/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java new file mode 100644 index 0000000..3b2bc76 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java @@ -0,0 +1,189 @@ +package me.lemire.longcompression; + +import java.util.Arrays; + +import me.lemire.integercompression.BinaryPacking; +import me.lemire.integercompression.Composition; +import me.lemire.integercompression.IntCompressor; +import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.IntegerCODEC; +import me.lemire.integercompression.VariableByte; + +/** + * A {@link LongCODEC} which split each long in a highpart (32 first bits) and a low part (32 last bits). + * + * @author Benoit Lacelle + * + */ +public class LongAs2IntsCodec implements LongCODEC { + final IntegerCODEC highPartsCodec; + final IntegerCODEC lowPartsCodec; + + public LongAs2IntsCodec(IntegerCODEC highPartsCodec, IntegerCODEC lowPartsCodec) { + this.highPartsCodec = highPartsCodec; + this.lowPartsCodec = lowPartsCodec; + } + + /** + * By default, we expect longs to be slightly above Integer.MAX_VALUE. Hence highParts to be small and positive + * integers. For lowParts, we rely on {@link IntCompressor} default IntegerCODEC + */ + public LongAs2IntsCodec() { + this(new VariableByte(), new Composition(new BinaryPacking(), new VariableByte())); + } + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + + int[] highParts = new int[inlength]; + int[] lowParts = new int[inlength]; + + for (int i = 0; i < inlength; i++) { + int inPosition = inpos.get() + i; + + highParts[i] = RoaringIntPacking.high(in[inPosition]); + lowParts[i] = RoaringIntPacking.low(in[inPosition]); + } + + // TODO What would be a relevant buffer size? + int[] buffer = new int[inlength * 16]; + + int outPosition = outpos.get(); + + boolean hasLeftover; + { + // The first integer is reserved to hold the number of compressed ints + IntWrapper highPartsOutPosition = new IntWrapper(1); + + highPartsCodec.compress(highParts, new IntWrapper(), inlength, buffer, highPartsOutPosition); + + // Record the compressedHighparts length + buffer[0] = highPartsOutPosition.get() - 1; + + for (int i = 0; i < highPartsOutPosition.get() / 2; i++) { + long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); + out[outPosition++] = pack; + } + + if (1 == highPartsOutPosition.get() % 2) { + // Shift the trailing integer as first in the buffer + hasLeftover = true; + buffer[0] = buffer[highPartsOutPosition.get() - 1]; + } else { + hasLeftover = false; + } + } + + { + // The first integer is reserved to hold the number of compressed ints + IntWrapper lowPartsOutPosition = new IntWrapper(1); + if (hasLeftover) { + // Keep the trailing int from highParts before the reserved int from lowParts compressed length + lowPartsOutPosition.set(2); + } + + lowPartsCodec.compress(lowParts, new IntWrapper(0), inlength, buffer, lowPartsOutPosition); + + // Record the compressedHighparts length + buffer[hasLeftover ? 1 : 0] = lowPartsOutPosition.get() - (hasLeftover ? 2 : 1); + + for (int i = 0; i < lowPartsOutPosition.get() / 2; i++) { + long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); + out[outPosition++] = pack; + } + + if (1 == lowPartsOutPosition.get() % 2) { + // The trailing integer is packed with a 0 + long pack = RoaringIntPacking.pack(buffer[lowPartsOutPosition.get() - 1], 0); + out[outPosition++] = pack; + } + } + + inpos.add(inlength); + outpos.set(outPosition); + } + + /** + * inlength is ignored by this codec. We may rely on it instead of storing the compressedLowPart length + */ + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + + int longIndex = inpos.get(); + + int nbCompressedHighParts = RoaringIntPacking.high(in[longIndex]); + int[] compressedHighParts = new int[nbCompressedHighParts]; + + // !highPart as we just read the highPart for nbCompressedHighParts + boolean highPart = false; + for (int i = 0; i < nbCompressedHighParts; i++) { + int nextInt; + if (highPart) { + nextInt = RoaringIntPacking.high(in[longIndex + (i + 1) / 2]); + } else { + nextInt = RoaringIntPacking.low(in[longIndex + (i + 1) / 2]); + } + compressedHighParts[i] = nextInt; + + highPart = !highPart; + } + + // TODO What would be a relevant buffer size? + int[] buffer = new int[inlength * 16]; + + IntWrapper highPartsOutPosition = new IntWrapper(); + highPartsCodec.uncompress(compressedHighParts, + new IntWrapper(), + compressedHighParts.length, + buffer, + highPartsOutPosition); + int[] highParts = Arrays.copyOf(buffer, highPartsOutPosition.get()); + + // +1 as we initially read nbCompressedHighParts + int intIndexNbCompressedLowParts = longIndex * 2 + 1 + nbCompressedHighParts; + int nbCompressedLowParts; + if (highPart) { + nbCompressedLowParts = RoaringIntPacking.high(in[intIndexNbCompressedLowParts / 2]); + } else { + nbCompressedLowParts = RoaringIntPacking.low(in[intIndexNbCompressedLowParts / 2]); + } + highPart = !highPart; + + int[] compressedLowParts = new int[nbCompressedLowParts]; + for (int i = 0; i < nbCompressedLowParts; i++) { + int nextInt; + if (highPart) { + nextInt = RoaringIntPacking.high(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); + } else { + nextInt = RoaringIntPacking.low(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); + } + compressedLowParts[i] = nextInt; + + highPart = !highPart; + } + + IntWrapper lowPartsOutPosition = new IntWrapper(); + lowPartsCodec.uncompress(compressedLowParts, + new IntWrapper(), + compressedLowParts.length, + buffer, + lowPartsOutPosition); + int[] lowParts = Arrays.copyOf(buffer, lowPartsOutPosition.get()); + assert highParts.length == lowParts.length; + + int outposition = outpos.get(); + for (int i = 0; i < highParts.length; i++) { + out[outposition++] = RoaringIntPacking.pack(highParts[i], lowParts[i]); + } + + inpos.add(inlength); + outpos.set(outposition); + } + +} diff --git a/src/main/java/me/lemire/longcompression/LongComposition.java b/src/main/java/me/lemire/longcompression/LongComposition.java new file mode 100644 index 0000000..1394a78 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongComposition.java @@ -0,0 +1,71 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ +package me.lemire.longcompression; + +import me.lemire.integercompression.IntWrapper; + +/** + * Helper class to compose schemes. + * + * @author Benoit Lacelle + */ +public class LongComposition implements LongCODEC { + LongCODEC F1, F2; + + /** + * Compose a scheme from a first one (f1) and a second one (f2). The + * first one is called first and then the second one tries to compress + * whatever remains from the first run. + * + * By convention, the first scheme should be such that if, during + * decoding, a 32-bit zero is first encountered, then there is no + * output. + * + * @param f1 + * first codec + * @param f2 + * second codec + */ + public LongComposition(LongCODEC f1, LongCODEC f2) { + F1 = f1; + F2 = f2; + } + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + int inposInit = inpos.get(); + int outposInit = outpos.get(); + F1.compress(in, inpos, inlength, out, outpos); + if (outpos.get() == outposInit) { + out[outposInit] = 0; + outpos.increment(); + } + inlength -= inpos.get() - inposInit; + F2.compress(in, inpos, inlength, out, outpos); + } + + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int init = inpos.get(); + F1.uncompress(in, inpos, inlength, out, outpos); + inlength -= inpos.get() - init; + F2.uncompress(in, inpos, inlength, out, outpos); + } + + @Override + public String toString() { + return F1.toString() + " + " + F2.toString(); + } + +} diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index 2212e7f..478db20 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -41,6 +41,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o IntWrapper outpos) { if (inlength == 0) return; + // Worst case: we write 10 bytes per long, hence 2 longs for a long, hence 16 bytes per long ByteBuffer buf = makeBuffer(inlength * 16); buf.order(ByteOrder.LITTLE_ENDIAN); for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { diff --git a/src/main/java/me/lemire/longcompression/RoaringIntPacking.java b/src/main/java/me/lemire/longcompression/RoaringIntPacking.java new file mode 100644 index 0000000..f109ab3 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/RoaringIntPacking.java @@ -0,0 +1,108 @@ +/* + * (c) the authors Licensed under the Apache License, Version 2.0. + */ +package me.lemire.longcompression; + +import java.math.BigInteger; +import java.util.Comparator; + +/** + * Used to hold the logic packing 2 integers in a long, and separating a long in two integers. It is + * useful in {@link Roaring64NavigableMap} as the implementation split the input long in two + * integers, one used as key of a NavigableMap while the other is added in a Bitmap + * + * @author Benoit Lacelle + * + */ +// Duplicated from RoaringBitmap +class RoaringIntPacking { + + /** + * + * @param id any long, positive or negative + * @return an int holding the 32 highest order bits of information of the input long + */ + public static int high(long id) { + return (int) (id >> 32); + } + + /** + * + * @param id any long, positive or negative + * @return an int holding the 32 lowest order bits of information of the input long + */ + public static int low(long id) { + return (int) id; + } + + /** + * + * @param high an integer representing the highest order bits of the output long + * @param low an integer representing the lowest order bits of the output long + * @return a long packing together the integers as computed by + * {@link RoaringIntPacking#high(long)} and {@link RoaringIntPacking#low(long)} + */ + // https://stackoverflow.com/questions/12772939/java-storing-two-ints-in-a-long + public static long pack(int high, int low) { + return (((long) high) << 32) | (low & 0xffffffffL); + } + + + /** + * + * @param signedLongs true if long put in a {@link Roaring64NavigableMap} should be considered as + * signed long. + * @return the int representing the highest value which can be set as high value in a + * {@link Roaring64NavigableMap} + */ + public static int highestHigh(boolean signedLongs) { + if (signedLongs) { + return Integer.MAX_VALUE; + } else { + return -1; + } + } + + /** + * @return A comparator for unsigned longs: a negative long is a long greater than Long.MAX_VALUE + */ + public static Comparator unsignedComparator() { + return new Comparator() { + + @Override + public int compare(Integer o1, Integer o2) { + return compareUnsigned(o1, o2); + } + }; + } + + /** + * Compares two {@code int} values numerically treating the values as unsigned. + * + * @param x the first {@code int} to compare + * @param y the second {@code int} to compare + * @return the value {@code 0} if {@code x == y}; a value less than {@code 0} if {@code x < y} as + * unsigned values; and a value greater than {@code 0} if {@code x > y} as unsigned values + * @since 1.8 + */ + // Duplicated from jdk8 Integer.compareUnsigned + public static int compareUnsigned(int x, int y) { + return Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE); + } + + /** the constant 2^64 */ + private static final BigInteger TWO_64 = BigInteger.ONE.shiftLeft(64); + + /** + * JDK8 Long.toUnsignedString was too complex to backport. Go for a slow version relying on + * BigInteger + */ + // https://stackoverflow.com/questions/7031198/java-signed-long-to-unsigned-long-string + static String toUnsignedString(long l) { + BigInteger b = BigInteger.valueOf(l); + if (b.signum() < 0) { + b = b.add(TWO_64); + } + return b.toString(); + } +} diff --git a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java new file mode 100644 index 0000000..5568489 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java @@ -0,0 +1,70 @@ +/** + * This is code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ +package me.lemire.longcompression; + +import me.lemire.integercompression.IntWrapper; + +/** + * Helper class to compose schemes. + * + * @author Benoit Lacelle + */ +public class SkippableLongComposition implements SkippableLongCODEC { + SkippableLongCODEC F1, F2; + + /** + * Compose a scheme from a first one (f1) and a second one (f2). The first + * one is called first and then the second one tries to compress whatever + * remains from the first run. + * + * By convention, the first scheme should be such that if, during decoding, + * a 32-bit zero is first encountered, then there is no output. + * + * @param f1 + * first codec + * @param f2 + * second codec + */ + public SkippableLongComposition(SkippableLongCODEC f1, + SkippableLongCODEC f2) { + F1 = f1; + F2 = f2; + } + + @Override + public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos) { + int init = inpos.get(); + int outposInit = outpos.get(); + F1.headlessCompress(in, inpos, inlength, out, outpos); + if (outpos.get() == outposInit) { + out[outposInit] = 0; + outpos.increment(); + } + inlength -= inpos.get() - init; + F2.headlessCompress(in, inpos, inlength, out, outpos); + } + + @Override + public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, + IntWrapper outpos, int num) { + int init = inpos.get(); + F1.headlessUncompress(in, inpos, inlength, out, outpos, num); + if (inpos.get() == init) { + inpos.increment(); + } + inlength -= inpos.get() - init; + num -= outpos.get(); + F2.headlessUncompress(in, inpos, inlength, out, outpos, num); + } + + @Override + public String toString() { + return F1.toString() + "+" + F2.toString(); + } + +} diff --git a/src/main/java/me/lemire/longcompression/differential/LongDelta.java b/src/main/java/me/lemire/longcompression/differential/LongDelta.java new file mode 100644 index 0000000..2b0e077 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/differential/LongDelta.java @@ -0,0 +1,150 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression.differential; + +/** + * Generic class to compute differential coding. + * + * @author Benoit lacelle + * + */ +public final class LongDelta { + + /** + * Apply differential coding (in-place). + * + * @param data + * data to be modified + */ + public static void delta(long[] data) { + for (int i = data.length - 1; i > 0; --i) { + data[i] -= data[i - 1]; + } + } + + /** + * Apply differential coding (in-place) given an initial value. + * + * @param data + * data to be modified + * @param start + * starting index + * @param length + * number of integers to process + * @param init + * initial value + * @return next initial vale + */ + public static long delta(long[] data, int start, int length, int init) { + final long nextinit = data[start + length - 1]; + for (int i = length - 1; i > 0; --i) { + data[start + i] -= data[start + i - 1]; + } + data[start] -= init; + return nextinit; + } + + /** + * Compute differential coding given an initial value. Output is written + * to a provided array: must have length "length" or better. + * + * @param data + * data to be modified + * @param start + * starting index + * @param length + * number of integers to process + * @param init + * initial value + * @param out + * output array + * @return next initial vale + */ + public static long delta(long[] data, int start, int length, int init, + long[] out) { + for (int i = length - 1; i > 0; --i) { + out[i] = data[start + i] - data[start + i - 1]; + } + out[0] = data[start] - init; + return data[start + length - 1]; + } + + /** + * Undo differential coding (in-place). Effectively computes a prefix + * sum. + * + * @param data + * to be modified. + */ + public static void inverseDelta(long[] data) { + for (int i = 1; i < data.length; ++i) { + data[i] += data[i - 1]; + } + } + + /** + * Undo differential coding (in-place). Effectively computes a prefix + * sum. Like inverseDelta, only faster. + * + * @param data + * to be modified + */ + public static void fastinverseDelta(long[] data) { + int sz0 = data.length / 4 * 4; + int i = 1; + if (sz0 >= 4) { + long a = data[0]; + for (; i < sz0 - 4; i += 4) { + a = data[i] += a; + a = data[i + 1] += a; + a = data[i + 2] += a; + a = data[i + 3] += a; + } + } + + for (; i != data.length; ++i) { + data[i] += data[i - 1]; + } + } + + /** + * Undo differential coding (in-place). Effectively computes a prefix + * sum. Like inverseDelta, only faster. Uses an initial value. + * + * @param data + * to be modified + * @param start + * starting index + * @param length + * number of integers to process + * @param init + * initial value + * @return next initial value + */ + public static long fastinverseDelta(long[] data, int start, int length, + int init) { + data[start] += init; + int sz0 = length / 4 * 4; + int i = 1; + if (sz0 >= 4) { + long a = data[start]; + for (; i < sz0 - 4; i += 4) { + a = data[start + i] += a; + a = data[start + i + 1] += a; + a = data[start + i + 2] += a; + a = data[start + i + 3] += a; + } + } + + for (; i != length; ++i) { + data[start + i] += data[start + i - 1]; + } + return data[start + length - 1]; + } + +} diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java index 459fbdd..b5f292e 100644 --- a/src/test/java/me/lemire/integercompression/BasicTest.java +++ b/src/test/java/me/lemire/integercompression/BasicTest.java @@ -29,7 +29,7 @@ */ @SuppressWarnings({ "static-method" }) public class BasicTest { - IntegerCODEC[] codecs = { + final IntegerCODEC[] codecs = { new IntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()), new JustCopy(), @@ -51,7 +51,7 @@ public class BasicTest { new DeltaZigzagVariableByte()) }; /** - * + * This tests with a compressed array with various offset */ @Test public void saulTest() { diff --git a/src/test/java/me/lemire/longcompression/LongBasicTest.java b/src/test/java/me/lemire/longcompression/LongBasicTest.java new file mode 100644 index 0000000..5aa3551 --- /dev/null +++ b/src/test/java/me/lemire/longcompression/LongBasicTest.java @@ -0,0 +1,396 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; + +import org.junit.Test; + +import me.lemire.integercompression.BinaryPacking; +import me.lemire.integercompression.Composition; +import me.lemire.integercompression.FastPFOR; +import me.lemire.integercompression.FastPFOR128; +import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.JustCopy; +import me.lemire.integercompression.NewPFD; +import me.lemire.integercompression.NewPFDS16; +import me.lemire.integercompression.NewPFDS9; +import me.lemire.integercompression.OptPFD; +import me.lemire.integercompression.OptPFDS16; +import me.lemire.integercompression.OptPFDS9; +import me.lemire.integercompression.Simple9; +import me.lemire.integercompression.VariableByte; +import me.lemire.integercompression.differential.Delta; +import me.lemire.integercompression.differential.IntegratedBinaryPacking; +import me.lemire.integercompression.differential.IntegratedComposition; +import me.lemire.integercompression.differential.IntegratedVariableByte; +import me.lemire.longcompression.differential.LongDelta; +import me.lemire.longcompression.synth.LongClusteredDataGenerator; + +/** + * Just some basic sanity tests. + * + * @author Benoit Lacelle + */ +@SuppressWarnings({ "static-method" }) +public class LongBasicTest { + final LongCODEC[] codecs = { + new LongJustCopy(), + new LongVariableByte(), + new LongAs2IntsCodec()}; + + /** + * This tests with a compressed array with various offset + */ + @Test + public void saulTest() { + for (LongCODEC C : codecs) { + for (int x = 0; x < 50; ++x) { + long[] a = { 2, 3, 4, 5 }; + long[] b = new long[90]; + long[] c = new long[a.length]; + + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + C.compress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; + + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + C.uncompress(b, bOffset, len, c, cOffset); + if(!Arrays.equals(a, c)) { + System.out.println("Problem with "+C); + } + assertArrayEquals(a, c); + + } + } + } + /** + * + */ + @Test + public void varyingLengthTest() { + int N = 4096; + long[] data = new long[N]; + for (int k = 0; k < N; ++k) + data[k] = k; + for (LongCODEC c : codecs) { + System.out.println("[BasicTest.varyingLengthTest] codec = " + c); + for (int L = 1; L <= 128; L++) { + long[] comp = LongTestUtils.compress(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompress(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug"); + } + for (int L = 128; L <= N; L *= 2) { + long[] comp = LongTestUtils.compress(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompress(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) { + System.out.println(Arrays.toString(Arrays.copyOf( + answer, L))); + System.out.println(Arrays.toString(Arrays.copyOf(data, + L))); + throw new RuntimeException("bug"); + } + } + + } + } + + /** + * + */ + @Test + public void varyingLengthTest2() { + int N = 128; + long[] data = new long[N]; + data[127] = -1; + for (LongCODEC c : codecs) { + System.out.println("[BasicTest.varyingLengthTest2] codec = " + c); + try { + // CODEC Simple9 is limited to "small" integers. + if (c.getClass().equals( + Class.forName("me.lemire.integercompression.Simple9"))) + continue; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + try { + // CODEC Simple16 is limited to "small" integers. + if (c.getClass().equals( + Class.forName("me.lemire.integercompression.Simple16"))) + continue; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + try { + // CODEC GroupSimple9 is limited to "small" integers. + if (c.getClass().equals( + Class.forName("me.lemire.integercompression.GroupSimple9"))) + continue; + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + for (int L = 1; L <= 128; L++) { + long[] comp = LongTestUtils.compress(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompress(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug"); + } + for (int L = 128; L <= N; L *= 2) { + long[] comp = LongTestUtils.compress(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompress(c, comp, L); + for (int k = 0; k < L; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug"); + } + + } + } + + /** + * + */ + @Test + public void checkVariousCases() { + for (LongCODEC c : codecs) { + testZeroInZeroOut(c); + test(c, c, 5, 10); + test(c, c, 5, 14); + test(c, c, 2, 18); + // TODO Unclear which codec should manage an empty output array or not + // Some IntegerCodec does not output anything if the input is smaller than some block size + // testSpurious(c); + testUnsorted(c); + testUnsorted2(c); + testUnsorted3(c); + } + } + + /** + * check that the codecs can be inverted. + */ + @Test + public void basictest() { + for (LongCODEC codec : codecs) { + test(codec, 5, 10); + test(codec, 5, 14); + test(codec, 2, 18); + } + } + + private static void testSpurious(LongCODEC c) { + long[] x = new long[1024]; + long[] y = new long[0]; + IntWrapper i0 = new IntWrapper(0); + IntWrapper i1 = new IntWrapper(0); + for (int inlength = 0; inlength < 32; ++inlength) { + c.compress(x, i0, inlength, y, i1); + assertEquals(0, i1.intValue()); + } + } + + private static void testZeroInZeroOut(LongCODEC c) { + long[] x = new long[0]; + long[] y = new long[0]; + IntWrapper i0 = new IntWrapper(0); + IntWrapper i1 = new IntWrapper(0); + c.compress(x, i0, 0, y, i1); + assertEquals(0, i1.intValue()); + + long[] out = new long[0]; + IntWrapper outpos = new IntWrapper(0); + c.uncompress(y, i1, 0, out, outpos); + assertEquals(0, outpos.intValue()); + } + + private static void test(LongCODEC c, LongCODEC co, int N, int nbr) { + LongClusteredDataGenerator cdg = new LongClusteredDataGenerator(); + for (int sparsity = 1; sparsity < 31 - nbr; sparsity += 4) { + long[][] data = new long[N][]; + int max = (1 << (nbr + sparsity)); + for (int k = 0; k < N; ++k) { + data[k] = cdg.generateClustered((1 << nbr), max); + } + testCodec(c, co, data, max); + } + } + + private static void test(LongCODEC codec, int N, int nbr) { + LongClusteredDataGenerator cdg = new LongClusteredDataGenerator(); + System.out.println("[BasicTest.test] N = " + N + " " + nbr); + for (int sparsity = 1; sparsity < 63 - nbr; sparsity += 4) { + long[][] data = new long[N][]; + long max = (1L << (nbr + sparsity)); + for (int k = 0; k < N; ++k) { + data[k] = cdg.generateClustered((1 << nbr), max); + } + + testCodec(codec, codec, data, max); + } + } + + private static void testCodec(LongCODEC c, LongCODEC co, + long[][] data, long max) { + int N = data.length; + int maxlength = 0; + for (int k = 0; k < N; ++k) { + if (data[k].length > maxlength) + maxlength = data[k].length; + } + long[] buffer = new long[maxlength + 1024]; + long[] dataout = new long[4 * maxlength + 1024]; + // 4x + 1024 to account for the possibility of some negative + // compression. + IntWrapper inpos = new IntWrapper(); + IntWrapper outpos = new IntWrapper(); + for (int k = 0; k < N; ++k) { + long[] backupdata = Arrays.copyOf(data[k], data[k].length); + + inpos.set(1); + outpos.set(0); + if (!(c instanceof IntegratedLongCODEC)) { + LongDelta.delta(backupdata); + } + c.compress(backupdata, inpos, backupdata.length - inpos.get(), + dataout, outpos); + final int thiscompsize = outpos.get() + 1; + inpos.set(0); + outpos.set(1); + buffer[0] = backupdata[0]; + co.uncompress(dataout, inpos, thiscompsize - 1, buffer, outpos); + if (!(c instanceof IntegratedLongCODEC)) + LongDelta.fastinverseDelta(buffer); + + // Check assertions. + assertEquals("length is not match", outpos.get(), data[k].length); + long[] bufferCutout = Arrays.copyOf(buffer, outpos.get()); + assertArrayEquals("failed to reconstruct original data", data[k], + bufferCutout); + } + } + + /** + * @param codec + * provided codec + */ + public void testUnsorted(LongCODEC codec) { + int[] lengths = { 133, 1026, 1333333 }; + for (int N : lengths) { + long[] data = new long[N]; + // initialize the data (most will be small) + for (int k = 0; k < N; k += 1) + data[k] = 3; + // throw some larger values + for (int k = 0; k < N; k += 5) + data[k] = 100; + for (int k = 0; k < N; k += 533) + data[k] = 10000; + data[5] = -311; + // could need more compressing + long[] compressed = new long[(int) Math.ceil(N * 1.01) + 1024]; + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, + outputoffset); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + long[] recovered = new long[N]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, + recovered, recoffset); + assertArrayEquals(data, recovered); + } + } + + private void testUnsorted2(LongCODEC codec) { + long[] data = new long[128]; + data[5] = -1; + long[] compressed = new long[1024]; + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + long[] recovered = new long[128]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, + recovered, recoffset); + assertArrayEquals(data, recovered); + } + + private void testUnsorted3(LongCODEC codec) { + long[] data = new long[128]; + data[127] = -1; + long[] compressed = new long[1024]; + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + long[] recovered = new long[128]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, + recovered, recoffset); + assertArrayEquals(data, recovered); + } + + /** + * + */ + @Test + public void fastPforTest() { + // proposed by Stefan Ackermann (https://github.com/Stivo) + for (LongCODEC codec : codecs) { + int N = FastPFOR.BLOCK_SIZE; + long[] data = new long[N]; + for (int i = 0; i < N; i++) + data[i] = 0; + data[126] = -1; + long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); + long[] answer = LongTestUtils.uncompress(codec, comp, N); + for (int k = 0; k < N; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug " + k + " " + answer[k] + + " != " + data[k]); + } + } + + /** + * + */ + @Test + public void fastPfor128Test() { + // proposed by Stefan Ackermann (https://github.com/Stivo) + for (LongCODEC codec : codecs) { + int N = FastPFOR128.BLOCK_SIZE; + long[] data = new long[N]; + for (int i = 0; i < N; i++) + data[i] = 0; + data[126] = -1; + long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); + long[] answer = LongTestUtils.uncompress(codec, comp, N); + for (int k = 0; k < N; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug " + k + " " + answer[k] + + " != " + data[k]); + } + } + +} diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java index 23baaaf..a44e665 100644 --- a/src/test/java/me/lemire/longcompression/LongTestUtils.java +++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java @@ -77,7 +77,7 @@ public static void assertSymmetry(LongCODEC codec, long... orig) { } protected static long[] compress(LongCODEC codec, long[] data) { - long[] outBuf = new long[data.length * 4]; + long[] outBuf = new long[data.length * 8]; IntWrapper inPos = new IntWrapper(); IntWrapper outPos = new IntWrapper(); codec.compress(data, inPos, data.length, outBuf, outPos); diff --git a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java new file mode 100644 index 0000000..00bb52a --- /dev/null +++ b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java @@ -0,0 +1,106 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import java.util.stream.LongStream; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Edge-cases having caused issue specifically with LongVariableByte. + * + * @author Benoit Lacelle + */ +public class TestLongAs2IntsCodec { + final LongAs2IntsCodec codec = new LongAs2IntsCodec(); + + private void checkConsistency(LongCODEC codec, long[] array) { + { + long[] compressed = LongTestUtils.compress(codec, array); + long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof ByteLongCODEC) { + byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); + long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof SkippableLongCODEC) { + long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); + long[] uncompressed = + LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + } + + @Test + public void testCodec_Zero() { + checkConsistency(codec, new long[] { 0 }); + } + + @Test + public void testCodec_Minus1() { + checkConsistency(codec, new long[] { -1 }); + } + + @Test + public void testCodec_ZeroTimes8Minus1() { + checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); + } + + @Test + public void testCodec_ZeroTimes127Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_ZeroTimes128Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_MinValue() { + checkConsistency(codec, new long[] { Long.MIN_VALUE }); + } + + @Test + public void testCodec_ZeroMinValue() { + checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); + } + + @Test + public void testCodec_allPowerOfTwo() { + checkConsistency(codec, new long[] { 1L << 42 }); + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 1L << i }); + } + } + + @Test + public void testCodec_ZeroThenAllPowerOfTwo() { + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 0, 1L << i }); + } + } + + @Test + public void testCodec_intermediateHighPowerOfTwo() { + Assert.assertEquals(3, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); + } + +} diff --git a/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java new file mode 100644 index 0000000..5b90ee0 --- /dev/null +++ b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java @@ -0,0 +1,91 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ +package me.lemire.longcompression.synth; + +import me.lemire.integercompression.synth.ClusteredDataGenerator; + +/** + * This class will generate lists of random longs based on the clustered + * model: + * + * Reference: Vo Ngoc Anh and Alistair Moffat. 2010. Index compression using + * 64-bit words. Softw. Pract. Exper.40, 2 (February 2010), 131-147. + * + * @author Benoit Lacelle + * @see ClusteredDataGenerator + */ +public class LongClusteredDataGenerator { + + final LongUniformDataGenerator unidg = new LongUniformDataGenerator(); + + /** + * Creating random array generator. + */ + public LongClusteredDataGenerator() { + } + + void fillUniform(long[] array, int offset, int length, long Min, long Max) { + long[] v = this.unidg.generateUniform(length, Max - Min); + for (int k = 0; k < v.length; ++k) + array[k + offset] = Min + v[k]; + } + + void fillClustered(long[] array, int offset, int length, long Min, long Max) { + final long range = Max - Min; + if ((range == length) || (length <= 10)) { + fillUniform(array, offset, length, Min, Max); + return; + } + final long cut = length + / 2 + + ((range - length - 1 > 0) ? (long)this.unidg.rand + .nextDouble() * (range - length - 1) : 0); + final double p = this.unidg.rand.nextDouble(); + if (p < 0.25) { + fillUniform(array, offset, length / 2, Min, Min + cut); + fillClustered(array, offset + length / 2, length + - length / 2, Min + cut, Max); + } else if (p < 0.5) { + fillClustered(array, offset, length / 2, Min, Min + cut); + fillUniform(array, offset + length / 2, length - length + / 2, Min + cut, Max); + } else { + fillClustered(array, offset, length / 2, Min, Min + cut); + fillClustered(array, offset + length / 2, length + - length / 2, Min + cut, Max); + } + } + + /** + * generates randomly N distinct integers from 0 to Max. + * + * @param N + * number of integers to generate + * @param Max + * maximal value of the integers + * @return array containing the integers + */ + public long[] generateClustered(int N, long Max) { + long[] array = new long[N]; + fillClustered(array, 0, N, 0, Max); + return array; + } + + /** + * Little test program. + * + * @param args + * arguments are ignored + */ + public static void main(final String[] args) { + long[] example = (new LongClusteredDataGenerator()) + .generateClustered(20, 1000); + for (int k = 0; k < example.length; ++k) + System.out.println(example[k]); + } + +} diff --git a/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java new file mode 100644 index 0000000..4d435f2 --- /dev/null +++ b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java @@ -0,0 +1,125 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ +package me.lemire.longcompression.synth; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Random; +import java.util.Set; + +import org.roaringbitmap.longlong.Roaring64Bitmap; + +import me.lemire.integercompression.synth.UniformDataGenerator; + +/** + * This class will generate "uniform" lists of random longs. + * + * @author Benoit Lacelle + * @see UniformDataGenerator + */ +public class LongUniformDataGenerator { + /** + * construct generator of random arrays. + */ + public LongUniformDataGenerator() { + this.rand = new Random(); + } + + /** + * @param seed + * random seed + */ + public LongUniformDataGenerator(final int seed) { + this.rand = new Random(seed); + } + + /** + * generates randomly N distinct longs from 0 to Max. + */ + long[] generateUniformHash(int N, long Max) { + if (N > Max) + throw new RuntimeException("not possible"); + long[] ans = new long[N]; + Set s = new HashSet<>(); + while (s.size() < N) + s.add((long) (this.rand.nextDouble() * Max)); + Iterator i = s.iterator(); + for (int k = 0; k < N; ++k) + ans[k] = i.next().longValue(); + Arrays.sort(ans); + return ans; + } + + /** + * output all longs from the range [0,Max) that are not in the array + */ + static long[] negate(long[] x, long Max) { + int newLength = saturatedCast(Max - x.length); + long[] ans = new long[newLength]; + int i = 0; + int c = 0; + for (int j = 0; j < x.length; ++j) { + long v = x[j]; + for (; i < v; ++i) + ans[c++] = i; + ++i; + } + while (c < ans.length) + ans[c++] = i++; + return ans; + } + + private static int saturatedCast(long toInt) { + if (toInt > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } else { + return (int) toInt; + } + } + + /** + * generates randomly N distinct longs from 0 to Max. + * + * @param N + * number of longs to generate + * @param Max + * bound on the value of longs + * @return an array containing randomly selected longs + */ + public long[] generateUniform(int N, long Max) { + assert N >= 0; + assert Max >= 0; + if (N * 2 > Max) { + return negate(generateUniform(saturatedCast(Max - N), Max), Max); + } + if (2048 * N > Max) + return generateUniformBitmap(N, Max); + return generateUniformHash(N, Max); + } + + /** + * generates randomly N distinct longs from 0 to Max. + */ + long[] generateUniformBitmap(int N, long Max) { + if (N > Max) + throw new RuntimeException("not possible"); + Roaring64Bitmap bs = new Roaring64Bitmap(); + int cardinality = 0; + while (cardinality < N) { + long v = (long) (rand.nextDouble() * Max); + if (!bs.contains(v)) { + bs.add(v); + cardinality++; + } + } + return bs.toArray(); + } + + Random rand = new Random(); + +} \ No newline at end of file From b40c7e623e2889462e1a974453d3564ef389b406 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 28 Nov 2022 11:24:54 -0500 Subject: [PATCH 086/170] Cleaning. --- src/main/java/me/lemire/longcompression/LongVariableByte.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index 478db20..f3d10ee 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -46,7 +46,6 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o buf.order(ByteOrder.LITTLE_ENDIAN); for (int k = inpos.get(); k < inpos.get() + inlength; ++k) { final long val = in[k]; - // System.out.println(LongUtil.longToBinaryWithLeading(val)); if (val >= 0 && val < (1 << 7)) { buf.put((byte) (val | (1 << 7))); } else if (val >= 0 && val < (1 << 14)) { @@ -187,7 +186,6 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, out[outpostmp++] = (byte) extract7bits(7, val); out[outpostmp++] = (byte) (extract7bitsmaskless(8, (val)) | (1 << 7)); } else { - // System.out.println(LongUtil.longToBinaryWithLeading(val)); out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); @@ -214,7 +212,6 @@ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, int tmpoutpos = outpos.get(); for (long v = 0, shift = 0; p < finalp;) { val = in[p]; - // System.out.println(LongUtil.longToBinaryWithLeading(val)); long c = (byte) (val >>> s); // Shift to next byte s += 8; @@ -309,7 +306,6 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] int finaloutpos = num + tmpoutpos; for (long v = 0, shift = 0; tmpoutpos < finaloutpos;) { val = in[p]; - // System.out.println(longToBinaryWithLeading(val)); long c = val >>> s; // Shift to next byte s += 8; From 324c2823eff1bcd3c013c5ebc89fa143a2274a12 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 28 Nov 2022 11:27:08 -0500 Subject: [PATCH 087/170] Reverted random -> head --- src/main/java/me/lemire/longcompression/SkippableLongCODEC.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java index e3e7b84..c55a9ef 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java @@ -11,7 +11,7 @@ /** * Interface describing a standard CODEC to compress longs. This is a - * variation on the LongCODEC interface meant to be used for head access. + * variation on the LongCODEC interface meant to be used for random access. * * The main difference is that we must specify the number of longs we wish to * decode. This information should be stored elsewhere. From e2a90c6bc73d3f0dcd66a3a3d13f57c54607789b Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 28 Nov 2022 12:58:46 -0500 Subject: [PATCH 088/170] Minor fixes. --- .../me/lemire/integercompression/SkippableIntegerCODEC.java | 2 +- .../integercompression/benchmarktools/BenchmarkSkippable.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java index 4568d71..719d9d5 100644 --- a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java @@ -10,7 +10,7 @@ /** * Interface describing a standard CODEC to compress integers. This is a - * variation on the IntegerCODEC interface meant to be used for head access. + * variation on the IntegerCODEC interface meant to be used for random access. * * The main difference is that we must specify the number of integers we wish to * decode. This information should be stored elsewhere. diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java index 58bbc4a..363b841 100644 --- a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java +++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java @@ -83,7 +83,6 @@ private static int decompressFromSkipTable(Object c, int[] compressed, if (num > length - uncomppos.get()) num = length - uncomppos.get(); int location = metadata[metapos++]; - // System.out.println("location = "+location); int initvalue = metadata[metapos++]; int outputlocation = uncomppos.get(); if (location != compressedpos.get()) From 7dc74015890b580bb5004686920be43543542c4f Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 28 Nov 2022 12:59:39 -0500 Subject: [PATCH 089/170] Removing spurious "we". --- example.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example.java b/example.java index 817e94f..71ccd63 100644 --- a/example.java +++ b/example.java @@ -117,7 +117,7 @@ public static void basicExampleHeadless() { */ IntWrapper inputoffset = new IntWrapper(0); IntWrapper outputoffset = new IntWrapper(1); - compressed[0] = data.length; // we manually store how many integers we + compressed[0] = data.length; // we manually store how many integers codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); // got it! // inputoffset should be at data.length but outputoffset tells From 1e48bd09f32d5cb65e42be90e47c99d731b4cfb3 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 28 Nov 2022 13:24:22 -0500 Subject: [PATCH 090/170] Extending the 'random access' documentation. --- .../me/lemire/integercompression/SkippableIntegerCODEC.java | 3 ++- .../java/me/lemire/longcompression/SkippableLongCODEC.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java index 719d9d5..8b4dd8b 100644 --- a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java @@ -10,7 +10,8 @@ /** * Interface describing a standard CODEC to compress integers. This is a - * variation on the IntegerCODEC interface meant to be used for random access. + * variation on the IntegerCODEC interface meant to be used for random access + * (i.e., given a large array, you can segment it and decode just the subarray you need). * * The main difference is that we must specify the number of integers we wish to * decode. This information should be stored elsewhere. diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java index c55a9ef..984914f 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java @@ -11,7 +11,8 @@ /** * Interface describing a standard CODEC to compress longs. This is a - * variation on the LongCODEC interface meant to be used for random access. + * variation on the LongCODEC interface meant to be used for random access + * (i.e., given a large array, you can segment it and decode just the subarray you need). * * The main difference is that we must specify the number of longs we wish to * decode. This information should be stored elsewhere. From 5b86fe74fd62b7b3f8911cb309d6252da58b932e Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Mon, 28 Nov 2022 22:56:07 +0400 Subject: [PATCH 091/170] Introduce LongBinaryPacking --- .../lemire/integercompression/BitPacking.java | 4 +- .../DeltaZigzagVariableByte.java | 3 + .../lemire/integercompression/FastPFOR.java | 3 + .../integercompression/FastPFOR128.java | 3 + .../integercompression/IntCompressor.java | 4 +- .../integercompression/IntegerCODEC.java | 4 +- .../SkippableIntegerCODEC.java | 6 +- .../integercompression/VariableByte.java | 7 +- .../longcompression/LongBinaryPacking.java | 143 +++++++++++++++++ .../longcompression/LongBitPacking.java | 146 ++++++++++++++++++ .../me/lemire/longcompression/LongCODEC.java | 6 +- .../longcompression/LongCompressor.java | 76 +++++++++ .../me/lemire/longcompression/LongUtil.java | 30 ++++ .../longcompression/LongVariableByte.java | 4 +- .../longcompression/RoaringIntPacking.java | 62 -------- .../longcompression/SkippableLongCODEC.java | 6 +- .../longcompression/ATestLongCODEC.java | 96 ++++++++++++ .../lemire/longcompression/LongBasicTest.java | 33 ++-- .../SkippableLongBasicTest.java | 3 +- .../longcompression/TestLongAs2IntsCodec.java | 83 +--------- .../TestLongBinaryPacking.java | 26 ++++ .../longcompression/TestLongVariableByte.java | 81 +--------- 22 files changed, 575 insertions(+), 254 deletions(-) create mode 100644 src/main/java/me/lemire/longcompression/LongBinaryPacking.java create mode 100644 src/main/java/me/lemire/longcompression/LongBitPacking.java create mode 100644 src/main/java/me/lemire/longcompression/LongCompressor.java create mode 100644 src/test/java/me/lemire/longcompression/ATestLongCODEC.java create mode 100644 src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java diff --git a/src/main/java/me/lemire/integercompression/BitPacking.java b/src/main/java/me/lemire/integercompression/BitPacking.java index e83c9e0..8652be4 100644 --- a/src/main/java/me/lemire/integercompression/BitPacking.java +++ b/src/main/java/me/lemire/integercompression/BitPacking.java @@ -1690,7 +1690,7 @@ protected static void fastpack9(final int[] in, int inpos, } /** - * Unpack 32 integers + * Pack without mask 32 integers * * @param in * source array @@ -3005,7 +3005,7 @@ protected static void fastpackwithoutmask9(final int[] in, int inpos, } /** - * Pack the 32 integers + * Unpack the 32 integers * * @param in * source array diff --git a/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java b/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java index ca9d0ad..2f8c709 100644 --- a/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java +++ b/src/main/java/me/lemire/integercompression/DeltaZigzagVariableByte.java @@ -134,6 +134,9 @@ public void uncompress(int[] inBuf, IntWrapper inPos, int inLen, * In case you need a different way to allocate buffers, you can override this method * with a custom behavior. The default implementation allocates a new Java direct * {@link ByteBuffer} on each invocation. + * + * @param sizeInBytes + * @return */ protected ByteBuffer makeBuffer(int sizeInBytes) { return ByteBuffer.allocateDirect(sizeInBytes); diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index 36226c0..47969f4 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -336,6 +336,9 @@ public String toString() { * In case you need a different way to allocate buffers, you can override this method * with a custom behavior. The default implementation allocates a new Java direct * {@link ByteBuffer} on each invocation. + * + * @param sizeInBytes + * @return */ protected ByteBuffer makeBuffer(int sizeInBytes) { return ByteBuffer.allocateDirect(sizeInBytes); diff --git a/src/main/java/me/lemire/integercompression/FastPFOR128.java b/src/main/java/me/lemire/integercompression/FastPFOR128.java index b124072..83a3e1f 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR128.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR128.java @@ -317,6 +317,9 @@ public String toString() { * In case you need a different way to allocate buffers, you can override this method * with a custom behavior. The default implementation allocates a new Java direct * {@link ByteBuffer} on each invocation. + * + * @param sizeInBytes + * @return */ protected ByteBuffer makeBuffer(int sizeInBytes) { return ByteBuffer.allocateDirect(sizeInBytes); diff --git a/src/main/java/me/lemire/integercompression/IntCompressor.java b/src/main/java/me/lemire/integercompression/IntCompressor.java index 87e7bde..abaeea9 100644 --- a/src/main/java/me/lemire/integercompression/IntCompressor.java +++ b/src/main/java/me/lemire/integercompression/IntCompressor.java @@ -36,7 +36,8 @@ public IntCompressor() { * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { - int [] compressed = new int[input.length + input.length / 100 + 1024]; + int[] compressed = new int[input.length + input.length / 100 + 1024]; + // Store at index=0 the length of the input, hence enabling .headlessCompress compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); try { @@ -58,6 +59,7 @@ public int[] compress(int[] input) { * @return uncompressed array */ public int[] uncompress(int[] compressed) { + // Read at index=0 the length of the input, hence enabling .headlessUncompress int[] decompressed = new int[compressed[0]]; IntWrapper inpos = new IntWrapper(1); codec.headlessUncompress(compressed, inpos, diff --git a/src/main/java/me/lemire/integercompression/IntegerCODEC.java b/src/main/java/me/lemire/integercompression/IntegerCODEC.java index f2c9c7a..1dd9a4c 100644 --- a/src/main/java/me/lemire/integercompression/IntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/IntegerCODEC.java @@ -25,7 +25,7 @@ public interface IntegerCODEC { * @param in * input array * @param inpos - * location in the input array + * where to start reading in the array * @param inlength * how many integers to compress * @param out @@ -52,7 +52,7 @@ public void compress(int[] in, IntWrapper inpos, int inlength, * @param out * array where to write the compressed output * @param outpos - * where to write the compressed output in out + * where to start writing the uncompressed output in out */ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos); diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java index 4568d71..0b6e825 100644 --- a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java @@ -32,7 +32,7 @@ public interface SkippableIntegerCODEC { * @param in * input array * @param inpos - * location in the input array + * where to start reading in the array * @param inlength * how many integers to compress * @param out @@ -56,9 +56,9 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out * @param inlength * length of the compressed data (ignored by some schemes) * @param out - * array where to write the compressed output + * array where to write the uncompressed output * @param outpos - * where to write the compressed output in out + * where to start writing the uncompressed output in out * @param num * number of integers we want to decode, the actual number of integers decoded can be less */ diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index 09e479b..1e28537 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -126,7 +126,7 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, s += 8; // Shift to next integer if s==32 p += s>>5; - // cycle from 31 to 0 + // cycle from 32 to 0 s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { @@ -194,7 +194,7 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o s += 8; // Shift to next integer if s==32 p += s>>5; - // cycle from 31 to 0 + // cycle from 32 to 0 s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { @@ -214,6 +214,9 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o * In case you need a different way to allocate buffers, you can override this method * with a custom behavior. The default implementation allocates a new Java direct * {@link ByteBuffer} on each invocation. + * + * @param sizeInBytes + * @return */ protected ByteBuffer makeBuffer(int sizeInBytes) { return ByteBuffer.allocateDirect(sizeInBytes); diff --git a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java new file mode 100644 index 0000000..dba5cbc --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java @@ -0,0 +1,143 @@ +package me.lemire.longcompression; + +import me.lemire.integercompression.BinaryPacking; +import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.Util; + +/** + * Scheme based on a commonly used idea: can be extremely fast. + * It encodes integers in blocks of 64 longs. For arrays containing + * an arbitrary number of longs, you should use it in conjunction + * with another CODEC: + * + *
    LongCODEC ic = 
    + *  new Composition(new LongBinaryPacking(), new LongVariableByte()).
    + * + * Note that this does not use differential coding: if you are working on sorted + * lists, you must compute the deltas separately. + * + *

    + * For details, please see {@link BinaryPacking} + *

    + * + * @author Benoit Lacelle + */ +public final class LongBinaryPacking implements LongCODEC, SkippableLongCODEC { + final static int BLOCK_SIZE = 64; + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } + + @Override + public void headlessCompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int tmpoutpos = outpos.get(); + int s = inpos.get(); + // Compress by block of 8 * 64 longs as much as possible + for (; s + BLOCK_SIZE * 8 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 8) { + // maxbits can be anything between 0 and 64 included: expressed within a byte (1 << 6) + final long mbits1 = LongUtil.maxbits(in, s + 0 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits2 = LongUtil.maxbits(in, s + 1 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits3 = LongUtil.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits4 = LongUtil.maxbits(in, s + 3 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits5 = LongUtil.maxbits(in, s + 4 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits6 = LongUtil.maxbits(in, s + 5 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits7 = LongUtil.maxbits(in, s + 6 * BLOCK_SIZE, BLOCK_SIZE); + final long mbits8 = LongUtil.maxbits(in, s + 7 * BLOCK_SIZE, BLOCK_SIZE); + // The first long expressed the maxbits for the 8 buckets + out[tmpoutpos++] = (mbits1 << 56) | (mbits2 << 48) | (mbits3 << 40) | (mbits4 << 32) | (mbits5 << 24) | (mbits6 << 16) | (mbits7 << 8) | (mbits8); + LongBitPacking.fastpackwithoutmask(in, s + 0 * BLOCK_SIZE, out, tmpoutpos, (int) mbits1); + tmpoutpos += mbits1; + LongBitPacking.fastpackwithoutmask(in, s + 1 * BLOCK_SIZE, out, tmpoutpos, (int) mbits2); + tmpoutpos += mbits2; + LongBitPacking.fastpackwithoutmask(in, s + 2 * BLOCK_SIZE, out, tmpoutpos, (int) mbits3); + tmpoutpos += mbits3; + LongBitPacking.fastpackwithoutmask(in, s + 3 * BLOCK_SIZE, out, tmpoutpos, (int) mbits4); + tmpoutpos += mbits4; + LongBitPacking.fastpackwithoutmask(in, s + 4 * BLOCK_SIZE, out, tmpoutpos, (int) mbits5); + tmpoutpos += mbits5; + LongBitPacking.fastpackwithoutmask(in, s + 5 * BLOCK_SIZE, out, tmpoutpos, (int) mbits6); + tmpoutpos += mbits6; + LongBitPacking.fastpackwithoutmask(in, s + 6 * BLOCK_SIZE, out, tmpoutpos, (int) mbits7); + tmpoutpos += mbits7; + LongBitPacking.fastpackwithoutmask(in, s + 7 * BLOCK_SIZE, out, tmpoutpos, (int) mbits8); + tmpoutpos += mbits8; + } + // Then we compress up to 7 blocks of 64 longs + for (; s < inpos.get() + inlength; s += BLOCK_SIZE ) { + final int mbits = LongUtil.maxbits(in, s, BLOCK_SIZE); + out[tmpoutpos++] = mbits; + LongBitPacking.fastpackwithoutmask(in, s, out, tmpoutpos, mbits); + tmpoutpos += mbits; + } + inpos.add(inlength); + outpos.set(tmpoutpos); + } + + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = (int) in[inpos.get()]; + inpos.increment(); + headlessUncompress(in,inpos, inlength,out,outpos,outlength); + } + + @Override + public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, + long[] out, IntWrapper outpos, int num) { + final int outlength = Util.greatestMultiple(num, BLOCK_SIZE); + int tmpinpos = inpos.get(); + int s = outpos.get(); + for (; s + BLOCK_SIZE * 8 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 8) { + final long mbits1 = (in[tmpinpos] >>> 56); + final long mbits2 = (in[tmpinpos] >>> 48) & 0xFF; + final long mbits3 = (in[tmpinpos] >>> 40) & 0xFF; + final long mbits4 = (in[tmpinpos] >>> 32) & 0xFF; + final long mbits5 = (in[tmpinpos] >>> 24) & 0xFF; + final long mbits6 = (in[tmpinpos] >>> 16) & 0xFF; + final long mbits7 = (in[tmpinpos] >>> 8) & 0xFF; + final long mbits8 = (in[tmpinpos]) & 0xFF; + ++tmpinpos; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 0 * BLOCK_SIZE, (int) mbits1); + tmpinpos += mbits1; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 1 * BLOCK_SIZE, (int) mbits2); + tmpinpos += mbits2; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, (int) mbits3); + tmpinpos += mbits3; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, (int) mbits4); + tmpinpos += mbits4; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 4 * BLOCK_SIZE, (int) mbits5); + tmpinpos += mbits5; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 5 * BLOCK_SIZE, (int) mbits6); + tmpinpos += mbits6; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 6 * BLOCK_SIZE, (int) mbits7); + tmpinpos += mbits7; + LongBitPacking.fastunpack(in, tmpinpos, out, s + 7 * BLOCK_SIZE, (int) mbits8); + tmpinpos += mbits8; + } + for (; s < outpos.get() + outlength; s += BLOCK_SIZE ) { + final int mbits = (int) in[tmpinpos]; + ++tmpinpos; + LongBitPacking.fastunpack(in, tmpinpos, out, s, mbits); + tmpinpos += mbits; + } + outpos.add(outlength); + inpos.set(tmpinpos); + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } +} diff --git a/src/main/java/me/lemire/longcompression/LongBitPacking.java b/src/main/java/me/lemire/longcompression/LongBitPacking.java new file mode 100644 index 0000000..7da1c7f --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongBitPacking.java @@ -0,0 +1,146 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import java.util.Arrays; + +/** + * Bitpacking routines + * + *

    For details, please see

    + *

    + * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second + * through vectorization Software: Practice & Experience + * http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract + * http://arxiv.org/abs/1209.2137 + *

    + * + * @author Benoit Lacelle + * + */ +public final class LongBitPacking { + + /** + * Pack 64 longs + * + * @param in + * source array + * @param inpos + * position in source array + * @param out + * output array + * @param outpos + * position in output array + * @param bit + * number of bits to use per long + */ + public static void fastpackwithoutmask(final long[] in, final int inpos, + final long[] out, final int outpos, final int bit) { + if (bit == 0) { + fastpackwithoutmask0(in, inpos, out, outpos); + } else if (bit == 64) { + fastpackwithoutmask64(in, inpos, out, outpos); + } else if (bit > 0 && bit < 64) { + slowpackwithoutmask(in, inpos, out, outpos, bit); + } else { + throw new IllegalArgumentException("Unsupported bit width: " + bit); + } + } + + protected static void fastpackwithoutmask0(final long[] in, int inpos, + final long[] out, int outpos) { + // nothing + } + + protected static void fastpackwithoutmask64(final long[] in, int inpos, + final long[] out, int outpos) { + System.arraycopy(in, inpos, out, outpos, 64); + } + + protected static void slowpackwithoutmask(final long[] in, int inpos, + final long[] out, int outpos, final int bit) { + int bucket = 0; + int shift = 0; + + out[outpos + bucket] = 0L; + for (int i = 0 ; i < 64 ; i++) { + if (shift >= 64) { + bucket++; + out[bucket + outpos] = 0L; + shift -= 64; + + if (shift > 0) { + // There is some leftovers from previous input in the next bucket + out[outpos + bucket] |= in[inpos + i - 1] >> (bit - shift); + } + } + out[outpos + bucket] |= in[inpos + i] << shift; + + shift += bit; + } + } + + + /** + * Unpack the 64 longs + * + * @param in + * source array + * @param inpos + * starting point in the source array + * @param out + * output array + * @param outpos + * starting point in the output array + * @param bit + * how many bits to use per integer + */ + public static void fastunpack(final long[] in, final int inpos, + final long[] out, final int outpos, final int bit) { + if (bit == 0) { + fastunpack0(in, inpos, out, outpos); + } else if (bit == 64) { + fastunpack64(in, inpos, out, outpos); + } else if (bit > 0 && bit < 64) { + slowunpack(in, inpos, out, outpos, bit); + } else { + throw new IllegalArgumentException("Unsupported bit width: " + bit); + } + } + + + protected static void fastunpack0(final long[] in, int inpos, + final long[] out, int outpos) { + Arrays.fill(out, outpos, outpos + 64, 0); + } + + protected static void fastunpack64(final long[] in, int inpos, + final long[] out, int outpos) { + System.arraycopy(in, inpos, out, outpos, 64); + } + + protected static void slowunpack(final long[] in, int inpos, + final long[] out, int outpos, final int bit) { + int bucket = 0; + int shift = 0; + for (int i = 0 ; i < 64 ; i++) { + if (shift >= 64) { + bucket++; + shift -= 64; + + if (shift > 0) { + // There is some leftovers from previous input in the next bucket + out[outpos + i - 1] |= (in[inpos + bucket] << (bit - shift) & ((1L << bit) - 1)); + } + } + out[outpos + i] = ((in[inpos + bucket] >>> shift) & ((1L << bit) - 1)); + + shift += bit; + } + } +} diff --git a/src/main/java/me/lemire/longcompression/LongCODEC.java b/src/main/java/me/lemire/longcompression/LongCODEC.java index c0f67b2..1068f9f 100644 --- a/src/main/java/me/lemire/longcompression/LongCODEC.java +++ b/src/main/java/me/lemire/longcompression/LongCODEC.java @@ -27,7 +27,7 @@ public interface LongCODEC { * @param in * input array * @param inpos - * location in the input array + * where to start reading in the array * @param inlength * how many longs to compress * @param out @@ -52,9 +52,9 @@ public void compress(long[] in, IntWrapper inpos, int inlength, * length of the compressed data (ignored by some * schemes) * @param out - * array where to write the compressed output + * array where to write the uncompressed output * @param outpos - * where to write the compressed output in out + * where to start writing the uncompressed output in out */ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos); diff --git a/src/main/java/me/lemire/longcompression/LongCompressor.java b/src/main/java/me/lemire/longcompression/LongCompressor.java new file mode 100644 index 0000000..a140911 --- /dev/null +++ b/src/main/java/me/lemire/longcompression/LongCompressor.java @@ -0,0 +1,76 @@ +package me.lemire.longcompression; + +import java.util.Arrays; + +import me.lemire.integercompression.IntWrapper; +import me.lemire.integercompression.UncompressibleInputException; + +/** + * This is a convenience class that wraps a codec to provide + * a "friendly" API. + * + * @author Benoit Lacelle + */ +public class LongCompressor { + + + SkippableLongCODEC codec; + /** + * Constructor wrapping a codec. + * + * @param c the underlying codec + */ + public LongCompressor(SkippableLongCODEC c) { + codec = c; + } + + /** + * Constructor with default codec. + */ + public LongCompressor() { + codec = new SkippableLongComposition(new LongBinaryPacking(), + new LongVariableByte()); + } + + /** + * Compress an array and returns the compressed result as a new array. + * + * @param input array to be compressed + * @return compressed array + * @throws UncompressibleInputException if the data is too poorly compressible + */ + public long[] compress(long[] input) { + long[] compressed = new long[input.length + input.length / 100 + 1024]; + // Store at index=0 the length of the input, hence enabling .headlessCompress + compressed[0] = input.length; + IntWrapper outpos = new IntWrapper(1); + try { + codec.headlessCompress(input, new IntWrapper(0), + input.length, compressed, outpos); + } catch (IndexOutOfBoundsException ioebe) { + throw new + UncompressibleInputException("Your input is too poorly compressible " + + "with the current codec : "+codec); + } + compressed = Arrays.copyOf(compressed,outpos.intValue()); + return compressed; + } + + /** + * Uncompress an array and returns the uncompressed result as a new array. + * + * @param compressed compressed array + * @return uncompressed array + */ + public long[] uncompress(long[] compressed) { + // Read at index=0 the length of the input, hence enabling .headlessUncompress + long[] decompressed = new long[(int) compressed[0]]; + IntWrapper inpos = new IntWrapper(1); + codec.headlessUncompress(compressed, inpos, + compressed.length - inpos.intValue(), + decompressed, new IntWrapper(0), + decompressed.length); + return decompressed; + } + +} diff --git a/src/main/java/me/lemire/longcompression/LongUtil.java b/src/main/java/me/lemire/longcompression/LongUtil.java index c06433f..596a134 100644 --- a/src/main/java/me/lemire/longcompression/LongUtil.java +++ b/src/main/java/me/lemire/longcompression/LongUtil.java @@ -15,7 +15,37 @@ */ @Deprecated public class LongUtil { + + /** + * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range + * of value + * + * @param i + * source array + * @param pos + * starting position + * @param length + * number of integers to consider + * @return integer logarithm + */ + public static int maxbits(long[] i, int pos, int length) { + long mask = 0; + for (int k = pos; k < pos + length; ++k) + mask |= i[k]; + return bits(mask); + } + /** + * Compute the integer logarithms (ceil(log(x+1)) of a value + * + * @param i + * source value + * @return integer logarithm + */ + public static int bits(long i) { + return 64 - Long.numberOfLeadingZeros(i); + } + protected static String longToBinaryWithLeading(long l) { return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); } diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index 478db20..d31967a 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -220,7 +220,7 @@ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, s += 8; // Shift to next long if s==64 p += s>>6; - // cycle from 63 to 0 + // Cycle from 64 to 0 s = s & 63; v += ((c & 127) << shift); if ((c & 128) == 128) { @@ -315,7 +315,7 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] s += 8; // Shift to next long if s == 64 p += s>>6; - // cycle from 63 to 0 + // Cycle from 64 to 0 s = s & 63; v += ((c & 127) << shift); if ((c & 128) == 128) { diff --git a/src/main/java/me/lemire/longcompression/RoaringIntPacking.java b/src/main/java/me/lemire/longcompression/RoaringIntPacking.java index f109ab3..d6b6baa 100644 --- a/src/main/java/me/lemire/longcompression/RoaringIntPacking.java +++ b/src/main/java/me/lemire/longcompression/RoaringIntPacking.java @@ -3,9 +3,6 @@ */ package me.lemire.longcompression; -import java.math.BigInteger; -import java.util.Comparator; - /** * Used to hold the logic packing 2 integers in a long, and separating a long in two integers. It is * useful in {@link Roaring64NavigableMap} as the implementation split the input long in two @@ -46,63 +43,4 @@ public static int low(long id) { public static long pack(int high, int low) { return (((long) high) << 32) | (low & 0xffffffffL); } - - - /** - * - * @param signedLongs true if long put in a {@link Roaring64NavigableMap} should be considered as - * signed long. - * @return the int representing the highest value which can be set as high value in a - * {@link Roaring64NavigableMap} - */ - public static int highestHigh(boolean signedLongs) { - if (signedLongs) { - return Integer.MAX_VALUE; - } else { - return -1; - } - } - - /** - * @return A comparator for unsigned longs: a negative long is a long greater than Long.MAX_VALUE - */ - public static Comparator unsignedComparator() { - return new Comparator() { - - @Override - public int compare(Integer o1, Integer o2) { - return compareUnsigned(o1, o2); - } - }; - } - - /** - * Compares two {@code int} values numerically treating the values as unsigned. - * - * @param x the first {@code int} to compare - * @param y the second {@code int} to compare - * @return the value {@code 0} if {@code x == y}; a value less than {@code 0} if {@code x < y} as - * unsigned values; and a value greater than {@code 0} if {@code x > y} as unsigned values - * @since 1.8 - */ - // Duplicated from jdk8 Integer.compareUnsigned - public static int compareUnsigned(int x, int y) { - return Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE); - } - - /** the constant 2^64 */ - private static final BigInteger TWO_64 = BigInteger.ONE.shiftLeft(64); - - /** - * JDK8 Long.toUnsignedString was too complex to backport. Go for a slow version relying on - * BigInteger - */ - // https://stackoverflow.com/questions/7031198/java-signed-long-to-unsigned-long-string - static String toUnsignedString(long l) { - BigInteger b = BigInteger.valueOf(l); - if (b.signum() < 0) { - b = b.add(TWO_64); - } - return b.toString(); - } } diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java index e3e7b84..57475f5 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java @@ -33,7 +33,7 @@ public interface SkippableLongCODEC { * @param in * input array * @param inpos - * location in the input array + * where to start reading in the array * @param inlength * how many longs to compress * @param out @@ -57,9 +57,9 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o * @param inlength * length of the compressed data (ignored by some schemes) * @param out - * array where to write the compressed output + * array where to write the uncompressed output * @param outpos - * where to write the compressed output in out + * where to start writing the uncompressed output in out * @param num * number of longs we want to decode, the actual number of longs decoded can be less */ diff --git a/src/test/java/me/lemire/longcompression/ATestLongCODEC.java b/src/test/java/me/lemire/longcompression/ATestLongCODEC.java new file mode 100644 index 0000000..c61ea69 --- /dev/null +++ b/src/test/java/me/lemire/longcompression/ATestLongCODEC.java @@ -0,0 +1,96 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import java.util.stream.LongStream; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Edge-cases to be tested on a per-codec basis + * + * @author Benoit Lacelle + */ +public abstract class ATestLongCODEC { + protected void checkConsistency(LongCODEC codec, long[] array) { + { + long[] compressed = LongTestUtils.compress(codec, array); + long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof ByteLongCODEC) { + byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); + long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof SkippableLongCODEC) { + long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); + long[] uncompressed = + LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + } + + public abstract LongCODEC getCodec(); + + @Test + public void testCodec_Minus1() { + checkConsistency(getCodec(), new long[] { -1 }); + } + + @Test + public void testCodec_ZeroTimes8Minus1() { + checkConsistency(getCodec(), new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); + } + + @Test + public void testCodec_ZeroTimes127Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(getCodec(), array); + } + + @Test + public void testCodec_ZeroTimes128Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(getCodec(), array); + } + + @Test + public void testCodec_MinValue() { + checkConsistency(getCodec(), new long[] { Long.MIN_VALUE }); + } + + @Test + public void testCodec_ZeroMinValue() { + checkConsistency(getCodec(), new long[] { 0, Long.MIN_VALUE }); + } + + @Test + public void testCodec_allPowerOfTwo() { + checkConsistency(getCodec(), new long[] { 1L << 42 }); + for (int i = 0; i < 64; i++) { + checkConsistency(getCodec(), new long[] { 1L << i }); + } + } + + @Test + public void testCodec_ZeroThenAllPowerOfTwo() { + for (int i = 0; i < 64; i++) { + checkConsistency(getCodec(), new long[] { 0, 1L << i }); + } + } + +} diff --git a/src/test/java/me/lemire/longcompression/LongBasicTest.java b/src/test/java/me/lemire/longcompression/LongBasicTest.java index 5aa3551..1963246 100644 --- a/src/test/java/me/lemire/longcompression/LongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/LongBasicTest.java @@ -14,24 +14,9 @@ import org.junit.Test; -import me.lemire.integercompression.BinaryPacking; -import me.lemire.integercompression.Composition; import me.lemire.integercompression.FastPFOR; import me.lemire.integercompression.FastPFOR128; import me.lemire.integercompression.IntWrapper; -import me.lemire.integercompression.JustCopy; -import me.lemire.integercompression.NewPFD; -import me.lemire.integercompression.NewPFDS16; -import me.lemire.integercompression.NewPFDS9; -import me.lemire.integercompression.OptPFD; -import me.lemire.integercompression.OptPFDS16; -import me.lemire.integercompression.OptPFDS9; -import me.lemire.integercompression.Simple9; -import me.lemire.integercompression.VariableByte; -import me.lemire.integercompression.differential.Delta; -import me.lemire.integercompression.differential.IntegratedBinaryPacking; -import me.lemire.integercompression.differential.IntegratedComposition; -import me.lemire.integercompression.differential.IntegratedVariableByte; import me.lemire.longcompression.differential.LongDelta; import me.lemire.longcompression.synth.LongClusteredDataGenerator; @@ -45,7 +30,9 @@ public class LongBasicTest { final LongCODEC[] codecs = { new LongJustCopy(), new LongVariableByte(), - new LongAs2IntsCodec()}; + new LongAs2IntsCodec(), + new LongComposition(new LongBinaryPacking(), new LongVariableByte()), + }; /** * This tests with a compressed array with various offset @@ -89,14 +76,19 @@ public void varyingLengthTest() { long[] comp = LongTestUtils.compress(c, Arrays.copyOf(data, L)); long[] answer = LongTestUtils.uncompress(c, comp, L); for (int k = 0; k < L; ++k) - if (answer[k] != data[k]) - throw new RuntimeException("bug"); + if (answer[k] != data[k]) { + long[] comp2 = LongTestUtils.compress(c, Arrays.copyOf(data, L)); + long[] answer2 = LongTestUtils.uncompress(c, comp2, L); + throw new RuntimeException("bug"); + } } for (int L = 128; L <= N; L *= 2) { long[] comp = LongTestUtils.compress(c, Arrays.copyOf(data, L)); long[] answer = LongTestUtils.uncompress(c, comp, L); for (int k = 0; k < L; ++k) if (answer[k] != data[k]) { + long[] comp2 = LongTestUtils.compress(c, Arrays.copyOf(data, L)); + long[] answer2 = LongTestUtils.uncompress(c, comp2, L); System.out.println(Arrays.toString(Arrays.copyOf( answer, L))); System.out.println(Arrays.toString(Arrays.copyOf(data, @@ -366,9 +358,12 @@ public void fastPforTest() { long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); long[] answer = LongTestUtils.uncompress(codec, comp, N); for (int k = 0; k < N; ++k) - if (answer[k] != data[k]) + if (answer[k] != data[k]) { + long[] comp2 = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); + long[] answer2 = LongTestUtils.uncompress(codec, comp2, N); throw new RuntimeException("bug " + k + " " + answer[k] + " != " + data[k]); + } } } diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java index e900c9c..24cb712 100644 --- a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java @@ -25,7 +25,8 @@ public class SkippableLongBasicTest { final SkippableLongCODEC[] codecs = { new LongJustCopy(), - new LongVariableByte(), }; + new LongVariableByte(), + new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte()), }; /** diff --git a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java index 00bb52a..5b8014e 100644 --- a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java +++ b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java @@ -7,8 +7,6 @@ package me.lemire.longcompression; -import java.util.stream.LongStream; - import org.junit.Assert; import org.junit.Test; @@ -17,85 +15,12 @@ * * @author Benoit Lacelle */ -public class TestLongAs2IntsCodec { +public class TestLongAs2IntsCodec extends ATestLongCODEC { final LongAs2IntsCodec codec = new LongAs2IntsCodec(); - private void checkConsistency(LongCODEC codec, long[] array) { - { - long[] compressed = LongTestUtils.compress(codec, array); - long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof ByteLongCODEC) { - byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); - long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof SkippableLongCODEC) { - long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); - long[] uncompressed = - LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - } - - @Test - public void testCodec_Zero() { - checkConsistency(codec, new long[] { 0 }); - } - - @Test - public void testCodec_Minus1() { - checkConsistency(codec, new long[] { -1 }); - } - - @Test - public void testCodec_ZeroTimes8Minus1() { - checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); - } - - @Test - public void testCodec_ZeroTimes127Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_ZeroTimes128Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_MinValue() { - checkConsistency(codec, new long[] { Long.MIN_VALUE }); - } - - @Test - public void testCodec_ZeroMinValue() { - checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); - } - - @Test - public void testCodec_allPowerOfTwo() { - checkConsistency(codec, new long[] { 1L << 42 }); - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 1L << i }); - } - } - - @Test - public void testCodec_ZeroThenAllPowerOfTwo() { - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 0, 1L << i }); - } + @Override + public LongCODEC getCodec() { + return codec; } @Test diff --git a/src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java b/src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java new file mode 100644 index 0000000..ecc3f2e --- /dev/null +++ b/src/test/java/me/lemire/longcompression/TestLongBinaryPacking.java @@ -0,0 +1,26 @@ +/** + * This code is released under the + * Apache License Version 2.0 http://www.apache.org/licenses/. + * + * (c) Daniel Lemire, http://lemire.me/en/ + */ + +package me.lemire.longcompression; + +import org.junit.Ignore; + +/** + * Edge-cases having caused issue specifically with LongBinaryPacking. + * + * @author Benoit Lacelle + */ +@Ignore("Parent class tests are not valid as LongBinaryPacking process by chunks of 64 longs") +public class TestLongBinaryPacking extends ATestLongCODEC { + final LongBinaryPacking codec = new LongBinaryPacking(); + + @Override + public LongCODEC getCodec() { + return codec; + } + +} diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java index 15613f2..ee1755a 100644 --- a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java +++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java @@ -7,8 +7,6 @@ package me.lemire.longcompression; -import java.util.stream.LongStream; - import org.junit.Assert; import org.junit.Test; @@ -17,87 +15,20 @@ * * @author Benoit Lacelle */ -public class TestLongVariableByte { +public class TestLongVariableByte extends ATestLongCODEC { final LongVariableByte codec = new LongVariableByte(); - private void checkConsistency(LongCODEC codec, long[] array) { - { - long[] compressed = LongTestUtils.compress(codec, array); - long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof ByteLongCODEC) { - byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); - long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof SkippableLongCODEC) { - long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); - long[] uncompressed = - LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - } - - @Test - public void testCodec_ZeroMinus1() { - checkConsistency(codec, new long[] { -1 }); - } - - @Test - public void testCodec_ZeroTimes8Minus1() { - checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); - } - - @Test - public void testCodec_ZeroTimes127Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_ZeroTimes128Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_MinValue() { - checkConsistency(codec, new long[] { Long.MIN_VALUE }); - } - - @Test - public void testCodec_ZeroMinValue() { - checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); - } - - @Test - public void testCodec_allPowerOfTwo() { - checkConsistency(codec, new long[] { 1L << 42 }); - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 1L << i }); - } - } - - @Test - public void testCodec_ZeroThenAllPowerOfTwo() { - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 0, 1L << i }); - } + @Override + public LongCODEC getCodec() { + return codec; } @Test public void testCodec_intermediateHighPowerOfTwo() { Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length); - Assert.assertEquals(1, LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length); + Assert.assertEquals(1, + LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length); } } From 4fb854fd4582732e6934f6c0317ff14c41b9e3db Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Mon, 28 Nov 2022 23:10:17 +0400 Subject: [PATCH 092/170] Fix tab to 4-spaces --- .../lemire/longcompression/ByteLongCODEC.java | 2 +- .../longcompression/LongAs2IntsCodec.java | 338 +++++++++--------- .../longcompression/LongBinaryPacking.java | 10 +- .../longcompression/LongBitPacking.java | 36 +- .../me/lemire/longcompression/LongUtil.java | 10 +- .../longcompression/LongVariableByte.java | 2 +- 6 files changed, 199 insertions(+), 199 deletions(-) diff --git a/src/main/java/me/lemire/longcompression/ByteLongCODEC.java b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java index e405370..dbc6864 100644 --- a/src/main/java/me/lemire/longcompression/ByteLongCODEC.java +++ b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java @@ -57,6 +57,6 @@ public void compress(long[] in, IntWrapper inpos, int inlength, * where to write the compressed output in out */ public void uncompress(byte[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos); + long[] out, IntWrapper outpos); } diff --git a/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java index 3b2bc76..35c1166 100644 --- a/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java +++ b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java @@ -16,174 +16,174 @@ * */ public class LongAs2IntsCodec implements LongCODEC { - final IntegerCODEC highPartsCodec; - final IntegerCODEC lowPartsCodec; - - public LongAs2IntsCodec(IntegerCODEC highPartsCodec, IntegerCODEC lowPartsCodec) { - this.highPartsCodec = highPartsCodec; - this.lowPartsCodec = lowPartsCodec; - } - - /** - * By default, we expect longs to be slightly above Integer.MAX_VALUE. Hence highParts to be small and positive - * integers. For lowParts, we rely on {@link IntCompressor} default IntegerCODEC - */ - public LongAs2IntsCodec() { - this(new VariableByte(), new Composition(new BinaryPacking(), new VariableByte())); - } - - @Override - public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { - if (inlength == 0) { - return; - } - - int[] highParts = new int[inlength]; - int[] lowParts = new int[inlength]; - - for (int i = 0; i < inlength; i++) { - int inPosition = inpos.get() + i; - - highParts[i] = RoaringIntPacking.high(in[inPosition]); - lowParts[i] = RoaringIntPacking.low(in[inPosition]); - } - - // TODO What would be a relevant buffer size? - int[] buffer = new int[inlength * 16]; - - int outPosition = outpos.get(); - - boolean hasLeftover; - { - // The first integer is reserved to hold the number of compressed ints - IntWrapper highPartsOutPosition = new IntWrapper(1); - - highPartsCodec.compress(highParts, new IntWrapper(), inlength, buffer, highPartsOutPosition); - - // Record the compressedHighparts length - buffer[0] = highPartsOutPosition.get() - 1; - - for (int i = 0; i < highPartsOutPosition.get() / 2; i++) { - long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); - out[outPosition++] = pack; - } - - if (1 == highPartsOutPosition.get() % 2) { - // Shift the trailing integer as first in the buffer - hasLeftover = true; - buffer[0] = buffer[highPartsOutPosition.get() - 1]; - } else { - hasLeftover = false; - } - } - - { - // The first integer is reserved to hold the number of compressed ints - IntWrapper lowPartsOutPosition = new IntWrapper(1); - if (hasLeftover) { - // Keep the trailing int from highParts before the reserved int from lowParts compressed length - lowPartsOutPosition.set(2); - } - - lowPartsCodec.compress(lowParts, new IntWrapper(0), inlength, buffer, lowPartsOutPosition); - - // Record the compressedHighparts length - buffer[hasLeftover ? 1 : 0] = lowPartsOutPosition.get() - (hasLeftover ? 2 : 1); - - for (int i = 0; i < lowPartsOutPosition.get() / 2; i++) { - long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); - out[outPosition++] = pack; - } - - if (1 == lowPartsOutPosition.get() % 2) { - // The trailing integer is packed with a 0 - long pack = RoaringIntPacking.pack(buffer[lowPartsOutPosition.get() - 1], 0); - out[outPosition++] = pack; - } - } - - inpos.add(inlength); - outpos.set(outPosition); - } - - /** - * inlength is ignored by this codec. We may rely on it instead of storing the compressedLowPart length - */ - @Override - public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { - if (inlength == 0) { - return; - } - - int longIndex = inpos.get(); - - int nbCompressedHighParts = RoaringIntPacking.high(in[longIndex]); - int[] compressedHighParts = new int[nbCompressedHighParts]; - - // !highPart as we just read the highPart for nbCompressedHighParts - boolean highPart = false; - for (int i = 0; i < nbCompressedHighParts; i++) { - int nextInt; - if (highPart) { - nextInt = RoaringIntPacking.high(in[longIndex + (i + 1) / 2]); - } else { - nextInt = RoaringIntPacking.low(in[longIndex + (i + 1) / 2]); - } - compressedHighParts[i] = nextInt; - - highPart = !highPart; - } - - // TODO What would be a relevant buffer size? - int[] buffer = new int[inlength * 16]; - - IntWrapper highPartsOutPosition = new IntWrapper(); - highPartsCodec.uncompress(compressedHighParts, - new IntWrapper(), - compressedHighParts.length, - buffer, - highPartsOutPosition); - int[] highParts = Arrays.copyOf(buffer, highPartsOutPosition.get()); - - // +1 as we initially read nbCompressedHighParts - int intIndexNbCompressedLowParts = longIndex * 2 + 1 + nbCompressedHighParts; - int nbCompressedLowParts; - if (highPart) { - nbCompressedLowParts = RoaringIntPacking.high(in[intIndexNbCompressedLowParts / 2]); - } else { - nbCompressedLowParts = RoaringIntPacking.low(in[intIndexNbCompressedLowParts / 2]); - } - highPart = !highPart; - - int[] compressedLowParts = new int[nbCompressedLowParts]; - for (int i = 0; i < nbCompressedLowParts; i++) { - int nextInt; - if (highPart) { - nextInt = RoaringIntPacking.high(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); - } else { - nextInt = RoaringIntPacking.low(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); - } - compressedLowParts[i] = nextInt; - - highPart = !highPart; - } - - IntWrapper lowPartsOutPosition = new IntWrapper(); - lowPartsCodec.uncompress(compressedLowParts, - new IntWrapper(), - compressedLowParts.length, - buffer, - lowPartsOutPosition); - int[] lowParts = Arrays.copyOf(buffer, lowPartsOutPosition.get()); - assert highParts.length == lowParts.length; - - int outposition = outpos.get(); - for (int i = 0; i < highParts.length; i++) { - out[outposition++] = RoaringIntPacking.pack(highParts[i], lowParts[i]); - } - - inpos.add(inlength); - outpos.set(outposition); - } + final IntegerCODEC highPartsCodec; + final IntegerCODEC lowPartsCodec; + + public LongAs2IntsCodec(IntegerCODEC highPartsCodec, IntegerCODEC lowPartsCodec) { + this.highPartsCodec = highPartsCodec; + this.lowPartsCodec = lowPartsCodec; + } + + /** + * By default, we expect longs to be slightly above Integer.MAX_VALUE. Hence highParts to be small and positive + * integers. For lowParts, we rely on {@link IntCompressor} default IntegerCODEC + */ + public LongAs2IntsCodec() { + this(new VariableByte(), new Composition(new BinaryPacking(), new VariableByte())); + } + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + + int[] highParts = new int[inlength]; + int[] lowParts = new int[inlength]; + + for (int i = 0; i < inlength; i++) { + int inPosition = inpos.get() + i; + + highParts[i] = RoaringIntPacking.high(in[inPosition]); + lowParts[i] = RoaringIntPacking.low(in[inPosition]); + } + + // TODO What would be a relevant buffer size? + int[] buffer = new int[inlength * 16]; + + int outPosition = outpos.get(); + + boolean hasLeftover; + { + // The first integer is reserved to hold the number of compressed ints + IntWrapper highPartsOutPosition = new IntWrapper(1); + + highPartsCodec.compress(highParts, new IntWrapper(), inlength, buffer, highPartsOutPosition); + + // Record the compressedHighparts length + buffer[0] = highPartsOutPosition.get() - 1; + + for (int i = 0; i < highPartsOutPosition.get() / 2; i++) { + long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); + out[outPosition++] = pack; + } + + if (1 == highPartsOutPosition.get() % 2) { + // Shift the trailing integer as first in the buffer + hasLeftover = true; + buffer[0] = buffer[highPartsOutPosition.get() - 1]; + } else { + hasLeftover = false; + } + } + + { + // The first integer is reserved to hold the number of compressed ints + IntWrapper lowPartsOutPosition = new IntWrapper(1); + if (hasLeftover) { + // Keep the trailing int from highParts before the reserved int from lowParts compressed length + lowPartsOutPosition.set(2); + } + + lowPartsCodec.compress(lowParts, new IntWrapper(0), inlength, buffer, lowPartsOutPosition); + + // Record the compressedHighparts length + buffer[hasLeftover ? 1 : 0] = lowPartsOutPosition.get() - (hasLeftover ? 2 : 1); + + for (int i = 0; i < lowPartsOutPosition.get() / 2; i++) { + long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); + out[outPosition++] = pack; + } + + if (1 == lowPartsOutPosition.get() % 2) { + // The trailing integer is packed with a 0 + long pack = RoaringIntPacking.pack(buffer[lowPartsOutPosition.get() - 1], 0); + out[outPosition++] = pack; + } + } + + inpos.add(inlength); + outpos.set(outPosition); + } + + /** + * inlength is ignored by this codec. We may rely on it instead of storing the compressedLowPart length + */ + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + + int longIndex = inpos.get(); + + int nbCompressedHighParts = RoaringIntPacking.high(in[longIndex]); + int[] compressedHighParts = new int[nbCompressedHighParts]; + + // !highPart as we just read the highPart for nbCompressedHighParts + boolean highPart = false; + for (int i = 0; i < nbCompressedHighParts; i++) { + int nextInt; + if (highPart) { + nextInt = RoaringIntPacking.high(in[longIndex + (i + 1) / 2]); + } else { + nextInt = RoaringIntPacking.low(in[longIndex + (i + 1) / 2]); + } + compressedHighParts[i] = nextInt; + + highPart = !highPart; + } + + // TODO What would be a relevant buffer size? + int[] buffer = new int[inlength * 16]; + + IntWrapper highPartsOutPosition = new IntWrapper(); + highPartsCodec.uncompress(compressedHighParts, + new IntWrapper(), + compressedHighParts.length, + buffer, + highPartsOutPosition); + int[] highParts = Arrays.copyOf(buffer, highPartsOutPosition.get()); + + // +1 as we initially read nbCompressedHighParts + int intIndexNbCompressedLowParts = longIndex * 2 + 1 + nbCompressedHighParts; + int nbCompressedLowParts; + if (highPart) { + nbCompressedLowParts = RoaringIntPacking.high(in[intIndexNbCompressedLowParts / 2]); + } else { + nbCompressedLowParts = RoaringIntPacking.low(in[intIndexNbCompressedLowParts / 2]); + } + highPart = !highPart; + + int[] compressedLowParts = new int[nbCompressedLowParts]; + for (int i = 0; i < nbCompressedLowParts; i++) { + int nextInt; + if (highPart) { + nextInt = RoaringIntPacking.high(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); + } else { + nextInt = RoaringIntPacking.low(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); + } + compressedLowParts[i] = nextInt; + + highPart = !highPart; + } + + IntWrapper lowPartsOutPosition = new IntWrapper(); + lowPartsCodec.uncompress(compressedLowParts, + new IntWrapper(), + compressedLowParts.length, + buffer, + lowPartsOutPosition); + int[] lowParts = Arrays.copyOf(buffer, lowPartsOutPosition.get()); + assert highParts.length == lowParts.length; + + int outposition = outpos.get(); + for (int i = 0; i < highParts.length; i++) { + out[outposition++] = RoaringIntPacking.pack(highParts[i], lowParts[i]); + } + + inpos.add(inlength); + outpos.set(outposition); + } } diff --git a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java index dba5cbc..0d33ec6 100644 --- a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java +++ b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java @@ -27,7 +27,7 @@ public final class LongBinaryPacking implements LongCODEC, SkippableLongCODEC { @Override public void compress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); if (inlength == 0) return; @@ -38,13 +38,13 @@ public void compress(long[] in, IntWrapper inpos, int inlength, @Override public void headlessCompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); int tmpoutpos = outpos.get(); int s = inpos.get(); // Compress by block of 8 * 64 longs as much as possible for (; s + BLOCK_SIZE * 8 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 8) { - // maxbits can be anything between 0 and 64 included: expressed within a byte (1 << 6) + // maxbits can be anything between 0 and 64 included: expressed within a byte (1 << 6) final long mbits1 = LongUtil.maxbits(in, s + 0 * BLOCK_SIZE, BLOCK_SIZE); final long mbits2 = LongUtil.maxbits(in, s + 1 * BLOCK_SIZE, BLOCK_SIZE); final long mbits3 = LongUtil.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE); @@ -85,7 +85,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, @Override public void uncompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { if (inlength == 0) return; final int outlength = (int) in[inpos.get()]; @@ -95,7 +95,7 @@ public void uncompress(long[] in, IntWrapper inpos, int inlength, @Override public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos, int num) { + long[] out, IntWrapper outpos, int num) { final int outlength = Util.greatestMultiple(num, BLOCK_SIZE); int tmpinpos = inpos.get(); int s = outpos.get(); diff --git a/src/main/java/me/lemire/longcompression/LongBitPacking.java b/src/main/java/me/lemire/longcompression/LongBitPacking.java index 7da1c7f..2d282ec 100644 --- a/src/main/java/me/lemire/longcompression/LongBitPacking.java +++ b/src/main/java/me/lemire/longcompression/LongBitPacking.java @@ -41,15 +41,15 @@ public final class LongBitPacking { */ public static void fastpackwithoutmask(final long[] in, final int inpos, final long[] out, final int outpos, final int bit) { - if (bit == 0) { - fastpackwithoutmask0(in, inpos, out, outpos); - } else if (bit == 64) { - fastpackwithoutmask64(in, inpos, out, outpos); - } else if (bit > 0 && bit < 64) { - slowpackwithoutmask(in, inpos, out, outpos, bit); - } else { + if (bit == 0) { + fastpackwithoutmask0(in, inpos, out, outpos); + } else if (bit == 64) { + fastpackwithoutmask64(in, inpos, out, outpos); + } else if (bit > 0 && bit < 64) { + slowpackwithoutmask(in, inpos, out, outpos, bit); + } else { throw new IllegalArgumentException("Unsupported bit width: " + bit); - } + } } protected static void fastpackwithoutmask0(final long[] in, int inpos, @@ -75,8 +75,8 @@ protected static void slowpackwithoutmask(final long[] in, int inpos, shift -= 64; if (shift > 0) { - // There is some leftovers from previous input in the next bucket - out[outpos + bucket] |= in[inpos + i - 1] >> (bit - shift); + // There is some leftovers from previous input in the next bucket + out[outpos + bucket] |= in[inpos + i - 1] >> (bit - shift); } } out[outpos + bucket] |= in[inpos + i] << shift; @@ -102,15 +102,15 @@ protected static void slowpackwithoutmask(final long[] in, int inpos, */ public static void fastunpack(final long[] in, final int inpos, final long[] out, final int outpos, final int bit) { - if (bit == 0) { - fastunpack0(in, inpos, out, outpos); - } else if (bit == 64) { - fastunpack64(in, inpos, out, outpos); - } else if (bit > 0 && bit < 64) { + if (bit == 0) { + fastunpack0(in, inpos, out, outpos); + } else if (bit == 64) { + fastunpack64(in, inpos, out, outpos); + } else if (bit > 0 && bit < 64) { slowunpack(in, inpos, out, outpos, bit); - } else { + } else { throw new IllegalArgumentException("Unsupported bit width: " + bit); - } + } } @@ -134,7 +134,7 @@ protected static void slowunpack(final long[] in, int inpos, shift -= 64; if (shift > 0) { - // There is some leftovers from previous input in the next bucket + // There is some leftovers from previous input in the next bucket out[outpos + i - 1] |= (in[inpos + bucket] << (bit - shift) & ((1L << bit) - 1)); } } diff --git a/src/main/java/me/lemire/longcompression/LongUtil.java b/src/main/java/me/lemire/longcompression/LongUtil.java index 596a134..7bdce83 100644 --- a/src/main/java/me/lemire/longcompression/LongUtil.java +++ b/src/main/java/me/lemire/longcompression/LongUtil.java @@ -15,8 +15,8 @@ */ @Deprecated public class LongUtil { - - /** + + /** * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range * of value * @@ -46,7 +46,7 @@ public static int bits(long i) { return 64 - Long.numberOfLeadingZeros(i); } - protected static String longToBinaryWithLeading(long l) { - return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); - } + protected static String longToBinaryWithLeading(long l) { + return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); + } } diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index d31967a..1be4494 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -237,7 +237,7 @@ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, @Override public void uncompress(byte[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { int p = inpos.get(); int finalp = inpos.get() + inlength; int tmpoutpos = outpos.get(); From 65159cd2f18f2e9ed19a727ceb016397c7f99d59 Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Mon, 28 Nov 2022 23:13:15 +0400 Subject: [PATCH 093/170] Fix LGTM --- .../longcompression/LongBinaryPacking.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java index 0d33ec6..33bb8f1 100644 --- a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java +++ b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java @@ -45,16 +45,16 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, // Compress by block of 8 * 64 longs as much as possible for (; s + BLOCK_SIZE * 8 - 1 < inpos.get() + inlength; s += BLOCK_SIZE * 8) { // maxbits can be anything between 0 and 64 included: expressed within a byte (1 << 6) - final long mbits1 = LongUtil.maxbits(in, s + 0 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits2 = LongUtil.maxbits(in, s + 1 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits3 = LongUtil.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits4 = LongUtil.maxbits(in, s + 3 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits5 = LongUtil.maxbits(in, s + 4 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits6 = LongUtil.maxbits(in, s + 5 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits7 = LongUtil.maxbits(in, s + 6 * BLOCK_SIZE, BLOCK_SIZE); - final long mbits8 = LongUtil.maxbits(in, s + 7 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits1 = LongUtil.maxbits(in, s + 0 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits2 = LongUtil.maxbits(in, s + 1 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits3 = LongUtil.maxbits(in, s + 2 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits4 = LongUtil.maxbits(in, s + 3 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits5 = LongUtil.maxbits(in, s + 4 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits6 = LongUtil.maxbits(in, s + 5 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits7 = LongUtil.maxbits(in, s + 6 * BLOCK_SIZE, BLOCK_SIZE); + final int mbits8 = LongUtil.maxbits(in, s + 7 * BLOCK_SIZE, BLOCK_SIZE); // The first long expressed the maxbits for the 8 buckets - out[tmpoutpos++] = (mbits1 << 56) | (mbits2 << 48) | (mbits3 << 40) | (mbits4 << 32) | (mbits5 << 24) | (mbits6 << 16) | (mbits7 << 8) | (mbits8); + out[tmpoutpos++] = ((long) mbits1 << 56) | ((long) mbits2 << 48) | ((long) mbits3 << 40) | ((long) mbits4 << 32) | (mbits5 << 24) | (mbits6 << 16) | (mbits7 << 8) | (mbits8); LongBitPacking.fastpackwithoutmask(in, s + 0 * BLOCK_SIZE, out, tmpoutpos, (int) mbits1); tmpoutpos += mbits1; LongBitPacking.fastpackwithoutmask(in, s + 1 * BLOCK_SIZE, out, tmpoutpos, (int) mbits2); @@ -100,30 +100,30 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, int tmpinpos = inpos.get(); int s = outpos.get(); for (; s + BLOCK_SIZE * 8 - 1 < outpos.get() + outlength; s += BLOCK_SIZE * 8) { - final long mbits1 = (in[tmpinpos] >>> 56); - final long mbits2 = (in[tmpinpos] >>> 48) & 0xFF; - final long mbits3 = (in[tmpinpos] >>> 40) & 0xFF; - final long mbits4 = (in[tmpinpos] >>> 32) & 0xFF; - final long mbits5 = (in[tmpinpos] >>> 24) & 0xFF; - final long mbits6 = (in[tmpinpos] >>> 16) & 0xFF; - final long mbits7 = (in[tmpinpos] >>> 8) & 0xFF; - final long mbits8 = (in[tmpinpos]) & 0xFF; + final int mbits1 = (int) ((in[tmpinpos] >>> 56)); + final int mbits2 = (int) ((in[tmpinpos] >>> 48) & 0xFF); + final int mbits3 = (int) ((in[tmpinpos] >>> 40) & 0xFF); + final int mbits4 = (int) ((in[tmpinpos] >>> 32) & 0xFF); + final int mbits5 = (int) ((in[tmpinpos] >>> 24) & 0xFF); + final int mbits6 = (int) ((in[tmpinpos] >>> 16) & 0xFF); + final int mbits7 = (int) ((in[tmpinpos] >>> 8) & 0xFF); + final int mbits8 = (int) ((in[tmpinpos]) & 0xFF); ++tmpinpos; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 0 * BLOCK_SIZE, (int) mbits1); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 0 * BLOCK_SIZE, mbits1); tmpinpos += mbits1; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 1 * BLOCK_SIZE, (int) mbits2); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 1 * BLOCK_SIZE, mbits2); tmpinpos += mbits2; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, (int) mbits3); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 2 * BLOCK_SIZE, mbits3); tmpinpos += mbits3; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, (int) mbits4); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 3 * BLOCK_SIZE, mbits4); tmpinpos += mbits4; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 4 * BLOCK_SIZE, (int) mbits5); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 4 * BLOCK_SIZE, mbits5); tmpinpos += mbits5; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 5 * BLOCK_SIZE, (int) mbits6); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 5 * BLOCK_SIZE, mbits6); tmpinpos += mbits6; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 6 * BLOCK_SIZE, (int) mbits7); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 6 * BLOCK_SIZE, mbits7); tmpinpos += mbits7; - LongBitPacking.fastunpack(in, tmpinpos, out, s + 7 * BLOCK_SIZE, (int) mbits8); + LongBitPacking.fastunpack(in, tmpinpos, out, s + 7 * BLOCK_SIZE, mbits8); tmpinpos += mbits8; } for (; s < outpos.get() + outlength; s += BLOCK_SIZE ) { From 6b5df2066d8d333bf60b1a69a5573373c5b84107 Mon Sep 17 00:00:00 2001 From: LGTM Migrator Date: Wed, 30 Nov 2022 10:31:07 +0000 Subject: [PATCH 094/170] Add CodeQL workflow for GitHub code scanning --- .github/workflows/codeql.yml | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..ab99519 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,41 @@ +name: "CodeQL" + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + schedule: + - cron: "49 16 * * 6" + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ java ] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{ matrix.language }}" From 56f86a6c3a903735aaa410a5a9d826b3df4964d3 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sat, 11 Mar 2023 13:14:20 -0500 Subject: [PATCH 095/170] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f629b5e..89afe78 100644 --- a/README.md +++ b/README.md @@ -222,6 +222,7 @@ He also posted his slides online: http://www.slideshare.net/ikhtearSharif/ikhtea Other recommended libraries ----------------------------- +* Fast integer compression in Go: https://github.com/ronanh/intcomp * Encoding: Integer Compression Libraries for Go https://github.com/zhenjl/encoding * CSharpFastPFOR: A C# integer compression library https://github.com/Genbox/CSharpFastPFOR * TurboPFor is a C library that offers lots of interesting optimizations and Java wrappers. Well worth checking! (Uses a GPL license.) https://github.com/powturbo/TurboPFor From 0ecdda9e431da96d044b5773ec13eee9f4e9d2ed Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Thu, 13 Jul 2023 14:32:23 -0400 Subject: [PATCH 096/170] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 89afe78..84f07cb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ JavaFastPFOR: A simple integer compression library in Java ========================================================== [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] -[![Code Quality: Cpp](https://img.shields.io/lgtm/grade/java/g/lemire/JavaFastPFOR.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/lemire/JavaFastPFOR/context:java) [![Java CI](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml/badge.svg)](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml) From 6e4daafa827e4e8048753b2b63da7b28c66b9153 Mon Sep 17 00:00:00 2001 From: Benoit Lacelle Date: Wed, 28 Feb 2024 20:21:57 +0400 Subject: [PATCH 097/170] Polish --- .../integercompression/SkippableIntegerCODEC.java | 11 +++++++---- .../me/lemire/integercompression/VariableByte.java | 4 ++-- .../me/lemire/longcompression/LongCompressor.java | 5 ++--- .../me/lemire/longcompression/LongVariableByte.java | 6 ++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java index 0b6e825..31771d6 100644 --- a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java @@ -10,10 +10,10 @@ /** * Interface describing a standard CODEC to compress integers. This is a - * variation on the IntegerCODEC interface meant to be used for head access. + * variation on the IntegerCODEC interface meant to be used for partial reads. * - * The main difference is that we must specify the number of integers we wish to - * decode. This information should be stored elsewhere. + * The main difference is that you must specify the number of integers you wish to + * uncompress. This information should be stored elsewhere. * * This interface was designed by the Terrier team for their search engine. * @@ -29,6 +29,9 @@ public interface SkippableIntegerCODEC { * inpos will be incremented by 12 while outpos will be incremented by 3. We * use IntWrapper to pass the values by reference. * + * Implementation note: contrary to {@link IntegerCODEC#compress}, + * this may skip writing information about the number of encoded integers. + * * @param in * input array * @param inpos @@ -60,7 +63,7 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out * @param outpos * where to start writing the uncompressed output in out * @param num - * number of integers we want to decode, the actual number of integers decoded can be less + * number of integers we want to decode. May be less than the actual number of compressed integers */ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num); diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index 1e28537..92cfaeb 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -126,7 +126,7 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, s += 8; // Shift to next integer if s==32 p += s>>5; - // cycle from 32 to 0 + // cycle from 31 to 0 s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { @@ -194,7 +194,7 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o s += 8; // Shift to next integer if s==32 p += s>>5; - // cycle from 32 to 0 + // cycle from 31 to 0 s = s & 31; v += ((c & 127) << shift); if ((c & 128) == 128) { diff --git a/src/main/java/me/lemire/longcompression/LongCompressor.java b/src/main/java/me/lemire/longcompression/LongCompressor.java index a140911..a2c79fd 100644 --- a/src/main/java/me/lemire/longcompression/LongCompressor.java +++ b/src/main/java/me/lemire/longcompression/LongCompressor.java @@ -13,8 +13,8 @@ */ public class LongCompressor { - SkippableLongCODEC codec; + /** * Constructor wrapping a codec. * @@ -48,8 +48,7 @@ public long[] compress(long[] input) { codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos); } catch (IndexOutOfBoundsException ioebe) { - throw new - UncompressibleInputException("Your input is too poorly compressible " + throw new UncompressibleInputException("Your input is too poorly compressible " + "with the current codec : "+codec); } compressed = Arrays.copyOf(compressed,outpos.intValue()); diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index 1be4494..e1f56df 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -187,7 +187,6 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, out[outpostmp++] = (byte) extract7bits(7, val); out[outpostmp++] = (byte) (extract7bitsmaskless(8, (val)) | (1 << 7)); } else { - // System.out.println(LongUtil.longToBinaryWithLeading(val)); out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); @@ -220,7 +219,7 @@ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, s += 8; // Shift to next long if s==64 p += s>>6; - // Cycle from 64 to 0 + // Cycle from 63 to 0 s = s & 63; v += ((c & 127) << shift); if ((c & 128) == 128) { @@ -309,13 +308,12 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] int finaloutpos = num + tmpoutpos; for (long v = 0, shift = 0; tmpoutpos < finaloutpos;) { val = in[p]; - // System.out.println(longToBinaryWithLeading(val)); long c = val >>> s; // Shift to next byte s += 8; // Shift to next long if s == 64 p += s>>6; - // Cycle from 64 to 0 + // Cycle from 63 to 0 s = s & 63; v += ((c & 127) << shift); if ((c & 128) == 128) { From 867e9579e5801f4f7a1ace21ceb032e2f96b5328 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 14:59:56 -0500 Subject: [PATCH 098/170] updating --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index a960b2c..ba1fca5 100644 --- a/pom.xml +++ b/pom.xml @@ -69,10 +69,10 @@ org.apache.maven.plugins maven-compiler-plugin - 3.8.0 + 3.12.1 - 11 - 11 + 17 + 17 From 43cb373522e98137688b4746120dd427e8b073c1 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:03:45 -0500 Subject: [PATCH 099/170] adding long compression --- src/main/java/module-info.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index d2a749c..d254c12 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -5,5 +5,6 @@ // This is currently only for advanced users: // requires jdk.incubator.vector; exports me.lemire.integercompression; - exports me.lemire.integercompression.vector; + exports me.lemire.longcompression; + // exports me.lemire.integercompression.vector; } From f3e7857a144981ad5e82e742441915900b9b5386 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:04:26 -0500 Subject: [PATCH 100/170] [maven-release-plugin] prepare release JavaFastPFOR-0.2.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba1fca5..3db7c2f 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.1.13-SNAPSHOT + 0.2.0 jar 1.7 From 2f32b0c628373a078cb3e22fa81941522dcb923c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:04:28 -0500 Subject: [PATCH 101/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3db7c2f..a3c47da 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.2.0 + 0.2.1-SNAPSHOT jar 1.7 From 78afe707559f603ea63f582dd19c60f703ea331a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:07:05 -0500 Subject: [PATCH 102/170] Update basic.yml --- .github/workflows/basic.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/basic.yml b/.github/workflows/basic.yml index cb3e3e8..4688fa2 100644 --- a/.github/workflows/basic.yml +++ b/.github/workflows/basic.yml @@ -8,11 +8,11 @@ jobs: strategy: fail-fast: false matrix: - java: [ 11, 16 ] + java: [ 17, 21 ] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4.1.1 - name: Set up JDK - uses: actions/setup-java@v2.5.0 + uses: actions/setup-java@v4.1.0 with: java-version: ${{ matrix.java }} distribution: 'adopt' @@ -21,4 +21,4 @@ jobs: - name: Build example run: javac -cp target/classes/:. example.java - name: Run example - run: java -cp target/classes/:. example \ No newline at end of file + run: java -cp target/classes/:. example From 022682f83f4044e4293003178c36e4322c970bd1 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:08:24 -0500 Subject: [PATCH 103/170] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 84f07cb..5d3fc30 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ the following code in your pom.xml file: me.lemire.integercompression JavaFastPFOR - [0.1,) + [0.2,) ``` From c99e15d39d730e2ac45232d0c7608eaa1afba05d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:10:22 -0500 Subject: [PATCH 104/170] bumping javadoc --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a3c47da..5237403 100644 --- a/pom.xml +++ b/pom.xml @@ -138,7 +138,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.4.1 + 3.6.3 me.lemire.integercompression.vector;com.kamikaze.pfordelta:me.lemire.integercompression.benchmarktools From 53a53073425c934a54ec78a3988b57b7ec185132 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:18:30 -0500 Subject: [PATCH 105/170] bump --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5237403..7fbfc6d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 0.2.1-SNAPSHOT jar - 1.7 - 1.7 + 1.8 + 1.8 UTF-8 From bb8318aaa820e17e6d0c8958a85709ab0cd36c7a Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 28 Feb 2024 15:23:53 -0500 Subject: [PATCH 106/170] Delete .github/workflows/codeql.yml --- .github/workflows/codeql.yml | 41 ------------------------------------ 1 file changed, 41 deletions(-) delete mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index ab99519..0000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - schedule: - - cron: "49 16 * * 6" - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ java ] - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - queries: +security-and-quality - - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: "/language:${{ matrix.language }}" From 7412c29c667234f45accaf87347aef719c9b2c67 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 9 Jun 2024 10:18:34 -0400 Subject: [PATCH 107/170] [maven-release-plugin] prepare release JavaFastPFOR-0.2.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7fbfc6d..7dc9678 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.2.1-SNAPSHOT + 0.2.1 jar 1.8 From d75c85f796d6b955f18c5fb0dbc295ffd28fe353 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 9 Jun 2024 10:18:37 -0400 Subject: [PATCH 108/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7dc9678..2587c46 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.2.1 + 0.2.2-SNAPSHOT jar 1.8 From 82a4d19820d000e62952ae84b37268497ec16deb Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Wed, 19 Jun 2024 10:43:44 -0400 Subject: [PATCH 109/170] minor fixes --- README.md | 6 +- .../benchmarkresults_haswell_18sept2014.txt | 414 +- .../benchmarkresults_icore7_10may2013.txt | 288 +- ...benchmarkresults_icore7_12november2013.txt | 414 +- ...rkresults_skippable_haswell_18sept2014.txt | 318 +- pom.xml | 45 +- .../integercompression/GroupSimple9.java | 7072 ++++++++--------- .../me/lemire/integercompression/S16.java | 372 +- .../java/me/lemire/integercompression/S9.java | 348 +- .../lemire/integercompression/Simple16.java | 336 +- .../me/lemire/integercompression/Simple9.java | 530 +- .../SkippableComposition.java | 2 +- .../UncompressibleInputException.java | 16 +- .../me/lemire/integercompression/Util.java | 14 +- .../benchmarktools/Benchmark.java | 6 +- .../benchmarktools/BenchmarkSkippable.java | 6 +- .../differential/IntegratedIntCompressor.java | 12 +- .../SkippableIntegratedComposition.java | 2 +- .../lemire/longcompression/ByteLongCODEC.java | 2 +- .../longcompression/LongAs2IntsCodec.java | 338 +- .../me/lemire/longcompression/LongCODEC.java | 4 +- .../longcompression/LongComposition.java | 4 +- .../lemire/longcompression/LongJustCopy.java | 8 +- .../me/lemire/longcompression/LongUtil.java | 6 +- .../longcompression/LongVariableByte.java | 2 +- .../SkippableLongComposition.java | 2 +- .../differential/LongDelta.java | 6 +- .../lemire/integercompression/AdhocTest.java | 125 +- .../lemire/integercompression/BasicTest.java | 52 +- .../integercompression/ByteBasicTest.java | 44 +- .../integercompression/ExampleTest.java | 602 +- .../integercompression/ResourcedTest.java | 112 +- .../SkippableBasicTest.java | 2 +- .../lemire/longcompression/LongBasicTest.java | 124 +- .../lemire/longcompression/LongTestUtils.java | 6 +- .../SkippableLongBasicTest.java | 18 +- .../longcompression/TestLongAs2IntsCodec.java | 168 +- .../longcompression/TestLongVariableByte.java | 162 +- .../synth/LongClusteredDataGenerator.java | 6 +- .../synth/LongUniformDataGenerator.java | 22 +- 40 files changed, 6041 insertions(+), 5975 deletions(-) diff --git a/README.md b/README.md index f629b5e..535e452 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,9 @@ the following code in your pom.xml file: ```xml - me.lemire.integercompression - JavaFastPFOR - [0.1,) + me.lemire.integercompression + JavaFastPFOR + [0.1,) ``` diff --git a/benchmarkresults/benchmarkresults_haswell_18sept2014.txt b/benchmarkresults/benchmarkresults_haswell_18sept2014.txt index 43fa98b..a501d5d 100644 --- a/benchmarkresults/benchmarkresults_haswell_18sept2014.txt +++ b/benchmarkresults/benchmarkresults_haswell_18sept2014.txt @@ -1,7 +1,7 @@ # benchmark based on the ClusterData model from: -# Vo Ngoc Anh and Alistair Moffat. -# Index compression using 64-bit words. -# Softw. Pract. Exper.40, 2 (February 2010), 131-147. +# Vo Ngoc Anh and Alistair Moffat. +# Index compression using 64-bit words. +# Softw. Pract. Exper.40, 2 (February 2010), 131-147. # Results will be written into a CSV file: benchmark-20140918T011257.csv @@ -10,852 +10,852 @@ # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.56 246 1061 + 2.56 246 1061 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 3.21 66 275 + 3.21 66 275 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.96 838 1679 + 2.96 838 1679 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1276 1805 + 32.00 1276 1805 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 490 509 + 8.00 490 509 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 582 774 + 8.00 582 774 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.96 765 1193 + 2.96 765 1193 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.88 139 896 + 2.88 139 896 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.90 166 905 + 2.90 166 905 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.88 139 898 + 2.88 139 898 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.87 25 938 + 2.87 25 938 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.90 29 960 + 2.90 29 960 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.87 25 882 + 2.87 25 882 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.63 274 1015 + 2.63 274 1015 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 2.83 280 771 + 2.83 280 771 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.84 444 837 + 2.84 444 837 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.27 498 652 + 3.27 498 652 # sparsity 2 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.51 244 1048 + 3.51 244 1048 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 4.18 55 247 + 4.18 55 247 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.93 862 1611 + 3.93 862 1611 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1286 1816 + 32.00 1286 1816 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.01 486 508 + 8.01 486 508 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.01 575 763 + 8.01 575 763 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.93 774 1159 + 3.93 774 1159 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.83 118 865 + 3.83 118 865 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.86 141 875 + 3.86 141 875 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.83 118 867 + 3.83 118 867 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.82 18 881 + 3.82 18 881 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.85 22 887 + 3.85 22 887 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.82 18 838 + 3.82 18 838 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.58 273 990 + 3.58 273 990 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 3.82 201 656 + 3.82 201 656 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.90 442 819 + 3.90 442 819 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.50 494 640 + 4.50 494 640 # sparsity 3 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.28 244 1030 + 4.28 244 1030 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 4.95 51 247 + 4.95 51 247 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.71 850 1577 + 4.71 850 1577 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1252 1769 + 32.00 1252 1769 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 478 504 + 8.02 478 504 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 573 762 + 8.02 573 762 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.71 770 1139 + 4.71 770 1139 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.60 107 850 + 4.60 107 850 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.63 127 863 + 4.63 127 863 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.60 107 853 + 4.60 107 853 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.59 14 865 + 4.59 14 865 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.62 18 882 + 4.62 18 882 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.59 14 844 + 4.59 14 844 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.34 268 969 + 4.34 268 969 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 4.72 170 610 + 4.72 170 610 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.68 434 783 + 4.68 434 783 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.33 472 624 + 5.33 472 624 # sparsity 4 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.03 239 1004 + 5.03 239 1004 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 5.73 47 251 + 5.73 47 251 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.48 846 1556 + 5.48 846 1556 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1274 1799 + 32.00 1274 1799 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.12 439 486 + 8.12 439 486 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.12 537 715 + 8.12 537 715 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.48 769 1134 + 5.48 769 1134 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.36 95 817 + 5.36 95 817 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.39 115 838 + 5.39 115 838 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.36 96 827 + 5.36 96 827 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.34 12 842 + 5.34 12 842 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.37 16 871 + 5.37 16 871 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.34 12 803 + 5.34 12 803 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.09 268 963 + 5.09 268 963 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 5.57 150 587 + 5.57 150 587 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.47 432 800 + 5.47 432 800 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.16 491 635 + 6.16 491 635 # sparsity 5 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.00 236 999 + 6.00 236 999 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 6.70 43 242 + 6.70 43 242 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.45 863 1584 + 6.45 863 1584 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1236 1792 + 32.00 1236 1792 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.40 369 452 + 8.40 369 452 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.40 486 617 + 8.40 486 617 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.45 777 1132 + 6.45 777 1132 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.33 86 808 + 6.33 86 808 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.36 103 828 + 6.36 103 828 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.33 86 813 + 6.33 86 813 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.31 9 825 + 6.31 9 825 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.34 13 858 + 6.34 13 858 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.31 9 819 + 6.31 9 819 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.06 265 945 + 6.06 265 945 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 6.65 139 546 + 6.65 139 546 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.45 442 804 + 6.45 442 804 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.18 493 635 + 7.18 493 635 # sparsity 6 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.76 238 998 + 6.76 238 998 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 7.45 42 251 + 7.45 42 251 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.20 854 1525 + 7.20 854 1525 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1177 1663 + 32.00 1177 1663 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.10 259 362 + 9.10 259 362 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.10 380 450 + 9.10 380 450 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.20 718 1098 + 7.20 718 1098 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.08 79 786 + 7.08 79 786 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.11 95 821 + 7.11 95 821 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.08 81 814 + 7.08 81 814 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.06 8 836 + 7.06 8 836 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.09 11 860 + 7.09 11 860 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.06 8 822 + 7.06 8 822 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.81 268 962 + 6.81 268 962 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 7.56 129 509 + 7.56 129 509 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.19 433 789 + 7.19 433 789 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.93 491 632 + 7.93 491 632 # sparsity 7 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.05 236 985 + 8.05 236 985 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 8.75 39 247 + 8.75 39 247 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.50 861 1526 + 8.50 861 1526 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1279 1788 + 32.00 1279 1788 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.11 190 305 + 10.11 190 305 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.11 311 355 + 10.11 311 355 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.50 753 1092 + 8.50 753 1092 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.37 71 792 + 8.37 71 792 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.40 83 804 + 8.40 83 804 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.37 72 805 + 8.37 72 805 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.35 7 808 + 8.35 7 808 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.38 10 835 + 8.38 10 835 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.35 7 796 + 8.35 7 796 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.10 259 920 + 8.10 259 920 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 9.16 111 447 + 9.16 111 447 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.52 435 784 + 8.52 435 784 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.32 485 622 + 9.32 485 622 # sparsity 8 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.73 234 972 + 8.73 234 972 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 9.44 37 250 + 9.44 37 250 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.19 848 1493 + 9.19 848 1493 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1279 1858 + 32.00 1279 1858 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.04 167 307 + 11.04 167 307 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.04 309 353 + 11.04 309 353 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.19 751 1095 + 9.19 751 1095 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.06 67 770 + 9.06 67 770 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.09 78 781 + 9.09 78 781 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.06 68 792 + 9.06 68 792 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.03 6 795 + 9.03 6 795 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.07 9 824 + 9.07 9 824 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.03 6 787 + 9.03 6 787 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.78 266 936 + 8.78 266 936 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 10.34 101 427 + 10.34 101 427 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.21 437 794 + 9.21 437 794 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.01 488 626 + 10.01 488 626 # sparsity 9 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.75 234 980 + 9.75 234 980 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 10.48 36 242 + 10.48 36 242 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.21 844 1474 + 10.21 844 1474 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1262 1795 + 32.00 1262 1795 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.18 145 300 + 12.18 145 300 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.18 302 340 + 12.18 302 340 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.21 761 1096 + 10.21 761 1096 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.08 63 786 + 10.08 63 786 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.12 72 752 + 10.12 72 752 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.08 63 783 + 10.08 63 783 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.05 6 787 + 10.05 6 787 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.09 8 798 + 10.09 8 798 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.05 6 779 + 10.05 6 779 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.80 264 930 + 9.80 264 930 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 11.77 92 410 + 11.77 92 410 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.23 438 789 + 10.23 438 789 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.05 486 624 + 11.05 486 624 # sparsity 10 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.73 235 979 + 10.73 235 979 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 11.46 35 239 + 11.46 35 239 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.18 840 1456 + 11.18 840 1456 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1248 1746 + 32.00 1248 1746 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.14 135 312 + 13.14 135 312 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.14 309 354 + 13.14 309 354 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.18 761 1097 + 11.18 761 1097 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.09 59 802 + 11.09 59 802 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.13 69 814 + 11.13 69 814 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.09 59 771 + 11.09 59 771 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.04 5 783 + 11.04 5 783 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.08 8 816 + 11.08 8 816 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.04 5 776 + 11.04 5 776 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.78 265 934 + 10.78 265 934 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 12.98 89 415 + 12.98 89 415 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.20 436 787 + 11.20 436 787 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.02 483 620 + 12.02 483 620 # sparsity 11 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.79 232 950 + 11.79 232 950 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 12.68 34 256 + 12.68 34 256 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.23 842 1450 + 12.23 842 1450 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1292 1826 + 32.00 1292 1826 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.00 127 324 + 14.00 127 324 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.00 308 369 + 14.00 308 369 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.23 760 1092 + 12.23 760 1092 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.35 56 795 + 12.35 56 795 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.38 65 829 + 12.38 65 829 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.35 57 822 + 12.35 57 822 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.13 5 706 + 12.13 5 706 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.17 7 750 + 12.17 7 750 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.13 5 712 + 12.13 5 712 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.83 261 919 + 11.83 261 919 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 14.17 85 401 + 14.17 85 401 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.25 436 781 + 12.25 436 781 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.08 489 623 + 13.08 489 623 # sparsity 12 # generating random data... # generating random data... ok. # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.70 226 932 + 12.70 226 932 # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 13.76 34 261 + 13.76 34 261 # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.16 849 1453 + 13.16 849 1453 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1208 1804 + 32.00 1208 1804 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.84 117 307 + 14.84 117 307 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.84 260 352 + 14.84 260 352 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.16 762 1095 + 13.16 762 1095 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.46 56 899 + 13.46 56 899 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.48 63 915 + 13.48 63 915 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.46 56 897 + 13.46 56 897 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.20 5 681 + 13.20 5 681 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.24 7 735 + 13.24 7 735 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.20 5 699 + 13.20 5 699 # IntegratedFastPFOR + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.75 260 914 + 12.75 260 914 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 15.51 80 359 + 15.51 80 359 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.18 435 781 + 13.18 435 781 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.00 489 626 + 14.00 489 626 Results were written into a CSV file: benchmark-20140918T011257.csv diff --git a/benchmarkresults/benchmarkresults_icore7_10may2013.txt b/benchmarkresults/benchmarkresults_icore7_10may2013.txt index 5b776fb..d10579e 100644 --- a/benchmarkresults/benchmarkresults_icore7_10may2013.txt +++ b/benchmarkresults/benchmarkresults_icore7_10may2013.txt @@ -3,610 +3,610 @@ # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 3.34 51 262 + 3.34 51 262 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.09 639 1183 + 3.09 639 1183 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1151 1468 + 32.00 1151 1468 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 199 299 + 8.00 199 299 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 148 339 + 8.00 148 339 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.09 613 920 + 3.09 613 920 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.02 143 721 + 3.02 143 721 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.05 164 705 + 3.05 164 705 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.01 26 790 + 3.01 26 790 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.03 30 816 + 3.03 30 816 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.78 226 811 + 2.78 226 811 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 2.97 236 604 + 2.97 236 604 # sparsity 2 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 4.17 47 266 + 4.17 47 266 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.92 672 1261 + 3.92 672 1261 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1218 1562 + 32.00 1218 1562 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 204 290 + 8.00 204 290 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 236 343 + 8.00 236 343 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.92 505 917 + 3.92 505 917 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.82 127 698 + 3.82 127 698 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.85 151 726 + 3.85 151 726 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.81 18 752 + 3.81 18 752 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.84 23 779 + 3.84 23 779 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.56 228 828 + 3.56 228 828 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 3.82 182 562 + 3.82 182 562 # sparsity 3 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 4.96 43 276 + 4.96 43 276 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.72 662 1187 + 4.72 662 1187 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1215 1566 + 32.00 1215 1566 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 198 286 + 8.02 198 286 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 254 340 + 8.02 254 340 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.72 576 848 + 4.72 576 848 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.61 111 654 + 4.61 111 654 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.64 129 699 + 4.64 129 699 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.60 14 732 + 4.60 14 732 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.63 18 761 + 4.63 18 761 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.36 226 813 + 4.36 226 813 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 4.76 148 511 + 4.76 148 511 # sparsity 4 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 5.97 39 270 + 5.97 39 270 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.72 656 1148 + 5.72 656 1148 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1212 1555 + 32.00 1212 1555 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.09 206 287 + 8.09 206 287 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.09 213 334 + 8.09 213 334 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.72 626 891 + 5.72 626 891 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.60 105 672 + 5.60 105 672 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.63 121 701 + 5.63 121 701 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.58 10 667 + 5.58 10 667 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.62 14 736 + 5.62 14 736 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.33 226 805 + 5.33 226 805 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 5.86 123 464 + 5.86 123 464 # sparsity 5 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 6.49 39 262 + 6.49 39 262 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.25 659 1121 + 6.25 659 1121 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1154 1168 + 32.00 1154 1168 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.44 192 265 + 8.44 192 265 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.44 240 297 + 8.44 240 297 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.25 631 907 + 6.25 631 907 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.13 101 685 + 6.13 101 685 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.16 116 714 + 6.16 116 714 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.11 9 708 + 6.11 9 708 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.14 13 741 + 6.14 13 741 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.86 225 806 + 5.86 225 806 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 6.44 120 442 + 6.44 120 442 # sparsity 6 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 7.64 35 269 + 7.64 35 269 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.39 654 1111 + 7.39 654 1111 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1207 1553 + 32.00 1207 1553 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.06 185 225 + 9.06 185 225 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.06 166 248 + 9.06 166 248 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.39 620 888 + 7.39 620 888 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.26 91 679 + 7.26 91 679 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.30 104 704 + 7.30 104 704 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.24 7 704 + 7.24 7 704 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.28 10 735 + 7.28 10 735 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.00 221 792 + 7.00 221 792 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 7.76 106 393 + 7.76 106 393 # sparsity 7 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 8.66 33 266 + 8.66 33 266 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.41 675 1165 + 8.41 675 1165 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1210 1553 + 32.00 1210 1553 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.10 154 194 + 10.10 154 194 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.10 176 207 + 10.10 176 207 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.41 628 896 + 8.41 628 896 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.27 84 643 + 8.27 84 643 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.31 95 685 + 8.31 95 685 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.25 6 693 + 8.25 6 693 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.29 9 723 + 8.29 9 723 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 215 773 + 8.00 215 773 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 9.10 94 357 + 9.10 94 357 # sparsity 8 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 9.52 32 241 + 9.52 32 241 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.26 692 1194 + 9.26 692 1194 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1208 1525 + 32.00 1208 1525 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.14 138 178 + 11.14 138 178 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.14 187 190 + 11.14 187 190 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.26 647 893 + 9.26 647 893 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.14 79 655 + 9.14 79 655 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.18 88 684 + 9.18 88 684 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.11 6 680 + 9.11 6 680 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.15 8 712 + 9.15 8 712 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.86 220 778 + 8.86 220 778 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 10.39 86 330 + 10.39 86 330 # sparsity 9 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 10.46 31 253 + 10.46 31 253 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.19 661 1122 + 10.19 661 1122 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1210 1546 + 32.00 1210 1546 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.27 126 173 + 12.27 126 173 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.27 155 181 + 12.27 155 181 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.19 617 886 + 10.19 617 886 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.07 73 634 + 10.07 73 634 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.11 82 669 + 10.11 82 669 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.04 5 663 + 10.04 5 663 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.08 7 700 + 10.08 7 700 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.79 215 757 + 9.79 215 757 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 11.79 78 325 + 11.79 78 325 # sparsity 10 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 11.13 30 243 + 11.13 30 243 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.83 628 1028 + 10.83 628 1028 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1167 1498 + 32.00 1167 1498 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.71 152 179 + 12.71 152 179 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.71 151 187 + 12.71 151 187 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.83 389 820 + 10.83 389 820 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.76 72 638 + 10.76 72 638 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.79 79 683 + 10.79 79 683 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.69 5 655 + 10.69 5 655 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.73 7 682 + 10.73 7 682 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.42 219 767 + 10.42 219 767 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 12.49 77 332 + 12.49 77 332 # sparsity 11 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 12.38 29 254 + 12.38 29 254 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.01 660 1112 + 12.01 660 1112 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1142 1445 + 32.00 1142 1445 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.87 143 172 + 13.87 143 172 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.87 144 178 + 13.87 144 178 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.01 582 830 + 12.01 582 830 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.04 64 647 + 12.04 64 647 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.08 69 649 + 12.08 69 649 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.91 4 637 + 11.91 4 637 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.95 7 660 + 11.95 7 660 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.61 217 766 + 11.61 217 766 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 13.96 73 313 + 13.96 73 313 # sparsity 12 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 13.57 29 265 + 13.57 29 265 # me.lemire.integercompression.IntegratedBinaryPacking+me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.01 611 1012 + 13.01 611 1012 # me.lemire.integercompression.JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1215 1565 + 32.00 1215 1565 # me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.73 121 160 + 14.73 121 160 # me.lemire.integercompression.IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.73 131 166 + 14.73 131 166 # me.lemire.integercompression.BinaryPacking+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.01 603 832 + 13.01 603 832 # me.lemire.integercompression.NewPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.26 68 737 + 13.26 68 737 # me.lemire.integercompression.NewPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.29 72 761 + 13.29 72 761 # me.lemire.integercompression.OptPFD+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.06 4 591 + 13.06 4 591 # me.lemire.integercompression.OptPFDS9+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.10 6 625 + 13.10 6 625 # me.lemire.integercompression.FastPFOR+me.lemire.integercompression.VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.61 213 755 + 12.61 213 755 # me.lemire.integercompression.Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 15.38 69 281 + 15.38 69 281 diff --git a/benchmarkresults/benchmarkresults_icore7_12november2013.txt b/benchmarkresults/benchmarkresults_icore7_12november2013.txt index 07b11b3..795650e 100644 --- a/benchmarkresults/benchmarkresults_icore7_12november2013.txt +++ b/benchmarkresults/benchmarkresults_icore7_12november2013.txt @@ -10,9 +10,9 @@ Its dependencies (if any) will NOT be available to the current build. [INFO] [enforcer:enforce {execution: enforce-maven}] [INFO] [exec:java {execution: default-cli}] # benchmark based on the ClusterData model from: -# Vo Ngoc Anh and Alistair Moffat. -# Index compression using 64-bit words. -# Softw. Pract. Exper.40, 2 (February 2010), 131-147. +# Vo Ngoc Anh and Alistair Moffat. +# Index compression using 64-bit words. +# Softw. Pract. Exper.40, 2 (February 2010), 131-147. # Results will be written into a CSV file: benchmark-20131112T105209.csv @@ -21,852 +21,852 @@ Its dependencies (if any) will NOT be available to the current build. # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 3.28 48 218 + 3.28 48 218 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 3.03 623 1205 + 3.03 623 1205 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1154 1331 + 32.00 1154 1331 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 508 554 + 8.00 508 554 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 592 709 + 8.00 592 709 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.03 596 900 + 3.03 596 900 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.95 115 701 + 2.95 115 701 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.98 135 726 + 2.98 135 726 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.95 116 726 + 2.95 116 726 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.94 19 761 + 2.94 19 761 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.97 22 767 + 2.97 22 767 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.94 19 765 + 2.94 19 765 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 2.71 219 797 + 2.71 219 797 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.71 217 813 + 2.71 217 813 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 2.90 254 599 + 2.90 254 599 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.92 375 669 + 2.92 375 669 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.36 394 503 + 3.36 394 503 # sparsity 2 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 4.09 47 254 + 4.09 47 254 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 3.84 636 1160 + 3.84 636 1160 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1152 1264 + 32.00 1152 1264 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.01 510 551 + 8.01 510 551 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.01 594 704 + 8.01 594 704 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.84 602 875 + 3.84 602 875 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.74 101 673 + 3.74 101 673 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.77 117 695 + 3.77 117 695 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.74 101 694 + 3.74 101 694 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.73 15 725 + 3.73 15 725 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.76 18 741 + 3.76 18 741 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.73 15 731 + 3.73 15 731 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 3.48 215 782 + 3.48 215 782 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.48 212 789 + 3.48 212 789 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 3.72 190 530 + 3.72 190 530 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.76 375 657 + 3.76 375 657 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.32 392 499 + 4.32 392 499 # sparsity 3 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 5.03 42 250 + 5.03 42 250 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 4.77 643 1141 + 4.77 643 1141 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1149 1337 + 32.00 1149 1337 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 506 547 + 8.02 506 547 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 590 698 + 8.02 590 698 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.77 619 904 + 4.77 619 904 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.66 89 640 + 4.66 89 640 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.69 103 672 + 4.69 103 672 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.66 89 668 + 4.66 89 668 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.64 12 700 + 4.64 12 700 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.68 14 712 + 4.68 14 712 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.64 12 704 + 4.64 12 704 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 4.39 212 762 + 4.39 212 762 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.39 209 763 + 4.39 209 763 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 4.81 146 480 + 4.81 146 480 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.75 373 646 + 4.75 373 646 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.40 386 496 + 5.40 386 496 # sparsity 4 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 5.77 39 245 + 5.77 39 245 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 5.53 629 1095 + 5.53 629 1095 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1148 1332 + 32.00 1148 1332 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.11 482 522 + 8.11 482 522 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.11 557 655 + 8.11 557 655 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.53 617 889 + 5.53 617 889 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.42 82 659 + 5.42 82 659 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.45 94 684 + 5.45 94 684 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.42 82 686 + 5.42 82 686 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.40 10 695 + 5.40 10 695 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.43 12 715 + 5.43 12 715 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.40 10 705 + 5.40 10 705 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 5.16 214 776 + 5.16 214 776 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.16 211 780 + 5.16 211 780 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 5.66 128 457 + 5.66 128 457 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.53 370 645 + 5.53 370 645 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.23 389 493 + 6.23 389 493 # sparsity 5 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 6.57 37 248 + 6.57 37 248 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 6.32 640 1113 + 6.32 640 1113 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1150 1349 + 32.00 1150 1349 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.41 416 456 + 8.41 416 456 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.41 473 548 + 8.41 473 548 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.32 622 898 + 6.32 622 898 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.20 75 643 + 6.20 75 643 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.23 86 668 + 6.23 86 668 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.20 75 666 + 6.20 75 666 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.18 8 690 + 6.18 8 690 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.21 11 705 + 6.21 11 705 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.18 8 697 + 6.18 8 697 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 5.93 211 741 + 5.93 211 741 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.93 208 772 + 5.93 208 772 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 6.51 118 426 + 6.51 118 426 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.32 374 639 + 6.32 374 639 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.05 390 492 + 7.05 390 492 # sparsity 6 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 7.73 35 242 + 7.73 35 242 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 7.48 630 1071 + 7.48 630 1071 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1143 1350 + 32.00 1143 1350 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.04 328 365 + 9.04 328 365 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.04 365 415 + 9.04 365 415 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.48 620 882 + 7.48 620 882 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.36 67 641 + 7.36 67 641 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.39 76 668 + 7.39 76 668 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.36 67 667 + 7.36 67 667 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.33 7 679 + 7.33 7 679 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.37 9 695 + 7.37 9 695 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.33 7 686 + 7.33 7 686 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 7.09 211 749 + 7.09 211 749 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.09 208 764 + 7.09 208 764 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 7.88 101 383 + 7.88 101 383 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.49 372 630 + 7.49 372 630 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.27 389 489 + 8.27 389 489 # sparsity 7 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 8.46 33 244 + 8.46 33 244 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 8.21 628 1052 + 8.21 628 1052 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1148 1334 + 32.00 1148 1334 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.01 257 290 + 10.01 257 290 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.01 284 315 + 10.01 284 315 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.21 612 859 + 8.21 612 859 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.08 63 626 + 8.08 63 626 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.11 71 665 + 8.11 71 665 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.08 63 663 + 8.08 63 663 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.06 6 675 + 8.06 6 675 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.09 8 687 + 8.09 8 687 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.06 6 682 + 8.06 6 682 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 7.81 210 756 + 7.81 210 756 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 7.81 207 759 + 7.81 207 759 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 8.85 92 353 + 8.85 92 353 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.22 369 622 + 8.22 369 622 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.00 389 486 + 9.00 389 486 # sparsity 8 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 9.41 32 234 + 9.41 32 234 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 9.16 636 1062 + 9.16 636 1062 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1151 1326 + 32.00 1151 1326 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.08 231 269 + 11.08 231 269 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.08 259 288 + 11.08 259 288 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.16 616 873 + 9.16 616 873 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.04 59 638 + 9.04 59 638 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.07 65 664 + 9.07 65 664 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.04 59 664 + 9.04 59 664 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.01 5 665 + 9.01 5 665 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.05 7 680 + 9.05 7 680 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.01 5 671 + 9.01 5 671 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 8.77 209 746 + 8.77 209 746 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.77 207 738 + 8.77 207 738 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 10.25 81 324 + 10.25 81 324 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.18 372 625 + 9.18 372 625 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.98 387 479 + 9.98 387 479 # sparsity 9 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 10.41 31 238 + 10.41 31 238 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 10.15 637 1070 + 10.15 637 1070 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1145 1413 + 32.00 1145 1413 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.15 221 267 + 12.15 221 267 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.15 252 284 + 12.15 252 284 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.15 609 849 + 10.15 609 849 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.03 54 624 + 10.03 54 624 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.06 60 650 + 10.06 60 650 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.03 54 649 + 10.03 54 649 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.00 5 653 + 10.00 5 653 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.03 7 666 + 10.03 7 666 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.00 5 659 + 10.00 5 659 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 9.75 207 739 + 9.75 207 739 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.75 206 743 + 9.75 206 743 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 11.72 73 313 + 11.72 73 313 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.17 369 611 + 10.17 369 611 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.98 381 474 + 10.98 381 474 # sparsity 10 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 11.57 29 236 + 11.57 29 236 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 11.28 626 1033 + 11.28 626 1033 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1141 1328 + 32.00 1141 1328 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.18 219 276 + 13.18 219 276 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.18 254 294 + 13.18 254 294 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.28 610 848 + 11.28 610 848 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.19 50 617 + 11.19 50 617 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.23 56 638 + 11.23 56 638 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.19 50 640 + 11.19 50 640 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.13 4 640 + 11.13 4 640 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.17 6 655 + 11.17 6 655 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.13 4 647 + 11.13 4 647 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 10.87 207 736 + 10.87 207 736 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.87 204 734 + 10.87 204 734 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 13.19 68 311 + 13.19 68 311 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.30 369 612 + 11.30 369 612 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.13 386 477 + 12.13 386 477 # sparsity 11 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 12.41 29 229 + 12.41 29 229 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 12.01 634 1046 + 12.01 634 1046 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1148 1365 + 32.00 1148 1365 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.84 208 261 + 13.84 208 261 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.84 241 277 + 13.84 241 277 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.01 605 832 + 12.01 605 832 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.07 49 650 + 12.07 49 650 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.10 54 674 + 12.10 54 674 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.07 49 675 + 12.07 49 675 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.93 4 604 + 11.93 4 604 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.97 6 618 + 11.97 6 618 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.93 4 611 + 11.93 4 611 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 11.60 206 724 + 11.60 206 724 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.60 203 724 + 11.60 203 724 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 13.98 66 291 + 13.98 66 291 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.04 367 603 + 12.04 367 603 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.86 385 478 + 12.86 385 478 # sparsity 12 # generating random data... # generating random data... ok. # kamikaze PForDelta # bits per int, compress speed (mis), decompression speed (mis) - 13.48 28 236 + 13.48 28 236 # IntegratedBinaryPacking + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 12.96 634 1051 + 12.96 634 1051 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1150 1307 + 32.00 1150 1307 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.69 202 258 + 14.69 202 258 # IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.69 235 272 + 14.69 235 272 # BinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.96 610 849 + 12.96 610 849 # NewPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.17 48 698 + 13.17 48 698 # NewPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.20 52 714 + 13.20 52 714 # NewPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.17 48 720 + 13.17 48 720 # OptPFD + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.96 4 588 + 12.96 4 588 # OptPFDS9 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.00 6 602 + 13.00 6 602 # OptPFDS16 + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.96 4 597 + 12.96 4 597 # IntegratedFastPFOR + IntegratedVariableByte (Integrated) # bits per int, compress speed (mis), decompression speed (mis) - 12.55 206 726 + 12.55 206 726 # FastPFOR + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.55 203 725 + 12.55 203 725 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 15.40 63 269 + 15.40 63 269 # XorBinaryPacking + VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.99 368 613 + 12.99 368 613 # DeltaZigzagBinaryPacking + DeltaZigzagVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.81 384 476 + 13.81 384 476 Results were written into a CSV file: benchmark-20131112T105209.csv diff --git a/benchmarkresults/benchmarkresults_skippable_haswell_18sept2014.txt b/benchmarkresults/benchmarkresults_skippable_haswell_18sept2014.txt index 4159637..7e35696 100644 --- a/benchmarkresults/benchmarkresults_skippable_haswell_18sept2014.txt +++ b/benchmarkresults/benchmarkresults_skippable_haswell_18sept2014.txt @@ -1,7 +1,7 @@ # benchmark based on the ClusterData model from: -# Vo Ngoc Anh and Alistair Moffat. -# Index compression using 64-bit words. -# Softw. Pract. Exper.40, 2 (February 2010), 131-147. +# Vo Ngoc Anh and Alistair Moffat. +# Index compression using 64-bit words. +# Softw. Pract. Exper.40, 2 (February 2010), 131-147. # Results will be written into a CSV file: benchmark-20140918T011322.csv @@ -10,504 +10,504 @@ # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.04 840 1619 + 3.04 840 1619 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1169 1698 + 32.00 1169 1698 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 195 369 + 8.00 195 369 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.04 651 1148 + 3.04 651 1148 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.96 129 865 + 2.96 129 865 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.98 158 877 + 2.98 158 877 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.96 130 879 + 2.96 130 879 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.95 25 930 + 2.95 25 930 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.97 27 951 + 2.97 27 951 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.95 25 935 + 2.95 25 935 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 2.82 235 928 + 2.82 235 928 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 2.93 255 740 + 2.93 255 740 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 2.77 147 395 + 2.77 147 395 # sparsity 2 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.82 831 1555 + 3.82 831 1555 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1183 1800 + 32.00 1183 1800 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.00 220 372 + 8.00 220 372 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.82 659 1139 + 3.82 659 1139 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.72 116 855 + 3.72 116 855 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.75 136 851 + 3.75 136 851 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.72 115 853 + 3.72 115 853 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.71 19 895 + 3.71 19 895 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.74 22 917 + 3.74 22 917 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.71 19 900 + 3.71 19 900 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 3.59 230 908 + 3.59 230 908 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 3.74 195 654 + 3.74 195 654 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 3.49 111 366 + 3.49 111 366 # sparsity 3 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.78 817 1519 + 4.78 817 1519 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1019 1759 + 32.00 1019 1759 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.02 238 370 + 8.02 238 370 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.78 680 1121 + 4.78 680 1121 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.67 98 825 + 4.67 98 825 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.70 123 840 + 4.70 123 840 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.67 102 834 + 4.67 102 834 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.66 15 861 + 4.66 15 861 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.69 18 895 + 4.69 18 895 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.66 14 871 + 4.66 14 871 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 4.54 231 904 + 4.54 231 904 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 4.84 153 589 + 4.84 153 589 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 4.40 83 339 + 4.40 83 339 # sparsity 4 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.65 788 1505 + 5.65 788 1505 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1142 1757 + 32.00 1142 1757 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.09 242 363 + 8.09 242 363 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.65 636 1113 + 5.65 636 1113 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.52 92 828 + 5.52 92 828 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.56 112 826 + 5.56 112 826 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.52 94 826 + 5.52 94 826 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.51 12 854 + 5.51 12 854 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.54 15 883 + 5.54 15 883 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.51 12 858 + 5.51 12 858 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 5.39 218 886 + 5.39 218 886 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 5.80 136 566 + 5.80 136 566 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 5.32 68 319 + 5.32 68 319 # sparsity 5 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.31 804 1490 + 6.31 804 1490 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1105 1860 + 32.00 1105 1860 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.40 245 330 + 8.40 245 330 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.31 673 1121 + 6.31 673 1121 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.19 87 832 + 6.19 87 832 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.22 107 844 + 6.22 107 844 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.19 88 830 + 6.19 88 830 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.17 10 851 + 6.17 10 851 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.20 14 883 + 6.20 14 883 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.17 10 852 + 6.17 10 852 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.07 217 875 + 6.07 217 875 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 6.51 130 513 + 6.51 130 513 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 6.13 60 307 + 6.13 60 307 # sparsity 6 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.99 742 1431 + 6.99 742 1431 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1163 1660 + 32.00 1163 1660 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.99 205 290 + 8.99 205 290 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.99 637 1107 + 6.99 637 1107 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.87 82 821 + 6.87 82 821 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.90 100 830 + 6.90 100 830 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.87 82 818 + 6.87 82 818 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.85 9 834 + 6.85 9 834 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.88 12 865 + 6.88 12 865 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.85 9 836 + 6.85 9 836 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 6.75 224 877 + 6.75 224 877 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 7.33 118 485 + 7.33 118 485 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 6.98 54 296 + 6.98 54 296 # sparsity 7 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.31 770 1463 + 8.31 770 1463 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1074 1832 + 32.00 1074 1832 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.01 203 240 + 10.01 203 240 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.31 664 1105 + 8.31 664 1105 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.18 73 796 + 8.18 73 796 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.22 88 808 + 8.22 88 808 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.18 73 792 + 8.18 73 792 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.16 7 819 + 8.16 7 819 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.20 10 849 + 8.20 10 849 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.16 7 810 + 8.16 7 810 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.05 217 851 + 8.05 217 851 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 9.01 103 430 + 9.01 103 430 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 8.61 47 277 + 8.61 47 277 # sparsity 8 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.88 800 1414 + 8.88 800 1414 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1078 1718 + 32.00 1078 1718 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.91 211 227 + 10.91 211 227 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.88 671 1083 + 8.88 671 1083 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.76 70 804 + 8.76 70 804 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.80 84 814 + 8.80 84 814 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.76 70 800 + 8.76 70 800 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.73 7 807 + 8.73 7 807 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.77 9 792 + 8.77 9 792 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.73 7 801 + 8.73 7 801 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 8.64 211 837 + 8.64 211 837 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 9.94 96 417 + 9.94 96 417 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 9.51 44 268 + 9.51 44 268 # sparsity 9 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.19 834 1442 + 10.19 834 1442 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1200 1632 + 32.00 1200 1632 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.16 206 212 + 12.16 206 212 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.19 675 1092 + 10.19 675 1092 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.07 64 804 + 10.07 64 804 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.10 76 814 + 10.10 76 814 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.07 63 802 + 10.07 63 802 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.04 6 810 + 10.04 6 810 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.08 9 841 + 10.08 9 841 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.04 6 808 + 10.04 6 808 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 9.94 222 858 + 9.94 222 858 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 11.79 88 397 + 11.79 88 397 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 11.40 38 253 + 11.40 38 253 # sparsity 10 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.10 814 1406 + 11.10 814 1406 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1215 1820 + 32.00 1215 1820 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.07 207 208 + 13.07 207 208 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.10 681 1073 + 11.10 681 1073 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.00 60 800 + 11.00 60 800 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.04 72 809 + 11.04 72 809 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 11.00 60 796 + 11.00 60 796 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.95 6 785 + 10.95 6 785 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.99 8 815 + 10.99 8 815 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.95 6 782 + 10.95 6 782 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 10.84 226 860 + 10.84 226 860 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 12.93 84 389 + 12.93 84 389 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 12.58 36 245 + 12.58 36 245 # sparsity 11 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.31 814 1392 + 12.31 814 1392 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1171 1846 + 32.00 1171 1846 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.14 172 201 + 14.14 172 201 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.31 668 1071 + 12.31 668 1071 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.42 56 825 + 12.42 56 825 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.45 67 832 + 12.45 67 832 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.42 56 821 + 12.42 56 821 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.22 5 729 + 12.22 5 729 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.27 8 758 + 12.27 8 758 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.22 5 731 + 12.22 5 731 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.07 222 836 + 12.07 222 836 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 14.31 81 377 + 14.31 81 377 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 14.05 33 238 + 14.05 33 238 # sparsity 12 # generating random data... # generating random data... ok. # IntegratedBinaryPacking + IntegratedVariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.97 805 1375 + 12.97 805 1375 # JustCopy # bits per int, compress speed (mis), decompression speed (mis) - 32.00 1160 1737 + 32.00 1160 1737 # VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 14.72 186 193 + 14.72 186 193 # BinaryPacking+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.97 656 1037 + 12.97 656 1037 # NewPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.22 56 886 + 13.22 56 886 # NewPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.24 67 891 + 13.24 67 891 # NewPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.22 56 883 + 13.22 56 883 # OptPFD+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.98 5 704 + 12.98 5 704 # OptPFDS9+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 13.02 8 740 + 13.02 8 740 # OptPFDS16+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.98 5 704 + 12.98 5 704 # FastPFOR+VariableByte # bits per int, compress speed (mis), decompression speed (mis) - 12.73 223 845 + 12.73 223 845 # Simple9 # bits per int, compress speed (mis), decompression speed (mis) - 15.35 78 347 + 15.35 78 347 # Simple16 # bits per int, compress speed (mis), decompression speed (mis) - 15.15 31 225 + 15.15 31 225 Results were written into a CSV file: benchmark-20140918T011322.csv diff --git a/pom.xml b/pom.xml index a960b2c..7f89da1 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ 0.1.13-SNAPSHOT jar - 1.7 - 1.7 + 1.8 + 1.8 UTF-8 @@ -190,6 +190,47 @@ 3.2.1 + + + + + maven-clean-plugin + 2.5 + + + maven-deploy-plugin + 2.8.1 + + + maven-install-plugin + 2.5.1 + + + maven-jar-plugin + 2.4 + + + maven-javadoc-plugin + 2.9.1 + + + maven-resources-plugin + 2.6 + + + maven-site-plugin + 3.3 + + + maven-source-plugin + 2.2.1 + + + maven-surefire-plugin + 2.17 + + + JavaFastPFOR https://github.com/lemire/JavaFastPFOR/ diff --git a/src/main/java/me/lemire/integercompression/GroupSimple9.java b/src/main/java/me/lemire/integercompression/GroupSimple9.java index 0ce10ce..a294080 100644 --- a/src/main/java/me/lemire/integercompression/GroupSimple9.java +++ b/src/main/java/me/lemire/integercompression/GroupSimple9.java @@ -13,3540 +13,3540 @@ public final class GroupSimple9 implements IntegerCODEC, SkippableIntegerCODEC { - private static final int[][] M = { { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, { 9, 10, 11, 12, 13, 14, 15, 16, 17 }, - { 18, 19, 20, 21, 22, 23, 24, 25, 26 }, { 27, 28, 29, 30, 31, 32, 33, 34, 35 }, - { 36, 37, 38, 39, 40, 41, 42, 43, 44 }, { 45, 46, 47, 48, 49, 50, 51, 52, 53 }, - { 54, 55, 56, 57, 58, 59, 60, 61, 62 }, { 63, 64, 65, 66, 67, 68, 69, 70, 71 }, - { 72, 73, 74, 75, 76, 77, 78, 79, 80 } }; - - @Override - public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { - if (inlength == 0) - return; - out[outpos.get()] = inlength; - outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); - } - - private void encode0(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + (in[inf + i]); - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode1(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode2(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 28 + i];// 第二个28位是低位存储的,所以浪费的1比特在最顶端。 - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode3(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode4(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode5(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode6(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode7(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode8(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 24; i++) - out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 28 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode9(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode10(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) { - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - - } - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode11(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode12(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode13(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode14(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode15(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode16(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode17(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 12; i++) - out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 14 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode18(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 9 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode19(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 9 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode20(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 9 + i]; - - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode21(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 9 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode22(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 9 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode23(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 9 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode24(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 9 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode25(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 9 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode26(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 8; i++) - out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 9 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode27(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode28(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode29(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode30(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode31(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode32(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode33(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode34(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode35(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 6; i++) - out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 7 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode36(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode37(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode38(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode39(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode40(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode41(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode42(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode43(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode44(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 4; i++) - out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); - out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 5 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode45(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode46(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode47(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode48(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode49(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode50(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode51(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode52(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode53(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 3; i++) - out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 4 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode54(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode55(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode56(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode57(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode58(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode59(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode60(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode61(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode62(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - for (int i = 0; i < 2; i++) - out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; - out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); - out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 3 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode63(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode64(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode65(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode66(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode67(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode68(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode69(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode70(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode71(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 14) + in[inf]; - out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 2 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode72(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 28; i++) - out[outf + 1] = (out[outf + 1] << 1) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode73(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 14; i++) - out[outf + 1] = (out[outf + 1] << 2) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode74(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 9; i++) - out[outf + 1] = (out[outf + 1] << 3) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode75(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 7; i++) - out[outf + 1] = (out[outf + 1] << 4) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode76(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 5; i++) - out[outf + 1] = (out[outf + 1] << 5) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode77(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 4; i++) - out[outf + 1] = (out[outf + 1] << 7) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode78(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 3; i++) - out[outf + 1] = (out[outf + 1] << 9) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode79(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 2; i++) - out[outf + 1] = (out[outf + 1] << 14) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - private void encode80(final int[] in, final int inf, final int code, final int[] out, - final int outf) { - out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); - out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); - for (int i = 0; i < 1; i++) - out[outf + 1] = (out[outf + 1] << 28) + in[inf + 1 + i]; - out[outf + 0] = code << 24 | out[outf + 0]; - - } - - @Override - public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - if (inlength == 0) - return; - final int outlength = in[inpos.get()]; - inpos.increment(); - headlessUncompress(in, inpos, inlength, out, outpos, outlength); - } - - - - private void decode80(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode79(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number :2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode78(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27); - // number : 3, bitwidth :9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode77(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode76(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 25); - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode75(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode74(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27); - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode73(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode72(int val, int valn, int[] out, int currentPos) { - // number : 1, bitwidth : 28 - out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode71(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode70(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode69(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27); - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode68(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode67(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 25); - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode66(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode65(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27); - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode64(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode63(int val, int valn, int[] out, int currentPos) { - // number : 2, bitwidth : 14 - out[currentPos++] = (val << 8) >>> 18; - out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode62(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode61(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode60(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27); - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode59(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode58(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 25); - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode57(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode56(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27); - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode55(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode54(int val, int valn, int[] out, int currentPos) { - // number : 3, bitwidth : 9 - out[currentPos++] = (val << 8) >>> 23; - out[currentPos++] = (val << 17) >>> 23; - out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode53(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode52(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode51(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27); - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode50(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode49(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 25); - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode48(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode47(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27); - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode46(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode45(int val, int valn, int[] out, int currentPos) { - // number : 4, bitwidth : 7 - out[currentPos++] = (val << 8) >>> 25; - out[currentPos++] = (val << 15) >>> 25; - out[currentPos++] = (val << 22) >>> 25; - out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode44(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode43(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode42(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27); - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode41(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode40(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 25); - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode39(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode38(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27); - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode37(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode36(int val, int valn, int[] out, int currentPos) { - // number : 5, bitwidth : 5 - out[currentPos++] = (val << 8) >>> 27; - out[currentPos++] = (val << 13) >>> 27; - out[currentPos++] = (val << 18) >>> 27; - out[currentPos++] = (val << 23) >>> 27; - out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode35(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 0) >>> 28; - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode34(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 0) >>> 28; - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode33(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 1) >>> 28; - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode32(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 0) >>> 28; - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode31(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 3) >>> 28; - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode30(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 0) >>> 28; - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode29(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 1) >>> 28; - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode28(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 0) >>> 28; - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode27(int val, int valn, int[] out, int currentPos) { - // number : 7, bitwidth : 4 - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - out[currentPos++] = (valn << 0) >>> 28; - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode26(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 1) >>> 29; - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode25(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 1) >>> 29; - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode24(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 2) >>> 29; - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode23(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 1) >>> 29; - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode22(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 4) >>> 29; - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode21(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 1) >>> 29; - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode20(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 2) >>> 29; - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode19(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 1) >>> 29; - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode18(int val, int valn, int[] out, int currentPos) { - // number : 9, bitwidth : 3 - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - out[currentPos++] = (valn << 1) >>> 29; - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode17(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 0) >>> 30; - out[currentPos++] = (valn << 2) >>> 30; - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode16(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 0) >>> 30; - out[currentPos++] = (valn << 2) >>> 30; - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode15(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 1) >>> 30; - out[currentPos++] = (valn << 3) >>> 30; - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode14(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 0) >>> 30; - out[currentPos++] = (valn << 2) >>> 30; - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode13(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 3) >>> 30; - out[currentPos++] = (valn << 5) >>> 30; - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - - } - - private void decode12(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 0) >>> 30; - out[currentPos++] = (valn << 2) >>> 30; - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - - } - - private void decode11(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 1) >>> 30; - out[currentPos++] = (valn << 3) >>> 30; - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - - } - - private void decode10(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 0) >>> 30; - out[currentPos++] = (valn << 2) >>> 30; - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode9(int val, int valn, int[] out, int currentPos) { - // number : 14, bitwidth : 2 - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - out[currentPos++] = (valn << 0) >>> 30; - out[currentPos++] = (valn << 2) >>> 30; - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - private void decode8(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 1, bitwidth : 28 - out[currentPos++] = (valn << 4) >>> 4; - } - - private void decode7(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 2, bitwidth : 14 - out[currentPos++] = (valn << 4) >>> 18; - out[currentPos++] = (valn << 18) >>> 18; - } - - private void decode6(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - out[currentPos++] = (valn << 4) >>> 31; - // number : 3, bitwidth : 9 - out[currentPos++] = (valn << 5) >>> 23; - out[currentPos++] = (valn << 14) >>> 23; - out[currentPos++] = (valn << 23) >>> 23; - } - - private void decode5(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 4, bitwidth : 7 - out[currentPos++] = (valn << 4) >>> 25; - out[currentPos++] = (valn << 11) >>> 25; - out[currentPos++] = (valn << 18) >>> 25; - out[currentPos++] = (valn << 25) >>> 25; - } - - private void decode4(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = (valn << 3) >>> 31;// 头部3bit - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - // number : 5, bitwidth : 5 - out[currentPos++] = (valn << 7) >>> 27; - out[currentPos++] = (valn << 12) >>> 27; - out[currentPos++] = (valn << 17) >>> 27; - out[currentPos++] = (valn << 22) >>> 27; - out[currentPos++] = (valn << 27) >>> 27; - } - - private void decode3(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 7, bitwidth : 4 - out[currentPos++] = (valn << 4) >>> 28; - out[currentPos++] = (valn << 8) >>> 28; - out[currentPos++] = (valn << 12) >>> 28; - out[currentPos++] = (valn << 16) >>> 28; - out[currentPos++] = (valn << 20) >>> 28; - out[currentPos++] = (valn << 24) >>> 28; - out[currentPos++] = (valn << 28) >>> 28; - } - - private void decode2(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = (valn << 1) >>> 31;// 头部1bit - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - out[currentPos++] = (valn << 4) >>> 31; - // number : 9, bitwidth : 3 - out[currentPos++] = (valn << 5) >>> 29; - out[currentPos++] = (valn << 8) >>> 29; - out[currentPos++] = (valn << 11) >>> 29; - out[currentPos++] = (valn << 14) >>> 29; - out[currentPos++] = (valn << 17) >>> 29; - out[currentPos++] = (valn << 20) >>> 29; - out[currentPos++] = (valn << 23) >>> 29; - out[currentPos++] = (valn << 26) >>> 29; - out[currentPos++] = (valn << 29) >>> 29; - } - - private void decode1(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31;// 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 14, bitwidth : 2 - out[currentPos++] = (valn << 4) >>> 30; - out[currentPos++] = (valn << 6) >>> 30; - out[currentPos++] = (valn << 8) >>> 30; - out[currentPos++] = (valn << 10) >>> 30; - out[currentPos++] = (valn << 12) >>> 30; - out[currentPos++] = (valn << 14) >>> 30; - out[currentPos++] = (valn << 16) >>> 30; - out[currentPos++] = (valn << 18) >>> 30; - out[currentPos++] = (valn << 20) >>> 30; - out[currentPos++] = (valn << 22) >>> 30; // 10 - out[currentPos++] = (valn << 24) >>> 30; - out[currentPos++] = (valn << 26) >>> 30; - out[currentPos++] = (valn << 28) >>> 30; - out[currentPos++] = (valn << 30) >>> 30; - } - - private void decode0(int val, int valn, int[] out, int currentPos) { - // number : 28, bitwidth : 1 - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - out[currentPos++] = valn >>> 31; - out[currentPos++] = (valn << 1) >>> 31; - out[currentPos++] = (valn << 2) >>> 31; - out[currentPos++] = (valn << 3) >>> 31; - // number : 28, bitwidth : 1 - out[currentPos++] = (valn << 4) >>> 31; - out[currentPos++] = (valn << 5) >>> 31; - out[currentPos++] = (valn << 6) >>> 31; - out[currentPos++] = (valn << 7) >>> 31; - out[currentPos++] = (valn << 8) >>> 31; - out[currentPos++] = (valn << 9) >>> 31; - out[currentPos++] = (valn << 10) >>> 31; - out[currentPos++] = (valn << 11) >>> 31; - out[currentPos++] = (valn << 12) >>> 31; - out[currentPos++] = (valn << 13) >>> 31; // 10 - out[currentPos++] = (valn << 14) >>> 31; - out[currentPos++] = (valn << 15) >>> 31; - out[currentPos++] = (valn << 16) >>> 31; - out[currentPos++] = (valn << 17) >>> 31; - out[currentPos++] = (valn << 18) >>> 31; - out[currentPos++] = (valn << 19) >>> 31; - out[currentPos++] = (valn << 20) >>> 31; - out[currentPos++] = (valn << 21) >>> 31; - out[currentPos++] = (valn << 22) >>> 31; - out[currentPos++] = (valn << 23) >>> 31; // 20 - out[currentPos++] = (valn << 24) >>> 31; - out[currentPos++] = (valn << 25) >>> 31; - out[currentPos++] = (valn << 26) >>> 31; - out[currentPos++] = (valn << 27) >>> 31; - out[currentPos++] = (valn << 28) >>> 31; - out[currentPos++] = (valn << 29) >>> 31; - out[currentPos++] = (valn << 30) >>> 31; - out[currentPos++] = (valn << 31) >>> 31; - } - - - private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; - - private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; - - @Override - public String toString() { - return this.getClass().getSimpleName(); - } - - @Override - public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - int tmpoutpos = outpos.get(); - int currentPos = inpos.get(); - int selector1 = 0; - int selector2 = 0; - final int finalin = currentPos + inlength; - while (currentPos < finalin - 28 * 2) { - int nextCurrentPos = currentPos; - mainloop1: for (selector1=0; selector1 <= 8; selector1++) { - int compressedNum = codeNum[selector1]; - //if (finalin <= nextCurrentPos + compressedNum - 1) - // compressedNum = finalin - nextCurrentPos; - int b = bitLength[selector1]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) - continue mainloop1; - } - nextCurrentPos += compressedNum; - break; - } - mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) { - int compressedNum = codeNum[selector2]; - //if (finalin <= nextCurrentPos + compressedNum - 1) - // compressedNum = finalin - nextCurrentPos; - int b = bitLength[selector2]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) - continue mainloop2; - } - nextCurrentPos += compressedNum; - break; - } - int code = M[selector1][selector2]; - out[tmpoutpos] = 0; - out[tmpoutpos + 1] = 0; - switch (code) { - case 0: - encode0(in, currentPos, code, out, tmpoutpos); - break; - case 1: - encode1(in, currentPos, code, out, tmpoutpos); - break; - case 2: - encode2(in, currentPos, code, out, tmpoutpos); - break; - case 3: - encode3(in, currentPos, code, out, tmpoutpos); - break; - case 4: - encode4(in, currentPos, code, out, tmpoutpos); - break; - case 5: - encode5(in, currentPos, code, out, tmpoutpos); - break; - case 6: - encode6(in, currentPos, code, out, tmpoutpos); - break; - case 7: - encode7(in, currentPos, code, out, tmpoutpos); - break; - case 8: - encode8(in, currentPos, code, out, tmpoutpos); - break; - case 9: - encode9(in, currentPos, code, out, tmpoutpos); - break; - case 10: - encode10(in, currentPos, code, out, tmpoutpos); - break; - case 11: - encode11(in, currentPos, code, out, tmpoutpos); - break; - case 12: - encode12(in, currentPos, code, out, tmpoutpos); - break; - case 13: - encode13(in, currentPos, code, out, tmpoutpos); - break; - case 14: - encode14(in, currentPos, code, out, tmpoutpos); - break; - case 15: - encode15(in, currentPos, code, out, tmpoutpos); - break; - case 16: - encode16(in, currentPos, code, out, tmpoutpos); - break; - case 17: - encode17(in, currentPos, code, out, tmpoutpos); - break; - case 18: - encode18(in, currentPos, code, out, tmpoutpos); - break; - case 19: - encode19(in, currentPos, code, out, tmpoutpos); - break; - case 20: - encode20(in, currentPos, code, out, tmpoutpos); - break; - case 21: - encode21(in, currentPos, code, out, tmpoutpos); - break; - case 22: - encode22(in, currentPos, code, out, tmpoutpos); - break; - case 23: - encode23(in, currentPos, code, out, tmpoutpos); - break; - case 24: - encode24(in, currentPos, code, out, tmpoutpos); - break; - case 25: - encode25(in, currentPos, code, out, tmpoutpos); - break; - case 26: - encode26(in, currentPos, code, out, tmpoutpos); - break; - case 27: - encode27(in, currentPos, code, out, tmpoutpos); - break; - case 28: - encode28(in, currentPos, code, out, tmpoutpos); - break; - case 29: - encode29(in, currentPos, code, out, tmpoutpos); - break; - case 30: - encode30(in, currentPos, code, out, tmpoutpos); - break; - case 31: - encode31(in, currentPos, code, out, tmpoutpos); - break; - case 32: - encode32(in, currentPos, code, out, tmpoutpos); - break; - case 33: - encode33(in, currentPos, code, out, tmpoutpos); - break; - case 34: - encode34(in, currentPos, code, out, tmpoutpos); - break; - case 35: - encode35(in, currentPos, code, out, tmpoutpos); - break; - case 36: - encode36(in, currentPos, code, out, tmpoutpos); - break; - case 37: - encode37(in, currentPos, code, out, tmpoutpos); - break; - case 38: - encode38(in, currentPos, code, out, tmpoutpos); - break; - case 39: - encode39(in, currentPos, code, out, tmpoutpos); - break; - case 40: - encode40(in, currentPos, code, out, tmpoutpos); - break; - case 41: - encode41(in, currentPos, code, out, tmpoutpos); - break; - case 42: - encode42(in, currentPos, code, out, tmpoutpos); - break; - case 43: - encode43(in, currentPos, code, out, tmpoutpos); - break; - case 44: - encode44(in, currentPos, code, out, tmpoutpos); - break; - case 45: - encode45(in, currentPos, code, out, tmpoutpos); - break; - case 46: - encode46(in, currentPos, code, out, tmpoutpos); - break; - case 47: - encode47(in, currentPos, code, out, tmpoutpos); - break; - case 48: - encode48(in, currentPos, code, out, tmpoutpos); - break; - case 49: - encode49(in, currentPos, code, out, tmpoutpos); - break; - case 50: - encode50(in, currentPos, code, out, tmpoutpos); - break; - case 51: - encode51(in, currentPos, code, out, tmpoutpos); - break; - case 52: - encode52(in, currentPos, code, out, tmpoutpos); - break; - case 53: - encode53(in, currentPos, code, out, tmpoutpos); - break; - case 54: - encode54(in, currentPos, code, out, tmpoutpos); - break; - case 55: - encode55(in, currentPos, code, out, tmpoutpos); - break; - case 56: - encode56(in, currentPos, code, out, tmpoutpos); - break; - case 57: - encode57(in, currentPos, code, out, tmpoutpos); - break; - case 58: - encode58(in, currentPos, code, out, tmpoutpos); - break; - case 59: - encode59(in, currentPos, code, out, tmpoutpos); - break; - case 60: - encode60(in, currentPos, code, out, tmpoutpos); - break; - case 61: - encode61(in, currentPos, code, out, tmpoutpos); - break; - case 62: - encode62(in, currentPos, code, out, tmpoutpos); - break; - case 63: - encode63(in, currentPos, code, out, tmpoutpos); - break; - case 64: - encode64(in, currentPos, code, out, tmpoutpos); - break; - case 65: - encode65(in, currentPos, code, out, tmpoutpos); - break; - case 66: - encode66(in, currentPos, code, out, tmpoutpos); - break; - case 67: - encode67(in, currentPos, code, out, tmpoutpos); - break; - case 68: - encode68(in, currentPos, code, out, tmpoutpos); - break; - case 69: - encode69(in, currentPos, code, out, tmpoutpos); - break; - case 70: - encode70(in, currentPos, code, out, tmpoutpos); - break; - case 71: - encode71(in, currentPos, code, out, tmpoutpos); - break; - case 72: - encode72(in, currentPos, code, out, tmpoutpos); - break; - case 73: - encode73(in, currentPos, code, out, tmpoutpos); - break; - case 74: - encode74(in, currentPos, code, out, tmpoutpos); - break; - case 75: - encode75(in, currentPos, code, out, tmpoutpos); - break; - case 76: - encode76(in, currentPos, code, out, tmpoutpos); - break; - case 77: - encode77(in, currentPos, code, out, tmpoutpos); - break; - case 78: - encode78(in, currentPos, code, out, tmpoutpos); - break; - case 79: - encode79(in, currentPos, code, out, tmpoutpos); - break; - case 80: - encode80(in, currentPos, code, out, tmpoutpos); - break; - default: - throw new RuntimeException("unsupported code"); - }// end switch - tmpoutpos += 2; - currentPos = nextCurrentPos; - } - - outer: while (currentPos < finalin) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - if (finalin <= currentPos + compressedNum - 1) - compressedNum = finalin - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[currentPos + i])) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - if (compressedNum != codeNum[selector]) { - res <<= (codeNum[selector] - compressedNum) * b; - } - res |= selector << 28; - out[tmpoutpos++] = res; - - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - inpos.set(currentPos); - outpos.set(tmpoutpos); - } - - @Override - public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { - int currentPos = outpos.get(); - int tmpinpos = inpos.get(); - final int finalout = currentPos + num; - while (currentPos < finalout - 2 * 28) { - - int val = in[tmpinpos++]; - int valn = in[tmpinpos++]; - int header = val >>> 24; - switch (header) { - case 0: { - decode0(val, valn, out, currentPos); - currentPos+=56; - break; - } - case 1: { - decode1(val, valn, out, currentPos); - currentPos+=42; - break; - } - case 2: { - decode2(val, valn, out, currentPos); - currentPos+=37; - break; - } - case 3: { - decode3(val, valn, out, currentPos); - currentPos+=35; - break; - } - case 4: { - decode4(val, valn, out, currentPos); - currentPos+=33; - break; - } - case 5: { - decode5(val, valn, out, currentPos); - currentPos+=32; - break; - } - case 6: { - decode6(val, valn, out, currentPos); - currentPos+=31; - break; - } - case 7: { - decode7(val, valn, out, currentPos); - currentPos+=30; - break; - } - case 8: { - decode8(val, valn, out, currentPos); - currentPos+=29; - break; - } - case 9: { - decode9(val, valn, out, currentPos); - currentPos+=42; - break; - } - case 10: { - decode10(val, valn, out, currentPos); - currentPos+=28; - break; - } - case 11: { - decode11(val, valn, out, currentPos); - currentPos+=23; - break; - } - case 12: { - decode12(val, valn, out, currentPos); - currentPos+=21; - break; - } - case 13: { - decode13(val, valn, out, currentPos); - currentPos+=19; - break; - } - case 14: { - decode14(val, valn, out, currentPos); - currentPos+=18; - break; - } - case 15: { - decode15(val, valn, out, currentPos); - currentPos+=17; - break; - } - case 16: { - decode16(val, valn, out, currentPos); - currentPos+=16; - break; - } - case 17: { - decode17(val, valn, out, currentPos); - currentPos+=15; - break; - } - case 18: { - decode18(val, valn, out, currentPos); - currentPos+=37; - break; - } - case 19: { - decode19(val, valn, out, currentPos); - currentPos+=23; - break; - } - case 20: { - decode20(val, valn, out, currentPos); - currentPos+=18; - break; - } - case 21: { - decode21(val, valn, out, currentPos); - currentPos+=16; - break; - } - case 22: { - decode22(val, valn, out, currentPos); - currentPos+=14; - break; - } - case 23: { - decode23(val, valn, out, currentPos); - currentPos+=13; - break; - } - case 24: { - decode24(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 25: { - decode25(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 26: { - decode26(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 27: { - decode27(val, valn, out, currentPos); - currentPos+=35; - break; - } - case 28: { - decode28(val, valn, out, currentPos); - currentPos+=21; - break; - } - case 29: { - decode29(val, valn, out, currentPos); - currentPos+=16; - break; - } - - case 30: { - decode30(val, valn, out, currentPos); - currentPos+=14; - break; - } - case 31: { - decode31(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 32: { - decode32(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 33: { - decode33(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 34: { - decode34(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 35: { - decode35(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 36: { - decode36(val, valn, out, currentPos); - currentPos+=33; - break; - } - case 37: { - decode37(val, valn, out, currentPos); - currentPos+=19; - break; - } - case 38: { - decode38(val, valn, out, currentPos); - currentPos+=14; - break; - } - case 39: { - decode39(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 40: { - decode40(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 41: { - decode41(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 42: { - decode42(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 43: { - decode43(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 44: { - decode44(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 45: { - decode45(val, valn, out, currentPos); - currentPos+=32; - break; - } - case 46: { - decode46(val, valn, out, currentPos); - currentPos+=18; - break; - } - case 47: { - decode47(val, valn, out, currentPos); - currentPos+=13; - break; - } - case 48: { - decode48(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 49: { - decode49(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 50: { - decode50(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 51: { - decode51(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 52: { - decode52(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 53: { - decode53(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 54: { - decode54(val, valn, out, currentPos); - currentPos+=31; - break; - } - case 55: { - decode55(val, valn, out, currentPos); - currentPos+=17; - break; - } - case 56: { - decode56(val, valn, out, currentPos); - currentPos+=12; - break; - } - case 57: { - decode57(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 58: { - decode58(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 59: { - decode59(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 60: { - decode60(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 61: { - decode61(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 62: { - decode62(val, valn, out, currentPos); - currentPos+=4; - break; - } - case 63: { - decode63(val, valn, out, currentPos); - currentPos+=30; - break; - } - case 64: { - decode64(val, valn, out, currentPos); - currentPos+=16; - break; - } - case 65: { - decode65(val, valn, out, currentPos); - currentPos+=11; - break; - } - case 66: { - decode66(val, valn, out, currentPos); - currentPos+=9; - break; - } - case 67: { - decode67(val, valn, out, currentPos); - currentPos+=7; - break; - } - case 68: { - decode68(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 69: { - decode69(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 70: { - decode70(val, valn, out, currentPos); - currentPos+=4; - break; - } - case 71: { - decode71(val, valn, out, currentPos); - currentPos+=3; - break; - } - case 72: { - decode72(val, valn, out, currentPos); - currentPos+=29; - break; - } - case 73: { - decode73(val, valn, out, currentPos); - currentPos+=15; - break; - } - case 74: { - decode74(val, valn, out, currentPos); - currentPos+=10; - break; - } - case 75: { - decode75(val, valn, out, currentPos); - currentPos+=8; - break; - } - case 76: { - decode76(val, valn, out, currentPos); - currentPos+=6; - break; - } - case 77: { - decode77(val, valn, out, currentPos); - currentPos+=5; - break; - } - case 78: { - decode78(val, valn, out, currentPos); - currentPos+=4; - break; - } - case 79: { - decode79(val, valn, out, currentPos); - currentPos+=3; - break; - } - case 80: { - decode80(val, valn, out, currentPos); - currentPos+=2; - break; - } - default: - throw new RuntimeException("Wrong code: " + header); - }// end switch - } // end while - - while (currentPos < finalout) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - final int howmany = finalout - currentPos < 28 ? finalout - currentPos : 28; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (k + 4)) >>> 31; - } - break; - } - case 1: { // number : 14, bitwidth : 2 - final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (2 * k + 4)) >>> 30; - } - break; - } - case 2: { // number : 9, bitwidth : 3 - final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (3 * k + 5)) >>> 29; - } - break; - } - case 3: { // number : 7, bitwidth : 4 - final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (4 * k + 4)) >>> 28; - } - break; - } - case 4: { // number : 5, bitwidth : 5 - final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (5 * k + 7)) >>> 27; - } - break; - } - case 5: { // number : 4, bitwidth : 7 - final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (7 * k + 4)) >>> 25; - } - break; - } - case 6: { // number : 3, bitwidth : 9 - final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (9 * k + 5)) >>> 23; - } - break; - } - case 7: { // number : 2, bitwidth : 14 - final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (14 * k + 4)) >>> 18; - } - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen"); - } - } - } - - outpos.set(finalout); - inpos.set(tmpinpos); - - } + private static final int[][] M = { { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, { 9, 10, 11, 12, 13, 14, 15, 16, 17 }, + { 18, 19, 20, 21, 22, 23, 24, 25, 26 }, { 27, 28, 29, 30, 31, 32, 33, 34, 35 }, + { 36, 37, 38, 39, 40, 41, 42, 43, 44 }, { 45, 46, 47, 48, 49, 50, 51, 52, 53 }, + { 54, 55, 56, 57, 58, 59, 60, 61, 62 }, { 63, 64, 65, 66, 67, 68, 69, 70, 71 }, + { 72, 73, 74, 75, 76, 77, 78, 79, 80 } }; + + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } + + private void encode0(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + (in[inf + i]); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode1(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode2(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 28 + i];// 第二个28位是低位存储的,所以浪费的1比特在最顶端。 + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode3(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode4(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode5(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode6(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode7(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode8(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 24; i++) + out[outf + 0] = (out[outf + 0] << 1) + in[inf + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 24 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 28 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode9(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode10(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) { + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + + } + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode11(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode12(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode13(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode14(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode15(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode16(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode17(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 12; i++) + out[outf + 0] = (out[outf + 0] << 2) + in[inf + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 12 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 14 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode18(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 9 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode19(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 9 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode20(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 9 + i]; + + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode21(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode22(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode23(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode24(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode25(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode26(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 8; i++) + out[outf + 0] = (out[outf + 0] << 3) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 8 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 9 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode27(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode28(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode29(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode30(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode31(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode32(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode33(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode34(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode35(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 6; i++) + out[outf + 0] = (out[outf + 0] << 4) + in[inf + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 6 + i]; + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 7 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode36(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode37(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode38(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode39(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode40(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode41(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode42(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode43(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode44(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 4; i++) + out[outf + 0] = (out[outf + 0] << 5) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 4) + (in[inf + 4] >>> 1); + out[outf + 1] = (out[outf + 1] << 1) + ((in[inf + 4] << 31) >>> 31); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 5 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode45(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode46(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode47(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode48(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode49(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode50(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode51(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode52(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode53(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 3; i++) + out[outf + 0] = (out[outf + 0] << 7) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 3) + (in[inf + 3] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 3] << 28) >>> 28); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 4 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode54(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode55(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode56(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode57(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode58(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode59(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode60(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode61(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode62(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + for (int i = 0; i < 2; i++) + out[outf + 0] = (out[outf + 0] << 9) + in[inf + i]; + out[outf + 0] = (out[outf + 0] << 6) + (in[inf + 2] >>> 3); + out[outf + 1] = (out[outf + 1] << 3) + ((in[inf + 2] << 29) >>> 29); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 3 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode63(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode64(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode65(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode66(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode67(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode68(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode69(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode70(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode71(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 14) + in[inf]; + out[outf + 0] = (out[outf + 0] << 10) + (in[inf + 1] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf + 1] << 28) >>> 28); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 2 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode72(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 28; i++) + out[outf + 1] = (out[outf + 1] << 1) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode73(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 14; i++) + out[outf + 1] = (out[outf + 1] << 2) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode74(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 9; i++) + out[outf + 1] = (out[outf + 1] << 3) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode75(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 7; i++) + out[outf + 1] = (out[outf + 1] << 4) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode76(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 5; i++) + out[outf + 1] = (out[outf + 1] << 5) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode77(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 4; i++) + out[outf + 1] = (out[outf + 1] << 7) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode78(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 3; i++) + out[outf + 1] = (out[outf + 1] << 9) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode79(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 2; i++) + out[outf + 1] = (out[outf + 1] << 14) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + private void encode80(final int[] in, final int inf, final int code, final int[] out, + final int outf) { + out[outf + 0] = (out[outf + 0] << 24) + (in[inf] >>> 4); + out[outf + 1] = (out[outf + 1] << 4) + ((in[inf] << 28) >>> 28); + for (int i = 0; i < 1; i++) + out[outf + 1] = (out[outf + 1] << 28) + in[inf + 1 + i]; + out[outf + 0] = code << 24 | out[outf + 0]; + + } + + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); + } + + + + private void decode80(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode79(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number :2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode78(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27); + // number : 3, bitwidth :9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode77(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode76(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 25); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode75(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode74(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode73(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode72(int val, int valn, int[] out, int currentPos) { + // number : 1, bitwidth : 28 + out[currentPos++] = (val << 8) >>> 4 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode71(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode70(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode69(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode68(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode67(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode66(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode65(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode64(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode63(int val, int valn, int[] out, int currentPos) { + // number : 2, bitwidth : 14 + out[currentPos++] = (val << 8) >>> 18; + out[currentPos++] = (val << 22) >>> 18 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode62(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode61(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode60(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode59(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode58(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode57(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode56(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode55(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode54(int val, int valn, int[] out, int currentPos) { + // number : 3, bitwidth : 9 + out[currentPos++] = (val << 8) >>> 23; + out[currentPos++] = (val << 17) >>> 23; + out[currentPos++] = (val << 26) >>> 23 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode53(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode52(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode51(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode50(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode49(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode48(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode47(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode46(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode45(int val, int valn, int[] out, int currentPos) { + // number : 4, bitwidth : 7 + out[currentPos++] = (val << 8) >>> 25; + out[currentPos++] = (val << 15) >>> 25; + out[currentPos++] = (val << 22) >>> 25; + out[currentPos++] = (val << 29) >>> 25 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode44(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode43(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode42(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27); + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode41(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode40(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 25); + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode39(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode38(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 27); + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode37(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode36(int val, int valn, int[] out, int currentPos) { + // number : 5, bitwidth : 5 + out[currentPos++] = (val << 8) >>> 27; + out[currentPos++] = (val << 13) >>> 27; + out[currentPos++] = (val << 18) >>> 27; + out[currentPos++] = (val << 23) >>> 27; + out[currentPos++] = (val << 28) >>> 27 | (valn >>> 28); + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode35(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode34(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode33(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 1) >>> 28; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode32(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode31(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 3) >>> 28; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode30(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode29(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 1) >>> 28; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode28(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode27(int val, int valn, int[] out, int currentPos) { + // number : 7, bitwidth : 4 + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + out[currentPos++] = (valn << 0) >>> 28; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode26(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode25(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode24(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 2) >>> 29; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode23(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode22(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 4) >>> 29; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode21(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode20(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 2) >>> 29; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode19(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode18(int val, int valn, int[] out, int currentPos) { + // number : 9, bitwidth : 3 + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + out[currentPos++] = (valn << 1) >>> 29; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode17(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode16(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode15(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 1) >>> 30; + out[currentPos++] = (valn << 3) >>> 30; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode14(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode13(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 3) >>> 30; + out[currentPos++] = (valn << 5) >>> 30; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + + } + + private void decode12(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + + } + + private void decode11(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 1) >>> 30; + out[currentPos++] = (valn << 3) >>> 30; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + + } + + private void decode10(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode9(int val, int valn, int[] out, int currentPos) { + // number : 14, bitwidth : 2 + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + out[currentPos++] = (valn << 0) >>> 30; + out[currentPos++] = (valn << 2) >>> 30; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + private void decode8(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 1, bitwidth : 28 + out[currentPos++] = (valn << 4) >>> 4; + } + + private void decode7(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 2, bitwidth : 14 + out[currentPos++] = (valn << 4) >>> 18; + out[currentPos++] = (valn << 18) >>> 18; + } + + private void decode6(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + out[currentPos++] = (valn << 4) >>> 31; + // number : 3, bitwidth : 9 + out[currentPos++] = (valn << 5) >>> 23; + out[currentPos++] = (valn << 14) >>> 23; + out[currentPos++] = (valn << 23) >>> 23; + } + + private void decode5(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 4, bitwidth : 7 + out[currentPos++] = (valn << 4) >>> 25; + out[currentPos++] = (valn << 11) >>> 25; + out[currentPos++] = (valn << 18) >>> 25; + out[currentPos++] = (valn << 25) >>> 25; + } + + private void decode4(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = (valn << 3) >>> 31;// 头部3bit + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + // number : 5, bitwidth : 5 + out[currentPos++] = (valn << 7) >>> 27; + out[currentPos++] = (valn << 12) >>> 27; + out[currentPos++] = (valn << 17) >>> 27; + out[currentPos++] = (valn << 22) >>> 27; + out[currentPos++] = (valn << 27) >>> 27; + } + + private void decode3(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 7, bitwidth : 4 + out[currentPos++] = (valn << 4) >>> 28; + out[currentPos++] = (valn << 8) >>> 28; + out[currentPos++] = (valn << 12) >>> 28; + out[currentPos++] = (valn << 16) >>> 28; + out[currentPos++] = (valn << 20) >>> 28; + out[currentPos++] = (valn << 24) >>> 28; + out[currentPos++] = (valn << 28) >>> 28; + } + + private void decode2(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = (valn << 1) >>> 31;// 头部1bit + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + out[currentPos++] = (valn << 4) >>> 31; + // number : 9, bitwidth : 3 + out[currentPos++] = (valn << 5) >>> 29; + out[currentPos++] = (valn << 8) >>> 29; + out[currentPos++] = (valn << 11) >>> 29; + out[currentPos++] = (valn << 14) >>> 29; + out[currentPos++] = (valn << 17) >>> 29; + out[currentPos++] = (valn << 20) >>> 29; + out[currentPos++] = (valn << 23) >>> 29; + out[currentPos++] = (valn << 26) >>> 29; + out[currentPos++] = (valn << 29) >>> 29; + } + + private void decode1(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31;// 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 14, bitwidth : 2 + out[currentPos++] = (valn << 4) >>> 30; + out[currentPos++] = (valn << 6) >>> 30; + out[currentPos++] = (valn << 8) >>> 30; + out[currentPos++] = (valn << 10) >>> 30; + out[currentPos++] = (valn << 12) >>> 30; + out[currentPos++] = (valn << 14) >>> 30; + out[currentPos++] = (valn << 16) >>> 30; + out[currentPos++] = (valn << 18) >>> 30; + out[currentPos++] = (valn << 20) >>> 30; + out[currentPos++] = (valn << 22) >>> 30; // 10 + out[currentPos++] = (valn << 24) >>> 30; + out[currentPos++] = (valn << 26) >>> 30; + out[currentPos++] = (valn << 28) >>> 30; + out[currentPos++] = (valn << 30) >>> 30; + } + + private void decode0(int val, int valn, int[] out, int currentPos) { + // number : 28, bitwidth : 1 + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + out[currentPos++] = valn >>> 31; + out[currentPos++] = (valn << 1) >>> 31; + out[currentPos++] = (valn << 2) >>> 31; + out[currentPos++] = (valn << 3) >>> 31; + // number : 28, bitwidth : 1 + out[currentPos++] = (valn << 4) >>> 31; + out[currentPos++] = (valn << 5) >>> 31; + out[currentPos++] = (valn << 6) >>> 31; + out[currentPos++] = (valn << 7) >>> 31; + out[currentPos++] = (valn << 8) >>> 31; + out[currentPos++] = (valn << 9) >>> 31; + out[currentPos++] = (valn << 10) >>> 31; + out[currentPos++] = (valn << 11) >>> 31; + out[currentPos++] = (valn << 12) >>> 31; + out[currentPos++] = (valn << 13) >>> 31; // 10 + out[currentPos++] = (valn << 14) >>> 31; + out[currentPos++] = (valn << 15) >>> 31; + out[currentPos++] = (valn << 16) >>> 31; + out[currentPos++] = (valn << 17) >>> 31; + out[currentPos++] = (valn << 18) >>> 31; + out[currentPos++] = (valn << 19) >>> 31; + out[currentPos++] = (valn << 20) >>> 31; + out[currentPos++] = (valn << 21) >>> 31; + out[currentPos++] = (valn << 22) >>> 31; + out[currentPos++] = (valn << 23) >>> 31; // 20 + out[currentPos++] = (valn << 24) >>> 31; + out[currentPos++] = (valn << 25) >>> 31; + out[currentPos++] = (valn << 26) >>> 31; + out[currentPos++] = (valn << 27) >>> 31; + out[currentPos++] = (valn << 28) >>> 31; + out[currentPos++] = (valn << 29) >>> 31; + out[currentPos++] = (valn << 30) >>> 31; + out[currentPos++] = (valn << 31) >>> 31; + } + + + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + @Override + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + int tmpoutpos = outpos.get(); + int currentPos = inpos.get(); + int selector1 = 0; + int selector2 = 0; + final int finalin = currentPos + inlength; + while (currentPos < finalin - 28 * 2) { + int nextCurrentPos = currentPos; + mainloop1: for (selector1=0; selector1 <= 8; selector1++) { + int compressedNum = codeNum[selector1]; + //if (finalin <= nextCurrentPos + compressedNum - 1) + // compressedNum = finalin - nextCurrentPos; + int b = bitLength[selector1]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) + continue mainloop1; + } + nextCurrentPos += compressedNum; + break; + } + mainloop2: for (selector2 = 0; selector2 <= 8; selector2++) { + int compressedNum = codeNum[selector2]; + //if (finalin <= nextCurrentPos + compressedNum - 1) + // compressedNum = finalin - nextCurrentPos; + int b = bitLength[selector2]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[nextCurrentPos + i])) + continue mainloop2; + } + nextCurrentPos += compressedNum; + break; + } + int code = M[selector1][selector2]; + out[tmpoutpos] = 0; + out[tmpoutpos + 1] = 0; + switch (code) { + case 0: + encode0(in, currentPos, code, out, tmpoutpos); + break; + case 1: + encode1(in, currentPos, code, out, tmpoutpos); + break; + case 2: + encode2(in, currentPos, code, out, tmpoutpos); + break; + case 3: + encode3(in, currentPos, code, out, tmpoutpos); + break; + case 4: + encode4(in, currentPos, code, out, tmpoutpos); + break; + case 5: + encode5(in, currentPos, code, out, tmpoutpos); + break; + case 6: + encode6(in, currentPos, code, out, tmpoutpos); + break; + case 7: + encode7(in, currentPos, code, out, tmpoutpos); + break; + case 8: + encode8(in, currentPos, code, out, tmpoutpos); + break; + case 9: + encode9(in, currentPos, code, out, tmpoutpos); + break; + case 10: + encode10(in, currentPos, code, out, tmpoutpos); + break; + case 11: + encode11(in, currentPos, code, out, tmpoutpos); + break; + case 12: + encode12(in, currentPos, code, out, tmpoutpos); + break; + case 13: + encode13(in, currentPos, code, out, tmpoutpos); + break; + case 14: + encode14(in, currentPos, code, out, tmpoutpos); + break; + case 15: + encode15(in, currentPos, code, out, tmpoutpos); + break; + case 16: + encode16(in, currentPos, code, out, tmpoutpos); + break; + case 17: + encode17(in, currentPos, code, out, tmpoutpos); + break; + case 18: + encode18(in, currentPos, code, out, tmpoutpos); + break; + case 19: + encode19(in, currentPos, code, out, tmpoutpos); + break; + case 20: + encode20(in, currentPos, code, out, tmpoutpos); + break; + case 21: + encode21(in, currentPos, code, out, tmpoutpos); + break; + case 22: + encode22(in, currentPos, code, out, tmpoutpos); + break; + case 23: + encode23(in, currentPos, code, out, tmpoutpos); + break; + case 24: + encode24(in, currentPos, code, out, tmpoutpos); + break; + case 25: + encode25(in, currentPos, code, out, tmpoutpos); + break; + case 26: + encode26(in, currentPos, code, out, tmpoutpos); + break; + case 27: + encode27(in, currentPos, code, out, tmpoutpos); + break; + case 28: + encode28(in, currentPos, code, out, tmpoutpos); + break; + case 29: + encode29(in, currentPos, code, out, tmpoutpos); + break; + case 30: + encode30(in, currentPos, code, out, tmpoutpos); + break; + case 31: + encode31(in, currentPos, code, out, tmpoutpos); + break; + case 32: + encode32(in, currentPos, code, out, tmpoutpos); + break; + case 33: + encode33(in, currentPos, code, out, tmpoutpos); + break; + case 34: + encode34(in, currentPos, code, out, tmpoutpos); + break; + case 35: + encode35(in, currentPos, code, out, tmpoutpos); + break; + case 36: + encode36(in, currentPos, code, out, tmpoutpos); + break; + case 37: + encode37(in, currentPos, code, out, tmpoutpos); + break; + case 38: + encode38(in, currentPos, code, out, tmpoutpos); + break; + case 39: + encode39(in, currentPos, code, out, tmpoutpos); + break; + case 40: + encode40(in, currentPos, code, out, tmpoutpos); + break; + case 41: + encode41(in, currentPos, code, out, tmpoutpos); + break; + case 42: + encode42(in, currentPos, code, out, tmpoutpos); + break; + case 43: + encode43(in, currentPos, code, out, tmpoutpos); + break; + case 44: + encode44(in, currentPos, code, out, tmpoutpos); + break; + case 45: + encode45(in, currentPos, code, out, tmpoutpos); + break; + case 46: + encode46(in, currentPos, code, out, tmpoutpos); + break; + case 47: + encode47(in, currentPos, code, out, tmpoutpos); + break; + case 48: + encode48(in, currentPos, code, out, tmpoutpos); + break; + case 49: + encode49(in, currentPos, code, out, tmpoutpos); + break; + case 50: + encode50(in, currentPos, code, out, tmpoutpos); + break; + case 51: + encode51(in, currentPos, code, out, tmpoutpos); + break; + case 52: + encode52(in, currentPos, code, out, tmpoutpos); + break; + case 53: + encode53(in, currentPos, code, out, tmpoutpos); + break; + case 54: + encode54(in, currentPos, code, out, tmpoutpos); + break; + case 55: + encode55(in, currentPos, code, out, tmpoutpos); + break; + case 56: + encode56(in, currentPos, code, out, tmpoutpos); + break; + case 57: + encode57(in, currentPos, code, out, tmpoutpos); + break; + case 58: + encode58(in, currentPos, code, out, tmpoutpos); + break; + case 59: + encode59(in, currentPos, code, out, tmpoutpos); + break; + case 60: + encode60(in, currentPos, code, out, tmpoutpos); + break; + case 61: + encode61(in, currentPos, code, out, tmpoutpos); + break; + case 62: + encode62(in, currentPos, code, out, tmpoutpos); + break; + case 63: + encode63(in, currentPos, code, out, tmpoutpos); + break; + case 64: + encode64(in, currentPos, code, out, tmpoutpos); + break; + case 65: + encode65(in, currentPos, code, out, tmpoutpos); + break; + case 66: + encode66(in, currentPos, code, out, tmpoutpos); + break; + case 67: + encode67(in, currentPos, code, out, tmpoutpos); + break; + case 68: + encode68(in, currentPos, code, out, tmpoutpos); + break; + case 69: + encode69(in, currentPos, code, out, tmpoutpos); + break; + case 70: + encode70(in, currentPos, code, out, tmpoutpos); + break; + case 71: + encode71(in, currentPos, code, out, tmpoutpos); + break; + case 72: + encode72(in, currentPos, code, out, tmpoutpos); + break; + case 73: + encode73(in, currentPos, code, out, tmpoutpos); + break; + case 74: + encode74(in, currentPos, code, out, tmpoutpos); + break; + case 75: + encode75(in, currentPos, code, out, tmpoutpos); + break; + case 76: + encode76(in, currentPos, code, out, tmpoutpos); + break; + case 77: + encode77(in, currentPos, code, out, tmpoutpos); + break; + case 78: + encode78(in, currentPos, code, out, tmpoutpos); + break; + case 79: + encode79(in, currentPos, code, out, tmpoutpos); + break; + case 80: + encode80(in, currentPos, code, out, tmpoutpos); + break; + default: + throw new RuntimeException("unsupported code"); + }// end switch + tmpoutpos += 2; + currentPos = nextCurrentPos; + } + + outer: while (currentPos < finalin) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalin <= currentPos + compressedNum - 1) + compressedNum = finalin - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + if (compressedNum != codeNum[selector]) { + res <<= (codeNum[selector] - compressedNum) * b; + } + res |= selector << 28; + out[tmpoutpos++] = res; + + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + inpos.set(currentPos); + outpos.set(tmpoutpos); + } + + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { + int currentPos = outpos.get(); + int tmpinpos = inpos.get(); + final int finalout = currentPos + num; + while (currentPos < finalout - 2 * 28) { + + int val = in[tmpinpos++]; + int valn = in[tmpinpos++]; + int header = val >>> 24; + switch (header) { + case 0: { + decode0(val, valn, out, currentPos); + currentPos+=56; + break; + } + case 1: { + decode1(val, valn, out, currentPos); + currentPos+=42; + break; + } + case 2: { + decode2(val, valn, out, currentPos); + currentPos+=37; + break; + } + case 3: { + decode3(val, valn, out, currentPos); + currentPos+=35; + break; + } + case 4: { + decode4(val, valn, out, currentPos); + currentPos+=33; + break; + } + case 5: { + decode5(val, valn, out, currentPos); + currentPos+=32; + break; + } + case 6: { + decode6(val, valn, out, currentPos); + currentPos+=31; + break; + } + case 7: { + decode7(val, valn, out, currentPos); + currentPos+=30; + break; + } + case 8: { + decode8(val, valn, out, currentPos); + currentPos+=29; + break; + } + case 9: { + decode9(val, valn, out, currentPos); + currentPos+=42; + break; + } + case 10: { + decode10(val, valn, out, currentPos); + currentPos+=28; + break; + } + case 11: { + decode11(val, valn, out, currentPos); + currentPos+=23; + break; + } + case 12: { + decode12(val, valn, out, currentPos); + currentPos+=21; + break; + } + case 13: { + decode13(val, valn, out, currentPos); + currentPos+=19; + break; + } + case 14: { + decode14(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 15: { + decode15(val, valn, out, currentPos); + currentPos+=17; + break; + } + case 16: { + decode16(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 17: { + decode17(val, valn, out, currentPos); + currentPos+=15; + break; + } + case 18: { + decode18(val, valn, out, currentPos); + currentPos+=37; + break; + } + case 19: { + decode19(val, valn, out, currentPos); + currentPos+=23; + break; + } + case 20: { + decode20(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 21: { + decode21(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 22: { + decode22(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 23: { + decode23(val, valn, out, currentPos); + currentPos+=13; + break; + } + case 24: { + decode24(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 25: { + decode25(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 26: { + decode26(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 27: { + decode27(val, valn, out, currentPos); + currentPos+=35; + break; + } + case 28: { + decode28(val, valn, out, currentPos); + currentPos+=21; + break; + } + case 29: { + decode29(val, valn, out, currentPos); + currentPos+=16; + break; + } + + case 30: { + decode30(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 31: { + decode31(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 32: { + decode32(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 33: { + decode33(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 34: { + decode34(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 35: { + decode35(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 36: { + decode36(val, valn, out, currentPos); + currentPos+=33; + break; + } + case 37: { + decode37(val, valn, out, currentPos); + currentPos+=19; + break; + } + case 38: { + decode38(val, valn, out, currentPos); + currentPos+=14; + break; + } + case 39: { + decode39(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 40: { + decode40(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 41: { + decode41(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 42: { + decode42(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 43: { + decode43(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 44: { + decode44(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 45: { + decode45(val, valn, out, currentPos); + currentPos+=32; + break; + } + case 46: { + decode46(val, valn, out, currentPos); + currentPos+=18; + break; + } + case 47: { + decode47(val, valn, out, currentPos); + currentPos+=13; + break; + } + case 48: { + decode48(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 49: { + decode49(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 50: { + decode50(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 51: { + decode51(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 52: { + decode52(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 53: { + decode53(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 54: { + decode54(val, valn, out, currentPos); + currentPos+=31; + break; + } + case 55: { + decode55(val, valn, out, currentPos); + currentPos+=17; + break; + } + case 56: { + decode56(val, valn, out, currentPos); + currentPos+=12; + break; + } + case 57: { + decode57(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 58: { + decode58(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 59: { + decode59(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 60: { + decode60(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 61: { + decode61(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 62: { + decode62(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 63: { + decode63(val, valn, out, currentPos); + currentPos+=30; + break; + } + case 64: { + decode64(val, valn, out, currentPos); + currentPos+=16; + break; + } + case 65: { + decode65(val, valn, out, currentPos); + currentPos+=11; + break; + } + case 66: { + decode66(val, valn, out, currentPos); + currentPos+=9; + break; + } + case 67: { + decode67(val, valn, out, currentPos); + currentPos+=7; + break; + } + case 68: { + decode68(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 69: { + decode69(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 70: { + decode70(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 71: { + decode71(val, valn, out, currentPos); + currentPos+=3; + break; + } + case 72: { + decode72(val, valn, out, currentPos); + currentPos+=29; + break; + } + case 73: { + decode73(val, valn, out, currentPos); + currentPos+=15; + break; + } + case 74: { + decode74(val, valn, out, currentPos); + currentPos+=10; + break; + } + case 75: { + decode75(val, valn, out, currentPos); + currentPos+=8; + break; + } + case 76: { + decode76(val, valn, out, currentPos); + currentPos+=6; + break; + } + case 77: { + decode77(val, valn, out, currentPos); + currentPos+=5; + break; + } + case 78: { + decode78(val, valn, out, currentPos); + currentPos+=4; + break; + } + case 79: { + decode79(val, valn, out, currentPos); + currentPos+=3; + break; + } + case 80: { + decode80(val, valn, out, currentPos); + currentPos+=2; + break; + } + default: + throw new RuntimeException("Wrong code: " + header); + }// end switch + } // end while + + while (currentPos < finalout) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finalout - currentPos < 28 ? finalout - currentPos : 28; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } + + outpos.set(finalout); + inpos.set(tmpinpos); + + } } \ No newline at end of file diff --git a/src/main/java/me/lemire/integercompression/S16.java b/src/main/java/me/lemire/integercompression/S16.java index 08ffbc4..e40522d 100644 --- a/src/main/java/me/lemire/integercompression/S16.java +++ b/src/main/java/me/lemire/integercompression/S16.java @@ -15,191 +15,191 @@ */ public final class S16 { - /** - * Compress an integer array using Simple16 - * - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @param out - * output array - * @param tmpoutpos - * location in the output array - * @return the number of 32-bit words written (in compressed form) - */ - public static int compress(final int[] in, int currentPos, int inlength, final int out[], final int tmpoutpos) { - int outpos = tmpoutpos; - final int finalin = currentPos + inlength; - while (currentPos < finalin) { - int inoffset = compressblock(out, outpos++, in, currentPos, inlength); - if (inoffset == -1) - throw new RuntimeException("Too big a number"); - currentPos += inoffset; - inlength -= inoffset; - } - return outpos - tmpoutpos; - } - - /** - * Estimate size of the compressed output. - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @return estimated size of the output (in 32-bit integers) - */ - public static int estimatecompress(final int[] in, int currentPos, int inlength) { - final int finalin = currentPos + inlength; - int counter = 0; - while (currentPos < finalin) { - int inoffset = fakecompressblock(in, currentPos, inlength); - if (inoffset == -1) - throw new RuntimeException("Too big a number"); - currentPos += inoffset; - inlength -= inoffset; - ++counter; - } - return counter; - } - - /** - * Compress an integer array using Simple16 - * - * @param out - * the compressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the integer input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the size of the outputs in 32-bit integers - * - */ - public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { - int numIdx, j, num, bits; - for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { - out[outOffset] = numIdx << S16_BITSSIZE; - num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; - - for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { - out[outOffset] |= (in[inOffset + j] << bits); - bits += S16_BITS[numIdx][j]; - j++; - } - - if (j == num) { - return num; - } - } - - return -1; - } - - private static final int fakecompressblock(int[] in, int inOffset, int n) { - int numIdx, j, num; - for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { - num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; - - for (j = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { - j++; - } - - if (j == num) { - return num; - } - } - - return -1; - } - - /** - * Decompress an integer array using Simple16 - * - * @param out - * the decompressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the compressed input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the number of processed integers - */ - public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { - int numIdx, j = 0, bits = 0; - numIdx = in[inOffset] >>> S16_BITSSIZE; - int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; - for (j = 0, bits = 0; j < num; j++) { - out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); - bits += S16_BITS[numIdx][j]; - } - return num; - } - - /** - * Uncompressed data from an input array into an output array - * - * @param in - * input array (in compressed form) - * @param tmpinpos - * starting location in the compressed input array - * @param inlength - * how much data we wish the read (in 32-bit words) - * @param out - * output array (in decompressed form) - * @param currentPos - * current position in the output array - * @param outlength - * available data in the output array - */ - public static void uncompress(final int[] in, int tmpinpos, final int inlength, final int[] out, int currentPos, - int outlength) { - final int finalpos = tmpinpos + inlength; - while (tmpinpos < finalpos) { - final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength); - outlength -= howmany; - currentPos += howmany; - tmpinpos += 1; - } - - } - - private static int[][] shiftme(int[][] x) { - int[][] answer = new int[x.length][]; - for (int k = 0; k < x.length; ++k) { - answer[k] = new int[x[k].length]; - for (int z = 0; z < answer[k].length; ++z) - answer[k][z] = 1 << x[k][z]; - } - return answer; - } - - private static final int S16_NUMSIZE = 16; - private static final int S16_BITSSIZE = 28; - // the possible number of bits used to represent one integer - private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 }; - // the corresponding number of elements for each value of the number of - // bits - private static final int[][] S16_BITS = { - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, - { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, - { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, - { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, - { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; - private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); + /** + * Compress an integer array using Simple16 + * + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @param out + * output array + * @param tmpoutpos + * location in the output array + * @return the number of 32-bit words written (in compressed form) + */ + public static int compress(final int[] in, int currentPos, int inlength, final int out[], final int tmpoutpos) { + int outpos = tmpoutpos; + final int finalin = currentPos + inlength; + while (currentPos < finalin) { + int inoffset = compressblock(out, outpos++, in, currentPos, inlength); + if (inoffset == -1) + throw new RuntimeException("Too big a number"); + currentPos += inoffset; + inlength -= inoffset; + } + return outpos - tmpoutpos; + } + + /** + * Estimate size of the compressed output. + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @return estimated size of the output (in 32-bit integers) + */ + public static int estimatecompress(final int[] in, int currentPos, int inlength) { + final int finalin = currentPos + inlength; + int counter = 0; + while (currentPos < finalin) { + int inoffset = fakecompressblock(in, currentPos, inlength); + if (inoffset == -1) + throw new RuntimeException("Too big a number"); + currentPos += inoffset; + inlength -= inoffset; + ++counter; + } + return counter; + } + + /** + * Compress an integer array using Simple16 + * + * @param out + * the compressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the integer input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the size of the outputs in 32-bit integers + * + */ + public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j, num, bits; + for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { + out[outOffset] = numIdx << S16_BITSSIZE; + num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; + + for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { + out[outOffset] |= (in[inOffset + j] << bits); + bits += S16_BITS[numIdx][j]; + j++; + } + + if (j == num) { + return num; + } + } + + return -1; + } + + private static final int fakecompressblock(int[] in, int inOffset, int n) { + int numIdx, j, num; + for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { + num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; + + for (j = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { + j++; + } + + if (j == num) { + return num; + } + } + + return -1; + } + + /** + * Decompress an integer array using Simple16 + * + * @param out + * the decompressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the compressed input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the number of processed integers + */ + public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j = 0, bits = 0; + numIdx = in[inOffset] >>> S16_BITSSIZE; + int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; + for (j = 0, bits = 0; j < num; j++) { + out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); + bits += S16_BITS[numIdx][j]; + } + return num; + } + + /** + * Uncompressed data from an input array into an output array + * + * @param in + * input array (in compressed form) + * @param tmpinpos + * starting location in the compressed input array + * @param inlength + * how much data we wish the read (in 32-bit words) + * @param out + * output array (in decompressed form) + * @param currentPos + * current position in the output array + * @param outlength + * available data in the output array + */ + public static void uncompress(final int[] in, int tmpinpos, final int inlength, final int[] out, int currentPos, + int outlength) { + final int finalpos = tmpinpos + inlength; + while (tmpinpos < finalpos) { + final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength); + outlength -= howmany; + currentPos += howmany; + tmpinpos += 1; + } + + } + + private static int[][] shiftme(int[][] x) { + int[][] answer = new int[x.length][]; + for (int k = 0; k < x.length; ++k) { + answer[k] = new int[x[k].length]; + for (int z = 0; z < answer[k].length; ++z) + answer[k][z] = 1 << x[k][z]; + } + return answer; + } + + private static final int S16_NUMSIZE = 16; + private static final int S16_BITSSIZE = 28; + // the possible number of bits used to represent one integer + private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 }; + // the corresponding number of elements for each value of the number of + // bits + private static final int[][] S16_BITS = { + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, + { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, + { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, + { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; + private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); } diff --git a/src/main/java/me/lemire/integercompression/S9.java b/src/main/java/me/lemire/integercompression/S9.java index 2180e5a..7e03e42 100644 --- a/src/main/java/me/lemire/integercompression/S9.java +++ b/src/main/java/me/lemire/integercompression/S9.java @@ -17,187 +17,187 @@ public final class S9 { - /** - * Estimate size of the compressed output. - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @return estimated size of the output (in 32-bit integers) - */ - public static int estimatecompress(int[] in, int currentPos, int inlength) { - int tmpoutpos = 0; - int finalpos = currentPos + inlength; - outer: while (currentPos < finalpos) { - mainloop: for (int selector = 0; selector < 8; selector++) { + /** + * Estimate size of the compressed output. + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @return estimated size of the output (in 32-bit integers) + */ + public static int estimatecompress(int[] in, int currentPos, int inlength) { + int tmpoutpos = 0; + int finalpos = currentPos + inlength; + outer: while (currentPos < finalpos) { + mainloop: for (int selector = 0; selector < 8; selector++) { - int compressedNum = codeNum[selector]; - if (finalpos <= currentPos + compressedNum - 1) - compressedNum = finalpos - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) - if (Util.smallerorequalthan(max , in[currentPos + i])) - continue mainloop; - currentPos += compressedNum; - ++tmpoutpos; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - tmpoutpos++; - currentPos++; + int compressedNum = codeNum[selector]; + if (finalpos <= currentPos + compressedNum - 1) + compressedNum = finalpos - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) + if (Util.smallerorequalthan(max , in[currentPos + i])) + continue mainloop; + currentPos += compressedNum; + ++tmpoutpos; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + tmpoutpos++; + currentPos++; - } - return tmpoutpos; - } + } + return tmpoutpos; + } - /** - * Compress an integer array using Simple9 - * - * - * @param in - * array to compress - * @param currentPos - * where to start reading - * @param inlength - * how many integers to read - * @param out - * output array - * @param tmpoutpos - * location in the output array - * @return the number of 32-bit words written (in compressed form) - */ - public static int compress(int[] in, int currentPos, int inlength, int out[], int tmpoutpos) { - int origtmpoutpos = tmpoutpos; - int finalpos = currentPos + inlength; - outer: while (currentPos < finalpos) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - if (finalpos <= currentPos + compressedNum - 1) - compressedNum = finalpos - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (Util.smallerorequalthan(max, in[currentPos + i])) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - if (compressedNum != codeNum[selector]) - res <<= (codeNum[selector] - compressedNum) * b; - res |= selector << 28; - out[tmpoutpos++] = res; - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - return tmpoutpos - origtmpoutpos; - } + /** + * Compress an integer array using Simple9 + * + * + * @param in + * array to compress + * @param currentPos + * where to start reading + * @param inlength + * how many integers to read + * @param out + * output array + * @param tmpoutpos + * location in the output array + * @return the number of 32-bit words written (in compressed form) + */ + public static int compress(int[] in, int currentPos, int inlength, int out[], int tmpoutpos) { + int origtmpoutpos = tmpoutpos; + int finalpos = currentPos + inlength; + outer: while (currentPos < finalpos) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalpos <= currentPos + compressedNum - 1) + compressedNum = finalpos - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (Util.smallerorequalthan(max, in[currentPos + i])) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + if (compressedNum != codeNum[selector]) + res <<= (codeNum[selector] - compressedNum) * b; + res |= selector << 28; + out[tmpoutpos++] = res; + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + return tmpoutpos - origtmpoutpos; + } - /** - * Uncompressed data from an input array into an output array - * - * @param in - * input array (in compressed form) - * @param tmpinpos - * starting location in the compressed input array - * @param inlength - * how much data we wish the read (in 32-bit words) - * @param out - * output array (in decompressed form) - * @param currentPos - * current position in the output array - * @param outlength - * available data in the output array - */ - public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) { - int finallength = currentPos + outlength; + /** + * Uncompressed data from an input array into an output array + * + * @param in + * input array (in compressed form) + * @param tmpinpos + * starting location in the compressed input array + * @param inlength + * how much data we wish the read (in 32-bit words) + * @param out + * output array (in decompressed form) + * @param currentPos + * current position in the output array + * @param outlength + * available data in the output array + */ + public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) { + int finallength = currentPos + outlength; - while (currentPos < finallength) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - final int howmany = finallength - currentPos < 28 ? finallength - currentPos : 28; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (k + 4)) >>> 31; - } - break; - } - case 1: { // number : 14, bitwidth : 2 - final int howmany = finallength - currentPos < 14 ? finallength - currentPos : 14; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (2 * k + 4)) >>> 30; - } - break; - } - case 2: { // number : 9, bitwidth : 3 - final int howmany = finallength - currentPos < 9 ? finallength - currentPos : 9; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (3 * k + 5)) >>> 29; - } - break; - } - case 3: { // number : 7, bitwidth : 4 - final int howmany = finallength - currentPos < 7 ? finallength - currentPos : 7; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (4 * k + 4)) >>> 28; - } - break; - } - case 4: { // number : 5, bitwidth : 5 - final int howmany = finallength - currentPos < 5 ? finallength - currentPos : 5; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (5 * k + 7)) >>> 27; - } - break; - } - case 5: { // number : 4, bitwidth : 7 - final int howmany = finallength - currentPos < 4 ? finallength - currentPos : 4; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (7 * k + 4)) >>> 25; - } - break; - } - case 6: { // number : 3, bitwidth : 9 - final int howmany = finallength - currentPos < 3 ? finallength - currentPos : 3; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (9 * k + 5)) >>> 23; - } - break; - } - case 7: { // number : 2, bitwidth : 14 - final int howmany = finallength - currentPos < 2 ? finallength - currentPos : 2; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (14 * k + 4)) >>> 18; - } - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen"); - } - } - } + while (currentPos < finallength) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finallength - currentPos < 28 ? finallength - currentPos : 28; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finallength - currentPos < 14 ? finallength - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finallength - currentPos < 9 ? finallength - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finallength - currentPos < 7 ? finallength - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finallength - currentPos < 5 ? finallength - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finallength - currentPos < 4 ? finallength - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finallength - currentPos < 3 ? finallength - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finallength - currentPos < 2 ? finallength - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } - } + } - private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; - private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; } diff --git a/src/main/java/me/lemire/integercompression/Simple16.java b/src/main/java/me/lemire/integercompression/Simple16.java index e0f9d5a..cdc7308 100644 --- a/src/main/java/me/lemire/integercompression/Simple16.java +++ b/src/main/java/me/lemire/integercompression/Simple16.java @@ -13,173 +13,173 @@ */ public final class Simple16 implements IntegerCODEC, SkippableIntegerCODEC { - public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { - int i_inpos = inpos.get(); - int i_outpos = outpos.get(); - final int finalin = i_inpos + inlength; - while (i_inpos < finalin) { - int inoffset = compressblock(out, i_outpos++, in, i_inpos, inlength); - if (inoffset == -1) - throw new RuntimeException("Too big a number"); - i_inpos += inoffset; - inlength -= inoffset; - } - inpos.set(i_inpos); - outpos.set(i_outpos); - } - - /** - * Compress an integer array using Simple16 - * - * @param out - * the compressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the integer input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the number of compressed integers - */ - public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { - int numIdx, j, num, bits; - for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { - out[outOffset] = numIdx << S16_BITSSIZE; - num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; - - for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { - out[outOffset] |= (in[inOffset + j] << bits); - bits += S16_BITS[numIdx][j]; - j++; - } - - if (j == num) { - return num; - } - } - - return -1; - } - - /** - * Decompress an integer array using Simple16 - * - * @param out - * the decompressed output - * @param outOffset - * the offset of the output in the number of integers - * @param in - * the compressed input array - * @param inOffset - * the offset of the input in the number of integers - * @param n - * the number of elements to be compressed - * @return the number of processed integers - */ - public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { - int numIdx, j = 0, bits = 0; - numIdx = in[inOffset] >>> S16_BITSSIZE; - int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; - for (j = 0, bits = 0; j < num; j++) { - out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); - bits += S16_BITS[numIdx][j]; - } - return num; - } - - @Override - public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { - int i_inpos = inpos.get(); - int i_outpos = outpos.get(); - while (num > 0) { - final int howmany = decompressblock(out, i_outpos, in, i_inpos, num); - num -= howmany; - i_outpos += howmany; - i_inpos++; - } - inpos.set(i_inpos); - outpos.set(i_outpos); - } - - /** - * Uncompress data from an array to another array. - * - * Both inpos and outpos parameters are modified to indicate new positions - * after read/write. - * - * @param in - * array containing data in compressed form - * @param tmpinpos - * where to start reading in the array - * @param inlength - * length of the compressed data (ignored by some schemes) - * @param out - * array where to write the compressed output - * @param currentPos - * where to write the compressed output in out - * @param outlength - * number of integers we want to decode - */ - public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) { - final int finalpos = tmpinpos + inlength; - while (tmpinpos < finalpos) { - final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength); - outlength -= howmany; - currentPos += howmany; - tmpinpos += 1; - } - - } - - private static int[][] shiftme(int[][] x) { - int[][] answer = new int[x.length][]; - for (int k = 0; k < x.length; ++k) { - answer[k] = new int[x[k].length]; - for (int z = 0; z < answer[k].length; ++z) - answer[k][z] = 1 << x[k][z]; - } - return answer; - } - - @Override - public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - if (inlength == 0) - return; - out[outpos.get()] = inlength; - outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); - } - - @Override - public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - if (inlength == 0) - return; - final int outlength = in[inpos.get()]; - inpos.increment(); - headlessUncompress(in, inpos, inlength, out, outpos, outlength); - - } - - @Override - public String toString() { - return this.getClass().getSimpleName(); - } - - private static final int S16_NUMSIZE = 16; - private static final int S16_BITSSIZE = 28; - // the possible number of bits used to represent one integer - private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 }; - // the corresponding number of elements for each value of the number of bits - private static final int[][] S16_BITS = { - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, - { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, - { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, - { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, - { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; - private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { + int i_inpos = inpos.get(); + int i_outpos = outpos.get(); + final int finalin = i_inpos + inlength; + while (i_inpos < finalin) { + int inoffset = compressblock(out, i_outpos++, in, i_inpos, inlength); + if (inoffset == -1) + throw new RuntimeException("Too big a number"); + i_inpos += inoffset; + inlength -= inoffset; + } + inpos.set(i_inpos); + outpos.set(i_outpos); + } + + /** + * Compress an integer array using Simple16 + * + * @param out + * the compressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the integer input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the number of compressed integers + */ + public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j, num, bits; + for (numIdx = 0; numIdx < S16_NUMSIZE; numIdx++) { + out[outOffset] = numIdx << S16_BITSSIZE; + num = (S16_NUM[numIdx] < n) ? S16_NUM[numIdx] : n; + + for (j = 0, bits = 0; (j < num) && (in[inOffset + j] < SHIFTED_S16_BITS[numIdx][j]);) { + out[outOffset] |= (in[inOffset + j] << bits); + bits += S16_BITS[numIdx][j]; + j++; + } + + if (j == num) { + return num; + } + } + + return -1; + } + + /** + * Decompress an integer array using Simple16 + * + * @param out + * the decompressed output + * @param outOffset + * the offset of the output in the number of integers + * @param in + * the compressed input array + * @param inOffset + * the offset of the input in the number of integers + * @param n + * the number of elements to be compressed + * @return the number of processed integers + */ + public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) { + int numIdx, j = 0, bits = 0; + numIdx = in[inOffset] >>> S16_BITSSIZE; + int num = S16_NUM[numIdx] < n ? S16_NUM[numIdx] : n; + for (j = 0, bits = 0; j < num; j++) { + out[outOffset + j] = (in[inOffset] >>> bits) & (0xffffffff >>> (32 - S16_BITS[numIdx][j])); + bits += S16_BITS[numIdx][j]; + } + return num; + } + + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { + int i_inpos = inpos.get(); + int i_outpos = outpos.get(); + while (num > 0) { + final int howmany = decompressblock(out, i_outpos, in, i_inpos, num); + num -= howmany; + i_outpos += howmany; + i_inpos++; + } + inpos.set(i_inpos); + outpos.set(i_outpos); + } + + /** + * Uncompress data from an array to another array. + * + * Both inpos and outpos parameters are modified to indicate new positions + * after read/write. + * + * @param in + * array containing data in compressed form + * @param tmpinpos + * where to start reading in the array + * @param inlength + * length of the compressed data (ignored by some schemes) + * @param out + * array where to write the compressed output + * @param currentPos + * where to write the compressed output in out + * @param outlength + * number of integers we want to decode + */ + public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) { + final int finalpos = tmpinpos + inlength; + while (tmpinpos < finalpos) { + final int howmany = decompressblock(out, currentPos, in, tmpinpos, outlength); + outlength -= howmany; + currentPos += howmany; + tmpinpos += 1; + } + + } + + private static int[][] shiftme(int[][] x) { + int[][] answer = new int[x.length][]; + for (int k = 0; k < x.length; ++k) { + answer[k] = new int[x[k].length]; + for (int z = 0; z < answer[k].length; ++z) + answer[k][z] = 1 << x[k][z]; + } + return answer; + } + + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } + + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); + + } + + @Override + public String toString() { + return this.getClass().getSimpleName(); + } + + private static final int S16_NUMSIZE = 16; + private static final int S16_BITSSIZE = 28; + // the possible number of bits used to represent one integer + private static final int[] S16_NUM = { 28, 21, 21, 21, 14, 9, 8, 7, 6, 6, 5, 5, 4, 3, 2, 1 }; + // the corresponding number of elements for each value of the number of bits + private static final int[][] S16_BITS = { + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1 }, + { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2 }, + { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, { 4, 3, 3, 3, 3, 3, 3, 3, 3 }, { 3, 4, 4, 4, 4, 3, 3, 3 }, + { 4, 4, 4, 4, 4, 4, 4 }, { 5, 5, 5, 5, 4, 4 }, { 4, 4, 5, 5, 5, 5 }, { 6, 6, 6, 5, 5 }, { 5, 5, 6, 6, 6 }, + { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; + private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); } \ No newline at end of file diff --git a/src/main/java/me/lemire/integercompression/Simple9.java b/src/main/java/me/lemire/integercompression/Simple9.java index 032489d..4864756 100644 --- a/src/main/java/me/lemire/integercompression/Simple9.java +++ b/src/main/java/me/lemire/integercompression/Simple9.java @@ -20,280 +20,280 @@ public final class Simple9 implements IntegerCODEC, SkippableIntegerCODEC { - @Override - public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { - int tmpoutpos = outpos.get(); - int currentPos = inpos.get(); - final int finalin = currentPos + inlength; - outer: while (currentPos < finalin - 28) { - mainloop: for (int selector = 0; selector < 8; selector++) { + @Override + public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int out[], IntWrapper outpos) { + int tmpoutpos = outpos.get(); + int currentPos = inpos.get(); + final int finalin = currentPos + inlength; + outer: while (currentPos < finalin - 28) { + mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (max <= in[currentPos + i]) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } - res |= selector << 28; - out[tmpoutpos++] = res; - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - outer: while (currentPos < finalin) { - mainloop: for (int selector = 0; selector < 8; selector++) { - int res = 0; - int compressedNum = codeNum[selector]; - if (finalin <= currentPos + compressedNum - 1) - compressedNum = finalin - currentPos; - int b = bitLength[selector]; - int max = 1 << b; - int i = 0; - for (; i < compressedNum; i++) { - if (max <= in[currentPos + i]) - continue mainloop; - res = (res << b) + in[currentPos + i]; - } + int res = 0; + int compressedNum = codeNum[selector]; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (max <= in[currentPos + i]) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } + res |= selector << 28; + out[tmpoutpos++] = res; + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + outer: while (currentPos < finalin) { + mainloop: for (int selector = 0; selector < 8; selector++) { + int res = 0; + int compressedNum = codeNum[selector]; + if (finalin <= currentPos + compressedNum - 1) + compressedNum = finalin - currentPos; + int b = bitLength[selector]; + int max = 1 << b; + int i = 0; + for (; i < compressedNum; i++) { + if (max <= in[currentPos + i]) + continue mainloop; + res = (res << b) + in[currentPos + i]; + } - if (compressedNum != codeNum[selector]) - res <<= (codeNum[selector] - compressedNum) * b; - res |= selector << 28; - out[tmpoutpos++] = res; - currentPos += compressedNum; - continue outer; - } - final int selector = 8; - if (in[currentPos] >= 1 << bitLength[selector]) - throw new RuntimeException("Too big a number"); - out[tmpoutpos++] = in[currentPos++] | (selector << 28); - } - inpos.set(currentPos); - outpos.set(tmpoutpos); - } + if (compressedNum != codeNum[selector]) + res <<= (codeNum[selector] - compressedNum) * b; + res |= selector << 28; + out[tmpoutpos++] = res; + currentPos += compressedNum; + continue outer; + } + final int selector = 8; + if (in[currentPos] >= 1 << bitLength[selector]) + throw new RuntimeException("Too big a number"); + out[tmpoutpos++] = in[currentPos++] | (selector << 28); + } + inpos.set(currentPos); + outpos.set(tmpoutpos); + } - @Override - public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, - int outlength) { - int currentPos = outpos.get(); - int tmpinpos = inpos.get(); - final int finalout = currentPos + outlength; - while (currentPos < finalout - 28) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - out[currentPos++] = (val << 4) >>> 31; - out[currentPos++] = (val << 5) >>> 31; - out[currentPos++] = (val << 6) >>> 31; - out[currentPos++] = (val << 7) >>> 31; - out[currentPos++] = (val << 8) >>> 31; - out[currentPos++] = (val << 9) >>> 31; - out[currentPos++] = (val << 10) >>> 31; - out[currentPos++] = (val << 11) >>> 31; - out[currentPos++] = (val << 12) >>> 31; - out[currentPos++] = (val << 13) >>> 31; // 10 - out[currentPos++] = (val << 14) >>> 31; - out[currentPos++] = (val << 15) >>> 31; - out[currentPos++] = (val << 16) >>> 31; - out[currentPos++] = (val << 17) >>> 31; - out[currentPos++] = (val << 18) >>> 31; - out[currentPos++] = (val << 19) >>> 31; - out[currentPos++] = (val << 20) >>> 31; - out[currentPos++] = (val << 21) >>> 31; - out[currentPos++] = (val << 22) >>> 31; - out[currentPos++] = (val << 23) >>> 31; // 20 - out[currentPos++] = (val << 24) >>> 31; - out[currentPos++] = (val << 25) >>> 31; - out[currentPos++] = (val << 26) >>> 31; - out[currentPos++] = (val << 27) >>> 31; - out[currentPos++] = (val << 28) >>> 31; - out[currentPos++] = (val << 29) >>> 31; - out[currentPos++] = (val << 30) >>> 31; - out[currentPos++] = (val << 31) >>> 31; - break; - } - case 1: { // number : 14, bitwidth : 2 - out[currentPos++] = (val << 4) >>> 30; - out[currentPos++] = (val << 6) >>> 30; - out[currentPos++] = (val << 8) >>> 30; - out[currentPos++] = (val << 10) >>> 30; - out[currentPos++] = (val << 12) >>> 30; - out[currentPos++] = (val << 14) >>> 30; - out[currentPos++] = (val << 16) >>> 30; - out[currentPos++] = (val << 18) >>> 30; - out[currentPos++] = (val << 20) >>> 30; - out[currentPos++] = (val << 22) >>> 30; // 10 - out[currentPos++] = (val << 24) >>> 30; - out[currentPos++] = (val << 26) >>> 30; - out[currentPos++] = (val << 28) >>> 30; - out[currentPos++] = (val << 30) >>> 30; - break; - } - case 2: { // number : 9, bitwidth : 3 - out[currentPos++] = (val << 5) >>> 29; - out[currentPos++] = (val << 8) >>> 29; - out[currentPos++] = (val << 11) >>> 29; - out[currentPos++] = (val << 14) >>> 29; - out[currentPos++] = (val << 17) >>> 29; - out[currentPos++] = (val << 20) >>> 29; - out[currentPos++] = (val << 23) >>> 29; - out[currentPos++] = (val << 26) >>> 29; - out[currentPos++] = (val << 29) >>> 29; - break; - } - case 3: { // number : 7, bitwidth : 4 - out[currentPos++] = (val << 4) >>> 28; - out[currentPos++] = (val << 8) >>> 28; - out[currentPos++] = (val << 12) >>> 28; - out[currentPos++] = (val << 16) >>> 28; - out[currentPos++] = (val << 20) >>> 28; - out[currentPos++] = (val << 24) >>> 28; - out[currentPos++] = (val << 28) >>> 28; - break; - } - case 4: { // number : 5, bitwidth : 5 - out[currentPos++] = (val << 7) >>> 27; - out[currentPos++] = (val << 12) >>> 27; - out[currentPos++] = (val << 17) >>> 27; - out[currentPos++] = (val << 22) >>> 27; - out[currentPos++] = (val << 27) >>> 27; - break; - } - case 5: { // number : 4, bitwidth : 7 - out[currentPos++] = (val << 4) >>> 25; - out[currentPos++] = (val << 11) >>> 25; - out[currentPos++] = (val << 18) >>> 25; - out[currentPos++] = (val << 25) >>> 25; - break; - } - case 6: { // number : 3, bitwidth : 9 - out[currentPos++] = (val << 5) >>> 23; - out[currentPos++] = (val << 14) >>> 23; - out[currentPos++] = (val << 23) >>> 23; - break; - } - case 7: { // number : 2, bitwidth : 14 - out[currentPos++] = (val << 4) >>> 18; - out[currentPos++] = (val << 18) >>> 18; - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen: limited to 28-bit integers"); - } - } - } - while (currentPos < finalout) { - int val = in[tmpinpos++]; - int header = val >>> 28; - switch (header) { - case 0: { // number : 28, bitwidth : 1 - final int howmany = finalout - currentPos; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (k + 4)) >>> 31; - } - break; - } - case 1: { // number : 14, bitwidth : 2 - final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (2 * k + 4)) >>> 30; - } - break; - } - case 2: { // number : 9, bitwidth : 3 - final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (3 * k + 5)) >>> 29; - } - break; - } - case 3: { // number : 7, bitwidth : 4 - final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (4 * k + 4)) >>> 28; - } - break; - } - case 4: { // number : 5, bitwidth : 5 - final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (5 * k + 7)) >>> 27; - } - break; - } - case 5: { // number : 4, bitwidth : 7 - final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (7 * k + 4)) >>> 25; - } - break; - } - case 6: { // number : 3, bitwidth : 9 - final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (9 * k + 5)) >>> 23; - } - break; - } - case 7: { // number : 2, bitwidth : 14 - final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; - for (int k = 0; k < howmany; ++k) { - out[currentPos++] = (val << (14 * k + 4)) >>> 18; - } - break; - } - case 8: { // number : 1, bitwidth : 28 - out[currentPos++] = (val << 4) >>> 4; - break; - } - default: { - throw new RuntimeException("shouldn't happen"); - } - } - } - outpos.set(currentPos); - inpos.set(tmpinpos); + @Override + public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, + int outlength) { + int currentPos = outpos.get(); + int tmpinpos = inpos.get(); + final int finalout = currentPos + outlength; + while (currentPos < finalout - 28) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + out[currentPos++] = (val << 4) >>> 31; + out[currentPos++] = (val << 5) >>> 31; + out[currentPos++] = (val << 6) >>> 31; + out[currentPos++] = (val << 7) >>> 31; + out[currentPos++] = (val << 8) >>> 31; + out[currentPos++] = (val << 9) >>> 31; + out[currentPos++] = (val << 10) >>> 31; + out[currentPos++] = (val << 11) >>> 31; + out[currentPos++] = (val << 12) >>> 31; + out[currentPos++] = (val << 13) >>> 31; // 10 + out[currentPos++] = (val << 14) >>> 31; + out[currentPos++] = (val << 15) >>> 31; + out[currentPos++] = (val << 16) >>> 31; + out[currentPos++] = (val << 17) >>> 31; + out[currentPos++] = (val << 18) >>> 31; + out[currentPos++] = (val << 19) >>> 31; + out[currentPos++] = (val << 20) >>> 31; + out[currentPos++] = (val << 21) >>> 31; + out[currentPos++] = (val << 22) >>> 31; + out[currentPos++] = (val << 23) >>> 31; // 20 + out[currentPos++] = (val << 24) >>> 31; + out[currentPos++] = (val << 25) >>> 31; + out[currentPos++] = (val << 26) >>> 31; + out[currentPos++] = (val << 27) >>> 31; + out[currentPos++] = (val << 28) >>> 31; + out[currentPos++] = (val << 29) >>> 31; + out[currentPos++] = (val << 30) >>> 31; + out[currentPos++] = (val << 31) >>> 31; + break; + } + case 1: { // number : 14, bitwidth : 2 + out[currentPos++] = (val << 4) >>> 30; + out[currentPos++] = (val << 6) >>> 30; + out[currentPos++] = (val << 8) >>> 30; + out[currentPos++] = (val << 10) >>> 30; + out[currentPos++] = (val << 12) >>> 30; + out[currentPos++] = (val << 14) >>> 30; + out[currentPos++] = (val << 16) >>> 30; + out[currentPos++] = (val << 18) >>> 30; + out[currentPos++] = (val << 20) >>> 30; + out[currentPos++] = (val << 22) >>> 30; // 10 + out[currentPos++] = (val << 24) >>> 30; + out[currentPos++] = (val << 26) >>> 30; + out[currentPos++] = (val << 28) >>> 30; + out[currentPos++] = (val << 30) >>> 30; + break; + } + case 2: { // number : 9, bitwidth : 3 + out[currentPos++] = (val << 5) >>> 29; + out[currentPos++] = (val << 8) >>> 29; + out[currentPos++] = (val << 11) >>> 29; + out[currentPos++] = (val << 14) >>> 29; + out[currentPos++] = (val << 17) >>> 29; + out[currentPos++] = (val << 20) >>> 29; + out[currentPos++] = (val << 23) >>> 29; + out[currentPos++] = (val << 26) >>> 29; + out[currentPos++] = (val << 29) >>> 29; + break; + } + case 3: { // number : 7, bitwidth : 4 + out[currentPos++] = (val << 4) >>> 28; + out[currentPos++] = (val << 8) >>> 28; + out[currentPos++] = (val << 12) >>> 28; + out[currentPos++] = (val << 16) >>> 28; + out[currentPos++] = (val << 20) >>> 28; + out[currentPos++] = (val << 24) >>> 28; + out[currentPos++] = (val << 28) >>> 28; + break; + } + case 4: { // number : 5, bitwidth : 5 + out[currentPos++] = (val << 7) >>> 27; + out[currentPos++] = (val << 12) >>> 27; + out[currentPos++] = (val << 17) >>> 27; + out[currentPos++] = (val << 22) >>> 27; + out[currentPos++] = (val << 27) >>> 27; + break; + } + case 5: { // number : 4, bitwidth : 7 + out[currentPos++] = (val << 4) >>> 25; + out[currentPos++] = (val << 11) >>> 25; + out[currentPos++] = (val << 18) >>> 25; + out[currentPos++] = (val << 25) >>> 25; + break; + } + case 6: { // number : 3, bitwidth : 9 + out[currentPos++] = (val << 5) >>> 23; + out[currentPos++] = (val << 14) >>> 23; + out[currentPos++] = (val << 23) >>> 23; + break; + } + case 7: { // number : 2, bitwidth : 14 + out[currentPos++] = (val << 4) >>> 18; + out[currentPos++] = (val << 18) >>> 18; + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen: limited to 28-bit integers"); + } + } + } + while (currentPos < finalout) { + int val = in[tmpinpos++]; + int header = val >>> 28; + switch (header) { + case 0: { // number : 28, bitwidth : 1 + final int howmany = finalout - currentPos; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (k + 4)) >>> 31; + } + break; + } + case 1: { // number : 14, bitwidth : 2 + final int howmany = finalout - currentPos < 14 ? finalout - currentPos : 14; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (2 * k + 4)) >>> 30; + } + break; + } + case 2: { // number : 9, bitwidth : 3 + final int howmany = finalout - currentPos < 9 ? finalout - currentPos : 9; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (3 * k + 5)) >>> 29; + } + break; + } + case 3: { // number : 7, bitwidth : 4 + final int howmany = finalout - currentPos < 7 ? finalout - currentPos : 7; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (4 * k + 4)) >>> 28; + } + break; + } + case 4: { // number : 5, bitwidth : 5 + final int howmany = finalout - currentPos < 5 ? finalout - currentPos : 5; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (5 * k + 7)) >>> 27; + } + break; + } + case 5: { // number : 4, bitwidth : 7 + final int howmany = finalout - currentPos < 4 ? finalout - currentPos : 4; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (7 * k + 4)) >>> 25; + } + break; + } + case 6: { // number : 3, bitwidth : 9 + final int howmany = finalout - currentPos < 3 ? finalout - currentPos : 3; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (9 * k + 5)) >>> 23; + } + break; + } + case 7: { // number : 2, bitwidth : 14 + final int howmany = finalout - currentPos < 2 ? finalout - currentPos : 2; + for (int k = 0; k < howmany; ++k) { + out[currentPos++] = (val << (14 * k + 4)) >>> 18; + } + break; + } + case 8: { // number : 1, bitwidth : 28 + out[currentPos++] = (val << 4) >>> 4; + break; + } + default: { + throw new RuntimeException("shouldn't happen"); + } + } + } + outpos.set(currentPos); + inpos.set(tmpinpos); - } + } - @Override - public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - if (inlength == 0) - return; - out[outpos.get()] = inlength; - outpos.increment(); - headlessCompress(in, inpos, inlength, out, outpos); - } + @Override + public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + out[outpos.get()] = inlength; + outpos.increment(); + headlessCompress(in, inpos, inlength, out, outpos); + } - @Override - public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { - if (inlength == 0) - return; - final int outlength = in[inpos.get()]; - inpos.increment(); - headlessUncompress(in, inpos, inlength, out, outpos, outlength); + @Override + public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { + if (inlength == 0) + return; + final int outlength = in[inpos.get()]; + inpos.increment(); + headlessUncompress(in, inpos, inlength, out, outpos, outlength); - } + } - private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; + private final static int bitLength[] = { 1, 2, 3, 4, 5, 7, 9, 14, 28 }; - private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; + private final static int codeNum[] = { 28, 14, 9, 7, 5, 4, 3, 2, 1 }; - @Override - public String toString() { - return this.getClass().getSimpleName(); - } + @Override + public String toString() { + return this.getClass().getSimpleName(); + } } diff --git a/src/main/java/me/lemire/integercompression/SkippableComposition.java b/src/main/java/me/lemire/integercompression/SkippableComposition.java index a235c47..5faf7c2 100644 --- a/src/main/java/me/lemire/integercompression/SkippableComposition.java +++ b/src/main/java/me/lemire/integercompression/SkippableComposition.java @@ -54,7 +54,7 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o int init = inpos.get(); F1.headlessUncompress(in, inpos, inlength, out, outpos, num); if (inpos.get() == init) { - inpos.increment(); + inpos.increment(); } inlength -= inpos.get() - init; num -= outpos.get(); diff --git a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java b/src/main/java/me/lemire/integercompression/UncompressibleInputException.java index c490946..c0ed41f 100644 --- a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java +++ b/src/main/java/me/lemire/integercompression/UncompressibleInputException.java @@ -6,14 +6,14 @@ */ public class UncompressibleInputException extends RuntimeException { - /** - * Create new exception - * @param string explanation for the exception - */ - public UncompressibleInputException(String string) { - super(string); - } + /** + * Create new exception + * @param string explanation for the exception + */ + public UncompressibleInputException(String string) { + super(string); + } - private static final long serialVersionUID = -798583799846489873L; + private static final long serialVersionUID = -798583799846489873L; } diff --git a/src/main/java/me/lemire/integercompression/Util.java b/src/main/java/me/lemire/integercompression/Util.java index 346e3b2..63fc918 100644 --- a/src/main/java/me/lemire/integercompression/Util.java +++ b/src/main/java/me/lemire/integercompression/Util.java @@ -15,13 +15,13 @@ public final class Util { - - // check whether x is small than y as unsigned ints (supported by Java 8 natively); - protected static final boolean smallerorequalthan(int x, int y) { - return (x + Integer.MIN_VALUE) <= (y + Integer.MIN_VALUE); - } - - /** + + // check whether x is small than y as unsigned ints (supported by Java 8 natively); + protected static final boolean smallerorequalthan(int x, int y) { + return (x + Integer.MIN_VALUE) <= (y + Integer.MIN_VALUE); + } + + /** * Compute the maximum of the integer logarithms (ceil(log(x+1)) of a range * of value * diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java index c5fee69..ef4a386 100644 --- a/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java +++ b/src/main/java/me/lemire/integercompression/benchmarktools/Benchmark.java @@ -308,10 +308,10 @@ private static void testByteCodec(PrintWriter csvLog, int sparsity, public static void main(String args[]) throws FileNotFoundException { System.out .println("# benchmark based on the ClusterData model from:"); - System.out.println("# Vo Ngoc Anh and Alistair Moffat. "); - System.out.println("# Index compression using 64-bit words."); + System.out.println("# Vo Ngoc Anh and Alistair Moffat. "); + System.out.println("# Index compression using 64-bit words."); System.out - .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. "); + .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. "); System.out.println(); PrintWriter writer = null; diff --git a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java index 363b841..b930568 100644 --- a/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java +++ b/src/main/java/me/lemire/integercompression/benchmarktools/BenchmarkSkippable.java @@ -241,10 +241,10 @@ private static void testCodec(PrintWriter csvLog, int sparsity, Object c, */ public static void main(String args[]) throws FileNotFoundException { System.out.println("# benchmark based on the ClusterData model from:"); - System.out.println("# Vo Ngoc Anh and Alistair Moffat. "); - System.out.println("# Index compression using 64-bit words."); + System.out.println("# Vo Ngoc Anh and Alistair Moffat. "); + System.out.println("# Index compression using 64-bit words."); System.out - .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. "); + .println("# Softw. Pract. Exper.40, 2 (February 2010), 131-147. "); System.out.println(); PrintWriter writer = null; diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java index 5808bdd..72159ba 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java @@ -43,12 +43,12 @@ public int[] compress(int[] input) { compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); IntWrapper initvalue = new IntWrapper(0); - try { - codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue); - } catch (IndexOutOfBoundsException ioebe) { - throw new UncompressibleInputException( - "Your input is too poorly compressible with the current codec : " + codec); - } + try { + codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue); + } catch (IndexOutOfBoundsException ioebe) { + throw new UncompressibleInputException( + "Your input is too poorly compressible with the current codec : " + codec); + } compressed = Arrays.copyOf(compressed,outpos.intValue()); return compressed; } diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java index 09c4dd8..abcc027 100644 --- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java +++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java @@ -68,7 +68,7 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int init = inpos.get(); F1.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue); if (inpos.get() == init) { - inpos.increment(); + inpos.increment(); } inlength -= inpos.get() - init; diff --git a/src/main/java/me/lemire/longcompression/ByteLongCODEC.java b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java index e405370..dbc6864 100644 --- a/src/main/java/me/lemire/longcompression/ByteLongCODEC.java +++ b/src/main/java/me/lemire/longcompression/ByteLongCODEC.java @@ -57,6 +57,6 @@ public void compress(long[] in, IntWrapper inpos, int inlength, * where to write the compressed output in out */ public void uncompress(byte[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos); + long[] out, IntWrapper outpos); } diff --git a/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java index 3b2bc76..35c1166 100644 --- a/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java +++ b/src/main/java/me/lemire/longcompression/LongAs2IntsCodec.java @@ -16,174 +16,174 @@ * */ public class LongAs2IntsCodec implements LongCODEC { - final IntegerCODEC highPartsCodec; - final IntegerCODEC lowPartsCodec; - - public LongAs2IntsCodec(IntegerCODEC highPartsCodec, IntegerCODEC lowPartsCodec) { - this.highPartsCodec = highPartsCodec; - this.lowPartsCodec = lowPartsCodec; - } - - /** - * By default, we expect longs to be slightly above Integer.MAX_VALUE. Hence highParts to be small and positive - * integers. For lowParts, we rely on {@link IntCompressor} default IntegerCODEC - */ - public LongAs2IntsCodec() { - this(new VariableByte(), new Composition(new BinaryPacking(), new VariableByte())); - } - - @Override - public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { - if (inlength == 0) { - return; - } - - int[] highParts = new int[inlength]; - int[] lowParts = new int[inlength]; - - for (int i = 0; i < inlength; i++) { - int inPosition = inpos.get() + i; - - highParts[i] = RoaringIntPacking.high(in[inPosition]); - lowParts[i] = RoaringIntPacking.low(in[inPosition]); - } - - // TODO What would be a relevant buffer size? - int[] buffer = new int[inlength * 16]; - - int outPosition = outpos.get(); - - boolean hasLeftover; - { - // The first integer is reserved to hold the number of compressed ints - IntWrapper highPartsOutPosition = new IntWrapper(1); - - highPartsCodec.compress(highParts, new IntWrapper(), inlength, buffer, highPartsOutPosition); - - // Record the compressedHighparts length - buffer[0] = highPartsOutPosition.get() - 1; - - for (int i = 0; i < highPartsOutPosition.get() / 2; i++) { - long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); - out[outPosition++] = pack; - } - - if (1 == highPartsOutPosition.get() % 2) { - // Shift the trailing integer as first in the buffer - hasLeftover = true; - buffer[0] = buffer[highPartsOutPosition.get() - 1]; - } else { - hasLeftover = false; - } - } - - { - // The first integer is reserved to hold the number of compressed ints - IntWrapper lowPartsOutPosition = new IntWrapper(1); - if (hasLeftover) { - // Keep the trailing int from highParts before the reserved int from lowParts compressed length - lowPartsOutPosition.set(2); - } - - lowPartsCodec.compress(lowParts, new IntWrapper(0), inlength, buffer, lowPartsOutPosition); - - // Record the compressedHighparts length - buffer[hasLeftover ? 1 : 0] = lowPartsOutPosition.get() - (hasLeftover ? 2 : 1); - - for (int i = 0; i < lowPartsOutPosition.get() / 2; i++) { - long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); - out[outPosition++] = pack; - } - - if (1 == lowPartsOutPosition.get() % 2) { - // The trailing integer is packed with a 0 - long pack = RoaringIntPacking.pack(buffer[lowPartsOutPosition.get() - 1], 0); - out[outPosition++] = pack; - } - } - - inpos.add(inlength); - outpos.set(outPosition); - } - - /** - * inlength is ignored by this codec. We may rely on it instead of storing the compressedLowPart length - */ - @Override - public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { - if (inlength == 0) { - return; - } - - int longIndex = inpos.get(); - - int nbCompressedHighParts = RoaringIntPacking.high(in[longIndex]); - int[] compressedHighParts = new int[nbCompressedHighParts]; - - // !highPart as we just read the highPart for nbCompressedHighParts - boolean highPart = false; - for (int i = 0; i < nbCompressedHighParts; i++) { - int nextInt; - if (highPart) { - nextInt = RoaringIntPacking.high(in[longIndex + (i + 1) / 2]); - } else { - nextInt = RoaringIntPacking.low(in[longIndex + (i + 1) / 2]); - } - compressedHighParts[i] = nextInt; - - highPart = !highPart; - } - - // TODO What would be a relevant buffer size? - int[] buffer = new int[inlength * 16]; - - IntWrapper highPartsOutPosition = new IntWrapper(); - highPartsCodec.uncompress(compressedHighParts, - new IntWrapper(), - compressedHighParts.length, - buffer, - highPartsOutPosition); - int[] highParts = Arrays.copyOf(buffer, highPartsOutPosition.get()); - - // +1 as we initially read nbCompressedHighParts - int intIndexNbCompressedLowParts = longIndex * 2 + 1 + nbCompressedHighParts; - int nbCompressedLowParts; - if (highPart) { - nbCompressedLowParts = RoaringIntPacking.high(in[intIndexNbCompressedLowParts / 2]); - } else { - nbCompressedLowParts = RoaringIntPacking.low(in[intIndexNbCompressedLowParts / 2]); - } - highPart = !highPart; - - int[] compressedLowParts = new int[nbCompressedLowParts]; - for (int i = 0; i < nbCompressedLowParts; i++) { - int nextInt; - if (highPart) { - nextInt = RoaringIntPacking.high(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); - } else { - nextInt = RoaringIntPacking.low(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); - } - compressedLowParts[i] = nextInt; - - highPart = !highPart; - } - - IntWrapper lowPartsOutPosition = new IntWrapper(); - lowPartsCodec.uncompress(compressedLowParts, - new IntWrapper(), - compressedLowParts.length, - buffer, - lowPartsOutPosition); - int[] lowParts = Arrays.copyOf(buffer, lowPartsOutPosition.get()); - assert highParts.length == lowParts.length; - - int outposition = outpos.get(); - for (int i = 0; i < highParts.length; i++) { - out[outposition++] = RoaringIntPacking.pack(highParts[i], lowParts[i]); - } - - inpos.add(inlength); - outpos.set(outposition); - } + final IntegerCODEC highPartsCodec; + final IntegerCODEC lowPartsCodec; + + public LongAs2IntsCodec(IntegerCODEC highPartsCodec, IntegerCODEC lowPartsCodec) { + this.highPartsCodec = highPartsCodec; + this.lowPartsCodec = lowPartsCodec; + } + + /** + * By default, we expect longs to be slightly above Integer.MAX_VALUE. Hence highParts to be small and positive + * integers. For lowParts, we rely on {@link IntCompressor} default IntegerCODEC + */ + public LongAs2IntsCodec() { + this(new VariableByte(), new Composition(new BinaryPacking(), new VariableByte())); + } + + @Override + public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + + int[] highParts = new int[inlength]; + int[] lowParts = new int[inlength]; + + for (int i = 0; i < inlength; i++) { + int inPosition = inpos.get() + i; + + highParts[i] = RoaringIntPacking.high(in[inPosition]); + lowParts[i] = RoaringIntPacking.low(in[inPosition]); + } + + // TODO What would be a relevant buffer size? + int[] buffer = new int[inlength * 16]; + + int outPosition = outpos.get(); + + boolean hasLeftover; + { + // The first integer is reserved to hold the number of compressed ints + IntWrapper highPartsOutPosition = new IntWrapper(1); + + highPartsCodec.compress(highParts, new IntWrapper(), inlength, buffer, highPartsOutPosition); + + // Record the compressedHighparts length + buffer[0] = highPartsOutPosition.get() - 1; + + for (int i = 0; i < highPartsOutPosition.get() / 2; i++) { + long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); + out[outPosition++] = pack; + } + + if (1 == highPartsOutPosition.get() % 2) { + // Shift the trailing integer as first in the buffer + hasLeftover = true; + buffer[0] = buffer[highPartsOutPosition.get() - 1]; + } else { + hasLeftover = false; + } + } + + { + // The first integer is reserved to hold the number of compressed ints + IntWrapper lowPartsOutPosition = new IntWrapper(1); + if (hasLeftover) { + // Keep the trailing int from highParts before the reserved int from lowParts compressed length + lowPartsOutPosition.set(2); + } + + lowPartsCodec.compress(lowParts, new IntWrapper(0), inlength, buffer, lowPartsOutPosition); + + // Record the compressedHighparts length + buffer[hasLeftover ? 1 : 0] = lowPartsOutPosition.get() - (hasLeftover ? 2 : 1); + + for (int i = 0; i < lowPartsOutPosition.get() / 2; i++) { + long pack = RoaringIntPacking.pack(buffer[i * 2], buffer[i * 2 + 1]); + out[outPosition++] = pack; + } + + if (1 == lowPartsOutPosition.get() % 2) { + // The trailing integer is packed with a 0 + long pack = RoaringIntPacking.pack(buffer[lowPartsOutPosition.get() - 1], 0); + out[outPosition++] = pack; + } + } + + inpos.add(inlength); + outpos.set(outPosition); + } + + /** + * inlength is ignored by this codec. We may rely on it instead of storing the compressedLowPart length + */ + @Override + public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { + if (inlength == 0) { + return; + } + + int longIndex = inpos.get(); + + int nbCompressedHighParts = RoaringIntPacking.high(in[longIndex]); + int[] compressedHighParts = new int[nbCompressedHighParts]; + + // !highPart as we just read the highPart for nbCompressedHighParts + boolean highPart = false; + for (int i = 0; i < nbCompressedHighParts; i++) { + int nextInt; + if (highPart) { + nextInt = RoaringIntPacking.high(in[longIndex + (i + 1) / 2]); + } else { + nextInt = RoaringIntPacking.low(in[longIndex + (i + 1) / 2]); + } + compressedHighParts[i] = nextInt; + + highPart = !highPart; + } + + // TODO What would be a relevant buffer size? + int[] buffer = new int[inlength * 16]; + + IntWrapper highPartsOutPosition = new IntWrapper(); + highPartsCodec.uncompress(compressedHighParts, + new IntWrapper(), + compressedHighParts.length, + buffer, + highPartsOutPosition); + int[] highParts = Arrays.copyOf(buffer, highPartsOutPosition.get()); + + // +1 as we initially read nbCompressedHighParts + int intIndexNbCompressedLowParts = longIndex * 2 + 1 + nbCompressedHighParts; + int nbCompressedLowParts; + if (highPart) { + nbCompressedLowParts = RoaringIntPacking.high(in[intIndexNbCompressedLowParts / 2]); + } else { + nbCompressedLowParts = RoaringIntPacking.low(in[intIndexNbCompressedLowParts / 2]); + } + highPart = !highPart; + + int[] compressedLowParts = new int[nbCompressedLowParts]; + for (int i = 0; i < nbCompressedLowParts; i++) { + int nextInt; + if (highPart) { + nextInt = RoaringIntPacking.high(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); + } else { + nextInt = RoaringIntPacking.low(in[(intIndexNbCompressedLowParts + 1 + i) / 2]); + } + compressedLowParts[i] = nextInt; + + highPart = !highPart; + } + + IntWrapper lowPartsOutPosition = new IntWrapper(); + lowPartsCodec.uncompress(compressedLowParts, + new IntWrapper(), + compressedLowParts.length, + buffer, + lowPartsOutPosition); + int[] lowParts = Arrays.copyOf(buffer, lowPartsOutPosition.get()); + assert highParts.length == lowParts.length; + + int outposition = outpos.get(); + for (int i = 0; i < highParts.length; i++) { + out[outposition++] = RoaringIntPacking.pack(highParts[i], lowParts[i]); + } + + inpos.add(inlength); + outpos.set(outposition); + } } diff --git a/src/main/java/me/lemire/longcompression/LongCODEC.java b/src/main/java/me/lemire/longcompression/LongCODEC.java index c0f67b2..0b77a43 100644 --- a/src/main/java/me/lemire/longcompression/LongCODEC.java +++ b/src/main/java/me/lemire/longcompression/LongCODEC.java @@ -36,7 +36,7 @@ public interface LongCODEC { * where to write in the output array */ public void compress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos); + long[] out, IntWrapper outpos); /** * Uncompress data from an array to another array. @@ -57,6 +57,6 @@ public void compress(long[] in, IntWrapper inpos, int inlength, * where to write the compressed output in out */ public void uncompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos); + long[] out, IntWrapper outpos); } diff --git a/src/main/java/me/lemire/longcompression/LongComposition.java b/src/main/java/me/lemire/longcompression/LongComposition.java index 1394a78..5111a51 100644 --- a/src/main/java/me/lemire/longcompression/LongComposition.java +++ b/src/main/java/me/lemire/longcompression/LongComposition.java @@ -37,7 +37,7 @@ public LongComposition(LongCODEC f1, LongCODEC f2) { @Override public void compress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { if (inlength == 0) { return; } @@ -54,7 +54,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength, @Override public void uncompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { if (inlength == 0) return; final int init = inpos.get(); diff --git a/src/main/java/me/lemire/longcompression/LongJustCopy.java b/src/main/java/me/lemire/longcompression/LongJustCopy.java index 7a5a67a..9b25f71 100644 --- a/src/main/java/me/lemire/longcompression/LongJustCopy.java +++ b/src/main/java/me/lemire/longcompression/LongJustCopy.java @@ -17,7 +17,7 @@ public final class LongJustCopy implements LongCODEC, SkippableLongCODEC { @Override public void headlessCompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { System.arraycopy(in, inpos.get(), out, outpos.get(), inlength); inpos.add(inlength); outpos.add(inlength); @@ -25,7 +25,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, @Override public void uncompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { headlessUncompress(in,inpos,inlength,out,outpos,inlength); } @@ -36,7 +36,7 @@ public String toString() { @Override public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos, int num) { + long[] out, IntWrapper outpos, int num) { System.arraycopy(in, inpos.get(), out, outpos.get(), num); inpos.add(num); outpos.add(num); @@ -45,7 +45,7 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, @Override public void compress(long[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { headlessCompress(in,inpos,inlength,out,outpos); } diff --git a/src/main/java/me/lemire/longcompression/LongUtil.java b/src/main/java/me/lemire/longcompression/LongUtil.java index c06433f..abb8ab4 100644 --- a/src/main/java/me/lemire/longcompression/LongUtil.java +++ b/src/main/java/me/lemire/longcompression/LongUtil.java @@ -16,7 +16,7 @@ @Deprecated public class LongUtil { - protected static String longToBinaryWithLeading(long l) { - return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); - } + protected static String longToBinaryWithLeading(long l) { + return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); + } } diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index f3d10ee..6ac129c 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -234,7 +234,7 @@ public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, @Override public void uncompress(byte[] in, IntWrapper inpos, int inlength, - long[] out, IntWrapper outpos) { + long[] out, IntWrapper outpos) { int p = inpos.get(); int finalp = inpos.get() + inlength; int tmpoutpos = outpos.get(); diff --git a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java index 5568489..f2e9a55 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java @@ -55,7 +55,7 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] int init = inpos.get(); F1.headlessUncompress(in, inpos, inlength, out, outpos, num); if (inpos.get() == init) { - inpos.increment(); + inpos.increment(); } inlength -= inpos.get() - init; num -= outpos.get(); diff --git a/src/main/java/me/lemire/longcompression/differential/LongDelta.java b/src/main/java/me/lemire/longcompression/differential/LongDelta.java index 2b0e077..184e53c 100644 --- a/src/main/java/me/lemire/longcompression/differential/LongDelta.java +++ b/src/main/java/me/lemire/longcompression/differential/LongDelta.java @@ -66,7 +66,7 @@ public static long delta(long[] data, int start, int length, int init) { * @return next initial vale */ public static long delta(long[] data, int start, int length, int init, - long[] out) { + long[] out) { for (int i = length - 1; i > 0; --i) { out[i] = data[start + i] - data[start + i - 1]; } @@ -98,7 +98,7 @@ public static void fastinverseDelta(long[] data) { int sz0 = data.length / 4 * 4; int i = 1; if (sz0 >= 4) { - long a = data[0]; + long a = data[0]; for (; i < sz0 - 4; i += 4) { a = data[i] += a; a = data[i + 1] += a; @@ -132,7 +132,7 @@ public static long fastinverseDelta(long[] data, int start, int length, int sz0 = length / 4 * 4; int i = 1; if (sz0 >= 4) { - long a = data[start]; + long a = data[start]; for (; i < sz0 - 4; i += 4) { a = data[start + i] += a; a = data[start + i + 1] += a; diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java index 8fd4049..aa6718b 100644 --- a/src/test/java/me/lemire/integercompression/AdhocTest.java +++ b/src/test/java/me/lemire/integercompression/AdhocTest.java @@ -22,13 +22,48 @@ @SuppressWarnings({ "static-method" }) public class AdhocTest { - - /** - * - */ + @Test + public void testIssue59() { + FastPFOR128 fastpfor = new FastPFOR128(); + + int N = 9984; + int[] data = new int[N]; + for (var i = 0; i < N; i += 150) { + data[i] = i; + } + + int[] compressedoutput1 = new int[N + 1024]; + + IntWrapper inputoffset1 = new IntWrapper(0); + IntWrapper outputoffset1 = new IntWrapper(0); + + fastpfor.compress(data, inputoffset1, N, compressedoutput1, outputoffset1); + int compressedsize1 = outputoffset1.get(); + + int[] recovered1 = new int[N]; + inputoffset1 = new IntWrapper(0); + outputoffset1 = new IntWrapper(0); + fastpfor.uncompress(compressedoutput1, outputoffset1, compressedsize1, recovered1, inputoffset1); + Assert.assertArrayEquals(data, recovered1); + + int[] compressedoutput2 = new int[N + 1024]; + + IntWrapper inputoffset2 = new IntWrapper(0); + IntWrapper outputoffset2 = new IntWrapper(0); + + fastpfor.compress(data, inputoffset2, N, compressedoutput2, outputoffset2); + int compressedsize2 = outputoffset2.get(); + + int[] recovered2 = new int[N]; + inputoffset2 = new IntWrapper(0); + outputoffset2 = new IntWrapper(0); + fastpfor.uncompress(compressedoutput2, outputoffset2, compressedsize2, recovered2, inputoffset2); + Assert.assertArrayEquals(data, recovered2); + } + @Test public void testIssue29() { - for(int x = 0; x < 64; x++) { + for(int x = 0; x < 64; x++) { int[] a = {2, 3, 4, 5}; int[] b = new int[90]; int[] c = new int[a.length]; @@ -42,7 +77,7 @@ public void testIssue29() { IntWrapper cOffset = new IntWrapper(0); codec.uncompress(b, bOffset, len, c, cOffset); Assert.assertArrayEquals(a,c); - } + } } /** @@ -50,20 +85,20 @@ public void testIssue29() { */ @Test public void testIssue29b() { - for(int x = 0; x < 64; x++) { - int[] a = {2, 3, 4, 5}; - int[] b = new int[90]; - int[] c = new int[a.length]; - SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); - IntWrapper aOffset = new IntWrapper(0); - IntWrapper bOffset = new IntWrapper(x); - codec.headlessCompress(a, aOffset, a.length, b, bOffset); - int len = bOffset.get() - x; - bOffset.set(x); - IntWrapper cOffset = new IntWrapper(0); - codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length); - Assert.assertArrayEquals(a,c); - } + for(int x = 0; x < 64; x++) { + int[] a = {2, 3, 4, 5}; + int[] b = new int[90]; + int[] c = new int[a.length]; + SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + codec.headlessCompress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length); + Assert.assertArrayEquals(a,c); + } } @@ -71,30 +106,27 @@ public void testIssue29b() { * */ @Test - public void testIssue41() { - for (int x = 0; x < 64; x++) { - int[] a = { 2, 3, 4, 5 }; - int[] b = new int[90]; - int[] c = new int[a.length]; - SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), - new IntegratedVariableByte()); - IntWrapper aOffset = new IntWrapper(0); - IntWrapper bOffset = new IntWrapper(x); - IntWrapper initValue = new IntWrapper(0); - - codec.headlessCompress(a, aOffset, a.length, b, bOffset, initValue); - int len = bOffset.get() - x; - bOffset.set(x); - IntWrapper cOffset = new IntWrapper(0); - initValue = new IntWrapper(0); - codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length, initValue); - Assert.assertArrayEquals(a, c); - } - } + public void testIssue41() { + for (int x = 0; x < 64; x++) { + int[] a = { 2, 3, 4, 5 }; + int[] b = new int[90]; + int[] c = new int[a.length]; + SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + IntWrapper initValue = new IntWrapper(0); + + codec.headlessCompress(a, aOffset, a.length, b, bOffset, initValue); + int len = bOffset.get() - x; + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + initValue = new IntWrapper(0); + codec.headlessUncompress(b, bOffset, len, c, cOffset, a.length, initValue); + Assert.assertArrayEquals(a, c); + } + } - /** - * a test - */ @Test public void biggerCompressedArray0() { // No problem: for comparison. @@ -102,12 +134,8 @@ public void biggerCompressedArray0() { assertSymmetry(c, 0, 16384); c = new Composition(new FastPFOR(), new VariableByte()); assertSymmetry(c, 0, 16384); - } - /** - * a test - */ @Test public void biggerCompressedArray1() { // Compressed array is bigger than original, because of VariableByte. @@ -115,9 +143,6 @@ public void biggerCompressedArray1() { assertSymmetry(c, -1); } - /** - * a test - */ @Test public void biggerCompressedArray2() { // Compressed array is bigger than original, because of Composition. diff --git a/src/test/java/me/lemire/integercompression/BasicTest.java b/src/test/java/me/lemire/integercompression/BasicTest.java index b5f292e..b29ae0d 100644 --- a/src/test/java/me/lemire/integercompression/BasicTest.java +++ b/src/test/java/me/lemire/integercompression/BasicTest.java @@ -48,35 +48,35 @@ public class BasicTest { new GroupSimple9(), new Composition(new XorBinaryPacking(), new VariableByte()), new Composition(new DeltaZigzagBinaryPacking(), - new DeltaZigzagVariableByte()) }; + new DeltaZigzagVariableByte()) }; - /** + /** * This tests with a compressed array with various offset */ - @Test - public void saulTest() { - for (IntegerCODEC C : codecs) { - for (int x = 0; x < 50; ++x) { - int[] a = { 2, 3, 4, 5 }; - int[] b = new int[90]; - int[] c = new int[a.length]; - - IntWrapper aOffset = new IntWrapper(0); - IntWrapper bOffset = new IntWrapper(x); - C.compress(a, aOffset, a.length, b, bOffset); - int len = bOffset.get() - x; - - bOffset.set(x); - IntWrapper cOffset = new IntWrapper(0); - C.uncompress(b, bOffset, len, c, cOffset); - if(!Arrays.equals(a, c)) { - System.out.println("Problem with "+C); - } - assertArrayEquals(a, c); - - } - } - } + @Test + public void saulTest() { + for (IntegerCODEC C : codecs) { + for (int x = 0; x < 50; ++x) { + int[] a = { 2, 3, 4, 5 }; + int[] b = new int[90]; + int[] c = new int[a.length]; + + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + C.compress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; + + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + C.uncompress(b, bOffset, len, c, cOffset); + if(!Arrays.equals(a, c)) { + System.out.println("Problem with "+C); + } + assertArrayEquals(a, c); + + } + } + } /** * */ diff --git a/src/test/java/me/lemire/integercompression/ByteBasicTest.java b/src/test/java/me/lemire/integercompression/ByteBasicTest.java index 93112c3..2b2d4f1 100644 --- a/src/test/java/me/lemire/integercompression/ByteBasicTest.java +++ b/src/test/java/me/lemire/integercompression/ByteBasicTest.java @@ -28,32 +28,32 @@ public class ByteBasicTest { new IntegratedVariableByte(), }; - /** + /** * */ - @Test - public void saulTest() { - for (ByteIntegerCODEC C : codecs) { - for (int x = 0; x < 50 * 4; ++x) { - int[] a = { 2, 3, 4, 5 }; - byte[] b = new byte[90*4]; - int[] c = new int[a.length]; + @Test + public void saulTest() { + for (ByteIntegerCODEC C : codecs) { + for (int x = 0; x < 50 * 4; ++x) { + int[] a = { 2, 3, 4, 5 }; + byte[] b = new byte[90*4]; + int[] c = new int[a.length]; - IntWrapper aOffset = new IntWrapper(0); - IntWrapper bOffset = new IntWrapper(x); - C.compress(a, aOffset, a.length, b, bOffset); - int len = bOffset.get() - x; + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + C.compress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; - bOffset.set(x); - IntWrapper cOffset = new IntWrapper(0); - C.uncompress(b, bOffset, len, c, cOffset); - if(!Arrays.equals(a, c)) { - System.out.println("Problem with "+C); - } - assertArrayEquals(a, c); - } - } - } + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + C.uncompress(b, bOffset, len, c, cOffset); + if(!Arrays.equals(a, c)) { + System.out.println("Problem with "+C); + } + assertArrayEquals(a, c); + } + } + } /** * */ diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java index f6038b8..ce10d18 100644 --- a/src/test/java/me/lemire/integercompression/ExampleTest.java +++ b/src/test/java/me/lemire/integercompression/ExampleTest.java @@ -17,305 +17,305 @@ * */ public class ExampleTest { - /** - * - */ - @Test - - public void superSimpleExample() { - IntegratedIntCompressor iic = new IntegratedIntCompressor(); - int[] data = new int[2342351]; - for (int k = 0; k < data.length; ++k) - data[k] = k; - System.out.println("Compressing " + data.length + " integers using friendly interface"); - int[] compressed = iic.compress(data); - int[] recov = iic.uncompress(compressed); - System.out - .println("compressed from " + data.length * 4 / 1024 + "KB to " + compressed.length * 4 / 1024 + "KB"); - if (!Arrays.equals(recov, data)) - throw new RuntimeException("bug"); - } - - /** - * - */ - @Test - - public void basicExample() { - int[] data = new int[2342351]; - System.out.println("Compressing " + data.length + " integers in one go"); - // data should be sorted for best - // results - for (int k = 0; k < data.length; ++k) - data[k] = k; - // Very important: the data is in sorted order!!! If not, you - // will get very poor compression with IntegratedBinaryPacking, - // you should use another CODEC. - - // next we compose a CODEC. Most of the processing - // will be done with binary packing, and leftovers will - // be processed using variable byte - IntegratedIntegerCODEC codec = new IntegratedComposition(new IntegratedBinaryPacking(), - new IntegratedVariableByte()); - // output vector should be large enough... - int[] compressed = new int[data.length + 1024]; - // compressed might not be large enough in some cases - // if you get java.lang.ArrayIndexOutOfBoundsException, try - // allocating more memory - - /** - * - * compressing - * - */ - IntWrapper inputoffset = new IntWrapper(0); - IntWrapper outputoffset = new IntWrapper(0); - codec.compress(data, inputoffset, data.length, compressed, outputoffset); - // got it! - // inputoffset should be at data.length but outputoffset tells - // us where we are... - System.out.println( - "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); - // we can repack the data: (optional) - compressed = Arrays.copyOf(compressed, outputoffset.intValue()); - - /** - * - * now uncompressing - * - * This assumes that we otherwise know how many integers have been - * compressed. See basicExampleHeadless for a more general case. - */ - int[] recovered = new int[data.length]; - IntWrapper recoffset = new IntWrapper(0); - codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset); - if (Arrays.equals(data, recovered)) - System.out.println("data is recovered without loss"); - else - throw new RuntimeException("bug"); // could use assert - System.out.println(); - } - - /** - * Like the basicExample, but we store the input array size manually. - */ - @Test - public void basicExampleHeadless() { - int[] data = new int[2342351]; - System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); - // data should be sorted for best - // results - for (int k = 0; k < data.length; ++k) - data[k] = k; - // Very important: the data is in sorted order!!! If not, you - // will get very poor compression with IntegratedBinaryPacking, - // you should use another CODEC. - - // next we compose a CODEC. Most of the processing - // will be done with binary packing, and leftovers will - // be processed using variable byte - SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), - new IntegratedVariableByte()); - // output vector should be large enough... - int[] compressed = new int[data.length + 1024]; - // compressed might not be large enough in some cases - // if you get java.lang.ArrayIndexOutOfBoundsException, try - // allocating more memory - - /** - * - * compressing - * - */ - IntWrapper inputoffset = new IntWrapper(0); - IntWrapper outputoffset = new IntWrapper(1); - compressed[0] = data.length; // we manually store how many integers we - codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); - // got it! - // inputoffset should be at data.length but outputoffset tells - // us where we are... - System.out.println( - "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); - // we can repack the data: (optional) - compressed = Arrays.copyOf(compressed, outputoffset.intValue()); - - /** - * - * now uncompressing - * - */ - int howmany = compressed[0];// we manually stored the number of - // compressed integers - int[] recovered = new int[howmany]; - IntWrapper recoffset = new IntWrapper(0); - codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0)); - if (Arrays.equals(data, recovered)) - System.out.println("data is recovered without loss"); - else - throw new RuntimeException("bug"); // could use assert - System.out.println(); - } - - /** - * This is an example to show you can compress unsorted integers as long as - * most are small. - */ - @Test - public void unsortedExample() { - final int N = 1333333; - int[] data = new int[N]; - // initialize the data (most will be small - for (int k = 0; k < N; k += 1) - data[k] = 3; - // throw some larger values - for (int k = 0; k < N; k += 5) - data[k] = 100; - for (int k = 0; k < N; k += 533) - data[k] = 10000; - int[] compressed = new int[N + 1024];// could need more - IntegerCODEC codec = new Composition(new FastPFOR(), new VariableByte()); - // compressing - IntWrapper inputoffset = new IntWrapper(0); - IntWrapper outputoffset = new IntWrapper(0); - codec.compress(data, inputoffset, data.length, compressed, outputoffset); - System.out.println("compressed unsorted integers from " + data.length * 4 / 1024 + "KB to " - + outputoffset.intValue() * 4 / 1024 + "KB"); - // we can repack the data: (optional) - compressed = Arrays.copyOf(compressed, outputoffset.intValue()); - - int[] recovered = new int[N]; - IntWrapper recoffset = new IntWrapper(0); - codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset); - if (Arrays.equals(data, recovered)) - System.out.println("data is recovered without loss"); - else - throw new RuntimeException("bug"); // could use assert - System.out.println(); - - } - - /** - * This is like the basic example, but we show how to process larger arrays - * in chunks. - * - * Some of this code was written by Pavel Klinov. - */ - @Test - public void advancedExample() { - int TotalSize = 2342351; // some arbitrary number - int ChunkSize = 16384; // size of each chunk, choose a multiple of 128 - System.out.println("Compressing " + TotalSize + " integers using chunks of " + ChunkSize + " integers (" - + ChunkSize * 4 / 1024 + "KB)"); - System.out.println("(It is often better for applications to work in chunks fitting in CPU cache.)"); - int[] data = new int[TotalSize]; - // data should be sorted for best - // results - for (int k = 0; k < data.length; ++k) - data[k] = k; - // next we compose a CODEC. Most of the processing - // will be done with binary packing, and leftovers will - // be processed using variable byte, using variable byte - // only for the last chunk! - IntegratedIntegerCODEC regularcodec = new IntegratedBinaryPacking(); - IntegratedVariableByte ivb = new IntegratedVariableByte(); - IntegratedIntegerCODEC lastcodec = new IntegratedComposition(regularcodec, ivb); - // output vector should be large enough... - int[] compressed = new int[TotalSize + 1024]; - - /** - * - * compressing - * - */ - IntWrapper inputoffset = new IntWrapper(0); - IntWrapper outputoffset = new IntWrapper(0); - for (int k = 0; k < TotalSize / ChunkSize; ++k) - regularcodec.compress(data, inputoffset, ChunkSize, compressed, outputoffset); - lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset); - // got it! - // inputoffset should be at data.length but outputoffset tells - // us where we are... - System.out.println( - "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); - // we can repack the data: - compressed = Arrays.copyOf(compressed, outputoffset.intValue()); - - /** - * - * now uncompressing - * - * We are *not* assuming that the original array length is known, - * however we assume that the chunk size (ChunkSize) is known. - * - */ - int[] recovered = new int[ChunkSize]; - IntWrapper compoff = new IntWrapper(0); - IntWrapper recoffset; - int currentpos = 0; - - while (compoff.get() < compressed.length) { - recoffset = new IntWrapper(0); - regularcodec.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset); - - if (recoffset.get() < ChunkSize) {// last chunk detected - ivb.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset); - } - for (int i = 0; i < recoffset.get(); ++i) { - if (data[currentpos + i] != recovered[i]) - throw new RuntimeException("bug"); // could use assert - } - currentpos += recoffset.get(); - } - System.out.println("data is recovered without loss"); - System.out.println(); - - } - - /** - * Demo of the headless approach where we must supply the array length - */ - @Test - public void headlessDemo() { - System.out.println("Compressing arrays with minimal header..."); - int[] uncompressed1 = { 1, 2, 1, 3, 1 }; - int[] uncompressed2 = { 3, 2, 4, 6, 1 }; - - int[] compressed = new int[uncompressed1.length + uncompressed2.length + 1024]; - - SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); - - // compressing - IntWrapper outPos = new IntWrapper(); - - IntWrapper previous = new IntWrapper(); - - codec.headlessCompress(uncompressed1, new IntWrapper(), uncompressed1.length, compressed, outPos); - int length1 = outPos.get() - previous.get(); - previous = new IntWrapper(outPos.get()); - codec.headlessCompress(uncompressed2, new IntWrapper(), uncompressed2.length, compressed, outPos); - int length2 = outPos.get() - previous.get(); - - compressed = Arrays.copyOf(compressed, length1 + length2); - System.out - .println("compressed unsorted integers from " + uncompressed1.length * 4 + "B to " + length1 * 4 + "B"); - System.out - .println("compressed unsorted integers from " + uncompressed2.length * 4 + "B to " + length2 * 4 + "B"); - System.out.println("Total compressed output " + compressed.length); - - int[] recovered1 = new int[uncompressed1.length]; - int[] recovered2 = new int[uncompressed1.length]; - IntWrapper inPos = new IntWrapper(); - System.out.println("Decoding first array starting at pos = " + inPos); - codec.headlessUncompress(compressed, inPos, compressed.length, recovered1, new IntWrapper(0), - uncompressed1.length); - System.out.println("Decoding second array starting at pos = " + inPos); - codec.headlessUncompress(compressed, inPos, compressed.length, recovered2, new IntWrapper(0), - uncompressed2.length); - if (!Arrays.equals(uncompressed1, recovered1)) - throw new RuntimeException("First array does not match."); - if (!Arrays.equals(uncompressed2, recovered2)) - throw new RuntimeException("Second array does not match."); - System.out.println("The arrays match, your code is probably ok."); - - } + /** + * + */ + @Test + + public void superSimpleExample() { + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] data = new int[2342351]; + for (int k = 0; k < data.length; ++k) + data[k] = k; + System.out.println("Compressing " + data.length + " integers using friendly interface"); + int[] compressed = iic.compress(data); + int[] recov = iic.uncompress(compressed); + System.out + .println("compressed from " + data.length * 4 / 1024 + "KB to " + compressed.length * 4 / 1024 + "KB"); + if (!Arrays.equals(recov, data)) + throw new RuntimeException("bug"); + } + + /** + * + */ + @Test + + public void basicExample() { + int[] data = new int[2342351]; + System.out.println("Compressing " + data.length + " integers in one go"); + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // Very important: the data is in sorted order!!! If not, you + // will get very poor compression with IntegratedBinaryPacking, + // you should use another CODEC. + + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte + IntegratedIntegerCODEC codec = new IntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + // output vector should be large enough... + int[] compressed = new int[data.length + 1024]; + // compressed might not be large enough in some cases + // if you get java.lang.ArrayIndexOutOfBoundsException, try + // allocating more memory + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + * This assumes that we otherwise know how many integers have been + * compressed. See basicExampleHeadless for a more general case. + */ + int[] recovered = new int[data.length]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + } + + /** + * Like the basicExample, but we store the input array size manually. + */ + @Test + public void basicExampleHeadless() { + int[] data = new int[2342351]; + System.out.println("Compressing " + data.length + " integers in one go using the headless approach"); + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // Very important: the data is in sorted order!!! If not, you + // will get very poor compression with IntegratedBinaryPacking, + // you should use another CODEC. + + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte + SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), + new IntegratedVariableByte()); + // output vector should be large enough... + int[] compressed = new int[data.length + 1024]; + // compressed might not be large enough in some cases + // if you get java.lang.ArrayIndexOutOfBoundsException, try + // allocating more memory + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(1); + compressed[0] = data.length; // we manually store how many integers we + codec.headlessCompress(data, inputoffset, data.length, compressed, outputoffset, new IntWrapper(0)); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + */ + int howmany = compressed[0];// we manually stored the number of + // compressed integers + int[] recovered = new int[howmany]; + IntWrapper recoffset = new IntWrapper(0); + codec.headlessUncompress(compressed, new IntWrapper(1), compressed.length, recovered, recoffset, howmany, new IntWrapper(0)); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + } + + /** + * This is an example to show you can compress unsorted integers as long as + * most are small. + */ + @Test + public void unsortedExample() { + final int N = 1333333; + int[] data = new int[N]; + // initialize the data (most will be small + for (int k = 0; k < N; k += 1) + data[k] = 3; + // throw some larger values + for (int k = 0; k < N; k += 5) + data[k] = 100; + for (int k = 0; k < N; k += 533) + data[k] = 10000; + int[] compressed = new int[N + 1024];// could need more + IntegerCODEC codec = new Composition(new FastPFOR(), new VariableByte()); + // compressing + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + codec.compress(data, inputoffset, data.length, compressed, outputoffset); + System.out.println("compressed unsorted integers from " + data.length * 4 / 1024 + "KB to " + + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: (optional) + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + int[] recovered = new int[N]; + IntWrapper recoffset = new IntWrapper(0); + codec.uncompress(compressed, new IntWrapper(0), compressed.length, recovered, recoffset); + if (Arrays.equals(data, recovered)) + System.out.println("data is recovered without loss"); + else + throw new RuntimeException("bug"); // could use assert + System.out.println(); + + } + + /** + * This is like the basic example, but we show how to process larger arrays + * in chunks. + * + * Some of this code was written by Pavel Klinov. + */ + @Test + public void advancedExample() { + int TotalSize = 2342351; // some arbitrary number + int ChunkSize = 16384; // size of each chunk, choose a multiple of 128 + System.out.println("Compressing " + TotalSize + " integers using chunks of " + ChunkSize + " integers (" + + ChunkSize * 4 / 1024 + "KB)"); + System.out.println("(It is often better for applications to work in chunks fitting in CPU cache.)"); + int[] data = new int[TotalSize]; + // data should be sorted for best + // results + for (int k = 0; k < data.length; ++k) + data[k] = k; + // next we compose a CODEC. Most of the processing + // will be done with binary packing, and leftovers will + // be processed using variable byte, using variable byte + // only for the last chunk! + IntegratedIntegerCODEC regularcodec = new IntegratedBinaryPacking(); + IntegratedVariableByte ivb = new IntegratedVariableByte(); + IntegratedIntegerCODEC lastcodec = new IntegratedComposition(regularcodec, ivb); + // output vector should be large enough... + int[] compressed = new int[TotalSize + 1024]; + + /** + * + * compressing + * + */ + IntWrapper inputoffset = new IntWrapper(0); + IntWrapper outputoffset = new IntWrapper(0); + for (int k = 0; k < TotalSize / ChunkSize; ++k) + regularcodec.compress(data, inputoffset, ChunkSize, compressed, outputoffset); + lastcodec.compress(data, inputoffset, TotalSize % ChunkSize, compressed, outputoffset); + // got it! + // inputoffset should be at data.length but outputoffset tells + // us where we are... + System.out.println( + "compressed from " + data.length * 4 / 1024 + "KB to " + outputoffset.intValue() * 4 / 1024 + "KB"); + // we can repack the data: + compressed = Arrays.copyOf(compressed, outputoffset.intValue()); + + /** + * + * now uncompressing + * + * We are *not* assuming that the original array length is known, + * however we assume that the chunk size (ChunkSize) is known. + * + */ + int[] recovered = new int[ChunkSize]; + IntWrapper compoff = new IntWrapper(0); + IntWrapper recoffset; + int currentpos = 0; + + while (compoff.get() < compressed.length) { + recoffset = new IntWrapper(0); + regularcodec.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset); + + if (recoffset.get() < ChunkSize) {// last chunk detected + ivb.uncompress(compressed, compoff, compressed.length - compoff.get(), recovered, recoffset); + } + for (int i = 0; i < recoffset.get(); ++i) { + if (data[currentpos + i] != recovered[i]) + throw new RuntimeException("bug"); // could use assert + } + currentpos += recoffset.get(); + } + System.out.println("data is recovered without loss"); + System.out.println(); + + } + + /** + * Demo of the headless approach where we must supply the array length + */ + @Test + public void headlessDemo() { + System.out.println("Compressing arrays with minimal header..."); + int[] uncompressed1 = { 1, 2, 1, 3, 1 }; + int[] uncompressed2 = { 3, 2, 4, 6, 1 }; + + int[] compressed = new int[uncompressed1.length + uncompressed2.length + 1024]; + + SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + + // compressing + IntWrapper outPos = new IntWrapper(); + + IntWrapper previous = new IntWrapper(); + + codec.headlessCompress(uncompressed1, new IntWrapper(), uncompressed1.length, compressed, outPos); + int length1 = outPos.get() - previous.get(); + previous = new IntWrapper(outPos.get()); + codec.headlessCompress(uncompressed2, new IntWrapper(), uncompressed2.length, compressed, outPos); + int length2 = outPos.get() - previous.get(); + + compressed = Arrays.copyOf(compressed, length1 + length2); + System.out + .println("compressed unsorted integers from " + uncompressed1.length * 4 + "B to " + length1 * 4 + "B"); + System.out + .println("compressed unsorted integers from " + uncompressed2.length * 4 + "B to " + length2 * 4 + "B"); + System.out.println("Total compressed output " + compressed.length); + + int[] recovered1 = new int[uncompressed1.length]; + int[] recovered2 = new int[uncompressed1.length]; + IntWrapper inPos = new IntWrapper(); + System.out.println("Decoding first array starting at pos = " + inPos); + codec.headlessUncompress(compressed, inPos, compressed.length, recovered1, new IntWrapper(0), + uncompressed1.length); + System.out.println("Decoding second array starting at pos = " + inPos); + codec.headlessUncompress(compressed, inPos, compressed.length, recovered2, new IntWrapper(0), + uncompressed2.length); + if (!Arrays.equals(uncompressed1, recovered1)) + throw new RuntimeException("First array does not match."); + if (!Arrays.equals(uncompressed2, recovered2)) + throw new RuntimeException("Second array does not match."); + System.out.println("The arrays match, your code is probably ok."); + + } } diff --git a/src/test/java/me/lemire/integercompression/ResourcedTest.java b/src/test/java/me/lemire/integercompression/ResourcedTest.java index 34f1d05..8316129 100644 --- a/src/test/java/me/lemire/integercompression/ResourcedTest.java +++ b/src/test/java/me/lemire/integercompression/ResourcedTest.java @@ -24,65 +24,65 @@ * */ public class ResourcedTest { - SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(), - new SkippableComposition(new BinaryPacking(), new VariableByte()), - new SkippableComposition(new NewPFD(), new VariableByte()), - new SkippableComposition(new NewPFDS9(), new VariableByte()), - new SkippableComposition(new NewPFDS16(), new VariableByte()), - new SkippableComposition(new OptPFD(), new VariableByte()), - new SkippableComposition(new OptPFDS9(), new VariableByte()), - new SkippableComposition(new OptPFDS16(), new VariableByte()), - new SkippableComposition(new FastPFOR128(), new VariableByte()), - new SkippableComposition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16() }; + SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(), + new SkippableComposition(new BinaryPacking(), new VariableByte()), + new SkippableComposition(new NewPFD(), new VariableByte()), + new SkippableComposition(new NewPFDS9(), new VariableByte()), + new SkippableComposition(new NewPFDS16(), new VariableByte()), + new SkippableComposition(new OptPFD(), new VariableByte()), + new SkippableComposition(new OptPFDS9(), new VariableByte()), + new SkippableComposition(new OptPFDS16(), new VariableByte()), + new SkippableComposition(new FastPFOR128(), new VariableByte()), + new SkippableComposition(new FastPFOR(), new VariableByte()), new Simple9(), new Simple16() }; - /** - * @throws IOException - * if the resource cannot be accessed (should be considered a - * bug) - * - */ - @Test - public void IntCompressorTest() throws IOException { - // next line requires Java8? - // int[] data = - // Files.lines(Paths.get("integers.txt")).mapToInt(Integer::parseInt).toArray(); - File f = new File("src/test/resources/integers.txt"); - System.out.println("loading test data from "+ f.getAbsolutePath()); - BufferedReader bfr = new BufferedReader(new FileReader(f)); - String line; - ArrayList ai = new ArrayList(); - while ((line = bfr.readLine()) != null) { - ai.add(Integer.parseInt(line)); - } - bfr.close(); - int[] data = new int[ai.size()]; - for (int k = 0; k < data.length; ++k) - data[k] = ai.get(k).intValue(); - ai = null; - // finally! - { - IntegratedIntCompressor iic = new IntegratedIntCompressor(); - int[] compressed = iic.compress(data); - int[] recovered = iic.uncompress(compressed); - Assert.assertArrayEquals(recovered, data); - } - for (SkippableIntegerCODEC C : codecs) { - IntCompressor iic = new IntCompressor(C); - int[] compressed = iic.compress(data); - int[] recovered = iic.uncompress(compressed); - Assert.assertArrayEquals(recovered, data); + /** + * @throws IOException + * if the resource cannot be accessed (should be considered a + * bug) + * + */ + @Test + public void IntCompressorTest() throws IOException { + // next line requires Java8? + // int[] data = + // Files.lines(Paths.get("integers.txt")).mapToInt(Integer::parseInt).toArray(); + File f = new File("src/test/resources/integers.txt"); + System.out.println("loading test data from "+ f.getAbsolutePath()); + BufferedReader bfr = new BufferedReader(new FileReader(f)); + String line; + ArrayList ai = new ArrayList(); + while ((line = bfr.readLine()) != null) { + ai.add(Integer.parseInt(line)); + } + bfr.close(); + int[] data = new int[ai.size()]; + for (int k = 0; k < data.length; ++k) + data[k] = ai.get(k).intValue(); + ai = null; + // finally! + { + IntegratedIntCompressor iic = new IntegratedIntCompressor(); + int[] compressed = iic.compress(data); + int[] recovered = iic.uncompress(compressed); + Assert.assertArrayEquals(recovered, data); + } + for (SkippableIntegerCODEC C : codecs) { + IntCompressor iic = new IntCompressor(C); + int[] compressed = iic.compress(data); + int[] recovered = iic.uncompress(compressed); + Assert.assertArrayEquals(recovered, data); - } - for (SkippableIntegerCODEC C : codecs) { - if (C instanceof SkippableIntegratedIntegerCODEC) { - IntegratedIntCompressor iic = new IntegratedIntCompressor((SkippableIntegratedIntegerCODEC) C); - int[] compressed = iic.compress(data); - int[] recovered = iic.uncompress(compressed); - Assert.assertArrayEquals(recovered, data); - } + } + for (SkippableIntegerCODEC C : codecs) { + if (C instanceof SkippableIntegratedIntegerCODEC) { + IntegratedIntCompressor iic = new IntegratedIntCompressor((SkippableIntegratedIntegerCODEC) C); + int[] compressed = iic.compress(data); + int[] recovered = iic.uncompress(compressed); + Assert.assertArrayEquals(recovered, data); + } - } + } - } + } } diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java index 93c1784..9018229 100644 --- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java @@ -19,7 +19,7 @@ */ @SuppressWarnings({ "static-method" }) public class SkippableBasicTest { - final SkippableIntegerCODEC[] codecs = { + final SkippableIntegerCODEC[] codecs = { new JustCopy(), new VariableByte(), new SkippableComposition(new BinaryPacking(), new VariableByte()), diff --git a/src/test/java/me/lemire/longcompression/LongBasicTest.java b/src/test/java/me/lemire/longcompression/LongBasicTest.java index 5aa3551..ab306d4 100644 --- a/src/test/java/me/lemire/longcompression/LongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/LongBasicTest.java @@ -47,33 +47,33 @@ public class LongBasicTest { new LongVariableByte(), new LongAs2IntsCodec()}; - /** + /** * This tests with a compressed array with various offset */ - @Test - public void saulTest() { - for (LongCODEC C : codecs) { - for (int x = 0; x < 50; ++x) { - long[] a = { 2, 3, 4, 5 }; - long[] b = new long[90]; - long[] c = new long[a.length]; - - IntWrapper aOffset = new IntWrapper(0); - IntWrapper bOffset = new IntWrapper(x); - C.compress(a, aOffset, a.length, b, bOffset); - int len = bOffset.get() - x; - - bOffset.set(x); - IntWrapper cOffset = new IntWrapper(0); - C.uncompress(b, bOffset, len, c, cOffset); - if(!Arrays.equals(a, c)) { - System.out.println("Problem with "+C); - } - assertArrayEquals(a, c); - - } - } - } + @Test + public void saulTest() { + for (LongCODEC C : codecs) { + for (int x = 0; x < 50; ++x) { + long[] a = { 2, 3, 4, 5 }; + long[] b = new long[90]; + long[] c = new long[a.length]; + + IntWrapper aOffset = new IntWrapper(0); + IntWrapper bOffset = new IntWrapper(x); + C.compress(a, aOffset, a.length, b, bOffset); + int len = bOffset.get() - x; + + bOffset.set(x); + IntWrapper cOffset = new IntWrapper(0); + C.uncompress(b, bOffset, len, c, cOffset); + if(!Arrays.equals(a, c)) { + System.out.println("Problem with "+C); + } + assertArrayEquals(a, c); + + } + } + } /** * */ @@ -167,16 +167,16 @@ public void varyingLengthTest2() { @Test public void checkVariousCases() { for (LongCODEC c : codecs) { - testZeroInZeroOut(c); - test(c, c, 5, 10); - test(c, c, 5, 14); - test(c, c, 2, 18); - // TODO Unclear which codec should manage an empty output array or not - // Some IntegerCodec does not output anything if the input is smaller than some block size - // testSpurious(c); - testUnsorted(c); - testUnsorted2(c); - testUnsorted3(c); + testZeroInZeroOut(c); + test(c, c, 5, 10); + test(c, c, 5, 14); + test(c, c, 2, 18); + // TODO Unclear which codec should manage an empty output array or not + // Some IntegerCodec does not output anything if the input is smaller than some block size + // testSpurious(c); + testUnsorted(c); + testUnsorted2(c); + testUnsorted3(c); } } @@ -273,7 +273,7 @@ private static void testCodec(LongCODEC c, LongCODEC co, buffer[0] = backupdata[0]; co.uncompress(dataout, inpos, thiscompsize - 1, buffer, outpos); if (!(c instanceof IntegratedLongCODEC)) - LongDelta.fastinverseDelta(buffer); + LongDelta.fastinverseDelta(buffer); // Check assertions. assertEquals("length is not match", outpos.get(), data[k].length); @@ -357,19 +357,19 @@ private void testUnsorted3(LongCODEC codec) { @Test public void fastPforTest() { // proposed by Stefan Ackermann (https://github.com/Stivo) - for (LongCODEC codec : codecs) { - int N = FastPFOR.BLOCK_SIZE; - long[] data = new long[N]; - for (int i = 0; i < N; i++) - data[i] = 0; - data[126] = -1; - long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); - long[] answer = LongTestUtils.uncompress(codec, comp, N); - for (int k = 0; k < N; ++k) - if (answer[k] != data[k]) - throw new RuntimeException("bug " + k + " " + answer[k] - + " != " + data[k]); - } + for (LongCODEC codec : codecs) { + int N = FastPFOR.BLOCK_SIZE; + long[] data = new long[N]; + for (int i = 0; i < N; i++) + data[i] = 0; + data[126] = -1; + long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); + long[] answer = LongTestUtils.uncompress(codec, comp, N); + for (int k = 0; k < N; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug " + k + " " + answer[k] + + " != " + data[k]); + } } /** @@ -378,19 +378,19 @@ public void fastPforTest() { @Test public void fastPfor128Test() { // proposed by Stefan Ackermann (https://github.com/Stivo) - for (LongCODEC codec : codecs) { - int N = FastPFOR128.BLOCK_SIZE; - long[] data = new long[N]; - for (int i = 0; i < N; i++) - data[i] = 0; - data[126] = -1; - long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); - long[] answer = LongTestUtils.uncompress(codec, comp, N); - for (int k = 0; k < N; ++k) - if (answer[k] != data[k]) - throw new RuntimeException("bug " + k + " " + answer[k] - + " != " + data[k]); - } + for (LongCODEC codec : codecs) { + int N = FastPFOR128.BLOCK_SIZE; + long[] data = new long[N]; + for (int i = 0; i < N; i++) + data[i] = 0; + data[126] = -1; + long[] comp = LongTestUtils.compress(codec, Arrays.copyOf(data, N)); + long[] answer = LongTestUtils.uncompress(codec, comp, N); + for (int k = 0; k < N; ++k) + if (answer[k] != data[k]) + throw new RuntimeException("bug " + k + " " + answer[k] + + " != " + data[k]); + } } } diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java index a44e665..4a30b41 100644 --- a/src/test/java/me/lemire/longcompression/LongTestUtils.java +++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java @@ -127,7 +127,7 @@ protected static long[] uncompressHeadless(SkippableLongCODEC codec, long[] data return Arrays.copyOf(outBuf, outPos.get()); } - public static String longToBinaryWithLeading(long l) { - return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); - } + public static String longToBinaryWithLeading(long l) { + return String.format("%64s", Long.toBinaryString(l)).replace(' ', '0'); + } } diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java index e900c9c..d7f6f2c 100644 --- a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java @@ -78,15 +78,15 @@ public void varyingLengthTest() { for (SkippableLongCODEC c : codecs) { System.out.println("[SkippeableBasicTest.varyingLengthTest] codec = "+c); for (int L = 1; L <= 128; L++) { - long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); - long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); for (int k = 0; k < L; ++k) if (answer[k] != data[k]) throw new RuntimeException("bug "+c.toString()+" "+k+" "+answer[k]+" "+data[k]); } for (int L = 128; L <= N; L *= 2) { - long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); - long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); for (int k = 0; k < L; ++k) if (answer[k] != data[k]) throw new RuntimeException("bug"); @@ -123,16 +123,16 @@ public void varyingLengthTest2() { e.printStackTrace(); } for (int L = 1; L <= 128; L++) { - long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); - long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); for (int k = 0; k < L; ++k) if (answer[k] != data[k]) { - throw new RuntimeException("L=" + L + ": bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString()); + throw new RuntimeException("L=" + L + ": bug at k = "+k+" "+answer[k]+" "+data[k]+" for "+c.toString()); } } for (int L = 128; L <= N; L *= 2) { - long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); - long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); + long[] comp = LongTestUtils.compressHeadless(c, Arrays.copyOf(data, L)); + long[] answer = LongTestUtils.uncompressHeadless(c, comp, L); for (int k = 0; k < L; ++k) if (answer[k] != data[k]) throw new RuntimeException("bug"); diff --git a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java index 00bb52a..b247ed8 100644 --- a/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java +++ b/src/test/java/me/lemire/longcompression/TestLongAs2IntsCodec.java @@ -18,89 +18,89 @@ * @author Benoit Lacelle */ public class TestLongAs2IntsCodec { - final LongAs2IntsCodec codec = new LongAs2IntsCodec(); - - private void checkConsistency(LongCODEC codec, long[] array) { - { - long[] compressed = LongTestUtils.compress(codec, array); - long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof ByteLongCODEC) { - byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); - long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof SkippableLongCODEC) { - long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); - long[] uncompressed = - LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - } - - @Test - public void testCodec_Zero() { - checkConsistency(codec, new long[] { 0 }); - } - - @Test - public void testCodec_Minus1() { - checkConsistency(codec, new long[] { -1 }); - } - - @Test - public void testCodec_ZeroTimes8Minus1() { - checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); - } - - @Test - public void testCodec_ZeroTimes127Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_ZeroTimes128Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_MinValue() { - checkConsistency(codec, new long[] { Long.MIN_VALUE }); - } - - @Test - public void testCodec_ZeroMinValue() { - checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); - } - - @Test - public void testCodec_allPowerOfTwo() { - checkConsistency(codec, new long[] { 1L << 42 }); - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 1L << i }); - } - } - - @Test - public void testCodec_ZeroThenAllPowerOfTwo() { - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 0, 1L << i }); - } - } - - @Test - public void testCodec_intermediateHighPowerOfTwo() { - Assert.assertEquals(3, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); - } + final LongAs2IntsCodec codec = new LongAs2IntsCodec(); + + private void checkConsistency(LongCODEC codec, long[] array) { + { + long[] compressed = LongTestUtils.compress(codec, array); + long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof ByteLongCODEC) { + byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); + long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof SkippableLongCODEC) { + long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); + long[] uncompressed = + LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + } + + @Test + public void testCodec_Zero() { + checkConsistency(codec, new long[] { 0 }); + } + + @Test + public void testCodec_Minus1() { + checkConsistency(codec, new long[] { -1 }); + } + + @Test + public void testCodec_ZeroTimes8Minus1() { + checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); + } + + @Test + public void testCodec_ZeroTimes127Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_ZeroTimes128Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_MinValue() { + checkConsistency(codec, new long[] { Long.MIN_VALUE }); + } + + @Test + public void testCodec_ZeroMinValue() { + checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); + } + + @Test + public void testCodec_allPowerOfTwo() { + checkConsistency(codec, new long[] { 1L << 42 }); + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 1L << i }); + } + } + + @Test + public void testCodec_ZeroThenAllPowerOfTwo() { + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 0, 1L << i }); + } + } + + @Test + public void testCodec_intermediateHighPowerOfTwo() { + Assert.assertEquals(3, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); + } } diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java index 15613f2..9ba3818 100644 --- a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java +++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java @@ -18,86 +18,86 @@ * @author Benoit Lacelle */ public class TestLongVariableByte { - final LongVariableByte codec = new LongVariableByte(); - - private void checkConsistency(LongCODEC codec, long[] array) { - { - long[] compressed = LongTestUtils.compress(codec, array); - long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof ByteLongCODEC) { - byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); - long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - - if (codec instanceof SkippableLongCODEC) { - long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); - long[] uncompressed = - LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); - - Assert.assertArrayEquals(array, uncompressed); - } - } - - @Test - public void testCodec_ZeroMinus1() { - checkConsistency(codec, new long[] { -1 }); - } - - @Test - public void testCodec_ZeroTimes8Minus1() { - checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); - } - - @Test - public void testCodec_ZeroTimes127Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_ZeroTimes128Minus1() { - long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); - - checkConsistency(codec, array); - } - - @Test - public void testCodec_MinValue() { - checkConsistency(codec, new long[] { Long.MIN_VALUE }); - } - - @Test - public void testCodec_ZeroMinValue() { - checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); - } - - @Test - public void testCodec_allPowerOfTwo() { - checkConsistency(codec, new long[] { 1L << 42 }); - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 1L << i }); - } - } - - @Test - public void testCodec_ZeroThenAllPowerOfTwo() { - for (int i = 0; i < 64; i++) { - checkConsistency(codec, new long[] { 0, 1L << i }); - } - } - - @Test - public void testCodec_intermediateHighPowerOfTwo() { - Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); - Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length); - Assert.assertEquals(1, LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length); - } + final LongVariableByte codec = new LongVariableByte(); + + private void checkConsistency(LongCODEC codec, long[] array) { + { + long[] compressed = LongTestUtils.compress(codec, array); + long[] uncompressed = LongTestUtils.uncompress(codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof ByteLongCODEC) { + byte[] compressed = LongTestUtils.compress((ByteLongCODEC) codec, array); + long[] uncompressed = LongTestUtils.uncompress((ByteLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + + if (codec instanceof SkippableLongCODEC) { + long[] compressed = LongTestUtils.compressHeadless((SkippableLongCODEC) codec, array); + long[] uncompressed = + LongTestUtils.uncompressHeadless((SkippableLongCODEC) codec, compressed, array.length); + + Assert.assertArrayEquals(array, uncompressed); + } + } + + @Test + public void testCodec_ZeroMinus1() { + checkConsistency(codec, new long[] { -1 }); + } + + @Test + public void testCodec_ZeroTimes8Minus1() { + checkConsistency(codec, new long[] { 0, 0, 0, 0, 0, 0, 0, 0, -1 }); + } + + @Test + public void testCodec_ZeroTimes127Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 127).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_ZeroTimes128Minus1() { + long[] array = LongStream.concat(LongStream.range(0, 128).map(l -> 0), LongStream.of(-1)).toArray(); + + checkConsistency(codec, array); + } + + @Test + public void testCodec_MinValue() { + checkConsistency(codec, new long[] { Long.MIN_VALUE }); + } + + @Test + public void testCodec_ZeroMinValue() { + checkConsistency(codec, new long[] { 0, Long.MIN_VALUE }); + } + + @Test + public void testCodec_allPowerOfTwo() { + checkConsistency(codec, new long[] { 1L << 42 }); + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 1L << i }); + } + } + + @Test + public void testCodec_ZeroThenAllPowerOfTwo() { + for (int i = 0; i < 64; i++) { + checkConsistency(codec, new long[] { 0, 1L << i }); + } + } + + @Test + public void testCodec_intermediateHighPowerOfTwo() { + Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); + Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length); + Assert.assertEquals(1, LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length); + } } diff --git a/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java index 5b90ee0..c964f6f 100644 --- a/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java +++ b/src/test/java/me/lemire/longcompression/synth/LongClusteredDataGenerator.java @@ -29,7 +29,7 @@ public LongClusteredDataGenerator() { } void fillUniform(long[] array, int offset, int length, long Min, long Max) { - long[] v = this.unidg.generateUniform(length, Max - Min); + long[] v = this.unidg.generateUniform(length, Max - Min); for (int k = 0; k < v.length; ++k) array[k + offset] = Min + v[k]; } @@ -70,7 +70,7 @@ void fillClustered(long[] array, int offset, int length, long Min, long Max) { * @return array containing the integers */ public long[] generateClustered(int N, long Max) { - long[] array = new long[N]; + long[] array = new long[N]; fillClustered(array, 0, N, 0, Max); return array; } @@ -82,7 +82,7 @@ public long[] generateClustered(int N, long Max) { * arguments are ignored */ public static void main(final String[] args) { - long[] example = (new LongClusteredDataGenerator()) + long[] example = (new LongClusteredDataGenerator()) .generateClustered(20, 1000); for (int k = 0; k < example.length; ++k) System.out.println(example[k]); diff --git a/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java index 4d435f2..4aa797b 100644 --- a/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java +++ b/src/test/java/me/lemire/longcompression/synth/LongUniformDataGenerator.java @@ -59,12 +59,12 @@ long[] generateUniformHash(int N, long Max) { * output all longs from the range [0,Max) that are not in the array */ static long[] negate(long[] x, long Max) { - int newLength = saturatedCast(Max - x.length); - long[] ans = new long[newLength]; + int newLength = saturatedCast(Max - x.length); + long[] ans = new long[newLength]; int i = 0; int c = 0; for (int j = 0; j < x.length; ++j) { - long v = x[j]; + long v = x[j]; for (; i < v; ++i) ans[c++] = i; ++i; @@ -74,13 +74,13 @@ static long[] negate(long[] x, long Max) { return ans; } - private static int saturatedCast(long toInt) { - if (toInt > Integer.MAX_VALUE) { - return Integer.MAX_VALUE; - } else { - return (int) toInt; - } - } + private static int saturatedCast(long toInt) { + if (toInt > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } else { + return (int) toInt; + } + } /** * generates randomly N distinct longs from 0 to Max. @@ -92,7 +92,7 @@ private static int saturatedCast(long toInt) { * @return an array containing randomly selected longs */ public long[] generateUniform(int N, long Max) { - assert N >= 0; + assert N >= 0; assert Max >= 0; if (N * 2 > Max) { return negate(generateUniform(saturatedCast(Max - N), Max), Max); From 9640566814326385a73c0f794f4c6d36050200d5 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 29 Sep 2025 18:21:32 +0200 Subject: [PATCH 110/170] Fix variable-byte encoding of large longs Previously, the branch encoding longs in 9 bytes was unreachable because the condition `val < (1L << 63)` is always false. Only negative longs should be encoded using 10 bytes. --- .../longcompression/LongVariableByte.java | 4 ++-- .../longcompression/TestLongVariableByte.java | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index ad2b0eb..884d538 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -90,7 +90,7 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o buf.put((byte) extract7bits(5, val)); buf.put((byte) extract7bits(6, val)); buf.put((byte) (extract7bitsmaskless(7, (val)) | (1 << 7))); - } else if (val >= 0 && val < (1L << 63)) { + } else if (val >= 0) { buf.put((byte) extract7bits(0, val)); buf.put((byte) extract7bits(1, val)); buf.put((byte) extract7bits(2, val)); @@ -175,7 +175,7 @@ public void compress(long[] in, IntWrapper inpos, int inlength, byte[] out, out[outpostmp++] = (byte) extract7bits(5, val); out[outpostmp++] = (byte) extract7bits(6, val); out[outpostmp++] = (byte) (extract7bitsmaskless(7, (val)) | (1 << 7)); - } else if (val >= 0 && val < (1L << 63)) { + } else if (val >= 0) { out[outpostmp++] = (byte) extract7bits(0, val); out[outpostmp++] = (byte) extract7bits(1, val); out[outpostmp++] = (byte) extract7bits(2, val); diff --git a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java index ee1755a..3cb2a49 100644 --- a/src/test/java/me/lemire/longcompression/TestLongVariableByte.java +++ b/src/test/java/me/lemire/longcompression/TestLongVariableByte.java @@ -24,11 +24,17 @@ public LongCODEC getCodec() { } @Test - public void testCodec_intermediateHighPowerOfTwo() { - Assert.assertEquals(1, LongTestUtils.compress((LongCODEC) codec, new long[] { 1L << 42 }).length); - Assert.assertEquals(7, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { 1L << 42 }).length); - Assert.assertEquals(1, - LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { 1L << 42 }).length); - } + public void testCodec_allBitWidths() { + for (int bitWidth = 0; bitWidth <= 64; bitWidth++) { + long value = bitWidth == 0 ? 0 : 1L << (bitWidth - 1); + + int expectedSizeInBytes = Math.max(1, (bitWidth + 6) / 7); + int expectedSizeInLongs = (expectedSizeInBytes > 8) ? 2 : 1; + Assert.assertEquals(expectedSizeInLongs, LongTestUtils.compress((LongCODEC) codec, new long[] { value }).length); + Assert.assertEquals(expectedSizeInBytes, LongTestUtils.compress((ByteLongCODEC) codec, new long[] { value }).length); + Assert.assertEquals(expectedSizeInLongs, + LongTestUtils.compressHeadless((SkippableLongCODEC) codec, new long[] { value }).length); + } + } } From e19e01874753ca8492d76e50340d69fb796259d6 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 29 Sep 2025 11:55:17 +0200 Subject: [PATCH 111/170] Compute max compressed length for SkippableIntegratedIntegerCODEC --- example.java | 6 +--- .../differential/IntegratedBinaryPacking.java | 12 ++++++- .../differential/IntegratedIntCompressor.java | 3 +- .../differential/IntegratedVariableByte.java | 10 ++++++ .../SkippableIntegratedComposition.java | 9 +++++ .../SkippableIntegratedIntegerCODEC.java | 17 ++++++++++ .../lemire/integercompression/AdhocTest.java | 6 ++-- .../integercompression/ExampleTest.java | 6 +--- .../SkippableBasicTest.java | 33 +++++++++++++++++++ 9 files changed, 87 insertions(+), 15 deletions(-) diff --git a/example.java b/example.java index 71ccd63..25acc0c 100644 --- a/example.java +++ b/example.java @@ -104,11 +104,7 @@ public static void basicExampleHeadless() { // be processed using variable byte SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()); - // output vector should be large enough... - int[] compressed = new int[data.length + 1024]; - // compressed might not be large enough in some cases - // if you get java.lang.ArrayIndexOutOfBoundsException, try - // allocating more memory + int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)]; /** * diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java index 7e1c161..f50a367 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedBinaryPacking.java @@ -49,7 +49,8 @@ public class IntegratedBinaryPacking implements IntegratedIntegerCODEC, SkippableIntegratedIntegerCODEC { - static final int BLOCK_SIZE = 32; + public static final int BLOCK_SIZE = 32; + private static final int MAX_BIT_WIDTH = Integer.SIZE; @Override public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, @@ -170,4 +171,13 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, initvalue.set(initoffset); inpos.set(tmpinpos); } + + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int blockCount = inlength / BLOCK_SIZE; + int headersSizeInInts = blockCount / Integer.BYTES + (blockCount % Integer.BYTES); + int blocksSizeInInts = blockCount * MAX_BIT_WIDTH; + compressedPositions.add(blockCount * BLOCK_SIZE); + return headersSizeInInts + blocksSizeInInts; + } } diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java index 72159ba..ad6467a 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java @@ -39,7 +39,8 @@ public IntegratedIntCompressor() { * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { - int [] compressed = new int[input.length + input.length / 100 + 1024]; + int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length); + int [] compressed = new int[maxCompressedLength + 1]; // +1 to store the length of the input compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); IntWrapper initvalue = new IntWrapper(0); diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java index 918a900..a577031 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedVariableByte.java @@ -24,6 +24,8 @@ public class IntegratedVariableByte implements IntegratedIntegerCODEC, IntegratedByteIntegerCODEC, SkippableIntegratedIntegerCODEC { + private static final int MAX_BYTES_PER_INT = 5; + private static byte extract7bits(int i, long val) { return (byte)((val >> (7 * i)) & ((1 << 7) - 1)); } @@ -257,6 +259,14 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, inpos.set(p + (s!=0 ? 1 : 0)); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int maxLengthInBytes = inlength * MAX_BYTES_PER_INT; + int maxLengthInInts = (maxLengthInBytes + Integer.BYTES - 1) / Integer.BYTES; + compressedPositions.add(inlength); + return maxLengthInInts; + } + /** * Creates a new buffer of the requested size. * diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java index abcc027..a1379ad 100644 --- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java +++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java @@ -76,4 +76,13 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, F2.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int init = compressedPositions.get(); + int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength); + maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version? + inlength -= compressedPositions.get() - init; + maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength); + return maxLength; + } } diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java index 8b7fd4b..e2df754 100644 --- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedIntegerCODEC.java @@ -71,4 +71,21 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num, IntWrapper initvalue); + /** + * Compute the maximum number of integers that might be required to store + * the compressed form of a given input array segment, without headers. + *

    + * This is useful to pre-allocate the output buffer before calling + * {@link #headlessCompress(int[], IntWrapper, int, int[], IntWrapper, IntWrapper)}. + *

    + * + * @param compressedPositions + * since not all schemes compress every input integer, this parameter + * returns how many input integers will actually be compressed. + * This is useful when composing multiple schemes. + * @param inlength + * number of integers to be compressed + * @return the maximum number of integers needed in the output array + */ + int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength); } diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java index aa6718b..ea7800b 100644 --- a/src/test/java/me/lemire/integercompression/AdhocTest.java +++ b/src/test/java/me/lemire/integercompression/AdhocTest.java @@ -108,11 +108,11 @@ public void testIssue29b() { @Test public void testIssue41() { for (int x = 0; x < 64; x++) { - int[] a = { 2, 3, 4, 5 }; - int[] b = new int[90]; - int[] c = new int[a.length]; SkippableIntegratedIntegerCODEC codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()); + int[] a = { 2, 3, 4, 5 }; + int[] b = new int[x + codec.maxHeadlessCompressedLength(new IntWrapper(0), a.length)]; + int[] c = new int[a.length]; IntWrapper aOffset = new IntWrapper(0); IntWrapper bOffset = new IntWrapper(x); IntWrapper initValue = new IntWrapper(0); diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java index ce10d18..62eb6f6 100644 --- a/src/test/java/me/lemire/integercompression/ExampleTest.java +++ b/src/test/java/me/lemire/integercompression/ExampleTest.java @@ -116,11 +116,7 @@ public void basicExampleHeadless() { // be processed using variable byte SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()); - // output vector should be large enough... - int[] compressed = new int[data.length + 1024]; - // compressed might not be large enough in some cases - // if you get java.lang.ArrayIndexOutOfBoundsException, try - // allocating more memory + int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)]; /** * diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java index 9018229..3c31305 100644 --- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java @@ -9,8 +9,13 @@ import java.util.Arrays; +import me.lemire.integercompression.differential.IntegratedBinaryPacking; +import me.lemire.integercompression.differential.IntegratedVariableByte; +import me.lemire.integercompression.differential.SkippableIntegratedComposition; +import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC; import org.junit.Test; +import static org.junit.Assert.assertTrue; /** * Just some basic sanity tests. @@ -147,5 +152,33 @@ public void varyingLengthTest2() { } } + @Test + public void testMaxHeadlessCompressedLength() { + testMaxHeadlessCompressedLength(new IntegratedBinaryPacking(), 16 * IntegratedBinaryPacking.BLOCK_SIZE); + testMaxHeadlessCompressedLength(new IntegratedVariableByte(), 128); + testMaxHeadlessCompressedLength(new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()), 16 * IntegratedBinaryPacking.BLOCK_SIZE + 10); + } + + private static void testMaxHeadlessCompressedLength(SkippableIntegratedIntegerCODEC codec, int inlengthTo) { + // We test the worst-case scenario by making all deltas and the initial value negative. + int delta = -1; + int value = delta; + + for (int inlength = 0; inlength < inlengthTo; ++inlength) { + int[] input = new int[inlength]; + for (int i = 0; i < inlength; i++) { + input[i] = value; + value += delta; + } + int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength); + int[] output = new int[maxOutputLength]; + IntWrapper outPos = new IntWrapper(); + + codec.headlessCompress(input, new IntWrapper(), inlength, output, outPos, new IntWrapper()); + // If we reach this point, no exception was thrown, which means the calculated output length was sufficient. + + assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableIntegratedComposition always adds one extra integer for the potential header + } + } } From 32e374a350ccfa0764f5860b412028f2f3887231 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 29 Sep 2025 13:36:07 +0200 Subject: [PATCH 112/170] Compute max compressed length for SkippableIntegerCODEC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calculating the maximum compressed length is now implemented for all schemes except: * Kamikaze — as stated in the Javadoc, it is not intended for production use. * VectorFastPFOR — it does not appear to be supported for production yet, as it is not included in the release package. --- example.java | 6 +- .../integercompression/BinaryPacking.java | 16 +++++- .../lemire/integercompression/FastPFOR.java | 21 ++++++- .../integercompression/FastPFOR128.java | 19 +++++++ .../integercompression/GroupSimple9.java | 8 ++- .../integercompression/IntCompressor.java | 3 +- .../lemire/integercompression/JustCopy.java | 6 ++ .../lemire/integercompression/Kamikaze.java | 7 ++- .../me/lemire/integercompression/NewPFD.java | 11 ++++ .../lemire/integercompression/NewPFDS16.java | 11 ++++ .../lemire/integercompression/NewPFDS9.java | 11 ++++ .../me/lemire/integercompression/OptPFD.java | 11 ++++ .../lemire/integercompression/OptPFDS16.java | 13 ++++- .../lemire/integercompression/OptPFDS9.java | 13 ++++- .../lemire/integercompression/Simple16.java | 8 ++- .../me/lemire/integercompression/Simple9.java | 6 ++ .../SkippableComposition.java | 10 ++++ .../SkippableIntegerCODEC.java | 17 ++++++ .../integercompression/VariableByte.java | 10 ++++ .../vector/VectorFastPFOR.java | 5 ++ .../lemire/integercompression/AdhocTest.java | 4 +- .../integercompression/ExampleTest.java | 6 +- .../SkippableBasicTest.java | 57 ++++++++++++++++++- .../lemire/integercompression/TestUtils.java | 2 +- 24 files changed, 263 insertions(+), 18 deletions(-) diff --git a/example.java b/example.java index 25acc0c..75dfb05 100644 --- a/example.java +++ b/example.java @@ -263,10 +263,12 @@ public static void headlessDemo() { int[] uncompressed1 = {1,2,1,3,1}; int[] uncompressed2 = {3,2,4,6,1}; - int[] compressed = new int[uncompressed1.length+uncompressed2.length+1024]; - SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed1.length) + + codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed2.length); + int[] compressed = new int[maxCompressedLength]; + // compressing IntWrapper outPos = new IntWrapper(); diff --git a/src/main/java/me/lemire/integercompression/BinaryPacking.java b/src/main/java/me/lemire/integercompression/BinaryPacking.java index 8d5ff90..ce37ff0 100644 --- a/src/main/java/me/lemire/integercompression/BinaryPacking.java +++ b/src/main/java/me/lemire/integercompression/BinaryPacking.java @@ -37,8 +37,9 @@ * @author Daniel Lemire */ public final class BinaryPacking implements IntegerCODEC, SkippableIntegerCODEC { - final static int BLOCK_SIZE = 32; - + public final static int BLOCK_SIZE = 32; + private static final int MAX_BIT_WIDTH = Integer.SIZE; + @Override public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { @@ -131,7 +132,16 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, outpos.add(outlength); inpos.set(tmpinpos); } - + + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int blockCount = inlength / BLOCK_SIZE; + int headersSizeInInts = blockCount / Integer.BYTES + (blockCount % Integer.BYTES); + int blocksSizeInInts = blockCount * MAX_BIT_WIDTH; + compressedPositions.add(blockCount * BLOCK_SIZE); + return headersSizeInInts + blocksSizeInInts; + } + @Override public String toString() { return this.getClass().getSimpleName(); diff --git a/src/main/java/me/lemire/integercompression/FastPFOR.java b/src/main/java/me/lemire/integercompression/FastPFOR.java index 47969f4..5475496 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR.java @@ -40,6 +40,13 @@ */ public class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { final static int OVERHEAD_OF_EACH_EXCEPT = 8; + private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36; // 1 int for the header + // 1 int for the byte array size + // 1 int for the bitmap + // 1 int for byte array padding (to align to 4 bytes) + // 32 to have enough space to bit-pack the exceptions + private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1; // 1 byte for the number of bits allocated per truncated integer + // 1 byte for the number of exceptions /** * */ @@ -65,7 +72,7 @@ public class FastPFOR implements IntegerCODEC,SkippableIntegerCODEC { * @param pagesize * the desired page size (recommended value is FastPFOR.DEFAULT_PAGE_SIZE) */ - private FastPFOR(int pagesize) { + FastPFOR(int pagesize) { pageSize = pagesize; // Initiate arrrays. byteContainer = makeBuffer(3 * pageSize @@ -230,6 +237,18 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, } } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + + int pageCount = (inlength + pageSize - 1) / pageSize; + int blockCount = inlength / BLOCK_SIZE; + + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE; + return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { final int initpos = inpos.get(); diff --git a/src/main/java/me/lemire/integercompression/FastPFOR128.java b/src/main/java/me/lemire/integercompression/FastPFOR128.java index 83a3e1f..0557c62 100644 --- a/src/main/java/me/lemire/integercompression/FastPFOR128.java +++ b/src/main/java/me/lemire/integercompression/FastPFOR128.java @@ -23,6 +23,13 @@ */ public class FastPFOR128 implements IntegerCODEC,SkippableIntegerCODEC { final static int OVERHEAD_OF_EACH_EXCEPT = 8; + private static final int OVERHEAD_OF_EACH_PAGE_IN_INTS = 36; // 1 int for the header + // 1 int for the byte array size + // 1 int for the bitmap + // 1 int for byte array padding (to align to 4 bytes) + // 32 to have enough space to bit-pack the exceptions + private static final int OVERHEAD_OF_EACH_BLOCK_IN_INTS = 1; // 1 byte for the number of bits allocated per truncated integer + // 1 byte for the number of exceptions /** * */ @@ -209,6 +216,18 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, } } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + + int pageCount = (inlength + pageSize - 1) / pageSize; + int blockCount = inlength / BLOCK_SIZE; + + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int blockSizeInInts = OVERHEAD_OF_EACH_BLOCK_IN_INTS + BLOCK_SIZE; + return OVERHEAD_OF_EACH_PAGE_IN_INTS * pageCount + blockSizeInInts * blockCount + 24; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { final int initpos = inpos.get(); diff --git a/src/main/java/me/lemire/integercompression/GroupSimple9.java b/src/main/java/me/lemire/integercompression/GroupSimple9.java index a294080..bd8acfa 100644 --- a/src/main/java/me/lemire/integercompression/GroupSimple9.java +++ b/src/main/java/me/lemire/integercompression/GroupSimple9.java @@ -3549,4 +3549,10 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o inpos.set(tmpinpos); } -} \ No newline at end of file + + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + compressedPositions.add(inlength); + return inlength; + } +} diff --git a/src/main/java/me/lemire/integercompression/IntCompressor.java b/src/main/java/me/lemire/integercompression/IntCompressor.java index abaeea9..57b29f6 100644 --- a/src/main/java/me/lemire/integercompression/IntCompressor.java +++ b/src/main/java/me/lemire/integercompression/IntCompressor.java @@ -36,7 +36,8 @@ public IntCompressor() { * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { - int[] compressed = new int[input.length + input.length / 100 + 1024]; + int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length); + int[] compressed = new int[maxCompressedLength + 1]; // +1 to store the length of the input // Store at index=0 the length of the input, hence enabling .headlessCompress compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); diff --git a/src/main/java/me/lemire/integercompression/JustCopy.java b/src/main/java/me/lemire/integercompression/JustCopy.java index 709b86a..f57282c 100644 --- a/src/main/java/me/lemire/integercompression/JustCopy.java +++ b/src/main/java/me/lemire/integercompression/JustCopy.java @@ -42,6 +42,12 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + compressedPositions.add(inlength); + return inlength; + } + @Override public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { diff --git a/src/main/java/me/lemire/integercompression/Kamikaze.java b/src/main/java/me/lemire/integercompression/Kamikaze.java index fd1ac82..4cab30b 100644 --- a/src/main/java/me/lemire/integercompression/Kamikaze.java +++ b/src/main/java/me/lemire/integercompression/Kamikaze.java @@ -38,6 +38,11 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o } } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + throw new UnsupportedOperationException("Calculating the max compressed length is not supported yet."); + } + @Override public String toString() { return "Kamikaze's PForDelta"; @@ -64,4 +69,4 @@ public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, headlessUncompress(in, inpos, inlength, out, outpos, outlength); } -} \ No newline at end of file +} diff --git a/src/main/java/me/lemire/integercompression/NewPFD.java b/src/main/java/me/lemire/integercompression/NewPFD.java index 6dd01aa..3da3002 100644 --- a/src/main/java/me/lemire/integercompression/NewPFD.java +++ b/src/main/java/me/lemire/integercompression/NewPFD.java @@ -132,6 +132,17 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, decodePage(in, inpos, out, outpos, mynvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int blockCount = inlength / BLOCK_SIZE; + // +1 for the header + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int maxBlockSizeInInts = 1 + BLOCK_SIZE; + compressedPositions.add(inlength); + return maxBlockSizeInInts * blockCount; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { int tmpoutpos = outpos.get(); diff --git a/src/main/java/me/lemire/integercompression/NewPFDS16.java b/src/main/java/me/lemire/integercompression/NewPFDS16.java index 98370d2..526b8fb 100644 --- a/src/main/java/me/lemire/integercompression/NewPFDS16.java +++ b/src/main/java/me/lemire/integercompression/NewPFDS16.java @@ -131,6 +131,17 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, decodePage(in, inpos, out, outpos, mynvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int blockCount = inlength / BLOCK_SIZE; + // +1 for the header + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int maxBlockSizeInInts = 1 + BLOCK_SIZE; + compressedPositions.add(inlength); + return maxBlockSizeInInts * blockCount; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { int tmpoutpos = outpos.get(); diff --git a/src/main/java/me/lemire/integercompression/NewPFDS9.java b/src/main/java/me/lemire/integercompression/NewPFDS9.java index c8389c1..bd802b6 100644 --- a/src/main/java/me/lemire/integercompression/NewPFDS9.java +++ b/src/main/java/me/lemire/integercompression/NewPFDS9.java @@ -130,6 +130,17 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, decodePage(in, inpos, out, outpos, mynvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int blockCount = inlength / BLOCK_SIZE; + // +1 for the header + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int maxBlockSizeInInts = 1 + BLOCK_SIZE; + compressedPositions.add(inlength); + return maxBlockSizeInInts * blockCount; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { int tmpoutpos = outpos.get(); diff --git a/src/main/java/me/lemire/integercompression/OptPFD.java b/src/main/java/me/lemire/integercompression/OptPFD.java index 8c90586..cfda92e 100644 --- a/src/main/java/me/lemire/integercompression/OptPFD.java +++ b/src/main/java/me/lemire/integercompression/OptPFD.java @@ -147,6 +147,17 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, decodePage(in, inpos, out, outpos, mynvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int blockCount = inlength / BLOCK_SIZE; + // +1 for the header + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int maxBlockSizeInInts = 1 + BLOCK_SIZE; + compressedPositions.add(inlength); + return maxBlockSizeInInts * blockCount; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { int tmpoutpos = outpos.get(); diff --git a/src/main/java/me/lemire/integercompression/OptPFDS16.java b/src/main/java/me/lemire/integercompression/OptPFDS16.java index 8574b10..95c4f62 100644 --- a/src/main/java/me/lemire/integercompression/OptPFDS16.java +++ b/src/main/java/me/lemire/integercompression/OptPFDS16.java @@ -147,6 +147,17 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, decodePage(in, inpos, out, outpos, mynvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int blockCount = inlength / BLOCK_SIZE; + // +1 for the header + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int maxBlockSizeInInts = 1 + BLOCK_SIZE; + compressedPositions.add(inlength); + return maxBlockSizeInInts * blockCount; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { int tmpoutpos = outpos.get(); @@ -197,4 +208,4 @@ public String toString() { return this.getClass().getSimpleName(); } -} \ No newline at end of file +} diff --git a/src/main/java/me/lemire/integercompression/OptPFDS9.java b/src/main/java/me/lemire/integercompression/OptPFDS9.java index 34f4206..0e2563b 100644 --- a/src/main/java/me/lemire/integercompression/OptPFDS9.java +++ b/src/main/java/me/lemire/integercompression/OptPFDS9.java @@ -146,6 +146,17 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, decodePage(in, inpos, out, outpos, mynvalue); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + inlength = Util.greatestMultiple(inlength, BLOCK_SIZE); + int blockCount = inlength / BLOCK_SIZE; + // +1 for the header + // getBestBFromData limits the memory used for exceptions so that the total size of the block does not exceed BLOCK_SIZE integers. + int maxBlockSizeInInts = 1 + BLOCK_SIZE; + compressedPositions.add(inlength); + return maxBlockSizeInInts * blockCount; + } + private void decodePage(int[] in, IntWrapper inpos, int[] out, IntWrapper outpos, int thissize) { int tmpoutpos = outpos.get(); @@ -197,4 +208,4 @@ public String toString() { return this.getClass().getSimpleName(); } -} \ No newline at end of file +} diff --git a/src/main/java/me/lemire/integercompression/Simple16.java b/src/main/java/me/lemire/integercompression/Simple16.java index cdc7308..2b7f27f 100644 --- a/src/main/java/me/lemire/integercompression/Simple16.java +++ b/src/main/java/me/lemire/integercompression/Simple16.java @@ -103,6 +103,12 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o outpos.set(i_outpos); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + compressedPositions.add(inlength); + return inlength; + } + /** * Uncompress data from an array to another array. * @@ -182,4 +188,4 @@ public String toString() { { 7, 7, 7, 7 }, { 10, 9, 9, }, { 14, 14 }, { 28 } }; private static final int[][] SHIFTED_S16_BITS = shiftme(S16_BITS); -} \ No newline at end of file +} diff --git a/src/main/java/me/lemire/integercompression/Simple9.java b/src/main/java/me/lemire/integercompression/Simple9.java index 4864756..fd5194d 100644 --- a/src/main/java/me/lemire/integercompression/Simple9.java +++ b/src/main/java/me/lemire/integercompression/Simple9.java @@ -268,6 +268,12 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + compressedPositions.add(inlength); + return inlength; + } + @Override public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) { if (inlength == 0) diff --git a/src/main/java/me/lemire/integercompression/SkippableComposition.java b/src/main/java/me/lemire/integercompression/SkippableComposition.java index 5faf7c2..7dd4736 100644 --- a/src/main/java/me/lemire/integercompression/SkippableComposition.java +++ b/src/main/java/me/lemire/integercompression/SkippableComposition.java @@ -61,6 +61,16 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o F2.headlessUncompress(in, inpos, inlength, out, outpos, num); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int init = compressedPositions.get(); + int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength); + maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version? + inlength -= compressedPositions.get() - init; + maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength); + return maxLength; + } + @Override public String toString() { return F1.toString() + "+" + F2.toString(); diff --git a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java index 66143b9..b9bdc04 100644 --- a/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java +++ b/src/main/java/me/lemire/integercompression/SkippableIntegerCODEC.java @@ -69,4 +69,21 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num); + /** + * Compute the maximum number of integers that might be required to store + * the compressed form of a given input array segment, without headers. + *

    + * This is useful to pre-allocate the output buffer before calling + * {@link #headlessCompress(int[], IntWrapper, int, int[], IntWrapper)}. + *

    + * + * @param compressedPositions + * since not all schemes compress every input integer, this parameter + * returns how many input integers will actually be compressed. + * This is useful when composing multiple schemes. + * @param inlength + * number of integers to be compressed + * @return the maximum number of integers needed in the output array + */ + int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength); } diff --git a/src/main/java/me/lemire/integercompression/VariableByte.java b/src/main/java/me/lemire/integercompression/VariableByte.java index 92cfaeb..c9b04d0 100644 --- a/src/main/java/me/lemire/integercompression/VariableByte.java +++ b/src/main/java/me/lemire/integercompression/VariableByte.java @@ -21,6 +21,8 @@ */ public class VariableByte implements IntegerCODEC, ByteIntegerCODEC, SkippableIntegerCODEC { + private static final int MAX_BYTES_PER_INT = 5; + private static byte extract7bits(int i, long val) { return (byte) ((val >> (7 * i)) & ((1 << 7) - 1)); } @@ -208,6 +210,14 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] o inpos.set(p + (s!=0 ? 1 : 0)); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int maxLengthInBytes = inlength * MAX_BYTES_PER_INT; + int maxLengthInInts = (maxLengthInBytes + Integer.BYTES - 1) / Integer.BYTES; + compressedPositions.add(inlength); + return maxLengthInInts; + } + /** * Creates a new buffer of the requested size. * diff --git a/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java index 0b6ca17..7374fa5 100644 --- a/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java +++ b/src/main/java/me/lemire/integercompression/vector/VectorFastPFOR.java @@ -229,6 +229,11 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, } } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + throw new UnsupportedOperationException("Calculating the max compressed length is not supported yet."); + } + private void loadMetaData(int[] in, int inexcept, int bytesize) { // Arrays.fill(bem, (byte)0); int len = (bytesize + 3) / 4; diff --git a/src/test/java/me/lemire/integercompression/AdhocTest.java b/src/test/java/me/lemire/integercompression/AdhocTest.java index ea7800b..ee911b3 100644 --- a/src/test/java/me/lemire/integercompression/AdhocTest.java +++ b/src/test/java/me/lemire/integercompression/AdhocTest.java @@ -86,10 +86,10 @@ public void testIssue29() { @Test public void testIssue29b() { for(int x = 0; x < 64; x++) { + SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); int[] a = {2, 3, 4, 5}; - int[] b = new int[90]; + int[] b = new int[x + codec.maxHeadlessCompressedLength(new IntWrapper(0), a.length)]; int[] c = new int[a.length]; - SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); IntWrapper aOffset = new IntWrapper(0); IntWrapper bOffset = new IntWrapper(x); codec.headlessCompress(a, aOffset, a.length, b, bOffset); diff --git a/src/test/java/me/lemire/integercompression/ExampleTest.java b/src/test/java/me/lemire/integercompression/ExampleTest.java index 62eb6f6..c63c69b 100644 --- a/src/test/java/me/lemire/integercompression/ExampleTest.java +++ b/src/test/java/me/lemire/integercompression/ExampleTest.java @@ -276,10 +276,12 @@ public void headlessDemo() { int[] uncompressed1 = { 1, 2, 1, 3, 1 }; int[] uncompressed2 = { 3, 2, 4, 6, 1 }; - int[] compressed = new int[uncompressed1.length + uncompressed2.length + 1024]; - SkippableIntegerCODEC codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed1.length) + + codec.maxHeadlessCompressedLength(new IntWrapper(0), uncompressed2.length); + int[] compressed = new int[maxCompressedLength]; + // compressing IntWrapper outPos = new IntWrapper(); diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java index 3c31305..57a07e3 100644 --- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java @@ -53,10 +53,11 @@ public void consistentTest() { for (SkippableIntegerCODEC c : codecs) { System.out.println("[SkippeableBasicTest.consistentTest] codec = " + c); - int[] outBuf = new int[N + 1024]; for (int n = 0; n <= N; ++n) { IntWrapper inPos = new IntWrapper(); IntWrapper outPos = new IntWrapper(); + int[] outBuf = new int[c.maxHeadlessCompressedLength(new IntWrapper(0), n)]; + c.headlessCompress(data, inPos, n, outBuf, outPos); IntWrapper inPoso = new IntWrapper(); @@ -157,6 +158,33 @@ public void testMaxHeadlessCompressedLength() { testMaxHeadlessCompressedLength(new IntegratedBinaryPacking(), 16 * IntegratedBinaryPacking.BLOCK_SIZE); testMaxHeadlessCompressedLength(new IntegratedVariableByte(), 128); testMaxHeadlessCompressedLength(new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()), 16 * IntegratedBinaryPacking.BLOCK_SIZE + 10); + + testMaxHeadlessCompressedLength(new BinaryPacking(), 16 * BinaryPacking.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new VariableByte(), 128, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new BinaryPacking(), new VariableByte()), 16 * BinaryPacking.BLOCK_SIZE + 10, 32); + testMaxHeadlessCompressedLength(new JustCopy(), 128, 32); + testMaxHeadlessCompressedLength(new Simple9(), 128, 28); + testMaxHeadlessCompressedLength(new Simple16(), 128, 28); + testMaxHeadlessCompressedLength(new GroupSimple9(), 128, 28); + testMaxHeadlessCompressedLength(new OptPFD(), 4 * OptPFD.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFD(), new VariableByte()), 4 * OptPFD.BLOCK_SIZE + 10, 32); + testMaxHeadlessCompressedLength(new OptPFDS9(), 4 * OptPFDS9.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFDS9(), new VariableByte()), 4 * OptPFDS9.BLOCK_SIZE + 10, 32); + testMaxHeadlessCompressedLength(new OptPFDS16(), 4 * OptPFDS16.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new OptPFDS9(), new VariableByte()), 4 * OptPFDS16.BLOCK_SIZE + 10, 32); + testMaxHeadlessCompressedLength(new NewPFD(), 4 * NewPFD.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFD(), new VariableByte()), 4 * NewPFD.BLOCK_SIZE + 10, 32); + testMaxHeadlessCompressedLength(new NewPFDS9(), 4 * NewPFDS9.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFDS9(), new VariableByte()), 4 * NewPFDS9.BLOCK_SIZE + 10, 32); + testMaxHeadlessCompressedLength(new NewPFDS16(), 4 * NewPFDS16.BLOCK_SIZE, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new NewPFDS16(), new VariableByte()), 4 * NewPFDS16.BLOCK_SIZE + 10, 32); + + int fastPfor128PageSize = FastPFOR128.BLOCK_SIZE * 4; // smaller page size than the default to speed up the test + testMaxHeadlessCompressedLength(new FastPFOR128(fastPfor128PageSize), 2 * fastPfor128PageSize, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new FastPFOR128(fastPfor128PageSize), new VariableByte()), 2 * fastPfor128PageSize + 10, 32); + int fastPforPageSize = FastPFOR.BLOCK_SIZE * 4; // smaller page size than the default to speed up the test + testMaxHeadlessCompressedLength(new FastPFOR(fastPforPageSize), 2 * fastPforPageSize, 32); + testMaxHeadlessCompressedLength(new SkippableComposition(new FastPFOR(fastPforPageSize), new VariableByte()), 2 * fastPforPageSize + 10, 32); } private static void testMaxHeadlessCompressedLength(SkippableIntegratedIntegerCODEC codec, int inlengthTo) { @@ -181,4 +209,31 @@ private static void testMaxHeadlessCompressedLength(SkippableIntegratedIntegerCO assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableIntegratedComposition always adds one extra integer for the potential header } } + + private static void testMaxHeadlessCompressedLength(SkippableIntegerCODEC codec, int inlengthTo, int maxBitWidth) { + // Some schemes ignore bit widths between 21 and 31. Therefore, in addition to maxBitWidth - 1, we also test 20. + assertTrue(maxBitWidth >= 20); + int[] regularValueBitWidths = { 20, maxBitWidth - 1 }; + + for (int inlength = 0; inlength < inlengthTo; ++inlength) { + int[] input = new int[inlength]; + + int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength); + int[] output = new int[maxOutputLength]; + + for (int exceptionCount = 0; exceptionCount < inlength; exceptionCount++) { + int exception = maxBitWidth == 32 ? -1 : (1 << maxBitWidth) - 1; + + for (int regularValueBitWidth : regularValueBitWidths) { + int regularValue = regularValueBitWidth == 32 ? -1 : (1 << regularValueBitWidth) - 1; + + Arrays.fill(input, 0, exceptionCount, exception); + Arrays.fill(input, exceptionCount, input.length, regularValue); + + codec.headlessCompress(input, new IntWrapper(), inlength, output, new IntWrapper()); + // If we reach this point, no exception was thrown, which means the calculated output length was sufficient. + } + } + } + } } diff --git a/src/test/java/me/lemire/integercompression/TestUtils.java b/src/test/java/me/lemire/integercompression/TestUtils.java index 7ce51b3..b3cbff3 100644 --- a/src/test/java/me/lemire/integercompression/TestUtils.java +++ b/src/test/java/me/lemire/integercompression/TestUtils.java @@ -165,7 +165,7 @@ protected static int[] uncompress(ByteIntegerCODEC codec, byte[] data, int len) } protected static int[] compressHeadless(SkippableIntegerCODEC codec, int[] data) { - int[] outBuf = new int[data.length * 4]; + int[] outBuf = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)]; IntWrapper inPos = new IntWrapper(); IntWrapper outPos = new IntWrapper(); codec.headlessCompress(data, inPos, data.length, outBuf, outPos); From 6b86ee3dd0ce92545d07ef722209c49a1eb59ff3 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 29 Sep 2025 14:11:33 +0200 Subject: [PATCH 113/170] Compute max compressed length for SkippableLongCODEC --- .../longcompression/LongBinaryPacking.java | 14 ++++++++-- .../longcompression/LongCompressor.java | 3 ++- .../lemire/longcompression/LongJustCopy.java | 6 +++++ .../longcompression/LongVariableByte.java | 9 +++++++ .../longcompression/SkippableLongCODEC.java | 17 ++++++++++++ .../SkippableLongComposition.java | 10 +++++++ .../lemire/longcompression/LongTestUtils.java | 2 +- .../SkippableLongBasicTest.java | 26 ++++++++++++++++++- 8 files changed, 82 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java index 33bb8f1..b6ea58f 100644 --- a/src/main/java/me/lemire/longcompression/LongBinaryPacking.java +++ b/src/main/java/me/lemire/longcompression/LongBinaryPacking.java @@ -23,8 +23,9 @@ * @author Benoit Lacelle */ public final class LongBinaryPacking implements LongCODEC, SkippableLongCODEC { - final static int BLOCK_SIZE = 64; - + public final static int BLOCK_SIZE = 64; + private static final int MAX_BIT_WIDTH = Long.SIZE; + @Override public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { @@ -136,6 +137,15 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, inpos.set(tmpinpos); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int blockCount = inlength / BLOCK_SIZE; + int headersSizeInLongs = blockCount / Long.BYTES + (blockCount % Long.BYTES); + int blocksSizeInLongs = blockCount * MAX_BIT_WIDTH; + compressedPositions.add(blockCount * BLOCK_SIZE); + return headersSizeInLongs + blocksSizeInLongs; + } + @Override public String toString() { return this.getClass().getSimpleName(); diff --git a/src/main/java/me/lemire/longcompression/LongCompressor.java b/src/main/java/me/lemire/longcompression/LongCompressor.java index a2c79fd..ae1dd1a 100644 --- a/src/main/java/me/lemire/longcompression/LongCompressor.java +++ b/src/main/java/me/lemire/longcompression/LongCompressor.java @@ -40,7 +40,8 @@ public LongCompressor() { * @throws UncompressibleInputException if the data is too poorly compressible */ public long[] compress(long[] input) { - long[] compressed = new long[input.length + input.length / 100 + 1024]; + int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length); + long[] compressed = new long[maxCompressedLength + 1]; // +1 to store the length of the input // Store at index=0 the length of the input, hence enabling .headlessCompress compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); diff --git a/src/main/java/me/lemire/longcompression/LongJustCopy.java b/src/main/java/me/lemire/longcompression/LongJustCopy.java index 9b25f71..95abc1e 100644 --- a/src/main/java/me/lemire/longcompression/LongJustCopy.java +++ b/src/main/java/me/lemire/longcompression/LongJustCopy.java @@ -43,6 +43,12 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + compressedPositions.add(inlength); + return inlength; + } + @Override public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) { diff --git a/src/main/java/me/lemire/longcompression/LongVariableByte.java b/src/main/java/me/lemire/longcompression/LongVariableByte.java index ad2b0eb..e60ebd0 100644 --- a/src/main/java/me/lemire/longcompression/LongVariableByte.java +++ b/src/main/java/me/lemire/longcompression/LongVariableByte.java @@ -22,6 +22,7 @@ * @author Benoit Lacelle */ public class LongVariableByte implements LongCODEC, ByteLongCODEC, SkippableLongCODEC { + private static final int MAX_BYTES_PER_INT = 10; private static byte extract7bits(int i, long val) { return (byte) ((val >>> (7 * i)) & ((1 << 7) - 1)); @@ -326,6 +327,14 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] inpos.set(p + (s!=0 ? 1 : 0)); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int maxLengthInBytes = inlength * MAX_BYTES_PER_INT; + int maxLengthInLongs = (maxLengthInBytes + Long.BYTES - 1) / Long.BYTES; + compressedPositions.add(inlength); + return maxLengthInLongs; + } + /** * Creates a new buffer of the requested size. * diff --git a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java index 7fe1fe5..33fd562 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongCODEC.java @@ -67,4 +67,21 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num); + /** + * Compute the maximum number of longs that might be required to store + * the compressed form of a given input array segment, without headers. + *

    + * This is useful to pre-allocate the output buffer before calling + * {@link #headlessCompress(long[], IntWrapper, int, long[], IntWrapper)}. + *

    + * + * @param compressedPositions + * since not all schemes compress every input integer, this parameter + * returns how many input integers will actually be compressed. + * This is useful when composing multiple schemes. + * @param inlength + * number of longs to be compressed + * @return the maximum number of longs needed in the output array + */ + int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength); } diff --git a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java index f2e9a55..0f9800e 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java @@ -62,6 +62,16 @@ public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] F2.headlessUncompress(in, inpos, inlength, out, outpos, num); } + @Override + public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) { + int init = compressedPositions.get(); + int maxLength = F1.maxHeadlessCompressedLength(compressedPositions, inlength); + maxLength += 1; // Add +1 for the potential F2 header. Question: is this header actually needed in the headless version? + inlength -= compressedPositions.get() - init; + maxLength += F2.maxHeadlessCompressedLength(compressedPositions, inlength); + return maxLength; + } + @Override public String toString() { return F1.toString() + "+" + F2.toString(); diff --git a/src/test/java/me/lemire/longcompression/LongTestUtils.java b/src/test/java/me/lemire/longcompression/LongTestUtils.java index 4a30b41..b7d9c63 100644 --- a/src/test/java/me/lemire/longcompression/LongTestUtils.java +++ b/src/test/java/me/lemire/longcompression/LongTestUtils.java @@ -111,7 +111,7 @@ protected static long[] uncompress(ByteLongCODEC codec, byte[] data, int len) { } protected static long[] compressHeadless(SkippableLongCODEC codec, long[] data) { - long[] outBuf = new long[data.length * 4]; + long[] outBuf = new long[codec.maxHeadlessCompressedLength(new IntWrapper(0), data.length)]; IntWrapper inPos = new IntWrapper(); IntWrapper outPos = new IntWrapper(); codec.headlessCompress(data, inPos, data.length, outBuf, outPos); diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java index b317d4f..4309e9d 100644 --- a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java @@ -15,6 +15,7 @@ import me.lemire.integercompression.TestUtils; import me.lemire.integercompression.VariableByte; +import static org.junit.Assert.assertTrue; /** * Just some basic sanity tests. @@ -42,10 +43,11 @@ public void consistentTest() { for (SkippableLongCODEC c : codecs) { System.out.println("[SkippeableBasicTest.consistentTest] codec = " + c); - long[] outBuf = new long[N + 1024]; for (int n = 0; n <= N; ++n) { IntWrapper inPos = new IntWrapper(); IntWrapper outPos = new IntWrapper(); + long[] outBuf = new long[c.maxHeadlessCompressedLength(new IntWrapper(0), n)]; + c.headlessCompress(data, inPos, n, outBuf, outPos); IntWrapper inPoso = new IntWrapper(); @@ -142,5 +144,27 @@ public void varyingLengthTest2() { } } + @Test + public void testMaxHeadlessCompressedLength() { + testMaxHeadlessCompressedLength(new LongJustCopy(), 128); + testMaxHeadlessCompressedLength(new LongBinaryPacking(), 16 * LongBinaryPacking.BLOCK_SIZE); + testMaxHeadlessCompressedLength(new LongVariableByte(), 128); + testMaxHeadlessCompressedLength(new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte()), 16 * LongBinaryPacking.BLOCK_SIZE + 10); + } + + private static void testMaxHeadlessCompressedLength(SkippableLongCODEC codec, int inlengthTo) { + for (int inlength = 0; inlength < inlengthTo; ++inlength) { + long[] input = new long[inlength]; + Arrays.fill(input, -1L); + int maxOutputLength = codec.maxHeadlessCompressedLength(new IntWrapper(), inlength); + long[] output = new long[maxOutputLength]; + IntWrapper outPos = new IntWrapper(); + + codec.headlessCompress(input, new IntWrapper(), inlength, output, outPos); + // If we reach this point, no exception was thrown, which means the calculated output length was sufficient. + + assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableLongComposition always adds one extra integer for the potential header + } + } } From 1d2749faafb30d401a6daf24d225d5693aed5730 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 29 Sep 2025 14:16:03 +0200 Subject: [PATCH 114/170] Remove UncompressibleInputException Since we can now calculate the maximum compressed length, there is no longer a need to handle underestimated output array lengths by throwing this exception. --- .../integercompression/IntCompressor.java | 10 +--------- .../UncompressibleInputException.java | 19 ------------------- .../differential/IntegratedIntCompressor.java | 9 +-------- .../longcompression/LongCompressor.java | 10 +--------- 4 files changed, 3 insertions(+), 45 deletions(-) delete mode 100644 src/main/java/me/lemire/integercompression/UncompressibleInputException.java diff --git a/src/main/java/me/lemire/integercompression/IntCompressor.java b/src/main/java/me/lemire/integercompression/IntCompressor.java index 57b29f6..30f755c 100644 --- a/src/main/java/me/lemire/integercompression/IntCompressor.java +++ b/src/main/java/me/lemire/integercompression/IntCompressor.java @@ -33,7 +33,6 @@ public IntCompressor() { * * @param input array to be compressed * @return compressed array - * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length); @@ -41,14 +40,7 @@ public int[] compress(int[] input) { // Store at index=0 the length of the input, hence enabling .headlessCompress compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); - try { - codec.headlessCompress(input, new IntWrapper(0), - input.length, compressed, outpos); - } catch (IndexOutOfBoundsException ioebe) { - throw new - UncompressibleInputException("Your input is too poorly compressible " - + "with the current codec : "+codec); - } + codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos); compressed = Arrays.copyOf(compressed,outpos.intValue()); return compressed; } diff --git a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java b/src/main/java/me/lemire/integercompression/UncompressibleInputException.java deleted file mode 100644 index c0ed41f..0000000 --- a/src/main/java/me/lemire/integercompression/UncompressibleInputException.java +++ /dev/null @@ -1,19 +0,0 @@ -package me.lemire.integercompression; - -/** - * This exception might be thrown if the input is poorly compressible. - * - */ -public class UncompressibleInputException extends RuntimeException { - - /** - * Create new exception - * @param string explanation for the exception - */ - public UncompressibleInputException(String string) { - super(string); - } - - private static final long serialVersionUID = -798583799846489873L; - -} diff --git a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java index ad6467a..1d935c4 100644 --- a/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java +++ b/src/main/java/me/lemire/integercompression/differential/IntegratedIntCompressor.java @@ -3,7 +3,6 @@ import java.util.Arrays; import me.lemire.integercompression.IntWrapper; -import me.lemire.integercompression.UncompressibleInputException; /** * This is a convenience class that wraps a codec to provide @@ -36,7 +35,6 @@ public IntegratedIntCompressor() { * * @param input array to be compressed * @return compressed array - * @throws UncompressibleInputException if the data is too poorly compressible */ public int[] compress(int[] input) { int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length); @@ -44,12 +42,7 @@ public int[] compress(int[] input) { compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); IntWrapper initvalue = new IntWrapper(0); - try { - codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue); - } catch (IndexOutOfBoundsException ioebe) { - throw new UncompressibleInputException( - "Your input is too poorly compressible with the current codec : " + codec); - } + codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos, initvalue); compressed = Arrays.copyOf(compressed,outpos.intValue()); return compressed; } diff --git a/src/main/java/me/lemire/longcompression/LongCompressor.java b/src/main/java/me/lemire/longcompression/LongCompressor.java index ae1dd1a..246647f 100644 --- a/src/main/java/me/lemire/longcompression/LongCompressor.java +++ b/src/main/java/me/lemire/longcompression/LongCompressor.java @@ -3,7 +3,6 @@ import java.util.Arrays; import me.lemire.integercompression.IntWrapper; -import me.lemire.integercompression.UncompressibleInputException; /** * This is a convenience class that wraps a codec to provide @@ -37,7 +36,6 @@ public LongCompressor() { * * @param input array to be compressed * @return compressed array - * @throws UncompressibleInputException if the data is too poorly compressible */ public long[] compress(long[] input) { int maxCompressedLength = codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length); @@ -45,13 +43,7 @@ public long[] compress(long[] input) { // Store at index=0 the length of the input, hence enabling .headlessCompress compressed[0] = input.length; IntWrapper outpos = new IntWrapper(1); - try { - codec.headlessCompress(input, new IntWrapper(0), - input.length, compressed, outpos); - } catch (IndexOutOfBoundsException ioebe) { - throw new UncompressibleInputException("Your input is too poorly compressible " - + "with the current codec : "+codec); - } + codec.headlessCompress(input, new IntWrapper(0), input.length, compressed, outpos); compressed = Arrays.copyOf(compressed,outpos.intValue()); return compressed; } From e322d8ae643ebfa5fb3ab427837a400878016374 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 19:44:22 -0400 Subject: [PATCH 115/170] minor updates to maven --- jitpack.yml | 5 +++++ pom.xml | 37 +++++++++++++++---------------------- 2 files changed, 20 insertions(+), 22 deletions(-) create mode 100644 jitpack.yml diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 0000000..255e0f4 --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,5 @@ +jdk: + - openjdk21 +before_install: + - sdk install java 21-open + - sdk use java 21-open diff --git a/pom.xml b/pom.xml index 5240577..c21680c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,9 @@ 0.2.2-SNAPSHOT jar - 1.8 - 1.8 + 21 + 21 + 21 UTF-8 @@ -18,18 +19,16 @@ - scm:git:git@github.com:lemire/JavaFastPFOR.git - scm:git:git@github.com:lemire/JavaFastPFOR.git - scm:git:git@github.com:lemire/JavaFastPFOR.git + scm:git:git@github.com:fastpack/JavaFastPFOR.git + scm:git:git@github.com:fastpack/JavaFastPFOR.git + scm:git:git@github.com:fastpack/JavaFastPFOR.git lemire Daniel Lemire - lemire@gmail.com + daniel@lemire.me http://lemire.me/en/ - LICEF Research Center - http://licef.ca architect developer @@ -57,13 +56,8 @@ GitHub Issue Tracking - https://github.com/lemire/JavaFastPFOR/issues + https://github.com/fastpack/JavaFastPFOR/issues - - org.sonatype.oss - oss-parent - 9 - @@ -71,8 +65,8 @@ maven-compiler-plugin 3.12.1 - 17 - 17 + 21 + 21 @@ -88,7 +82,7 @@ - + @@ -233,9 +227,8 @@ JavaFastPFOR - https://github.com/lemire/JavaFastPFOR/ + https://github.com/fastpack/JavaFastPFOR/ -It is a library to compress and uncompress arrays of integers -very fast. The assumption is that most (but not all) values in -your array use less than 32 bits. +A library to compress and uncompress arrays of integers +very quickly. From 762fdb1942a4987709ac60b5fa92d2bd439df988 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 19:47:09 -0400 Subject: [PATCH 116/170] updating jacoco --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c21680c..bd26590 100644 --- a/pom.xml +++ b/pom.xml @@ -161,7 +161,7 @@ org.jacoco jacoco-maven-plugin - 0.8.8 + 0.8.13 me/lemire/integercompression/Kamikaze From 7efa9327eee6104ec69c439f4dc08fb09f590d5c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 19:51:18 -0400 Subject: [PATCH 117/170] removing gpg --- pom.xml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pom.xml b/pom.xml index bd26590..113c99a 100644 --- a/pom.xml +++ b/pom.xml @@ -115,20 +115,6 @@ me.lemire.integercompression.benchmarktools.Benchmark - - org.apache.maven.plugins - maven-gpg-plugin - 1.4 - - - sign-artifacts - verify - - sign - - - - org.apache.maven.plugins maven-javadoc-plugin From 309b37618c899c8ed3aa67d46e4f0f3d6662adf0 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 19:53:32 -0400 Subject: [PATCH 118/170] fix name --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 113c99a..6975671 100644 --- a/pom.xml +++ b/pom.xml @@ -19,9 +19,9 @@ - scm:git:git@github.com:fastpack/JavaFastPFOR.git - scm:git:git@github.com:fastpack/JavaFastPFOR.git - scm:git:git@github.com:fastpack/JavaFastPFOR.git + scm:git:git@github.com:fast-pack/JavaFastPFOR.git + scm:git:git@github.com:fast-pack/JavaFastPFOR.git + scm:git:git@github.com:fast-pack/JavaFastPFOR.git @@ -56,7 +56,7 @@ GitHub Issue Tracking - https://github.com/fastpack/JavaFastPFOR/issues + https://github.com/fast-pack/JavaFastPFOR/issues @@ -213,7 +213,7 @@ JavaFastPFOR - https://github.com/fastpack/JavaFastPFOR/ + https://github.com/fast-pack/JavaFastPFOR/ A library to compress and uncompress arrays of integers very quickly. From 5b8e8aef9a0d3ac11eaafe3665c6608858d416de Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:01:17 -0400 Subject: [PATCH 119/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.0 --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6975671..56f7cdf 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.2.2-SNAPSHOT + 0.3.0 jar 21 @@ -22,6 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git + JavaFastPFOR-0.3.0 From 443210a34d6f9a8d4c6da4e2550db71a84f305e2 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:05:59 -0400 Subject: [PATCH 120/170] Update Java version in workflow to 21 --- .github/workflows/basic.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/basic.yml b/.github/workflows/basic.yml index 4688fa2..7f12ed7 100644 --- a/.github/workflows/basic.yml +++ b/.github/workflows/basic.yml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false matrix: - java: [ 17, 21 ] + java: [ 21 ] steps: - uses: actions/checkout@v4.1.1 - name: Set up JDK From 8834bd4042f366c0a638451edb569e74c485bea9 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:06:46 -0400 Subject: [PATCH 121/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 56f7cdf..b0d3657 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.0 + 0.3.1-SNAPSHOT jar 21 From 511e2ca24b3ff01b5e70d0f85c5657d2de8b1433 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:09:26 -0400 Subject: [PATCH 122/170] up --- pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b0d3657..a1b9d5f 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.1-SNAPSHOT + 0.3.0-SNAPSHOT jar 21 @@ -22,7 +22,6 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.0 From 1d79fc23f93a425a65e19f16cd737e6eb51d3ddd Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:09:46 -0400 Subject: [PATCH 123/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a1b9d5f..82ad7f1 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.0-SNAPSHOT + 0.3.1-SNAPSHOT jar 21 @@ -22,6 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git + HEAD From 4470b9f718ad2444d89ee96bafeb0251b7dfe97d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:18:02 -0400 Subject: [PATCH 124/170] Revise dependency instructions for JitPack usage Updated Maven and Gradle instructions to use JitPack and the latest version of JavaFastPFor. --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 5d3fc30..59be8cd 100644 --- a/README.md +++ b/README.md @@ -72,31 +72,65 @@ non-vectorized implementation. For an example usage, see examples/vector/Example.java. The feature requires JDK 19+ and is currently for advanced users. -Maven central repository +JitPack ------------------------ +1. **Maven** + Using this code in your own project is easy with maven, just add the following code in your pom.xml file: ```xml - - - me.lemire.integercompression - JavaFastPFOR - [0.2,) - - + + com.github.fast-pack + JavaFastPFor + JavaFastPFOR-0.3.0 + +``` + +as well as jitpack as a repository... + +```xml + + + jitpack.io + https://jitpack.io + + ``` Naturally, you should replace "version" by the version you desire. +2. **Gradle (groovy)** + + +Then all you need is to edit your `build.gradle` file like so: + -You can also download JavaFastPFOR from the Maven central repository: -http://repo1.maven.org/maven2/me/lemire/integercompression/JavaFastPFOR/ +```groovy +plugins { + id 'java' +} +repositories { + mavenCentral() + maven { + url 'https://jitpack.io' + } +} + +dependencies { + implementation 'com.github.fast-pack:JavaFastPFor:JavaFastPFOR-0.3.0' +} +``` + + +Naturally, you should replace "version" by the version +you desire. + Why? ---- From 5f7e77e2a897f1caaa552c53eeb9680e553cdfe6 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:35:36 -0400 Subject: [PATCH 125/170] Add JitPack version badge to README Added a JitPack version badge to the README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 59be8cd..38f6baf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ JavaFastPFOR: A simple integer compression library in Java ========================================================== +[![](https://jitpack.io/v/fast-pack/JavaFastPFor.svg)](https://jitpack.io/#fast-pack/JavaFastPFor) [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] [![Java CI](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml/badge.svg)](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml) From 760efdbf6db9078100d1514777ace9dc1f4b22da Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:46:46 -0400 Subject: [PATCH 126/170] updating pom --- pom.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 82ad7f1..227409f 100644 --- a/pom.xml +++ b/pom.xml @@ -166,9 +166,13 @@
    - org.eluder.coveralls - coveralls-maven-plugin - 3.2.1 + org.apache.maven.plugins + maven-release-plugin + 3.0.1 + + install + true + From 015084e2f6e86b5af831615d7fbcc3473c52f407 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:49:17 -0400 Subject: [PATCH 127/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.1 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 227409f..e88e3f8 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.1-SNAPSHOT + 0.3.1 jar 21 @@ -22,7 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.1 From a0a5affd5eb0e7b16186fd38fa8a19ff466f317d Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 20:49:19 -0400 Subject: [PATCH 128/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e88e3f8..e873dab 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.1 + 0.3.2-SNAPSHOT jar 21 @@ -22,7 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.1 + HEAD From f92dc36074b43c3f7daf053f91de6bfc4a3abd5e Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 21:08:07 -0400 Subject: [PATCH 129/170] Update JavaFastPFOR version to 0.3.1 Updated the dependency version for JavaFastPFOR in both Maven and Gradle sections of the README. --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 38f6baf..b738fea 100644 --- a/README.md +++ b/README.md @@ -73,9 +73,13 @@ non-vectorized implementation. For an example usage, see examples/vector/Example.java. The feature requires JDK 19+ and is currently for advanced users. -JitPack +JavaFastPFOR as a dependency (JitPack) ------------------------ +We have a demo project using JavaFastPFOR as a dependency (both Maven and Gradle). See... + +https://github.com/fast-pack/JavaFastPFORDemo + 1. **Maven** Using this code in your own project is easy with maven, just add @@ -85,7 +89,7 @@ the following code in your pom.xml file: com.github.fast-pack JavaFastPFor - JavaFastPFOR-0.3.0 + JavaFastPFOR-0.3.1 ``` @@ -124,7 +128,7 @@ repositories { } dependencies { - implementation 'com.github.fast-pack:JavaFastPFor:JavaFastPFOR-0.3.0' + implementation 'com.github.fast-pack:JavaFastPFor:JavaFastPFOR-0.3.1' } ``` From 597a7ef18931c8986580abbecce08343d3926efb Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 21:09:41 -0400 Subject: [PATCH 130/170] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index b738fea..f073db3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ JavaFastPFOR: A simple integer compression library in Java ========================================================== -[![](https://jitpack.io/v/fast-pack/JavaFastPFor.svg)](https://jitpack.io/#fast-pack/JavaFastPFor) - [![][maven img]][maven] [![][license img]][license] [![docs-badge][]][docs] +[![](https://jitpack.io/v/fast-pack/JavaFastPFor.svg)](https://jitpack.io/#fast-pack/JavaFastPFor) [![][license img]][license] [![docs-badge][]][docs] [![Java CI](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml/badge.svg)](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml) From bc4478110417dba21de19de3b8e313b4e10ef1f5 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 21:10:44 -0400 Subject: [PATCH 131/170] Update README by removing authors and changing JDK version Removed author section and updated JDK version requirement. --- README.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/README.md b/README.md index f073db3..2e6853a 100644 --- a/README.md +++ b/README.md @@ -153,20 +153,6 @@ Nevertheless, if you want to reuse codec instances, note that by convention, unless the documentation of a codec specify that it is not thread-safe, then it can be assumed to be thread-safe. -Authors -------- - -Main contributors -* Daniel Lemire, http://lemire.me/en/ -* Muraoka Taro, https://github.com/koron - -with contributions by -* the Terrier team (Matteo Catena, Craig Macdonald, Saúl Vargas and Iadh Ounis) -* Di Wu, http://www.facebook.com/diwu1989 -* Stefan Ackermann, https://github.com/Stivo -* Samit Roy, https://github.com/roysamit -* Mulugeta Mammo, https://github.com/mulugetam (for VectorFastPFOR) - How does it compare to the Kamikaze PForDelta library? ------------------------------------------------------ @@ -186,7 +172,7 @@ Requirements Releases up to 0.1.12 require Java 7 or better. -The current development versions assume JDK 11 or better. +The current development versions assume JDK 21 or better. @@ -270,8 +256,6 @@ Funding This work was supported by NSERC grant number 26143. -[maven img]:https://maven-badges.herokuapp.com/maven-central/me.lemire.integercompression/JavaFastPFOR/badge.svg -[maven]:http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22me.lemire.integercompression%22%20 [license]:LICENSE [license img]:https://img.shields.io/badge/License-Apache%202-blue.svg From 73f164beea740c9609336f20c1eed70841dc0a5b Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 21:12:11 -0400 Subject: [PATCH 132/170] Revise README with Java example for compression Updated usage section with a complete Java example demonstrating the compression and uncompression process using FastPFOR128. --- README.md | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2e6853a..63193e9 100644 --- a/README.md +++ b/README.md @@ -48,13 +48,50 @@ as well as in GMAP and GSNAP (http://research-pub.gene.com/gmap/). Usage ------ -Really simple usage: ```java - IntegratedIntCompressor iic = new IntegratedIntCompressor(); - int[] data = ... ; // to be compressed - int[] compressed = iic.compress(data); // compressed array - int[] recov = iic.uncompress(compressed); // equals to data +package org.example; + +import me.lemire.integercompression.FastPFOR128; +import me.lemire.integercompression.IntWrapper; + +import java.util.Arrays; + +public class Main { + public static void main(String[] args) { + FastPFOR128 fastpfor = new FastPFOR128(); + + int N = 9984; + int[] data = new int[N]; + for (var i = 0; i < N; i += 150) { + data[i] = i; + } + + int[] compressedoutput1 = new int[N + 1024]; + + IntWrapper inputoffset1 = new IntWrapper(0); + IntWrapper outputoffset1 = new IntWrapper(0); + + fastpfor.compress(data, inputoffset1, N, compressedoutput1, outputoffset1); + int compressedsize1 = outputoffset1.get(); + + int[] recovered1 = new int[N]; + inputoffset1 = new IntWrapper(0); + outputoffset1 = new IntWrapper(0); + fastpfor.uncompress(compressedoutput1, outputoffset1, compressedsize1, recovered1, inputoffset1); + + // quick verification: count mismatches + int mismatches = 0; + for (int i = 0; i < N; i++) { + if (data[i] != recovered1[i]) mismatches++; + } + + System.out.println("N=" + N + " compressedSizeWords=" + compressedsize1 + " mismatches=" + mismatches); + System.out.println("first 20 original: " + Arrays.toString(Arrays.copyOf(data, 20))); + System.out.println("first 20 recovered: " + Arrays.toString(Arrays.copyOf(recovered1, 20))); + } +} + ``` For more examples, see example.java or the examples folder. From 1414beb03b85f0568c088937367219c57ff953fd Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 21:13:20 -0400 Subject: [PATCH 133/170] Remove license information from README Removed license section from README. --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 63193e9..77a86dc 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,6 @@ JavaFastPFOR: A simple integer compression library in Java [![Java CI](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml/badge.svg)](https://github.com/lemire/JavaFastPFOR/actions/workflows/basic.yml) -License -------- - -This code is released under the -Apache License Version 2.0 http://www.apache.org/licenses/. What does this do? From 43888441156c73e6bcf7fcf4897e399fbec5ccdd Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 22:33:57 -0400 Subject: [PATCH 134/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.2 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e873dab..dd1665e 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.2-SNAPSHOT + 0.3.2 jar 21 @@ -22,7 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.2 From 75093a3f636c79287977bc63ac4994eba16f58cb Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 22:33:59 -0400 Subject: [PATCH 135/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dd1665e..928a3d2 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.2 + 0.3.3-SNAPSHOT jar 21 @@ -22,7 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.2 + HEAD From beb74608ff996e209a856b3373c99a2f4b187839 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 3 Oct 2025 22:36:34 -0400 Subject: [PATCH 136/170] Update README.md --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 77a86dc..2ef8fc5 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ the following code in your pom.xml file: com.github.fast-pack JavaFastPFor - JavaFastPFOR-0.3.1 + JavaFastPFOR-0.3.2 ``` @@ -159,7 +159,7 @@ repositories { } dependencies { - implementation 'com.github.fast-pack:JavaFastPFor:JavaFastPFOR-0.3.1' + implementation 'com.github.fast-pack:JavaFastPFor:JavaFastPFOR-0.3.2' } ``` @@ -167,12 +167,6 @@ dependencies { Naturally, you should replace "version" by the version you desire. -Why? ----- - -We found no library that implemented state-of-the-art integer coding techniques -such as Binary Packing, NewPFD, OptPFD, Variable Byte, Simple 9 and so on in Java. -We wrote one. Thread safety ---- From 3eef81bc6551a304e415f9af625ac365c96e8f11 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Sat, 4 Oct 2025 21:40:52 +0200 Subject: [PATCH 137/170] Fix handling of output offset in SkippableComposition classes Previously, when outpos passed to headlessUncompress was greater than zero, the second scheme would receive an incorrect number of remaining integers to decode. --- .../SkippableComposition.java | 4 +- .../SkippableIntegratedComposition.java | 4 +- .../SkippableLongComposition.java | 4 +- .../SkippableBasicTest.java | 49 +++++++++++++++++++ .../SkippableLongBasicTest.java | 24 +++++++++ 5 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/lemire/integercompression/SkippableComposition.java b/src/main/java/me/lemire/integercompression/SkippableComposition.java index 7dd4736..fc3c18e 100644 --- a/src/main/java/me/lemire/integercompression/SkippableComposition.java +++ b/src/main/java/me/lemire/integercompression/SkippableComposition.java @@ -52,12 +52,14 @@ public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) { int init = inpos.get(); + int outposInit = outpos.get(); + F1.headlessUncompress(in, inpos, inlength, out, outpos, num); if (inpos.get() == init) { inpos.increment(); } inlength -= inpos.get() - init; - num -= outpos.get(); + num -= outpos.get() - outposInit; F2.headlessUncompress(in, inpos, inlength, out, outpos, num); } diff --git a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java index a1379ad..4786ec5 100644 --- a/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java +++ b/src/main/java/me/lemire/integercompression/differential/SkippableIntegratedComposition.java @@ -66,13 +66,15 @@ public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, if (inlength == 0) return; int init = inpos.get(); + int outposInit = outpos.get(); + F1.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue); if (inpos.get() == init) { inpos.increment(); } inlength -= inpos.get() - init; - num -= outpos.get(); + num -= outpos.get() - outposInit; F2.headlessUncompress(in, inpos, inlength, out, outpos,num,initvalue); } diff --git a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java index 0f9800e..eb03b72 100644 --- a/src/main/java/me/lemire/longcompression/SkippableLongComposition.java +++ b/src/main/java/me/lemire/longcompression/SkippableLongComposition.java @@ -53,12 +53,14 @@ public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] o public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num) { int init = inpos.get(); + int outposInit = outpos.get(); + F1.headlessUncompress(in, inpos, inlength, out, outpos, num); if (inpos.get() == init) { inpos.increment(); } inlength -= inpos.get() - init; - num -= outpos.get(); + num -= outpos.get() - outposInit; F2.headlessUncompress(in, inpos, inlength, out, outpos, num); } diff --git a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java index 57a07e3..881dada 100644 --- a/src/test/java/me/lemire/integercompression/SkippableBasicTest.java +++ b/src/test/java/me/lemire/integercompression/SkippableBasicTest.java @@ -15,6 +15,7 @@ import me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC; import org.junit.Test; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertTrue; /** @@ -236,4 +237,52 @@ private static void testMaxHeadlessCompressedLength(SkippableIntegerCODEC codec, } } } + + @Test + public void testUncompressOutputOffset_SkippableComposition() { + for (int offset : new int[] {0, 1, 6}) { + SkippableComposition codec = new SkippableComposition(new BinaryPacking(), new VariableByte()); + + int[] input = { 2, 3, 4, 5 }; + int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)]; + int[] uncompressed = new int[offset + input.length]; + + IntWrapper inputOffset = new IntWrapper(0); + IntWrapper compressedOffset = new IntWrapper(0); + + codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset); + + int compressedLength = compressedOffset.get(); + IntWrapper uncompressedOffset = new IntWrapper(offset); + compressedOffset = new IntWrapper(0); + codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length); + + assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length)); + } + } + + @Test + public void testUncompressOutputOffset_SkippableIntegratedComposition() { + for (int offset : new int[] {0, 1, 6}) { + SkippableIntegratedComposition codec = new SkippableIntegratedComposition(new IntegratedBinaryPacking(), new IntegratedVariableByte()); + + int[] input = { 2, 3, 4, 5 }; + int[] compressed = new int[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)]; + int[] uncompressed = new int[offset + input.length]; + + IntWrapper inputOffset = new IntWrapper(0); + IntWrapper compressedOffset = new IntWrapper(0); + IntWrapper initValue = new IntWrapper(0); + + codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset, initValue); + + int compressedLength = compressedOffset.get(); + IntWrapper uncompressedOffset = new IntWrapper(offset); + compressedOffset = new IntWrapper(0); + initValue = new IntWrapper(0); + codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length, initValue); + + assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length)); + } + } } diff --git a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java index 4309e9d..c4b7e01 100644 --- a/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java +++ b/src/test/java/me/lemire/longcompression/SkippableLongBasicTest.java @@ -15,6 +15,7 @@ import me.lemire.integercompression.TestUtils; import me.lemire.integercompression.VariableByte; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertTrue; /** @@ -167,4 +168,27 @@ private static void testMaxHeadlessCompressedLength(SkippableLongCODEC codec, in assertTrue(maxOutputLength <= outPos.get() + 1); // +1 because SkippableLongComposition always adds one extra integer for the potential header } } + + @Test + public void testUncompressOutputOffset_SkippableLongComposition() { + for (int offset : new int[] {0, 1, 6}) { + SkippableLongComposition codec = new SkippableLongComposition(new LongBinaryPacking(), new LongVariableByte()); + + long[] input = { 2, 3, 4, 5 }; + long[] compressed = new long[codec.maxHeadlessCompressedLength(new IntWrapper(0), input.length)]; + long[] uncompressed = new long[offset + input.length]; + + IntWrapper inputOffset = new IntWrapper(0); + IntWrapper compressedOffset = new IntWrapper(0); + + codec.headlessCompress(input, inputOffset, input.length, compressed, compressedOffset); + + int compressedLength = compressedOffset.get(); + IntWrapper uncompressedOffset = new IntWrapper(offset); + compressedOffset = new IntWrapper(0); + codec.headlessUncompress(compressed, compressedOffset, compressedLength, uncompressed, uncompressedOffset, input.length); + + assertArrayEquals(input, Arrays.copyOfRange(uncompressed, offset, offset + input.length)); + } + } } From 182f19168793be444c7336a59210247ab63558bb Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 5 Oct 2025 13:02:31 -0400 Subject: [PATCH 138/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.3 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 928a3d2..a76e4aa 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.3-SNAPSHOT + 0.3.3 jar 21 @@ -22,7 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.3 From 0e6bab01c5f1b4103138afd83aa505322b40a224 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Sun, 5 Oct 2025 13:02:33 -0400 Subject: [PATCH 139/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a76e4aa..09e48fa 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.3 + 0.3.4-SNAPSHOT jar 21 @@ -22,7 +22,7 @@ scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git scm:git:git@github.com:fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.3 + HEAD From 21252a7008ecb9c1cf13df0015eb6aa9d9dd3ce3 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Sun, 19 Oct 2025 10:03:08 +0200 Subject: [PATCH 140/170] Include IntelliJ files in .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 88b3320..5a78c84 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ tags target/ tmp/ /bin +.idea +*.iml From aac18eee72ac1c6c6e72a765c9ff906561c6d1d9 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Sun, 19 Oct 2025 10:05:00 +0200 Subject: [PATCH 141/170] Add release action --- .github/release-settings.xml | 20 ++++++++++ .github/workflows/release.yml | 75 +++++++++++++++++++++++++++++++++++ pom.xml | 47 ++++++++++++++++++++-- 3 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 .github/release-settings.xml create mode 100644 .github/workflows/release.yml diff --git a/.github/release-settings.xml b/.github/release-settings.xml new file mode 100644 index 0000000..be56a53 --- /dev/null +++ b/.github/release-settings.xml @@ -0,0 +1,20 @@ + + + + eu.maveniverse.maven.plugins + + + + + sonatype-central-portal + ${env.MAVEN_USER} + ${env.MAVEN_PASSWORD} + + sonatype-cp + njord:template:release-sca + + + + + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..12e1db6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,75 @@ +name: Release + +on: + workflow_dispatch: + inputs: + releaseVersion: + description: "Release version, e.g. 0.3.6 (optional — auto-detected from the current POM)" + required: false + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Validate release version + if: ${{ github.event.inputs.releaseVersion != '' }} + run: | + RELEASE=${{ github.event.inputs.releaseVersion }} + if [[ ! $RELEASE =~ ^[0-9]+\.[0-9]+\.[0-9]+(-SNAPSHOT)?$ ]]; then + echo "Error: releaseVersion '$RELEASE' is not in the correct format x.y.z or x.y.z-SNAPSHOT" + exit 1 + fi + + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'adopt' + + - name: Configure git + run: | + git config user.email "actions@github.com" + git config user.name "GitHub Actions" + + - name: Prepare Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + MVN_ARGS="" + if [ -n "${{ github.event.inputs.releaseVersion }}" ]; then + MVN_ARGS="$MVN_ARGS -DreleaseVersion=${{ github.event.inputs.releaseVersion }}" + fi + mvn -B release:prepare $MVN_ARGS + + - name: Determine release version + id: version + run: | + export TAG=$(grep 'scm.tag=' release.properties | cut -d'=' -f2) + export VERSION=${TAG#JavaFastPFOR-} + + echo "released_tag=${TAG}" >> $GITHUB_OUTPUT + echo "released_version=${VERSION}" >> $GITHUB_OUTPUT + + echo "Releasing tag: ${TAG}" + echo "Releasing version: ${VERSION}" + + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + MAVEN_GPG_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + MAVEN_USER: ${{ secrets.MAVEN_USER }} + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + run: | + mvn -B release:perform -Darguments="-DskipTests -Dnjord.autoPublish -s .github/release-settings.xml" + + - name: Create GitHub Release + run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/pom.xml b/pom.xml index 09e48fa..2bfe5e8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,7 @@ 21 21 UTF-8 + 0.8.5 @@ -19,11 +20,25 @@ - scm:git:git@github.com:fast-pack/JavaFastPFOR.git - scm:git:git@github.com:fast-pack/JavaFastPFOR.git - scm:git:git@github.com:fast-pack/JavaFastPFOR.git + scm:git:https://github.com/fast-pack/JavaFastPFOR.git + scm:git:https://github.com/fast-pack/JavaFastPFOR.git + scm:git:https://github.com/fast-pack/JavaFastPFOR.git HEAD + + + + sonatype-central-portal + Sonatype Central Portal + https://central.sonatype.com/repository/maven-snapshots/ + + + sonatype-central-portal + Sonatype Central Portal + https://repo.maven.apache.org/maven2/ + + + lemire @@ -60,6 +75,13 @@ https://github.com/fast-pack/JavaFastPFOR/issues
    + + + eu.maveniverse.maven.njord + extension3 + ${njord.version} + + org.apache.maven.plugins @@ -174,10 +196,29 @@ true + + org.apache.maven.plugins + maven-gpg-plugin + 3.2.8 + + + sign-artifacts + verify + + sign + + + + + + eu.maveniverse.maven.plugins + njord + ${njord.version} + maven-clean-plugin 2.5 From 729b2603f6589327df672631d8f46b8689e85cf1 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 05:30:22 +0000 Subject: [PATCH 142/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.4 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2bfe5e8..113cbc1 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.4-SNAPSHOT + 0.3.4 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.4 From 53fa8e8fe8afbf8f7bd8354dc7adff5c8f6d74fe Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 05:30:23 +0000 Subject: [PATCH 143/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 113cbc1..139a82d 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.4 + 0.3.5-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.4 + HEAD From b1be2d85b9474764cfe9368d402fc5772e49513e Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 08:58:56 +0000 Subject: [PATCH 144/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.5 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 139a82d..6ad5a19 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.5-SNAPSHOT + 0.3.5 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.5 From 077c0a2055f6873ba7f9bc84158777886adb4663 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 08:58:58 +0000 Subject: [PATCH 145/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6ad5a19..67e904f 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.5 + 0.3.6-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.5 + HEAD From 5504fcbe0dcfcb37319e1ebf3d1990932beff3df Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 20 Oct 2025 11:50:26 +0200 Subject: [PATCH 146/170] Set maven-release-plugin goals to deploy --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 67e904f..26864d0 100644 --- a/pom.xml +++ b/pom.xml @@ -192,7 +192,7 @@ maven-release-plugin 3.0.1 - install + deploy true From 806a712b063ef14643f554909a127e5bb79fa2b8 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 20 Oct 2025 06:42:52 +0200 Subject: [PATCH 147/170] Add missing env variables in release action --- .github/workflows/release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 12e1db6..8630f07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,6 +31,8 @@ jobs: with: java-version: '21' distribution: 'adopt' + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Configure git run: | @@ -40,6 +42,7 @@ jobs: - name: Prepare Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} run: | MVN_ARGS="" if [ -n "${{ github.event.inputs.releaseVersion }}" ]; then From dd8461908ec33cd35fca97e6031b9f11e790109a Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 20 Oct 2025 07:27:13 +0200 Subject: [PATCH 148/170] Allow release action to create tags --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8630f07..79a9686 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,8 @@ on: jobs: release: runs-on: ubuntu-latest + permissions: + contents: write # to automatically create tags steps: - name: Validate release version From 6b167c42a5c24bbca4768a6ffde3db86d0d77e33 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 20 Oct 2025 10:51:53 +0200 Subject: [PATCH 149/170] Fix njord configuration --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 79a9686..0b2f1c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,7 +72,7 @@ jobs: MAVEN_USER: ${{ secrets.MAVEN_USER }} MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} run: | - mvn -B release:perform -Darguments="-DskipTests -Dnjord.autoPublish -s .github/release-settings.xml" + mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish" -s .github/release-settings.xml - name: Create GitHub Release run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" From 12177805238aa06cf1a217bc8837c2b9175b34c1 Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Mon, 20 Oct 2025 10:20:58 +0200 Subject: [PATCH 150/170] [tmp] checkout master --- .github/workflows/release.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0b2f1c4..291318f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,6 +27,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + ref: master - name: Set up Java uses: actions/setup-java@v4 @@ -74,7 +75,7 @@ jobs: run: | mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish" -s .github/release-settings.xml - - name: Create GitHub Release - run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} +# - name: Create GitHub Release +# run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" +# env: +# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 9caa716d489848a928279264f585ab66d5e19b3c Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 09:55:40 +0000 Subject: [PATCH 151/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.6 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 26864d0..d8d30c1 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.6-SNAPSHOT + 0.3.6 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.6 From f7ff2bd53b513fa6a82d6f0d02ad598fb9c9c5ff Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 09:55:42 +0000 Subject: [PATCH 152/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d8d30c1..00de0dc 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.6 + 0.3.7-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.6 + HEAD From 1ca1e014e8fe7a1e74bb729944dd95f567bcb710 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 17:44:06 +0000 Subject: [PATCH 153/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.7 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 00de0dc..1c80152 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.7-SNAPSHOT + 0.3.7 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.7 From 6d5b4c926c7ed81edfe4167c118422675c7f7009 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 17:44:07 +0000 Subject: [PATCH 154/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 1c80152..f240455 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.7 + 0.3.8-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.7 + HEAD From 1fcfa0b41cb7bd8b8c47a6ae29693f77d9e77273 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 20 Oct 2025 14:08:49 -0400 Subject: [PATCH 155/170] can we make publishing automated ? --- .github/workflows/release.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 291318f..ac28c0f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,9 +73,4 @@ jobs: MAVEN_USER: ${{ secrets.MAVEN_USER }} MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} run: | - mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish" -s .github/release-settings.xml - -# - name: Create GitHub Release -# run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" -# env: -# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish=true -Dnjord.publishingType=automatic" -s .github/release-settings.xml \ No newline at end of file From eb8f27fdc585aa6b4a570303a288ca8b0bf88690 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 20 Oct 2025 19:30:07 -0400 Subject: [PATCH 156/170] minor change to the random generator (excuse to trigger a release). --- .../lemire/integercompression/synth/UniformDataGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java b/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java index bbd386a..a50497c 100644 --- a/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java +++ b/src/main/java/me/lemire/integercompression/synth/UniformDataGenerator.java @@ -42,7 +42,7 @@ int[] generateUniformHash(int N, int Max) { int[] ans = new int[N]; HashSet s = new HashSet(); while (s.size() < N) - s.add(new Integer(this.rand.nextInt(Max))); + s.add(this.rand.nextInt(Max)); Iterator i = s.iterator(); for (int k = 0; k < N; ++k) ans[k] = i.next().intValue(); From 7e7567fda5eb20c7b1df6ea8d2ea33bb1ec6dbf1 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 20 Oct 2025 19:37:00 -0400 Subject: [PATCH 157/170] putting back GitHub Release --- .github/workflows/release.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ac28c0f..29bc28a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,4 +73,9 @@ jobs: MAVEN_USER: ${{ secrets.MAVEN_USER }} MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} run: | - mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish=true -Dnjord.publishingType=automatic" -s .github/release-settings.xml \ No newline at end of file + mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish=true -Dnjord.publishingType=automatic" -s .github/release-settings.xml + + - name: Create GitHub Release + run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 78c5799dcdd2fac1b11f159f024b4f29562da01e Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 23:49:55 +0000 Subject: [PATCH 158/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.8 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index f240455..ac78f6d 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.8-SNAPSHOT + 0.3.8 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.8 From 41fa4c03d500870955db901209d19305e787a5e5 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 20 Oct 2025 23:49:56 +0000 Subject: [PATCH 159/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ac78f6d..9b53d0e 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.8 + 0.3.9-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.8 + HEAD From 763bd2ddc61a8e66d39c62bea1b43b0a815e80b4 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 20 Oct 2025 21:42:16 -0400 Subject: [PATCH 160/170] update name --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 29bc28a..ec0e674 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -76,6 +76,6 @@ jobs: mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish=true -Dnjord.publishingType=automatic" -s .github/release-settings.xml - name: Create GitHub Release - run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" + run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "${{ steps.version.outputs.released_version }}" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 6025cd079eb932617a09b18abbbcbd053e8e17cc Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 20 Oct 2025 21:43:46 -0400 Subject: [PATCH 161/170] adding a check --- .github/workflows/release.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ec0e674..2098fe9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,6 +53,15 @@ jobs: fi mvn -B release:prepare $MVN_ARGS + - name: Check release.properties + run: | + if [ ! -f release.properties ]; then + echo "release.properties not found" + exit 1 + fi + echo "Contents of release.properties:" + cat release.properties + - name: Determine release version id: version run: | From 58b142eaa1795003d54d85c8d872549783af2eff Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 20 Oct 2025 21:47:58 -0400 Subject: [PATCH 162/170] undoing --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2098fe9..d6ad167 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -85,6 +85,6 @@ jobs: mvn -B release:perform -Darguments="-DskipTests -DaltDeploymentRepository=id::default::njord: -Dnjord.autoPublish=true -Dnjord.publishingType=automatic" -s .github/release-settings.xml - name: Create GitHub Release - run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "${{ steps.version.outputs.released_version }}" + run: gh release create "${{ steps.version.outputs.released_tag }}" --generate-notes --title "Version ${{ steps.version.outputs.released_version }}" env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 8b59184298825781dffb46c6fcb50f3dbd5a055c Mon Sep 17 00:00:00 2001 From: Piotr Rzysko Date: Tue, 21 Oct 2025 06:49:54 +0200 Subject: [PATCH 163/170] Add information about Maven Central to README --- README.md | 66 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 2ef8fc5..8fcd32c 100644 --- a/README.md +++ b/README.md @@ -104,53 +104,62 @@ non-vectorized implementation. For an example usage, see examples/vector/Example.java. The feature requires JDK 19+ and is currently for advanced users. -JavaFastPFOR as a dependency (JitPack) +JavaFastPFOR as a dependency ------------------------ +JavaFastPFOR is available both on Maven Central and JitPack, so you can easily +include it in your project using either source. + We have a demo project using JavaFastPFOR as a dependency (both Maven and Gradle). See... https://github.com/fast-pack/JavaFastPFORDemo -1. **Maven** +### Maven Central + +You can add JavaFastPFOR directly from Maven Central — no extra repository configuration needed: -Using this code in your own project is easy with maven, just add -the following code in your pom.xml file: +**Maven** ```xml - - com.github.fast-pack - JavaFastPFor - JavaFastPFOR-0.3.2 - + + me.lemire.integercompression + JavaFastPFOR + 0.3.8 + ``` -as well as jitpack as a repository... +**Gradle (Groovy)** -```xml - - - jitpack.io - https://jitpack.io - - +```groovy +dependencies { + implementation 'me.lemire.integercompression:JavaFastPFOR:0.3.8' +} ``` -Naturally, you should replace "version" by the version -you desire. +### JitPack +If you prefer or need to use JitPack, you can include the dependency like this: -2. **Gradle (groovy)** +**Maven** +```xml + + + jitpack.io + https://jitpack.io + + + + + com.github.fast-pack + JavaFastPFOR + JavaFastPFOR-0.3.8 + +``` -Then all you need is to edit your `build.gradle` file like so: - +**Gradle (groovy)** ```groovy -plugins { - id 'java' -} - - repositories { mavenCentral() maven { @@ -159,11 +168,10 @@ repositories { } dependencies { - implementation 'com.github.fast-pack:JavaFastPFor:JavaFastPFOR-0.3.2' + implementation 'com.github.fast-pack:JavaFastPFOR:JavaFastPFOR-0.3.8' } ``` - Naturally, you should replace "version" by the version you desire. From 7f2f5fcdf074bc7c5d1c32119d5d32f0320ed34b Mon Sep 17 00:00:00 2001 From: lifeinwild <49356704+lifeinwild@users.noreply.github.com> Date: Sun, 23 Nov 2025 00:02:35 +0900 Subject: [PATCH 164/170] bugfix of LongDelta fix(longdelta): Add support for empty arrays in fastInverseDelta --- .../differential/LongDelta.java | 2 +- .../lemire/longcompression/LongDeltaTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/test/java/me/lemire/longcompression/LongDeltaTest.java diff --git a/src/main/java/me/lemire/longcompression/differential/LongDelta.java b/src/main/java/me/lemire/longcompression/differential/LongDelta.java index 184e53c..8399f94 100644 --- a/src/main/java/me/lemire/longcompression/differential/LongDelta.java +++ b/src/main/java/me/lemire/longcompression/differential/LongDelta.java @@ -107,7 +107,7 @@ public static void fastinverseDelta(long[] data) { } } - for (; i != data.length; ++i) { + for (; i < data.length; ++i) { data[i] += data[i - 1]; } } diff --git a/src/test/java/me/lemire/longcompression/LongDeltaTest.java b/src/test/java/me/lemire/longcompression/LongDeltaTest.java new file mode 100644 index 0000000..bfa1e6f --- /dev/null +++ b/src/test/java/me/lemire/longcompression/LongDeltaTest.java @@ -0,0 +1,23 @@ +package me.lemire.longcompression; + +import me.lemire.longcompression.differential.LongDelta; +import org.junit.Test; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertNotNull; + +public class LongDeltaTest { + @Test + public void testEmptyArrayFastInverseDelta() { + LongCompressor compressor = new LongCompressor(); + long[] input = new long[0]; + + LongDelta.delta(input); + long[] compressed = compressor.compress(input); + long[] result = compressor.uncompress(compressed); + LongDelta.fastinverseDelta(result); + + assertNotNull(result); + assertArrayEquals(input, result); + } +} From a4ded943814aa28d26466e821788cbc3b7121a05 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 25 Nov 2025 16:31:26 +0000 Subject: [PATCH 165/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.9 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 9b53d0e..769bd98 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.9-SNAPSHOT + 0.3.9 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.9 From 5eb542b2c35dfab1d9a3bb1f8b2e61f0cb4335b2 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 25 Nov 2025 16:31:27 +0000 Subject: [PATCH 166/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 769bd98..2efc724 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.9 + 0.3.10-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.9 + HEAD From 6559221f3c5df38b9e2407294653c19a715e874a Mon Sep 17 00:00:00 2001 From: lifeinwild <49356704+lifeinwild@users.noreply.github.com> Date: Wed, 17 Dec 2025 19:41:32 +0900 Subject: [PATCH 167/170] Export differential packages for JPMS This change makes differential compression algorithms accessible to other JPMS modules, allowing external projects to directly use these variants. --- src/main/java/module-info.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index d254c12..f134601 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -6,5 +6,7 @@ // requires jdk.incubator.vector; exports me.lemire.integercompression; exports me.lemire.longcompression; + exports me.lemire.longcompression.differential; + exports me.lemire.integercompression.differential; // exports me.lemire.integercompression.vector; } From f033dcf93620f9f7afb2170b11da50c5c215345c Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 18 Dec 2025 04:57:54 +0000 Subject: [PATCH 168/170] [maven-release-plugin] prepare release JavaFastPFOR-0.3.10 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2efc724..31d6f61 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.10-SNAPSHOT + 0.3.10 jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - HEAD + JavaFastPFOR-0.3.10 From babc646de163d9b36c852f978d6cc0c30428efa8 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 18 Dec 2025 04:57:55 +0000 Subject: [PATCH 169/170] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 31d6f61..33db8e6 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 me.lemire.integercompression JavaFastPFOR - 0.3.10 + 0.3.11-SNAPSHOT jar 21 @@ -23,7 +23,7 @@ scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git scm:git:https://github.com/fast-pack/JavaFastPFOR.git - JavaFastPFOR-0.3.10 + HEAD From d74e397c35eb70cba8394b0aeedea21500e5d59f Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 22 Dec 2025 16:10:07 -0500 Subject: [PATCH 170/170] adding ref --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 2ef8fc5..490b93c 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,21 @@ API Documentation http://www.javadoc.io/doc/me.lemire.integercompression/JavaFastPFOR/ + +Citing this work +----------------- + +If you use JavaFastPFOR in your work, please consider citing the project. A recommended BibTeX entry is: + +```bibtex +@misc{lemire2025_javafastpfor, + author = {Daniel Lemire}, + title = {{JavaFastPFOR: A simple integer compression library in Java}}, + year = {2025}, + howpublished = {\url{https://github.com/fast-pack/JavaFastPFOR}}, +} +``` + Want to read more? ------------------

    + * Daniel Lemire and Leonid Boytsov, Decoding billions of integers per second + * through vectorization Software: Practice & Experience + * http://onlinelibrary.wiley.com/doi/10.1002/spe.2203/abstract + * http://arxiv.org/abs/1209.2137 + *

    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%0D$ETfl)fGIi9Lv!K;q0w?v%PUQlAc2I)s^dyAo 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�YSS?3U9RV6sayfiY`KQ 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,>&2JJ;rY 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