This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 34fa83008f03fa77fd1d712089050415f3a8ad28 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Thu Sep 12 12:24:05 2024 +0200 Minor fixes for documentation and compiler warnings identified as a side-effect of GDAL work. Removal of a private, unused and unimplemented method (its presence was accidental). There is no significant code change in this commit. --- .../sis/coverage/grid/BufferedGridCoverage.java | 1 + .../org/apache/sis/coverage/grid/GridExtent.java | 2 +- .../apache/sis/coverage/grid/ImageRenderer.java | 15 +++++++------- .../sis/coverage/privy/ColorModelBuilder.java | 5 +++++ .../org/apache/sis/coverage/privy/ImageLayout.java | 2 +- .../apache/sis/coverage/privy/ImageUtilities.java | 4 ++-- .../apache/sis/coverage/privy/ObservableImage.java | 2 +- .../test/org/apache/sis/xml/test/InfiniteSet.java | 2 +- .../operation/transform/ProjectiveTransform.java | 2 +- .../org/apache/sis/storage/geotiff/DataCube.java | 2 +- .../apache/sis/storage/base/MetadataBuilder.java | 3 --- .../sis/storage/base/TiledDeferredImage.java | 11 +++++++++-- .../apache/sis/storage/base/TiledGridCoverage.java | 8 ++++---- .../apache/sis/storage/base/TiledGridResource.java | 9 +++++---- .../org/apache/sis/storage/gdal/TiledCoverage.java | 23 ---------------------- .../org/apache/sis/gui/map/GestureFollower.java | 2 +- 16 files changed, 41 insertions(+), 52 deletions(-) diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/BufferedGridCoverage.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/BufferedGridCoverage.java index 179aade90e..098515b9c8 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/BufferedGridCoverage.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/BufferedGridCoverage.java @@ -367,6 +367,7 @@ public class BufferedGridCoverage extends GridCoverage { } catch (ArithmeticException | FactoryException | TransformException ex) { throw new CannotEvaluateException(ex.getMessage(), ex); } + @SuppressWarnings("LocalVariableHidesMemberVariable") final double[] values = this.values; if (banded) { for (int i=0; i<values.length; i++) { diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java index 58e1a55109..a63cb2f97c 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridExtent.java @@ -935,7 +935,7 @@ public class GridExtent implements GridEnvelope, LenientComparable, Serializable * but subclasses can override this method if another point is considered more representative. * * <p>The {@code anchor} argument tells {@linkplain GridGeometry#getGridToCRS(PixelInCell) which transform} - * the caller intend to use for converting the grid coordinates to "real world" coordinates. + * the caller intends to use for converting the grid coordinates to "real world" coordinates. * With the default implementation, the coordinate values returned with {@code CELL_CORNER} * are 0.5 cell units higher than the coordinate values returned with {@code CELL_CENTER}. * Subclasses are free to ignore this argument.</p> diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java index 569e9b3807..e344c78bbb 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java @@ -302,6 +302,7 @@ public class ImageRenderer { * @throws DisjointExtentException if the given extent does not intersect the given coverage. * @throws ArithmeticException if a stride calculation overflows the 32 bits integer capacity. */ + @SuppressWarnings("LocalVariableHidesMemberVariable") public ImageRenderer(final GridCoverage coverage, GridExtent sliceExtent) { bands = coverage.getSampleDimensions().toArray(SampleDimension[]::new); geometry = coverage.getGridGeometry(); @@ -750,12 +751,12 @@ public class ImageRenderer { public RenderedImage createImage() { final Raster raster = createRaster(); final var colorizer = new ColorModelBuilder(colors, null, false); - final ColorModel colors; + final ColorModel cm; final SampleModel sm = raster.getSampleModel(); if (colorizer.initialize(sm, bands[visibleBand]) || colorizer.initialize(sm, visibleBand)) { - colors = colorizer.createColorModel(buffer.getDataType(), bands.length, visibleBand); + cm = colorizer.createColorModel(buffer.getDataType(), bands.length, visibleBand); } else { - colors = ColorModelBuilder.NULL_COLOR_MODEL; + cm = ColorModelBuilder.NULL_COLOR_MODEL; } SliceGeometry supplier = null; if (imageGeometry == null) { @@ -766,8 +767,8 @@ public class ImageRenderer { } } final WritableRaster wr = (raster instanceof WritableRaster) ? (WritableRaster) raster : null; - if (wr != null && colors != null && (imageX | imageY) == 0) { - return new Untiled(colors, wr, properties, imageGeometry, supplier, bands); + if (wr != null && cm != null && (imageX | imageY) == 0) { + return new Untiled(cm, wr, properties, imageGeometry, supplier, bands); } if (properties == null) { properties = new Hashtable<>(); @@ -775,9 +776,9 @@ public class ImageRenderer { properties.putIfAbsent(GRID_GEOMETRY_KEY, (supplier != null) ? new DeferredProperty(supplier) : imageGeometry); properties.putIfAbsent(SAMPLE_DIMENSIONS_KEY, bands); if (wr != null) { - return new WritableTiledImage(properties, colors, width, height, 0, 0, wr); + return new WritableTiledImage(properties, cm, width, height, 0, 0, wr); } else { - return new TiledImage(properties, colors, width, height, 0, 0, raster); + return new TiledImage(properties, cm, width, height, 0, 0, raster); } } diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java index 1db726e4d5..cc67e17afa 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java @@ -261,6 +261,8 @@ public final class ColorModelBuilder { if (!categories.isEmpty()) { boolean isUndefined = true; boolean missingNodata = true; + + @SuppressWarnings("LocalVariableHidesMemberVariable") ColorsForRange[] entries = new ColorsForRange[categories.size()]; for (int i=0; i<entries.length; i++) { final var range = new ColorsForRange(categories.get(i), colors, inheritedColors); @@ -420,6 +422,8 @@ public final class ColorModelBuilder { */ source = target.forConvertedValues(true); final List<Category> categories = target.getCategories(); + + @SuppressWarnings("LocalVariableHidesMemberVariable") final ColorsForRange[] entries = new ColorsForRange[categories.size()]; for (int i=0; i<entries.length; i++) { final Category category = categories.get(i); @@ -491,6 +495,7 @@ public final class ColorModelBuilder { * If a source SampleDimension has been specified, verify if it provides a transfer function that we can * use directly. If this is the case, use the existing transfer function instead of inventing our own. */ + @SuppressWarnings("LocalVariableHidesMemberVariable") ColorsForRange[] entries = this.entries; reuse: if (source != null) { target = source.forConvertedValues(false); diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageLayout.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageLayout.java index f4590f53ae..171739d0dd 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageLayout.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageLayout.java @@ -62,7 +62,7 @@ public class ImageLayout { public static final ImageLayout DEFAULT = new ImageLayout(null, false); /** - * Same as {@link #DEFAULT}, but makes image size an integer number of tiles. + * Same as {@link #DEFAULT}, but can modify the image size for forcing it to an integer number of tiles. */ public static final ImageLayout SIZE_ADJUST = new ImageLayout(null, true); diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageUtilities.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageUtilities.java index 1f51694c65..aa27ff7a4a 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageUtilities.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ImageUtilities.java @@ -570,7 +570,7 @@ public final class ImageUtilities extends Static { * <h4>Implementation note</h4> * This method performs its calculation using <em>tile grid offset</em> instead of minimum coordinate * values because the former does not assume that image coordinates start at the beginning of first tile. - * The intend is to be consistent with {@link #pixelToTileX(RenderedImage, int)}. + * The intent is to be consistent with {@link #pixelToTileX(RenderedImage, int)}. * * @param image the image containing tiles. * @param pixels the pixel coordinates for which to get tile indices. @@ -604,7 +604,7 @@ public final class ImageUtilities extends Static { * <h4>Implementation note</h4> * This method performs its calculation using <em>tile grid offset</em> instead of minimum coordinate * values because the former does not assume that image coordinates start at the beginning of first tile. - * The intend is to be consistent with {@link #tileToPixelX(RenderedImage, int)}. + * The intent is to be consistent with {@link #tileToPixelX(RenderedImage, int)}. * * @param image the image containing tiles. * @param tiles the tile indices for which to get pixel coordinates. diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ObservableImage.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ObservableImage.java index 4642320541..4e50888bcd 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ObservableImage.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ObservableImage.java @@ -30,7 +30,7 @@ import org.apache.sis.util.ArraysExt; /** - * A buffered image which cannotify tile observers when tile are acquired fir write operations. + * A buffered image which can notify tile observers when tile are acquired for write operations. * Provides also helper methods for {@link WritableRenderedImage} implementations. * * <p>This class should be used in preference to {@link BufferedImage} when the image may be the diff --git a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/InfiniteSet.java b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/InfiniteSet.java index 8f6af3bb5c..4ad6db71c8 100644 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/InfiniteSet.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/InfiniteSet.java @@ -35,7 +35,7 @@ import java.util.Iterator; */ final class InfiniteSet<E> extends AbstractSet<E> { /** - * The singleton instance. This is not parameterized on intend. + * The singleton instance. This is not parameterized on intent. */ @SuppressWarnings("rawtypes") static final Set INSTANCE = new InfiniteSet(); diff --git a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/ProjectiveTransform.java b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/ProjectiveTransform.java index c5fa0a44e8..88545458af 100644 --- a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/ProjectiveTransform.java +++ b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/ProjectiveTransform.java @@ -73,7 +73,7 @@ class ProjectiveTransform extends AbstractLinearTransform implements ExtendedPre * An additional column is appended after the translation column. * That column contains a denominator inferred from fractional values found on the row. * All elements in the matrix row shall be multiplied by that denominator. - * The intend is to increase the chances that matrix elements are integer values. + * The intent is to increase the chances that matrix elements are integer values. * If no fractional value is found, the default denominator value is 1. */ private final double[] elt; diff --git a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataCube.java b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataCube.java index 505f122f78..bb7ff44fce 100644 --- a/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataCube.java +++ b/endorsed/src/org.apache.sis.storage.geotiff/main/org/apache/sis/storage/geotiff/DataCube.java @@ -166,7 +166,7 @@ abstract class DataCube extends TiledGridResource implements ResourceOnFileSyste * If non-null, this value will be replaced by {@link Float#NaN} at reading time. * * <div class="note"><b>Rational:</b> - * the intend is to handle the image as if it was already converted to the units of measurement. + * the intent is to handle the image as if it was already converted to the units of measurement. * Our netCDF reader does the same thing, and we want a consistent behavior of coverage readers. * </div> * diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java index cf29f73e3d..3500f6deb3 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java @@ -92,7 +92,6 @@ import org.apache.sis.metadata.privy.Merger; import org.apache.sis.referencing.NamedIdentifier; import org.apache.sis.referencing.privy.AxisDirections; import org.apache.sis.geometry.AbstractEnvelope; -import org.apache.sis.storage.Resource; import org.apache.sis.storage.AbstractResource; import org.apache.sis.storage.AbstractFeatureSet; import org.apache.sis.storage.AbstractGridCoverageResource; @@ -842,8 +841,6 @@ public class MetadataBuilder { * @param resource the resource for which to add metadata. * @param listeners the listeners to notify in case of warning, or {@code null} if none. * @throws DataStoreException if an error occurred while reading metadata from the data store. - * - * @see #addTitleOrIdentifier(Resource) */ public final void addDefaultMetadata(final AbstractResource resource, final StoreListeners listeners) throws DataStoreException { // Note: title is mandatory in ISO metadata, contrarily to the identifier. diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledDeferredImage.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledDeferredImage.java index 0ba6753ab3..149ca9872d 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledDeferredImage.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledDeferredImage.java @@ -100,8 +100,15 @@ final class TiledDeferredImage extends BatchComputedImage { */ @Override protected Raster[] computeTiles(final Rectangle tiles) throws Exception { - final TiledGridCoverage.AOI aoi = iterator.subset(new int[] {tiles.x, tiles.y}, - new int[] {Math.addExact(tiles.x, tiles.width), Math.addExact(tiles.y, tiles.height)}); + final TiledGridCoverage.AOI aoi = iterator.subset( + new int[] { + tiles.x, + tiles.y + }, + new int[] { + Math.addExact(tiles.x, tiles.width), + Math.addExact(tiles.y, tiles.height) + }); return aoi.getCoverage().readTiles(aoi); } } diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java index 489ab117f3..75f6e2d55c 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java @@ -116,7 +116,7 @@ public abstract class TiledGridCoverage extends GridCoverage { /** * Size of all tiles in the domain of this {@code TiledGridCoverage}, without clipping and subsampling. - * All coverages created from the same {@link TiledGridResource} have the same tile size values. + * All coverages created from the same {@link TiledGridResource} shall have the same tile size values. * The length of this array is the number of dimensions in the source {@link GridExtent}. * This is often {@value #BIDIMENSIONAL} but can also be more. */ @@ -208,7 +208,7 @@ public abstract class TiledGridCoverage extends GridCoverage { private final boolean deferredTileReading; /** - * Creates a new tiled grid coverage. All parameters should have been validated before this call. + * Creates a new tiled grid coverage. * * @param subset description of the {@link TiledGridResource} subset to cover. * @throws ArithmeticException if the number of tiles overflows 32 bits integer arithmetic. @@ -828,9 +828,9 @@ public abstract class TiledGridCoverage extends GridCoverage { } /** - * Returns the coordinate of the pixel to read <em>inside</em> the tile, ignoring subsampling. + * Returns the coordinates of the pixel to read <em>inside</em> the tile, ignoring subsampling. * The tile upper-left corner is assumed (0,0). Consequently, the lower coordinates are usually - * (0,0) and the upper coordinates are usually the tile size, but those value may be different + * (0,0) and the upper coordinates are usually the tile size, but those values may be different * if the enclosing {@link TiledGridCoverage} contains only one (potentially big) tile. * In that case, the reading process is more like untiled image reading. * diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridResource.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridResource.java index 9299edd0e1..ca1c0a6af9 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridResource.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridResource.java @@ -154,7 +154,7 @@ public abstract class TiledGridResource extends AbstractGridCoverageResource { * However, in multi-pixels packed sample model (e.g. bilevel image with 8 pixels per byte), * it is difficult to start reading an image at <var>x</var> location other than a byte boundary. * By declaring an "atom" size of 8 sample values in dimension X, the {@link Subset} constructor - * will ensure than the sub-region to read starts at a byte boundary when reading a bilevel image. + * will ensure that the sub-region to read starts at a byte boundary when reading a bilevel image. * * <p>The default implementation returns the {@linkplain TiledGridCoverage#getPixelsPerElement() * number of pixels per data element} for dimension X and returns 1 for all other dimensions.</p> @@ -178,7 +178,7 @@ public abstract class TiledGridResource extends AbstractGridCoverageResource { * than the one expected by the {@linkplain #getSampleModel() sample model of this resource}. * All bands will be loaded but the coverage sample model will ignore the bands that were not * enumerated in the {@code range} argument. This strategy is convenient when skipping bands - * at reading time is hard.</li> + * at reading time is difficult.</li> * <li>If {@code true}, then {@link TiledGridCoverage#model} will have its band indices and bit masks * "compressed" for making them consecutive. For example if the {@code range} argument specifies that * the bands to read are {1, 3, 4, 6}, then after "compression" band indices become {0, 1, 2, 3}. @@ -186,7 +186,7 @@ public abstract class TiledGridResource extends AbstractGridCoverageResource { * </ul> * * <p>The default implementation returns {@code true} if the sample model is a {@link ComponentSampleModel} - * and {@code false} if all other cases, because skipping bands in a packed sample model is more difficult + * and {@code false} in all other cases, because skipping bands in a packed sample model is more difficult * to implement.</p> * * @return {@code true} if the reader can load only the requested bands and skip other bands, or @@ -237,7 +237,7 @@ public abstract class TiledGridResource extends AbstractGridCoverageResource { /** * Parameters that describe the resource subset to be accepted by the {@link TiledGridCoverage} constructor. - * This is a temporary class used only for transferring information from {@link TiledGridResource}. + * Instances of this class are temporary and used only for transferring information from {@link TiledGridResource}. * This class does not perform I/O operations. */ public final class Subset { @@ -399,6 +399,7 @@ public abstract class TiledGridResource extends AbstractGridCoverageResource { * If user has specified bands in a different order, that change of band order will * be handled by the `SampleModel`, not in `includedBands` array. */ + @SuppressWarnings("LocalVariableHidesMemberVariable") int[] includedBands = null; boolean loadAllBands = rangeIndices.isIdentity(); if (!loadAllBands) { diff --git a/incubator/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledCoverage.java b/incubator/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledCoverage.java index db0852de59..4537f2a35d 100644 --- a/incubator/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledCoverage.java +++ b/incubator/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/TiledCoverage.java @@ -80,27 +80,4 @@ final class TiledCoverage extends TiledGridCoverage { return result; } } - - /** - * Transfers (reads or writes) sample values between <abbr>GDAL</abbr> raster and Java2D raster for all bands. - * The full area of the Java2D raster is transferred. It may corresponds to a sub-area of the GDAL raster. - * - * <h4>Prerequisites</h4> - * <ul> - * <li>The Java2D raster shall use a {@link java.awt.image.ComponentSampleModel}.</li> - * <li>In read mode, the given raster shall be an instance of {@link WritableRaster}.</li> - * </ul> - * - * @param gdal set of handles for invoking <abbr>GDAL</abbr> functions. - * @param rwFlag {@link OpenFlag#READ} or {@link OpenFlag#WRITE}. - * @param aoi region of the image to read or write. (0,0) is the upper-left pixel. - * @param raster the Java2D raster where to store of fetch the values to read or write. - * @throws ClassCastException if a prerequisite about expected classes is not true. - * @throws DataStoreException if <var>GDAL</var> reported a warning or fatal error. - */ - private void transfer(final GDAL gdal, final int rwFlag, final Rectangle aoi, final Raster raster) - throws DataStoreException - { - - } } diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/GestureFollower.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/GestureFollower.java index 644f4e2358..c26123c944 100644 --- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/GestureFollower.java +++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/map/GestureFollower.java @@ -80,7 +80,7 @@ public class GestureFollower extends CanvasFollower implements EventHandler<Mous }; /** - * The effect applied on the cursor. The intend is to make it more visible if the cursor color + * The effect applied on the cursor. The intent is to make it more visible if the cursor color * is close to the color of features rendered on the map. */ private static final DropShadow CURSOR_EFFECT = new DropShadow(BlurType.ONE_PASS_BOX, Color.DEEPPINK, 5, 0, 0, 0);