docs: @Override
      public final void decode(long spatialKey, GHPoint latLon) {
          // Performance: calculating 'midLon' and 'midLat' on the fly is not slower than using 
          // precalculated values from arrays and for 'bits' a precalculated array is even slightly slower!
  
          // Use the value in the middle => start from "min" use "max" as initial step-size
          double midLat = (bbox.maxLat - bbox.minLat) / 2;
          double midLon = (bbox.maxLon - bbox.minLon) / 2;
          double lat = bbox.minLat;
          double lon = bbox.minLon;
          long bits = initialBits;
          while (true) {
              if ((spatialKey & bits) != 0) {
                  lat += midLat;
              }
  
              midLat /= 2;
              bits >>>= 1;
              if ((spatialKey & bits) != 0) {
                  lon += midLon;
              }
  
              midLon /= 2;
              if (bits > 1) {
                  bits >>>= 1;
              } else {
                  break;
              }
          }
  
          // stable rounding - see testBijection
          lat += midLat;
          lon += midLon;
          latLon.lat = lat;
          latLon.lon = lon;
      }