public static int findEmptyRegionHash(int widthChunks, int heightChunks) {
		int regionsDistanceX = 1;
		while(widthChunks > 8) {
			regionsDistanceX += 1;
			widthChunks -= 8;
		}
		int regionsDistanceY = 1;
		while(heightChunks > 8) {
			regionsDistanceY += 1;
			heightChunks -= 8;
		}
		synchronized (ALGORITHM_LOCK) {
			for(int regionX = 1; regionX <= MAX_REGION_X - regionsDistanceX;  regionX++) { 
				skip: for(int regionY = 1; regionY <= MAX_REGION_Y - regionsDistanceY;  regionY++) { 
					int regionHash = getRegionHash(regionX, regionY); //map hash because skiping to next map up		
					for(int checkRegionX = regionX - 1; checkRegionX <= regionX + regionsDistanceX; checkRegionX++) {
						for(int checkRegionY = regionY - 1; checkRegionY <= regionY + regionsDistanceY; checkRegionY++) {
							int hash = getRegionHash(checkRegionX, checkRegionY);
							if(regionExists(hash)) 
								continue skip;
							
						}
					}
					reserveArea(regionX, regionY, regionsDistanceX, regionsDistanceY, false);
					return regionHash;
				}
			}
		}
		return -1;
		
	}