@cogeotiff/core 6.1.1 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.0.0](https://github.com/blacha/cogeotiff/compare/v6.1.1...v7.0.0) (2022-03-17)
7
+
8
+
9
+ ### Features
10
+
11
+ * **core:** upgrade chunkd and remove logger for internal fetches ([#832](https://github.com/blacha/cogeotiff/issues/832)) ([71bd740](https://github.com/blacha/cogeotiff/commit/71bd7409706e4a82e6a29b2a3fc0e8b25221e9fc))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [6.1.1](https://github.com/blacha/cogeotiff/compare/v6.1.0...v6.1.1) (2022-01-26)
7
18
 
8
19
 
@@ -1,4 +1,4 @@
1
- import { ChunkSource, LogType } from '@chunkd/core';
1
+ import { ChunkSource } from '@chunkd/core';
2
2
  import { CogTiffImage } from './cog.tiff.image.js';
3
3
  import { TiffVersion } from './const/tiff.version.js';
4
4
  import { CogTifGhostOptions } from './read/tiff.gdal.js';
@@ -21,7 +21,7 @@ export declare class CogTiff {
21
21
  *
22
22
  * @param loadGeoKeys Whether to also initialize the GeoKeyDirectory
23
23
  */
24
- init(loadGeoKeys?: boolean, logger?: LogType): Promise<CogTiff>;
24
+ init(loadGeoKeys?: boolean): Promise<CogTiff>;
25
25
  private doInit;
26
26
  private fetchIfd;
27
27
  getImage(z: number): CogTiffImage;
@@ -1 +1 @@
1
- {"version":3,"file":"cog.tiff.d.ts","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAmC,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK3F,qBAAa,OAAO;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,cAAoB;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAM;IAC5B,OAAO,qBAA4B;IAEnC,OAAO,CAAC,MAAM,CAAkB;IAChC,SAAS,EAAE,aAAa,CAAiB;gBAE7B,MAAM,EAAE,WAAW;IAK/B,sCAAsC;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC;;;;OAIG;IACH,IAAI,CAAC,WAAW,UAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAM/C,MAAM;YAWN,QAAQ;IAkCtB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY;IAIjC;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAoBtD;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;YAQ7F,UAAU;YA0BV,OAAO;IAgDrB,gDAAgD;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"cog.tiff.d.ts","sourceRoot":"","sources":["../src/cog.tiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAmC,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK3F,qBAAa,OAAO;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,cAAoB;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAM;IAC5B,OAAO,qBAA4B;IAEnC,OAAO,CAAC,MAAM,CAAkB;IAChC,SAAS,EAAE,aAAa,CAAiB;gBAE7B,MAAM,EAAE,WAAW;IAK/B,sCAAsC;IACtC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC;;;;OAIG;IACH,IAAI,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;YAM7B,MAAM;YAWN,QAAQ;IAkCtB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY;IAIjC;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAoBtD;;;;;;;;OAQG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;YAQ7F,UAAU;YASV,OAAO;IAqBrB,gDAAgD;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -1,4 +1,3 @@
1
- import { LogType } from '@chunkd/core';
2
1
  import { CogTiff } from './cog.tiff.js';
3
2
  import { TiffMimeType } from './const/tiff.mime.js';
4
3
  import { TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
@@ -41,7 +40,7 @@ export declare class CogTiffImage {
41
40
  *
42
41
  * @param loadGeoTags Whether to load the GeoKeyDirectory and unpack it
43
42
  */
44
- init(loadGeoTags?: boolean, l?: LogType): Promise<void>;
43
+ init(loadGeoTags?: boolean): Promise<void>;
45
44
  /**
46
45
  * Get the value of a TiffTag if it exists null otherwise
47
46
  */
@@ -49,7 +48,7 @@ export declare class CogTiffImage {
49
48
  /**
50
49
  * Load and unpack the GeoKeyDirectory
51
50
  */
52
- loadGeoTiffTags(l: LogType): Promise<void>;
51
+ loadGeoTiffTags(): Promise<void>;
53
52
  /**
54
53
  * Get the associated GeoTiffTags
55
54
  */
@@ -58,7 +57,7 @@ export declare class CogTiffImage {
58
57
  * Load a tag, if it is not currently loaded, fetch the required data for the tag.
59
58
  * @param tag tag to fetch
60
59
  */
61
- fetch<T>(tag: TiffTag, l: LogType): Promise<T | null>;
60
+ fetch<T>(tag: TiffTag): Promise<T | null>;
62
61
  /**
63
62
  * Get the origin point for the image
64
63
  *
@@ -137,7 +136,7 @@ export declare class CogTiffImage {
137
136
  * @param index tile index
138
137
  * @returns file offset of the specified tile
139
138
  */
140
- protected getTileOffset(index: number, l?: LogType): Promise<number>;
139
+ protected getTileOffset(index: number): Promise<number>;
141
140
  getTileBounds(x: number, y: number): BoundingBox;
142
141
  /**
143
142
  * Read a strip into a uint8 array
@@ -160,11 +159,11 @@ export declare class CogTiffImage {
160
159
  * @param x Tile x offset
161
160
  * @param y Tile y offset
162
161
  */
163
- getTile(x: number, y: number, l?: LogType): Promise<{
162
+ getTile(x: number, y: number): Promise<{
164
163
  mimeType: TiffMimeType;
165
164
  bytes: Uint8Array;
166
165
  } | null>;
167
- protected getTileSize(index: number, l?: LogType): Promise<{
166
+ protected getTileSize(index: number): Promise<{
168
167
  offset: number;
169
168
  imageSize: number;
170
169
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"cog.tiff.image.d.ts","sourceRoot":"","sources":["../src/cog.tiff.image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cog.tiff.image.d.ts","sourceRoot":"","sources":["../src/cog.tiff.image.ts"],"names":[],"mappings":"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"}
@@ -19,25 +19,25 @@ export class CogTiffImage {
19
19
  *
20
20
  * @param loadGeoTags Whether to load the GeoKeyDirectory and unpack it
21
21
  */
22
- async init(loadGeoTags = false, l = null) {
22
+ async init(loadGeoTags = false) {
23
23
  const requiredTags = [
24
- this.fetch(TiffTag.Compression, l),
25
- this.fetch(TiffTag.ImageHeight, l),
26
- this.fetch(TiffTag.ImageWidth, l),
27
- this.fetch(TiffTag.ModelPixelScale, l),
28
- this.fetch(TiffTag.ModelTiePoint, l),
29
- this.fetch(TiffTag.ModelTransformation, l),
30
- this.fetch(TiffTag.TileHeight, l),
31
- this.fetch(TiffTag.TileWidth, l),
24
+ this.fetch(TiffTag.Compression),
25
+ this.fetch(TiffTag.ImageHeight),
26
+ this.fetch(TiffTag.ImageWidth),
27
+ this.fetch(TiffTag.ModelPixelScale),
28
+ this.fetch(TiffTag.ModelTiePoint),
29
+ this.fetch(TiffTag.ModelTransformation),
30
+ this.fetch(TiffTag.TileHeight),
31
+ this.fetch(TiffTag.TileWidth),
32
32
  ];
33
33
  if (loadGeoTags) {
34
- requiredTags.push(this.fetch(TiffTag.GeoKeyDirectory, l));
35
- requiredTags.push(this.fetch(TiffTag.GeoAsciiParams, l));
36
- requiredTags.push(this.fetch(TiffTag.GeoDoubleParams, l));
34
+ requiredTags.push(this.fetch(TiffTag.GeoKeyDirectory));
35
+ requiredTags.push(this.fetch(TiffTag.GeoAsciiParams));
36
+ requiredTags.push(this.fetch(TiffTag.GeoDoubleParams));
37
37
  }
38
38
  await Promise.all(requiredTags);
39
39
  if (loadGeoTags) {
40
- await this.loadGeoTiffTags(l);
40
+ await this.loadGeoTiffTags();
41
41
  }
42
42
  }
43
43
  /**
@@ -52,7 +52,7 @@ export class CogTiffImage {
52
52
  /**
53
53
  * Load and unpack the GeoKeyDirectory
54
54
  */
55
- async loadGeoTiffTags(l) {
55
+ async loadGeoTiffTags() {
56
56
  // Already loaded
57
57
  if (this.tagsGeoLoaded)
58
58
  return;
@@ -64,9 +64,9 @@ export class CogTiffImage {
64
64
  if (!sourceTag.isReady && sourceTag instanceof CogTiffTagLazy) {
65
65
  // Load all the required keys
66
66
  await Promise.all([
67
- this.fetch(TiffTag.GeoKeyDirectory, l),
68
- this.fetch(TiffTag.GeoAsciiParams, l),
69
- this.fetch(TiffTag.GeoDoubleParams, l),
67
+ this.fetch(TiffTag.GeoKeyDirectory),
68
+ this.fetch(TiffTag.GeoAsciiParams),
69
+ this.fetch(TiffTag.GeoDoubleParams),
70
70
  ]);
71
71
  }
72
72
  this.tagsGeoLoaded = true;
@@ -107,12 +107,12 @@ export class CogTiffImage {
107
107
  * Load a tag, if it is not currently loaded, fetch the required data for the tag.
108
108
  * @param tag tag to fetch
109
109
  */
110
- async fetch(tag, l) {
110
+ async fetch(tag) {
111
111
  const sourceTag = this.tags.get(tag);
112
112
  if (sourceTag == null)
113
113
  return null;
114
114
  if (CogTiffTag.isLazy(sourceTag))
115
- return sourceTag.fetch(l);
115
+ return sourceTag.fetch();
116
116
  return sourceTag.value;
117
117
  }
118
118
  /**
@@ -287,13 +287,13 @@ export class CogTiffImage {
287
287
  * @param index tile index
288
288
  * @returns file offset of the specified tile
289
289
  */
290
- async getTileOffset(index, l) {
290
+ async getTileOffset(index) {
291
291
  const tileOffset = this.tileOffset;
292
292
  if (index < 0 || index > tileOffset.dataCount) {
293
293
  throw new Error(`Tile offset: ${index} out of range: 0 -> ${tileOffset.dataCount}`);
294
294
  }
295
295
  // Fetch only the part of the offsets that are needed
296
- return tileOffset.getValueAt(index, l);
296
+ return tileOffset.getValueAt(index);
297
297
  }
298
298
  // Clamp the bounds of the output image to the size of the image, as sometimes the edge tiles are not full tiles
299
299
  getTileBounds(x, y) {
@@ -334,13 +334,13 @@ export class CogTiffImage {
334
334
  return actualBytes;
335
335
  }
336
336
  /** Read image bytes at the given offset */
337
- async getBytes(offset, byteCount, l) {
337
+ async getBytes(offset, byteCount) {
338
338
  const mimeType = this.compression;
339
339
  if (mimeType == null)
340
340
  throw new Error('Unsupported compression: ' + this.value(TiffTag.Compression));
341
341
  if (byteCount === 0)
342
342
  return null;
343
- await this.tif.source.loadBytes(offset, byteCount, l);
343
+ await this.tif.source.loadBytes(offset, byteCount);
344
344
  const bytes = this.tif.source.bytes(offset, byteCount);
345
345
  if (this.compression === TiffMimeType.JPEG) {
346
346
  return { mimeType, bytes: this.getJpegHeader(bytes) };
@@ -355,7 +355,7 @@ export class CogTiffImage {
355
355
  * @param x Tile x offset
356
356
  * @param y Tile y offset
357
357
  */
358
- async getTile(x, y, l) {
358
+ async getTile(x, y) {
359
359
  const mimeType = this.compression;
360
360
  const size = this.size;
361
361
  const tiles = this.tileSize;
@@ -373,29 +373,29 @@ export class CogTiffImage {
373
373
  const totalTiles = nxTiles * nyTiles;
374
374
  if (idx >= totalTiles)
375
375
  throw new Error(`Tile index is outside of tile range: ${idx} >= ${totalTiles}`);
376
- const { offset, imageSize } = await this.getTileSize(idx, l);
377
- return this.getBytes(offset, imageSize, l);
376
+ const { offset, imageSize } = await this.getTileSize(idx);
377
+ return this.getBytes(offset, imageSize);
378
378
  }
379
- async getTileSize(index, l) {
379
+ async getTileSize(index) {
380
380
  // GDAL optimizes tiles by storing the size of the tile in
381
381
  // the few bytes leading up to the tile
382
382
  if (this.tif.options.tileLeaderByteSize) {
383
- const offset = await this.getTileOffset(index, l);
383
+ const offset = await this.getTileOffset(index);
384
384
  // Sparse COG no data found
385
385
  if (offset === 0)
386
386
  return { offset: 0, imageSize: 0 };
387
387
  const leaderBytes = this.tif.options.tileLeaderByteSize;
388
388
  // This fetch will generally load in the bytes needed for the image too
389
389
  // provided the image size is less than the size of a chunk
390
- await this.tif.source.loadBytes(offset - leaderBytes, leaderBytes, l);
390
+ await this.tif.source.loadBytes(offset - leaderBytes, leaderBytes);
391
391
  return { offset, imageSize: this.tif.source.getUint(offset - leaderBytes, leaderBytes) };
392
392
  }
393
393
  const byteCounts = this.tags.get(TiffTag.TileByteCounts);
394
394
  if (byteCounts == null) {
395
395
  throw new Error('No tile byte counts found');
396
396
  }
397
- const [offset, imageSize] = await Promise.all([this.getTileOffset(index, l), byteCounts.getValueAt(index, l)]);
397
+ const [offset, imageSize] = await Promise.all([this.getTileOffset(index), byteCounts.getValueAt(index)]);
398
398
  return { offset, imageSize };
399
399
  }
400
400
  }
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nLnRpZmYuaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29nLnRpZmYuaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQXNCM0MsTUFBTSxPQUFPLFlBQVk7SUFjckIsWUFBWSxHQUFZLEVBQUUsRUFBVSxFQUFFLElBQWtDO1FBTHhFLHNDQUFzQztRQUM5QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUM5QixpREFBaUQ7UUFDakQsWUFBTyxHQUFxQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2xELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFhLElBQVc7UUFDcEQsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDakMsSUFBSSxD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QUMsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDNUY7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFxQixDQUFDO1FBQzdFLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDaEQ7UUFDRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ1R5cGUgfSBmcm9tICdAY2h1bmtkL2NvcmUnO1xuaW1wb3J0IHsgQ29nVGlmZiB9IGZyb20gJy4vY29nLnRpZmYuanMnO1xuaW1wb3J0IHsgVGlmZkNvbXByZXNzaW9uLCBUaWZmTWltZVR5cGUgfSBmcm9tICcuL2NvbnN0L3RpZmYubWltZS5qcyc7XG5pbXBvcnQgeyBUaWZmVGFnLCBUaWZmVGFnR2VvIH0gZnJvbSAnLi9jb25zdC90aWZmLnRhZy5pZC5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnQmFzZSB9IGZyb20gJy4vcmVhZC90YWcvdGlmZi50YWcuYmFzZS5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnTGF6eSB9IGZyb20gJy4vcmVhZC90YWcvdGlmZi50YWcubGF6eS5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnT2Zmc2V0IH0gZnJvbSAnLi9yZWFkL3RhZy90aWZmLnRhZy5vZmZzZXQuanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZyB9IGZyb20gJy4vcmVhZC90aWZmLnRhZy5qcyc7XG5pbXBvcnQgeyBCb3VuZGluZ0JveCwgU2l6ZSB9IGZyb20gJy4vdmVjdG9yLmpzJztcblxuLyoqIEludmFsaWQgRVBTRyBjb2RlICovXG5leHBvcnQgY29uc3QgSW52YWxpZFByb2plY3Rpb25Db2RlID0gMzI3Njc7XG5cbi8qKlxuICogTnVtYmVyIG9mIHRpbGVzIHVzZWQgaW5zaWRlIHRoaXMgaW1hZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2dUaWZmSW1hZ2VUaWxlZENvdW50IHtcbiAgICAvKiogTnVtYmVyIG9mIHRpbGVzIG9uIHRoZSB4IGF4aXMgKi9cbiAgICB4OiBudW1iZXI7XG4gICAgLyoqIE51bWJlciBvZiB0aWxlcyBvbiB0aGUgeSBheGlzICovXG4gICAgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFNpemUgb2YgYSBpbmRpdmlkdWFsIHRpbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2dUaWZmSW1hZ2VUaWxlU2l6ZSB7XG4gICAgLyoqIFRpbGUgd2lkdGggKHBpeGVscykgKi9cbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIC8qKiBUaWxlIGhlaWdodCAocGl4ZWxzKSAqL1xuICAgIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQ29nVGlmZkltYWdlIHtcbiAgICAvKiogQWxsIElGRCB0YWdzIHRoYXQgaGF2ZSBiZWVuIHJlYWQgZm9yIHRoZSBpbWFnZSAqL1xuICAgIHRhZ3M6IE1hcDxUaWZmVGFnLCBDb2dUaWZmVGFnQmFzZT47XG5cbiAgICAvKiogSWQgb2YgdGhlIHRpZiBpbWFnZSwgZ2VuZXJhbGx5IHRoZSBpbWFnZSBpbmRleCBpbnNpZGUgdGhlIHRpZiAqL1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICB0aWY6IENvZ1RpZmY7XG5cbiAgICAvKiogSGFzIGxvYWRHZW9UaWZmVGFncyBiZWVuIGNhbGxlZCAqL1xuICAgIHByaXZhdGUgdGFnc0dlb0xvYWRlZCA9IGZhbHNlO1xuICAgIC8qKiBTdWIgdGFncyBzdG9yZWQgaW4gVGlmZlRhZy5HZW9LZXlEaXJlY3RvcnkgKi9cbiAgICB0YWdzR2VvOiBNYXA8VGlmZlRhZ0dlbywgc3RyaW5nIHwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcblxuICAgIGNvbnN0cnVjdG9yKHRpZjogQ29nVGlmZiwgaWQ6IG51bWJlciwgdGFnczogTWFwPFRpZmZUYWcsIENvZ1RpZmZUYWdCYXNlPikge1xuICAgICAgICB0aGlzLnRpZiA9IHRpZjtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB0aGlzLnRhZ3MgPSB0YWdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcmNlIGxvYWRpbmcgb2YgaW1wb3J0YW50IHRhZ3MgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gbG9hZGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9hZEdlb1RhZ3MgV2hldGhlciB0byBsb2FkIHRoZSBHZW9LZXlEaXJlY3RvcnkgYW5kIHVucGFjayBpdFxuICAgICAqL1xuICAgIGFzeW5jIGluaXQobG9hZEdlb1RhZ3MgPSBmYWxzZSwgbDogTG9nVHlwZSA9IG51bGwgYXMgYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkVGFncyA9IFtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5Db21wcmVzc2lvbiwgbCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuSW1hZ2VIZWlnaHQsIGwpLFxuICAgICAgICAgICAgdGhpcy5mZXRjaChUaWZmVGFnLkltYWdlV2lkdGgsIGwpLFxuICAgICAgICAgICAgdGhpcy5mZXRjaChUaWZmVGFnLk1vZGVsUGl4ZWxTY2FsZSwgbCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuTW9kZWxUaWVQb2ludCwgbCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuTW9kZWxUcmFuc2Zvcm1hdGlvbiwgbCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuVGlsZUhlaWdodCwgbCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuVGlsZVdpZHRoLCBsKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAobG9hZEdlb1RhZ3MpIHtcbiAgICAgICAgICAgIHJlcXVpcmVkVGFncy5wdXNoKHRoaXMuZmV0Y2goVGlmZlRhZy5HZW9LZXlEaXJlY3RvcnksIGwpKTtcbiAgICAgICAgICAgIHJlcXVpcmVkVGFncy5wdXNoKHRoaXMuZmV0Y2goVGlmZlRhZy5HZW9Bc2NpaVBhcmFtcywgbCkpO1xuICAgICAgICAgICAgcmVxdWlyZWRUYWdzLnB1c2godGhpcy5mZXRjaChUaWZmVGFnLkdlb0RvdWJsZVBhcmFtcywgbCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVxdWlyZWRUYWdzKTtcbiAgICAgICAgaWYgKGxvYWRHZW9UYWdzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRHZW9UaWZmVGFncyhsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgb2YgYSBUaWZmVGFnIGlmIGl0IGV4aXN0cyBudWxsIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHZhbHVlPFQ+KHRhZzogVGlmZlRhZyk6IFQgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc291cmNlVGFnID0gdGhpcy50YWdzLmdldCh0YWcpO1xuICAgICAgICBpZiAoc291cmNlVGFnID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gc291cmNlVGFnLnZhbHVlIGFzIFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBhbmQgdW5wYWNrIHRoZSBHZW9LZXlEaXJlY3RvcnlcbiAgICAgKi9cbiAgICBhc3luYyBsb2FkR2VvVGlmZlRhZ3MobDogTG9nVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBBbHJlYWR5IGxvYWRlZFxuICAgICAgICBpZiAodGhpcy50YWdzR2VvTG9hZGVkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvdXJjZVRhZyA9IHRoaXMudGFncy5nZXQoVGlmZlRhZy5HZW9LZXlEaXJlY3RvcnkpO1xuICAgICAgICBpZiAoc291cmNlVGFnID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGFnc0dlb0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzb3VyY2VUYWcuaXNSZWFkeSAmJiBzb3VyY2VUYWcgaW5zdGFuY2VvZiBDb2dUaWZmVGFnTGF6eSkge1xuICAgICAgICAgICAgLy8gTG9hZCBhbGwgdGhlIHJlcXVpcmVkIGtleXNcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuR2VvS2V5RGlyZWN0b3J5LCBsKSxcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuR2VvQXNjaWlQYXJhbXMsIGwpLFxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5HZW9Eb3VibGVQYXJhbXMsIGwpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdzR2VvTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNvdXJjZVRhZy52YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdlb1RhZ3MgPSBzb3VyY2VUYWcudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShnZW9UYWdzKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdlbyB0YWdzIGZvdW5kJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSA0OyBpIDw9IGdlb1RhZ3NbM10gKiA0OyBpICs9IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGdlb1RhZ3NbaV0gYXMgVGlmZlRhZ0dlbztcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gZ2VvVGFnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGdlb1RhZ3NbaSArIDNdO1xuXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ3NHZW8uc2V0KGtleSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHRoaXMudGFncy5nZXQobG9jYXRpb24pO1xuICAgICAgICAgICAgaWYgKHRhZyA9PSBudWxsIHx8IHRhZy52YWx1ZSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VvVGFnc1tpICsgMl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWcudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzR2VvLnNldChrZXksIHRhZy52YWx1ZVtvZmZzZXQgKyBjb3VudCAtIDFdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhZy52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ3NHZW8uc2V0KGtleSwgdGFnLnZhbHVlLnN1YnN0cihvZmZzZXQsIG9mZnNldCArIGNvdW50IC0gMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYXNzb2NpYXRlZCBHZW9UaWZmVGFnc1xuICAgICAqL1xuICAgIHZhbHVlR2VvKHRhZzogVGlmZlRhZ0dlbyk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLnRhZ3NHZW9Mb2FkZWQgPT09IGZhbHNlKSB0aHJvdyBuZXcgRXJyb3IoJ2xvYWRHZW9UaWZmVGFncygpIGhhcyBub3QgYmVlbiBjYWxsZWQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnc0dlby5nZXQodGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGEgdGFnLCBpZiBpdCBpcyBub3QgY3VycmVudGx5IGxvYWRlZCwgZmV0Y2ggdGhlIHJlcXVpcmVkIGRhdGEgZm9yIHRoZSB0YWcuXG4gICAgICogQHBhcmFtIHRhZyB0YWcgdG8gZmV0Y2hcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZmV0Y2g8VD4odGFnOiBUaWZmVGFnLCBsOiBMb2dUeXBlKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzb3VyY2VUYWcgPSB0aGlzLnRhZ3MuZ2V0KHRhZyk7XG4gICAgICAgIGlmIChzb3VyY2VUYWcgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChDb2dUaWZmVGFnLmlzTGF6eShzb3VyY2VUYWcpKSByZXR1cm4gc291cmNlVGFnLmZldGNoKGwpIGFzIGFueTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVRhZy52YWx1ZSBhcyBUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgb3JpZ2luIHBvaW50IGZvciB0aGUgaW1hZ2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIG9yaWdpbiBwb2ludCBvZiB0aGUgaW1hZ2VcbiAgICAgKi9cbiAgICBnZXQgb3JpZ2luKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIGNvbnN0IHRpZVBvaW50czogbnVtYmVyW10gfCBudWxsID0gdGhpcy52YWx1ZTxudW1iZXJbXT4oVGlmZlRhZy5Nb2RlbFRpZVBvaW50KTtcbiAgICAgICAgaWYgKHRpZVBvaW50cyAhPSBudWxsICYmIHRpZVBvaW50cy5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGllUG9pbnRzWzNdLCB0aWVQb2ludHNbNF0sIHRpZVBvaW50c1s1XV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbFRyYW5zZm9ybWF0aW9uID0gdGhpcy52YWx1ZTxudW1iZXJbXT4oVGlmZlRhZy5Nb2RlbFRyYW5zZm9ybWF0aW9uKTtcbiAgICAgICAgaWYgKG1vZGVsVHJhbnNmb3JtYXRpb24gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFttb2RlbFRyYW5zZm9ybWF0aW9uWzNdLCBtb2RlbFRyYW5zZm9ybWF0aW9uWzddLCBtb2RlbFRyYW5zZm9ybWF0aW9uWzExXV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3ViIGltYWdlLCB1c2UgdGhlIG9yaWdpbiBmcm9tIHRoZSB0b3AgbGV2ZWwgaW1hZ2VcbiAgICAgICAgaWYgKHRoaXMudmFsdWUoVGlmZlRhZy5OZXdTdWJGaWxlVHlwZSkgPT09IDEgJiYgdGhpcy5pZCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGlmLmltYWdlc1swXS5vcmlnaW47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltYWdlIGRvZXMgbm90IGhhdmUgYSBnZW8gdHJhbnNmb3JtYXRpb24uJyk7XG4gICAgfVxuXG4gICAgLyoqIElzIHRoZXJlIGVub3VnaCBnZW8gaW5mb3JtYXRpb24gb24gdGhpcyBpbWFnZSB0byBmaWd1cmUgb3V0IHdoZXJlIGl0cyBhY3R1YWxseSBsb2NhdGVkICovXG4gICAgZ2V0IGlzR2VvTG9jYXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNJbWFnZUxvY2F0ZWQgPVxuICAgICAgICAgICAgdGhpcy52YWx1ZShUaWZmVGFnLk1vZGVsUGl4ZWxTY2FsZSkgIT0gbnVsbCB8fCB0aGlzLnZhbHVlKFRpZmZUYWcuTW9kZWxUcmFuc2Zvcm1hdGlvbikgIT0gbnVsbDtcbiAgICAgICAgaWYgKGlzSW1hZ2VMb2NhdGVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN1YiBpbWFnZSwgdXNlIHRoZSBpc0dlb0xvY2F0ZWQgZnJvbSB0aGUgdG9wIGxldmVsIGltYWdlXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKFRpZmZUYWcuTmV3U3ViRmlsZVR5cGUpID09PSAxICYmIHRoaXMuaWQgIT09IDApIHJldHVybiB0aGlzLnRpZi5pbWFnZXNbMF0uaXNHZW9Mb2NhdGVkO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBpbWFnZVxuICAgICAqXG4gICAgICogQHJldHVybnMgW3gseSx6XSBwaXhlbCBzY2FsZVxuICAgICAqL1xuICAgIGdldCByZXNvbHV0aW9uKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUGl4ZWxTY2FsZTogbnVtYmVyW10gfCBudWxsID0gdGhpcy52YWx1ZShUaWZmVGFnLk1vZGVsUGl4ZWxTY2FsZSk7XG4gICAgICAgIGlmIChtb2RlbFBpeGVsU2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFttb2RlbFBpeGVsU2NhbGVbMF0sIC1tb2RlbFBpeGVsU2NhbGVbMV0sIG1vZGVsUGl4ZWxTY2FsZVsyXV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kZWxUcmFuc2Zvcm1hdGlvbjogbnVtYmVyW10gfCBudWxsID0gdGhpcy52YWx1ZShUaWZmVGFnLk1vZGVsVHJhbnNmb3JtYXRpb24pO1xuICAgICAgICBpZiAobW9kZWxUcmFuc2Zvcm1hdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW21vZGVsVHJhbnNmb3JtYXRpb25bMF0sIG1vZGVsVHJhbnNmb3JtYXRpb25bNV0sIG1vZGVsVHJhbnNmb3JtYXRpb25bMTBdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdWIgaW1hZ2UsIHVzZSB0aGUgcmVzb2x1dGlvbiBmcm9tIHRoZSB0b3AgbGV2ZWwgaW1hZ2VcbiAgICAgICAgaWYgKHRoaXMudmFsdWUoVGlmZlRhZy5OZXdTdWJGaWxlVHlwZSkgPT09IDEgJiYgdGhpcy5pZCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RJbWcgPSB0aGlzLnRpZi5pbWFnZXNbMF07XG4gICAgICAgICAgICBjb25zdCBbcmVzWCwgcmVzWSwgcmVzWl0gPSBmaXJzdEltZy5yZXNvbHV0aW9uO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RJbWdTaXplID0gZmlyc3RJbWcuc2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IGltZ1NpemUgPSB0aGlzLnNpemU7XG4gICAgICAgICAgICAvLyBzY2FsZSByZXNvbHV0aW9uIGJhc2VkIG9uIHRoZSBzaXplIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGltYWdlc1xuICAgICAgICAgICAgcmV0dXJuIFsocmVzWCAqIGZpcnN0SW1nU2l6ZS53aWR0aCkgLyBpbWdTaXplLndpZHRoLCAocmVzWSAqIGZpcnN0SW1nU2l6ZS5oZWlnaHQpIC8gaW1nU2l6ZS5oZWlnaHQsIHJlc1pdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbWFnZSBkb2VzIG5vdCBoYXZlIGEgZ2VvIHRyYW5zZm9ybWF0aW9uLicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJvdW5kaW5nIGJveCBvZiB0aGUgaW1hZ2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSBib3VuZGluZyBib3hcbiAgICAgKi9cbiAgICBnZXQgYmJveCgpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMub3JpZ2luO1xuICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5yZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmIChvcmlnaW4gPT0gbnVsbCB8fCBzaXplID09IG51bGwgfHwgcmVzb2x1dGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjYWxjdWxhdGUgYm91bmRpbmcgYm94Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB4MSA9IG9yaWdpblswXTtcbiAgICAgICAgY29uc3QgeTEgPSBvcmlnaW5bMV07XG5cbiAgICAgICAgY29uc3QgeDIgPSB4MSArIHJlc29sdXRpb25bMF0gKiBzaXplLndpZHRoO1xuICAgICAgICBjb25zdCB5MiA9IHkxICsgcmVzb2x1dGlvblsxXSAqIHNpemUuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiBbTWF0aC5taW4oeDEsIHgyKSwgTWF0aC5taW4oeTEsIHkyKSwgTWF0aC5tYXgoeDEsIHgyKSwgTWF0aC5tYXgoeTEsIHkyKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjb21wcmVzc2lvbiB1c2VkIGJ5IHRoZSB0aWxlXG4gICAgICpcbiAgICAgKiBAc2VlIFRpZmZDb21wcmVzc2lvblxuICAgICAqXG4gICAgICogQHJldHVybnMgQ29tcHJlc3Npb24gdHlwZSBlZyB3ZWJwXG4gICAgICovXG4gICAgZ2V0IGNvbXByZXNzaW9uKCk6IFRpZmZNaW1lVHlwZSB8IG51bGwge1xuICAgICAgICBjb25zdCBjb21wcmVzc2lvbiA9IHRoaXMudmFsdWUoVGlmZlRhZy5Db21wcmVzc2lvbik7XG4gICAgICAgIGlmIChjb21wcmVzc2lvbiA9PSBudWxsIHx8IHR5cGVvZiBjb21wcmVzc2lvbiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUaWZmQ29tcHJlc3Npb25bY29tcHJlc3Npb25dO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGVtcHQgdG8gcmVhZCB0aGUgRVBTRyBDb2RlIGZyb20gVGlmZkdlb1RhZ3NcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEVQU0cgQ29kZSBpZiBpdCBleGlzdHNcbiAgICAgKi9cbiAgICBnZXQgZXBzZygpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMudmFsdWVHZW8oVGlmZlRhZ0dlby5Qcm9qZWN0ZWRDU1R5cGVHZW9LZXkpIGFzIG51bWJlcjtcbiAgICAgICAgaWYgKHByb2plY3Rpb24gPT09IEludmFsaWRQcm9qZWN0aW9uQ29kZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBwcm9qZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2VcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFNpemUgaW4gcGl4ZWxzXG4gICAgICovXG4gICAgZ2V0IHNpemUoKTogU2l6ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy52YWx1ZTxudW1iZXI+KFRpZmZUYWcuSW1hZ2VXaWR0aCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnZhbHVlPG51bWJlcj4oVGlmZlRhZy5JbWFnZUhlaWdodCkgYXMgbnVtYmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbGlzdCBvZiBJRkQgdGFncyB0aGF0IHdlcmUgcmVhZFxuICAgICAqL1xuICAgIGdldCB0YWdMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnRhZ3Mua2V5cygpXS5tYXAoKGMpID0+IFRpZmZUYWdbY10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSBpZiB0aGlzIGltYWdlIGlzIHRpbGVkXG4gICAgICovXG4gICAgcHVibGljIGlzVGlsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlKFRpZmZUYWcuVGlsZVdpZHRoKSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgc2l6ZSBvZiBpbmRpdmlkdWFsIHRpbGVzXG4gICAgICovXG4gICAgZ2V0IHRpbGVTaXplKCk6IENvZ1RpZmZJbWFnZVRpbGVTaXplIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnZhbHVlPG51bWJlcj4oVGlmZlRhZy5UaWxlV2lkdGgpIGFzIG51bWJlcixcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy52YWx1ZTxudW1iZXI+KFRpZmZUYWcuVGlsZUhlaWdodCkgYXMgbnVtYmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiB0aWxlcyB1c2VkIHRvIGNyZWF0ZSB0aGlzIGltYWdlXG4gICAgICovXG4gICAgZ2V0IHRpbGVDb3VudCgpOiBDb2dUaWZmSW1hZ2VUaWxlZENvdW50IHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY29uc3QgdGlsZVNpemUgPSB0aGlzLnRpbGVTaXplO1xuICAgICAgICBjb25zdCB4ID0gTWF0aC5jZWlsKHNpemUud2lkdGggLyB0aWxlU2l6ZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHkgPSBNYXRoLmNlaWwoc2l6ZS5oZWlnaHQgLyB0aWxlU2l6ZS5oZWlnaHQpO1xuICAgICAgICByZXR1cm4geyB4LCB5IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwb2ludGVyIHRvIHdoZXJlIHRoZSB0aWxlcyBzdGFydCBpbiB0aGUgVGlmZiBmaWxlXG4gICAgICpcbiAgICAgKiBAcmVtYXJrcyBVc2VkIHRvIHJlYWQgdGlsZWQgdGlmZnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGZpbGUgb2Zmc2V0IHRvIHdoZXJlIHRoZSB0aWZmcyBhcmUgc3RvcmVkXG4gICAgICovXG4gICAgZ2V0IHRpbGVPZmZzZXQoKTogQ29nVGlmZlRhZ09mZnNldCB7XG4gICAgICAgIGNvbnN0IHRpbGVPZmZzZXQgPSB0aGlzLnRhZ3MuZ2V0KFRpZmZUYWcuVGlsZU9mZnNldHMpIGFzIENvZ1RpZmZUYWdPZmZzZXQ7XG4gICAgICAgIGlmICh0aWxlT2Zmc2V0ID09IG51bGwpIHRocm93IG5ldyBFcnJvcignTm8gdGlsZSBvZmZzZXRzIGZvdW5kJyk7XG4gICAgICAgIHJldHVybiB0aWxlT2Zmc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIHN0cmlwJ3MgaW5zaWRlIHRoaXMgdGlmZlxuICAgICAqXG4gICAgICogQHJlbWFya3MgVXNlZCB0byByZWFkIHN0cmlwZWQgdGlmZnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIG51bWJlciBvZiBzdHJpcHMgcHJlc2VudFxuICAgICAqL1xuICAgIGdldCBzdHJpcENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRpbGVPZmZzZXQgPSB0aGlzLnRhZ3MuZ2V0KFRpZmZUYWcuU3RyaXBCeXRlQ291bnRzKSBhcyBDb2dUaWZmVGFnT2Zmc2V0O1xuICAgICAgICBpZiAodGlsZU9mZnNldCA9PSBudWxsKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIHRpbGVPZmZzZXQuZGF0YUNvdW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIHBvaW50ZXIgdG8gYSBzcGVjaWZpYyB0aWxlIGluc2lkZSB0aGUgdGlmZiBmaWxlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggdGlsZSBpbmRleFxuICAgICAqIEByZXR1cm5zIGZpbGUgb2Zmc2V0IG9mIHRoZSBzcGVjaWZpZWQgdGlsZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBnZXRUaWxlT2Zmc2V0KGluZGV4OiBudW1iZXIsIGw/OiBMb2dUeXBlKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgdGlsZU9mZnNldCA9IHRoaXMudGlsZU9mZnNldDtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRpbGVPZmZzZXQuZGF0YUNvdW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbGUgb2Zmc2V0OiAke2luZGV4fSBvdXQgb2YgcmFuZ2U6IDAgLT4gJHt0aWxlT2Zmc2V0LmRhdGFDb3VudH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZldGNoIG9ubHkgdGhlIHBhcnQgb2YgdGhlIG9mZnNldHMgdGhhdCBhcmUgbmVlZGVkXG4gICAgICAgIHJldHVybiB0aWxlT2Zmc2V0LmdldFZhbHVlQXQoaW5kZXgsIGwpO1xuICAgIH1cblxuICAgIC8vIENsYW1wIHRoZSBib3VuZHMgb2YgdGhlIG91dHB1dCBpbWFnZSB0byB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UsIGFzIHNvbWV0aW1lcyB0aGUgZWRnZSB0aWxlcyBhcmUgbm90IGZ1bGwgdGlsZXNcbiAgICBnZXRUaWxlQm91bmRzKHg6IG51bWJlciwgeTogbnVtYmVyKTogQm91bmRpbmdCb3gge1xuICAgICAgICBjb25zdCB7IHNpemUsIHRpbGVTaXplIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB0b3AgPSB5ICogdGlsZVNpemUuaGVpZ2h0O1xuICAgICAgICBjb25zdCBsZWZ0ID0geCAqIHRpbGVTaXplLndpZHRoO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGxlZnQgKyB0aWxlU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoID8gc2l6ZS53aWR0aCAtIGxlZnQgOiB0aWxlU2l6ZS53aWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdG9wICsgdGlsZVNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0ID8gc2l6ZS5oZWlnaHQgLSB0b3AgOiB0aWxlU2l6ZS5oZWlnaHQ7XG4gICAgICAgIHJldHVybiB7IHg6IGxlZnQsIHk6IHRvcCwgd2lkdGgsIGhlaWdodCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBzdHJpcCBpbnRvIGEgdWludDggYXJyYXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCBTdHJpcCBpbmRleCB0byByZWFkXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U3RyaXAoaW5kZXg6IG51bWJlcik6IFByb21pc2U8eyBtaW1lVHlwZTogVGlmZk1pbWVUeXBlOyBieXRlczogVWludDhBcnJheSB9IHwgbnVsbD4ge1xuICAgICAgICBpZiAodGhpcy5pc1RpbGVkKCkpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlYWQgc3RyaXBlcywgdGlmZiBpcyB0aWxlZCcpO1xuXG4gICAgICAgIGNvbnN0IGJ5dGVDb3VudHMgPSB0aGlzLnRhZ3MuZ2V0KFRpZmZUYWcuU3RyaXBCeXRlQ291bnRzKSBhcyBDb2dUaWZmVGFnT2Zmc2V0O1xuICAgICAgICBjb25zdCBvZmZzZXRzID0gdGhpcy50YWdzLmdldChUaWZmVGFnLlN0cmlwT2Zmc2V0cykgYXMgQ29nVGlmZlRhZ09mZnNldDtcblxuICAgICAgICBpZiAoaW5kZXggPj0gYnl0ZUNvdW50cy5kYXRhQ291bnQpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlYWQgc3RyaXAsIGluZGV4IG91dCBvZiBib3VuZHMnKTtcblxuICAgICAgICBjb25zdCBbYnl0ZUNvdW50LCBvZmZzZXRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW29mZnNldHMuZ2V0VmFsdWVBdChpbmRleCksIGJ5dGVDb3VudHMuZ2V0VmFsdWVBdChpbmRleCldKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Qnl0ZXMoYnl0ZUNvdW50LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIC8qKiBUaGUganBlZyBoZWFkZXIgaXMgc3RvcmVkIGluIHRoZSBJRkQsIHJlYWQgdGhlIEpQRUcgaGVhZGVyIGFuZCBhZGp1c3QgdGhlIGJ5dGUgYXJyYXkgdG8gaW5jbHVkZSBpdCAqL1xuICAgIHByaXZhdGUgZ2V0SnBlZ0hlYWRlcihieXRlczogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgICAgICAvLyBCb3RoIHRoZSBKUEVHVGFibGUgYW5kIHRoZSBCeXRlcyB3aXRoIGhhdmUgdGhlIHN0YXJ0IG9mIGltYWdlIGFuZCBlbmQgb2YgaW1hZ2UgbWFya2Vyc1xuICAgICAgICAvLyBTdGFydE9mSW1hZ2UgMHhmZmQ4IEVuZE9mSW1hZ2UgMHhmZmQ5XG4gICAgICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMudmFsdWU8bnVtYmVyW10+KFRpZmZUYWcuSlBFR1RhYmxlcyk7XG4gICAgICAgIGlmICh0YWJsZXMgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBKcGVnIGhlYWRlcicpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBFbmRPZkltYWdlIG1hcmtlclxuICAgICAgICBjb25zdCB0YWJsZURhdGEgPSB0YWJsZXMuc2xpY2UoMCwgdGFibGVzLmxlbmd0aCAtIDIpO1xuICAgICAgICBjb25zdCBhY3R1YWxCeXRlcyA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGggKyB0YWJsZURhdGEubGVuZ3RoIC0gMik7XG4gICAgICAgIGFjdHVhbEJ5dGVzLnNldCh0YWJsZURhdGEsIDApO1xuICAgICAgICBhY3R1YWxCeXRlcy5zZXQoYnl0ZXMuc2xpY2UoMiksIHRhYmxlRGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gYWN0dWFsQnl0ZXM7XG4gICAgfVxuXG4gICAgLyoqIFJlYWQgaW1hZ2UgYnl0ZXMgYXQgdGhlIGdpdmVuIG9mZnNldCAqL1xuICAgIHByaXZhdGUgYXN5bmMgZ2V0Qnl0ZXMoXG4gICAgICAgIG9mZnNldDogbnVtYmVyLFxuICAgICAgICBieXRlQ291bnQ6IG51bWJlcixcbiAgICAgICAgbD86IExvZ1R5cGUsXG4gICAgKTogUHJvbWlzZTx7IG1pbWVUeXBlOiBUaWZmTWltZVR5cGU7IGJ5dGVzOiBVaW50OEFycmF5IH0gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5jb21wcmVzc2lvbjtcbiAgICAgICAgaWYgKG1pbWVUeXBlID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29tcHJlc3Npb246ICcgKyB0aGlzLnZhbHVlKFRpZmZUYWcuQ29tcHJlc3Npb24pKTtcbiAgICAgICAgaWYgKGJ5dGVDb3VudCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgYXdhaXQgdGhpcy50aWYuc291cmNlLmxvYWRCeXRlcyhvZmZzZXQsIGJ5dGVDb3VudCwgbCk7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50aWYuc291cmNlLmJ5dGVzKG9mZnNldCwgYnl0ZUNvdW50KTtcblxuICAgICAgICBpZiAodGhpcy5jb21wcmVzc2lvbiA9PT0gVGlmZk1pbWVUeXBlLkpQRUcpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbWVUeXBlLCBieXRlczogdGhpcy5nZXRKcGVnSGVhZGVyKGJ5dGVzKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1pbWVUeXBlLCBieXRlcyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHRpbGUgYnVmZmVyLCB0aGlzIHdvcmtzIGJlc3Qgd2l0aCB3ZWJwXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgYWxzbyBhcHBseSB0aGUgSlBFRyBjb21wcmVzc2lvbiB0YWJsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB4IFRpbGUgeCBvZmZzZXRcbiAgICAgKiBAcGFyYW0geSBUaWxlIHkgb2Zmc2V0XG4gICAgICovXG4gICAgYXN5bmMgZ2V0VGlsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgbD86IExvZ1R5cGUpOiBQcm9taXNlPHsgbWltZVR5cGU6IFRpZmZNaW1lVHlwZTsgYnl0ZXM6IFVpbnQ4QXJyYXkgfSB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgbWltZVR5cGUgPSB0aGlzLmNvbXByZXNzaW9uO1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjb25zdCB0aWxlcyA9IHRoaXMudGlsZVNpemU7XG5cbiAgICAgICAgaWYgKHRpbGVzID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVGlmZiBpcyBub3QgdGlsZWQnKTtcbiAgICAgICAgaWYgKG1pbWVUeXBlID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29tcHJlc3Npb246ICcgKyB0aGlzLnZhbHVlKFRpZmZUYWcuQ29tcHJlc3Npb24pKTtcblxuICAgICAgICAvLyBUT0RPIHN1cHBvcnQgR2hvc3RPcHRpb25UaWxlT3JkZXJcbiAgICAgICAgY29uc3QgbnlUaWxlcyA9IE1hdGguY2VpbChzaXplLmhlaWdodCAvIHRpbGVzLmhlaWdodCk7XG4gICAgICAgIGNvbnN0IG54VGlsZXMgPSBNYXRoLmNlaWwoc2l6ZS53aWR0aCAvIHRpbGVzLndpZHRoKTtcblxuICAgICAgICBpZiAoeCA+PSBueFRpbGVzIHx8IHkgPj0gbnlUaWxlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaWxlIGluZGV4IGlzIG91dHNpZGUgb2YgcmFuZ2UgeDoke3h9ID49ICR7bnhUaWxlc30gb3IgeToke3l9ID49ICR7bnlUaWxlc31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkeCA9IHkgKiBueFRpbGVzICsgeDtcbiAgICAgICAgY29uc3QgdG90YWxUaWxlcyA9IG54VGlsZXMgKiBueVRpbGVzO1xuICAgICAgICBpZiAoaWR4ID49IHRvdGFsVGlsZXMpIHRocm93IG5ldyBFcnJvcihgVGlsZSBpbmRleCBpcyBvdXRzaWRlIG9mIHRpbGUgcmFuZ2U6ICR7aWR4fSA+PSAke3RvdGFsVGlsZXN9YCk7XG5cbiAgICAgICAgY29uc3QgeyBvZmZzZXQsIGltYWdlU2l6ZSB9ID0gYXdhaXQgdGhpcy5nZXRUaWxlU2l6ZShpZHgsIGwpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCeXRlcyhvZmZzZXQsIGltYWdlU2l6ZSwgbCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldFRpbGVTaXplKGluZGV4OiBudW1iZXIsIGw/OiBMb2dUeXBlKTogUHJvbWlzZTx7IG9mZnNldDogbnVtYmVyOyBpbWFnZVNpemU6IG51bWJlciB9PiB7XG4gICAgICAgIC8vIEdEQUwgb3B0aW1pemVzIHRpbGVzIGJ5IHN0b3JpbmcgdGhlIHNpemUgb2YgdGhlIHRpbGUgaW5cbiAgICAgICAgLy8gdGhlIGZldyBieXRlcyBsZWFkaW5nIHVwIHRvIHRoZSB0aWxlXG4gICAgICAgIGlmICh0aGlzLnRpZi5vcHRpb25zLnRpbGVMZWFkZXJCeXRlU2l6ZSkge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYXdhaXQgdGhpcy5nZXRUaWxlT2Zmc2V0KGluZGV4LCBsKTtcbiAgICAgICAgICAgIC8vIFNwYXJzZSBDT0cgbm8gZGF0YSBmb3VuZFxuICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gMCkgcmV0dXJuIHsgb2Zmc2V0OiAwLCBpbWFnZVNpemU6IDAgfTtcblxuICAgICAgICAgICAgY29uc3QgbGVhZGVyQnl0ZXMgPSB0aGlzLnRpZi5vcHRpb25zLnRpbGVMZWFkZXJCeXRlU2l6ZTtcbiAgICAgICAgICAgIC8vIFRoaXMgZmV0Y2ggd2lsbCBnZW5lcmFsbHkgbG9hZCBpbiB0aGUgYnl0ZXMgbmVlZGVkIGZvciB0aGUgaW1hZ2UgdG9vXG4gICAgICAgICAgICAvLyBwcm92aWRlZCB0aGUgaW1hZ2Ugc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2YgYSBjaHVua1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50aWYuc291cmNlLmxvYWRCeXRlcyhvZmZzZXQgLSBsZWFkZXJCeXRlcywgbGVhZGVyQnl0ZXMsIGwpO1xuICAgICAgICAgICAgcmV0dXJuIHsgb2Zmc2V0LCBpbWFnZVNpemU6IHRoaXMudGlmLnNvdXJjZS5nZXRVaW50KG9mZnNldCAtIGxlYWRlckJ5dGVzLCBsZWFkZXJCeXRlcykgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ5dGVDb3VudHMgPSB0aGlzLnRhZ3MuZ2V0KFRpZmZUYWcuVGlsZUJ5dGVDb3VudHMpIGFzIENvZ1RpZmZUYWdPZmZzZXQ7XG4gICAgICAgIGlmIChieXRlQ291bnRzID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdGlsZSBieXRlIGNvdW50cyBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFtvZmZzZXQsIGltYWdlU2l6ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5nZXRUaWxlT2Zmc2V0KGluZGV4LCBsKSwgYnl0ZUNvdW50cy5nZXRWYWx1ZUF0KGluZGV4LCBsKV0pO1xuICAgICAgICByZXR1cm4geyBvZmZzZXQsIGltYWdlU2l6ZSB9O1xuICAgIH1cbn1cbiJdfQ==
401
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nLnRpZmYuaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29nLnRpZmYuaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQXNCM0MsTUFBTSxPQUFPLFlBQVk7SUFjckIsWUFBWSxHQUFZLEVBQUUsRUFBVSxFQUFFLElBQWtDO1FBTHhFLHNDQUFzQztRQUM5QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUM5QixpREFBaUQ7UUFDakQsWUFBTyxHQUFxQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2xELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUs7UUFDMUIsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ2hDLENBQUM7UUFFRixJQUFJLFdBQVcsRUFBRTtZQUNiLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN2RCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLElBQUksV0FBVyxFQUFFO1lBQ2IsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDaEM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUksR0FBWTtRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLFNBQVMsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsT0FBTyxTQUFTLENBQUMsS0FBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ2pCLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsWUFBWSxjQUFjLEVBQUU7WUFDM0QsNkJBQTZCO1lBQzdCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO2FBQ3RDLENBQUMsQ0FBQztTQUNOO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFPO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBZSxDQUFDO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFaEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUU5QixJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUIsU0FBUzthQUNaO1lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSTtnQkFBRSxTQUFTO1lBQy9DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO2lCQUFNLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDOUU7U0FDSjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxHQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUksR0FBWTtRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLFNBQVMsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBUyxDQUFDO1FBQ2xFLE9BQU8sU0FBUyxDQUFDLEtBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksTUFBTTtRQUNOLE1BQU0sU0FBUyxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFXLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvRSxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQVcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUUsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7WUFDN0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEY7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDM0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDcEM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELDZGQUE2RjtJQUM3RixJQUFJLFlBQVk7UUFDWixNQUFNLGNBQWMsR0FDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksSUFBSSxDQUFDO1FBQ25HLElBQUksY0FBYztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hDLHdFQUF3RTtRQUN4RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUN0RyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksVUFBVTtRQUNWLE1BQU0sZUFBZSxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7WUFDekIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUNELE1BQU0sbUJBQW1CLEdBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckYsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7WUFDN0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEY7UUFFRCxzRUFBc0U7UUFDdEUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDM0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUIsdUVBQXVFO1lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3RztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksSUFBSTtRQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRW5DLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLFdBQVc7UUFDWCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwRCxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1lBQ3hELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksSUFBSTtRQUNKLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFXLENBQUM7UUFDN0UsSUFBSSxVQUFVLEtBQUsscUJBQXFCO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLElBQUk7UUFDSixPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQVMsT0FBTyxDQUFDLFVBQVUsQ0FBVztZQUN2RCxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBUyxPQUFPLENBQUMsV0FBVyxDQUFXO1NBQzVELENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDUCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTztZQUNILEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFTLE9BQU8sQ0FBQyxTQUFTLENBQVc7WUFDdEQsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQVMsT0FBTyxDQUFDLFVBQVUsQ0FBVztTQUMzRCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxTQUFTO1FBQ1QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFJLFVBQVU7UUFDVixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFxQixDQUFDO1FBQzFFLElBQUksVUFBVSxJQUFJLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakUsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksVUFBVTtRQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQXFCLENBQUM7UUFDOUUsSUFBSSxVQUFVLElBQUksSUFBSTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWE7UUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyx1QkFBdUIsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7U0FDdkY7UUFFRCxxREFBcUQ7UUFDckQsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxnSEFBZ0g7SUFDaEgsYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzlCLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFGLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFhO1FBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUUxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFxQixDQUFDO1FBQzlFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQXFCLENBQUM7UUFFeEUsSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFFN0YsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHlHQUF5RztJQUNqRyxhQUFhLENBQUMsS0FBaUI7UUFDbkMseUZBQXlGO1FBQ3pGLHdDQUF3QztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFXLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxJQUFJLE1BQU0sSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRWxFLDJCQUEyQjtRQUMzQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QixXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCwyQ0FBMkM7SUFDbkMsS0FBSyxDQUFDLFFBQVEsQ0FDbEIsTUFBYyxFQUNkLFNBQWlCO1FBRWpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbEMsSUFBSSxRQUFRLElBQUksSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyRyxJQUFJLFNBQVMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFakMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFdkQsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFNUIsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RCxJQUFJLFFBQVEsSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXJHLG9DQUFvQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxPQUFPLE9BQU8sU0FBUyxDQUFDLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNsRztRQUVELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDckMsSUFBSSxHQUFHLElBQUksVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLEdBQUcsT0FBTyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRXZHLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBYTtRQUNyQywwREFBMEQ7UUFDMUQsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLDJCQUEyQjtZQUMzQixJQUFJLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUVyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUN4RCx1RUFBdUU7WUFDdkUsMkRBQTJEO1lBQzNELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUM1RjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQXFCLENBQUM7UUFDN0UsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUNoRDtRQUNELE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZ1RpZmYgfSBmcm9tICcuL2NvZy50aWZmLmpzJztcbmltcG9ydCB7IFRpZmZDb21wcmVzc2lvbiwgVGlmZk1pbWVUeXBlIH0gZnJvbSAnLi9jb25zdC90aWZmLm1pbWUuanMnO1xuaW1wb3J0IHsgVGlmZlRhZywgVGlmZlRhZ0dlbyB9IGZyb20gJy4vY29uc3QvdGlmZi50YWcuaWQuanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZ0Jhc2UgfSBmcm9tICcuL3JlYWQvdGFnL3RpZmYudGFnLmJhc2UuanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZ0xhenkgfSBmcm9tICcuL3JlYWQvdGFnL3RpZmYudGFnLmxhenkuanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZ09mZnNldCB9IGZyb20gJy4vcmVhZC90YWcvdGlmZi50YWcub2Zmc2V0LmpzJztcbmltcG9ydCB7IENvZ1RpZmZUYWcgfSBmcm9tICcuL3JlYWQvdGlmZi50YWcuanMnO1xuaW1wb3J0IHsgQm91bmRpbmdCb3gsIFNpemUgfSBmcm9tICcuL3ZlY3Rvci5qcyc7XG5cbi8qKiBJbnZhbGlkIEVQU0cgY29kZSAqL1xuZXhwb3J0IGNvbnN0IEludmFsaWRQcm9qZWN0aW9uQ29kZSA9IDMyNzY3O1xuXG4vKipcbiAqIE51bWJlciBvZiB0aWxlcyB1c2VkIGluc2lkZSB0aGlzIGltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nVGlmZkltYWdlVGlsZWRDb3VudCB7XG4gICAgLyoqIE51bWJlciBvZiB0aWxlcyBvbiB0aGUgeCBheGlzICovXG4gICAgeDogbnVtYmVyO1xuICAgIC8qKiBOdW1iZXIgb2YgdGlsZXMgb24gdGhlIHkgYXhpcyAqL1xuICAgIHk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTaXplIG9mIGEgaW5kaXZpZHVhbCB0aWxlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nVGlmZkltYWdlVGlsZVNpemUge1xuICAgIC8qKiBUaWxlIHdpZHRoIChwaXhlbHMpICovXG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICAvKiogVGlsZSBoZWlnaHQgKHBpeGVscykgKi9cbiAgICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvZ1RpZmZJbWFnZSB7XG4gICAgLyoqIEFsbCBJRkQgdGFncyB0aGF0IGhhdmUgYmVlbiByZWFkIGZvciB0aGUgaW1hZ2UgKi9cbiAgICB0YWdzOiBNYXA8VGlmZlRhZywgQ29nVGlmZlRhZ0Jhc2U+O1xuXG4gICAgLyoqIElkIG9mIHRoZSB0aWYgaW1hZ2UsIGdlbmVyYWxseSB0aGUgaW1hZ2UgaW5kZXggaW5zaWRlIHRoZSB0aWYgKi9cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgdGlmOiBDb2dUaWZmO1xuXG4gICAgLyoqIEhhcyBsb2FkR2VvVGlmZlRhZ3MgYmVlbiBjYWxsZWQgKi9cbiAgICBwcml2YXRlIHRhZ3NHZW9Mb2FkZWQgPSBmYWxzZTtcbiAgICAvKiogU3ViIHRhZ3Mgc3RvcmVkIGluIFRpZmZUYWcuR2VvS2V5RGlyZWN0b3J5ICovXG4gICAgdGFnc0dlbzogTWFwPFRpZmZUYWdHZW8sIHN0cmluZyB8IG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcih0aWY6IENvZ1RpZmYsIGlkOiBudW1iZXIsIHRhZ3M6IE1hcDxUaWZmVGFnLCBDb2dUaWZmVGFnQmFzZT4pIHtcbiAgICAgICAgdGhpcy50aWYgPSB0aWY7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy50YWdzID0gdGFncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZSBsb2FkaW5nIG9mIGltcG9ydGFudCB0YWdzIGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGxvYWRlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGxvYWRHZW9UYWdzIFdoZXRoZXIgdG8gbG9hZCB0aGUgR2VvS2V5RGlyZWN0b3J5IGFuZCB1bnBhY2sgaXRcbiAgICAgKi9cbiAgICBhc3luYyBpbml0KGxvYWRHZW9UYWdzID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVxdWlyZWRUYWdzID0gW1xuICAgICAgICAgICAgdGhpcy5mZXRjaChUaWZmVGFnLkNvbXByZXNzaW9uKSxcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5JbWFnZUhlaWdodCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuSW1hZ2VXaWR0aCksXG4gICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuTW9kZWxQaXhlbFNjYWxlKSxcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5Nb2RlbFRpZVBvaW50KSxcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5Nb2RlbFRyYW5zZm9ybWF0aW9uKSxcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5UaWxlSGVpZ2h0KSxcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5UaWxlV2lkdGgpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChsb2FkR2VvVGFncykge1xuICAgICAgICAgICAgcmVxdWlyZWRUYWdzLnB1c2godGhpcy5mZXRjaChUaWZmVGFnLkdlb0tleURpcmVjdG9yeSkpO1xuICAgICAgICAgICAgcmVxdWlyZWRUYWdzLnB1c2godGhpcy5mZXRjaChUaWZmVGFnLkdlb0FzY2lpUGFyYW1zKSk7XG4gICAgICAgICAgICByZXF1aXJlZFRhZ3MucHVzaCh0aGlzLmZldGNoKFRpZmZUYWcuR2VvRG91YmxlUGFyYW1zKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChyZXF1aXJlZFRhZ3MpO1xuICAgICAgICBpZiAobG9hZEdlb1RhZ3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEdlb1RpZmZUYWdzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGEgVGlmZlRhZyBpZiBpdCBleGlzdHMgbnVsbCBvdGhlcndpc2VcbiAgICAgKi9cbiAgICB2YWx1ZTxUPih0YWc6IFRpZmZUYWcpOiBUIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVRhZyA9IHRoaXMudGFncy5nZXQodGFnKTtcbiAgICAgICAgaWYgKHNvdXJjZVRhZyA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVRhZy52YWx1ZSBhcyBUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYW5kIHVucGFjayB0aGUgR2VvS2V5RGlyZWN0b3J5XG4gICAgICovXG4gICAgYXN5bmMgbG9hZEdlb1RpZmZUYWdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBBbHJlYWR5IGxvYWRlZFxuICAgICAgICBpZiAodGhpcy50YWdzR2VvTG9hZGVkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvdXJjZVRhZyA9IHRoaXMudGFncy5nZXQoVGlmZlRhZy5HZW9LZXlEaXJlY3RvcnkpO1xuICAgICAgICBpZiAoc291cmNlVGFnID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGFnc0dlb0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzb3VyY2VUYWcuaXNSZWFkeSAmJiBzb3VyY2VUYWcgaW5zdGFuY2VvZiBDb2dUaWZmVGFnTGF6eSkge1xuICAgICAgICAgICAgLy8gTG9hZCBhbGwgdGhlIHJlcXVpcmVkIGtleXNcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuR2VvS2V5RGlyZWN0b3J5KSxcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoKFRpZmZUYWcuR2VvQXNjaWlQYXJhbXMpLFxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goVGlmZlRhZy5HZW9Eb3VibGVQYXJhbXMpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdzR2VvTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNvdXJjZVRhZy52YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdlb1RhZ3MgPSBzb3VyY2VUYWcudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShnZW9UYWdzKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGdlbyB0YWdzIGZvdW5kJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSA0OyBpIDw9IGdlb1RhZ3NbM10gKiA0OyBpICs9IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGdlb1RhZ3NbaV0gYXMgVGlmZlRhZ0dlbztcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gZ2VvVGFnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGdlb1RhZ3NbaSArIDNdO1xuXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ3NHZW8uc2V0KGtleSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IHRoaXMudGFncy5nZXQobG9jYXRpb24pO1xuICAgICAgICAgICAgaWYgKHRhZyA9PSBudWxsIHx8IHRhZy52YWx1ZSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gZ2VvVGFnc1tpICsgMl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWcudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzR2VvLnNldChrZXksIHRhZy52YWx1ZVtvZmZzZXQgKyBjb3VudCAtIDFdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhZy52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ3NHZW8uc2V0KGtleSwgdGFnLnZhbHVlLnN1YnN0cihvZmZzZXQsIG9mZnNldCArIGNvdW50IC0gMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYXNzb2NpYXRlZCBHZW9UaWZmVGFnc1xuICAgICAqL1xuICAgIHZhbHVlR2VvKHRhZzogVGlmZlRhZ0dlbyk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0aGlzLnRhZ3NHZW9Mb2FkZWQgPT09IGZhbHNlKSB0aHJvdyBuZXcgRXJyb3IoJ2xvYWRHZW9UaWZmVGFncygpIGhhcyBub3QgYmVlbiBjYWxsZWQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFnc0dlby5nZXQodGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGEgdGFnLCBpZiBpdCBpcyBub3QgY3VycmVudGx5IGxvYWRlZCwgZmV0Y2ggdGhlIHJlcXVpcmVkIGRhdGEgZm9yIHRoZSB0YWcuXG4gICAgICogQHBhcmFtIHRhZyB0YWcgdG8gZmV0Y2hcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZmV0Y2g8VD4odGFnOiBUaWZmVGFnKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzb3VyY2VUYWcgPSB0aGlzLnRhZ3MuZ2V0KHRhZyk7XG4gICAgICAgIGlmIChzb3VyY2VUYWcgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChDb2dUaWZmVGFnLmlzTGF6eShzb3VyY2VUYWcpKSByZXR1cm4gc291cmNlVGFnLmZldGNoKCkgYXMgYW55O1xuICAgICAgICByZXR1cm4gc291cmNlVGFnLnZhbHVlIGFzIFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBvcmlnaW4gcG9pbnQgZm9yIHRoZSBpbWFnZVxuICAgICAqXG4gICAgICogQHJldHVybnMgb3JpZ2luIHBvaW50IG9mIHRoZSBpbWFnZVxuICAgICAqL1xuICAgIGdldCBvcmlnaW4oKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgY29uc3QgdGllUG9pbnRzOiBudW1iZXJbXSB8IG51bGwgPSB0aGlzLnZhbHVlPG51bWJlcltdPihUaWZmVGFnLk1vZGVsVGllUG9pbnQpO1xuICAgICAgICBpZiAodGllUG9pbnRzICE9IG51bGwgJiYgdGllUG9pbnRzLmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgcmV0dXJuIFt0aWVQb2ludHNbM10sIHRpZVBvaW50c1s0XSwgdGllUG9pbnRzWzVdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsVHJhbnNmb3JtYXRpb24gPSB0aGlzLnZhbHVlPG51bWJlcltdPihUaWZmVGFnLk1vZGVsVHJhbnNmb3JtYXRpb24pO1xuICAgICAgICBpZiAobW9kZWxUcmFuc2Zvcm1hdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW21vZGVsVHJhbnNmb3JtYXRpb25bM10sIG1vZGVsVHJhbnNmb3JtYXRpb25bN10sIG1vZGVsVHJhbnNmb3JtYXRpb25bMTFdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdWIgaW1hZ2UsIHVzZSB0aGUgb3JpZ2luIGZyb20gdGhlIHRvcCBsZXZlbCBpbWFnZVxuICAgICAgICBpZiAodGhpcy52YWx1ZShUaWZmVGFnLk5ld1N1YkZpbGVUeXBlKSA9PT0gMSAmJiB0aGlzLmlkICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aWYuaW1hZ2VzWzBdLm9yaWdpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW1hZ2UgZG9lcyBub3QgaGF2ZSBhIGdlbyB0cmFuc2Zvcm1hdGlvbi4nKTtcbiAgICB9XG5cbiAgICAvKiogSXMgdGhlcmUgZW5vdWdoIGdlbyBpbmZvcm1hdGlvbiBvbiB0aGlzIGltYWdlIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXRzIGFjdHVhbGx5IGxvY2F0ZWQgKi9cbiAgICBnZXQgaXNHZW9Mb2NhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpc0ltYWdlTG9jYXRlZCA9XG4gICAgICAgICAgICB0aGlzLnZhbHVlKFRpZmZUYWcuTW9kZWxQaXhlbFNjYWxlKSAhPSBudWxsIHx8IHRoaXMudmFsdWUoVGlmZlRhZy5Nb2RlbFRyYW5zZm9ybWF0aW9uKSAhPSBudWxsO1xuICAgICAgICBpZiAoaXNJbWFnZUxvY2F0ZWQpIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3ViIGltYWdlLCB1c2UgdGhlIGlzR2VvTG9jYXRlZCBmcm9tIHRoZSB0b3AgbGV2ZWwgaW1hZ2VcbiAgICAgICAgaWYgKHRoaXMudmFsdWUoVGlmZlRhZy5OZXdTdWJGaWxlVHlwZSkgPT09IDEgJiYgdGhpcy5pZCAhPT0gMCkgcmV0dXJuIHRoaXMudGlmLmltYWdlc1swXS5pc0dlb0xvY2F0ZWQ7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJlc29sdXRpb24gb2YgdGhlIGltYWdlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBbeCx5LHpdIHBpeGVsIHNjYWxlXG4gICAgICovXG4gICAgZ2V0IHJlc29sdXRpb24oKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgY29uc3QgbW9kZWxQaXhlbFNjYWxlOiBudW1iZXJbXSB8IG51bGwgPSB0aGlzLnZhbHVlKFRpZmZUYWcuTW9kZWxQaXhlbFNjYWxlKTtcbiAgICAgICAgaWYgKG1vZGVsUGl4ZWxTY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gW21vZGVsUGl4ZWxTY2FsZVswXSwgLW1vZGVsUGl4ZWxTY2FsZVsxXSwgbW9kZWxQaXhlbFNjYWxlWzJdXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RlbFRyYW5zZm9ybWF0aW9uOiBudW1iZXJbXSB8IG51bGwgPSB0aGlzLnZhbHVlKFRpZmZUYWcuTW9kZWxUcmFuc2Zvcm1hdGlvbik7XG4gICAgICAgIGlmIChtb2RlbFRyYW5zZm9ybWF0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbbW9kZWxUcmFuc2Zvcm1hdGlvblswXSwgbW9kZWxUcmFuc2Zvcm1hdGlvbls1XSwgbW9kZWxUcmFuc2Zvcm1hdGlvblsxMF1dO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN1YiBpbWFnZSwgdXNlIHRoZSByZXNvbHV0aW9uIGZyb20gdGhlIHRvcCBsZXZlbCBpbWFnZVxuICAgICAgICBpZiAodGhpcy52YWx1ZShUaWZmVGFnLk5ld1N1YkZpbGVUeXBlKSA9PT0gMSAmJiB0aGlzLmlkICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEltZyA9IHRoaXMudGlmLmltYWdlc1swXTtcbiAgICAgICAgICAgIGNvbnN0IFtyZXNYLCByZXNZLCByZXNaXSA9IGZpcnN0SW1nLnJlc29sdXRpb247XG4gICAgICAgICAgICBjb25zdCBmaXJzdEltZ1NpemUgPSBmaXJzdEltZy5zaXplO1xuICAgICAgICAgICAgY29uc3QgaW1nU2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgICAgIC8vIHNjYWxlIHJlc29sdXRpb24gYmFzZWQgb24gdGhlIHNpemUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaW1hZ2VzXG4gICAgICAgICAgICByZXR1cm4gWyhyZXNYICogZmlyc3RJbWdTaXplLndpZHRoKSAvIGltZ1NpemUud2lkdGgsIChyZXNZICogZmlyc3RJbWdTaXplLmhlaWdodCkgLyBpbWdTaXplLmhlaWdodCwgcmVzWl07XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ltYWdlIGRvZXMgbm90IGhhdmUgYSBnZW8gdHJhbnNmb3JtYXRpb24uJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQm91bmRpbmcgYm94IG9mIHRoZSBpbWFnZVxuICAgICAqXG4gICAgICogQHJldHVybnMgW21pblgsIG1pblksIG1heFgsIG1heFldIGJvdW5kaW5nIGJveFxuICAgICAqL1xuICAgIGdldCBiYm94KCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5vcmlnaW47XG4gICAgICAgIGNvbnN0IHJlc29sdXRpb24gPSB0aGlzLnJlc29sdXRpb247XG5cbiAgICAgICAgaWYgKG9yaWdpbiA9PSBudWxsIHx8IHNpemUgPT0gbnVsbCB8fCByZXNvbHV0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNhbGN1bGF0ZSBib3VuZGluZyBib3gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHgxID0gb3JpZ2luWzBdO1xuICAgICAgICBjb25zdCB5MSA9IG9yaWdpblsxXTtcblxuICAgICAgICBjb25zdCB4MiA9IHgxICsgcmVzb2x1dGlvblswXSAqIHNpemUud2lkdGg7XG4gICAgICAgIGNvbnN0IHkyID0geTEgKyByZXNvbHV0aW9uWzFdICogc2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIFtNYXRoLm1pbih4MSwgeDIpLCBNYXRoLm1pbih5MSwgeTIpLCBNYXRoLm1heCh4MSwgeDIpLCBNYXRoLm1heCh5MSwgeTIpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGNvbXByZXNzaW9uIHVzZWQgYnkgdGhlIHRpbGVcbiAgICAgKlxuICAgICAqIEBzZWUgVGlmZkNvbXByZXNzaW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBDb21wcmVzc2lvbiB0eXBlIGVnIHdlYnBcbiAgICAgKi9cbiAgICBnZXQgY29tcHJlc3Npb24oKTogVGlmZk1pbWVUeXBlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvbXByZXNzaW9uID0gdGhpcy52YWx1ZShUaWZmVGFnLkNvbXByZXNzaW9uKTtcbiAgICAgICAgaWYgKGNvbXByZXNzaW9uID09IG51bGwgfHwgdHlwZW9mIGNvbXByZXNzaW9uICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFRpZmZDb21wcmVzc2lvbltjb21wcmVzc2lvbl07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdCB0byByZWFkIHRoZSBFUFNHIENvZGUgZnJvbSBUaWZmR2VvVGFnc1xuICAgICAqXG4gICAgICogQHJldHVybnMgRVBTRyBDb2RlIGlmIGl0IGV4aXN0c1xuICAgICAqL1xuICAgIGdldCBlcHNnKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy52YWx1ZUdlbyhUaWZmVGFnR2VvLlByb2plY3RlZENTVHlwZUdlb0tleSkgYXMgbnVtYmVyO1xuICAgICAgICBpZiAocHJvamVjdGlvbiA9PT0gSW52YWxpZFByb2plY3Rpb25Db2RlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzaXplIG9mIHRoZSBpbWFnZVxuICAgICAqXG4gICAgICogQHJldHVybnMgU2l6ZSBpbiBwaXhlbHNcbiAgICAgKi9cbiAgICBnZXQgc2l6ZSgpOiBTaXplIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnZhbHVlPG51bWJlcj4oVGlmZlRhZy5JbWFnZVdpZHRoKSBhcyBudW1iZXIsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMudmFsdWU8bnVtYmVyPihUaWZmVGFnLkltYWdlSGVpZ2h0KSBhcyBudW1iZXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBsaXN0IG9mIElGRCB0YWdzIHRoYXQgd2VyZSByZWFkXG4gICAgICovXG4gICAgZ2V0IHRhZ0xpc3QoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGFncy5rZXlzKCldLm1hcCgoYykgPT4gVGlmZlRhZ1tjXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIGlmIHRoaXMgaW1hZ2UgaXMgdGlsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNUaWxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUoVGlmZlRhZy5UaWxlV2lkdGgpICE9PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBzaXplIG9mIGluZGl2aWR1YWwgdGlsZXNcbiAgICAgKi9cbiAgICBnZXQgdGlsZVNpemUoKTogQ29nVGlmZkltYWdlVGlsZVNpemUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMudmFsdWU8bnVtYmVyPihUaWZmVGFnLlRpbGVXaWR0aCkgYXMgbnVtYmVyLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnZhbHVlPG51bWJlcj4oVGlmZlRhZy5UaWxlSGVpZ2h0KSBhcyBudW1iZXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHRpbGVzIHVzZWQgdG8gY3JlYXRlIHRoaXMgaW1hZ2VcbiAgICAgKi9cbiAgICBnZXQgdGlsZUNvdW50KCk6IENvZ1RpZmZJbWFnZVRpbGVkQ291bnQge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5zaXplO1xuICAgICAgICBjb25zdCB0aWxlU2l6ZSA9IHRoaXMudGlsZVNpemU7XG4gICAgICAgIGNvbnN0IHggPSBNYXRoLmNlaWwoc2l6ZS53aWR0aCAvIHRpbGVTaXplLndpZHRoKTtcbiAgICAgICAgY29uc3QgeSA9IE1hdGguY2VpbChzaXplLmhlaWdodCAvIHRpbGVTaXplLmhlaWdodCk7XG4gICAgICAgIHJldHVybiB7IHgsIHkgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBvaW50ZXIgdG8gd2hlcmUgdGhlIHRpbGVzIHN0YXJ0IGluIHRoZSBUaWZmIGZpbGVcbiAgICAgKlxuICAgICAqIEByZW1hcmtzIFVzZWQgdG8gcmVhZCB0aWxlZCB0aWZmc1xuICAgICAqXG4gICAgICogQHJldHVybnMgZmlsZSBvZmZzZXQgdG8gd2hlcmUgdGhlIHRpZmZzIGFyZSBzdG9yZWRcbiAgICAgKi9cbiAgICBnZXQgdGlsZU9mZnNldCgpOiBDb2dUaWZmVGFnT2Zmc2V0IHtcbiAgICAgICAgY29uc3QgdGlsZU9mZnNldCA9IHRoaXMudGFncy5nZXQoVGlmZlRhZy5UaWxlT2Zmc2V0cykgYXMgQ29nVGlmZlRhZ09mZnNldDtcbiAgICAgICAgaWYgKHRpbGVPZmZzZXQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdObyB0aWxlIG9mZnNldHMgZm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHRpbGVPZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBudW1iZXIgb2Ygc3RyaXAncyBpbnNpZGUgdGhpcyB0aWZmXG4gICAgICpcbiAgICAgKiBAcmVtYXJrcyBVc2VkIHRvIHJlYWQgc3RyaXBlZCB0aWZmc1xuICAgICAqXG4gICAgICogQHJldHVybnMgbnVtYmVyIG9mIHN0cmlwcyBwcmVzZW50XG4gICAgICovXG4gICAgZ2V0IHN0cmlwQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGlsZU9mZnNldCA9IHRoaXMudGFncy5nZXQoVGlmZlRhZy5TdHJpcEJ5dGVDb3VudHMpIGFzIENvZ1RpZmZUYWdPZmZzZXQ7XG4gICAgICAgIGlmICh0aWxlT2Zmc2V0ID09IG51bGwpIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gdGlsZU9mZnNldC5kYXRhQ291bnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgcG9pbnRlciB0byBhIHNwZWNpZmljIHRpbGUgaW5zaWRlIHRoZSB0aWZmIGZpbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCB0aWxlIGluZGV4XG4gICAgICogQHJldHVybnMgZmlsZSBvZmZzZXQgb2YgdGhlIHNwZWNpZmllZCB0aWxlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldFRpbGVPZmZzZXQoaW5kZXg6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHRpbGVPZmZzZXQgPSB0aGlzLnRpbGVPZmZzZXQ7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiB0aWxlT2Zmc2V0LmRhdGFDb3VudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaWxlIG9mZnNldDogJHtpbmRleH0gb3V0IG9mIHJhbmdlOiAwIC0+ICR7dGlsZU9mZnNldC5kYXRhQ291bnR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBvZmZzZXRzIHRoYXQgYXJlIG5lZWRlZFxuICAgICAgICByZXR1cm4gdGlsZU9mZnNldC5nZXRWYWx1ZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICAvLyBDbGFtcCB0aGUgYm91bmRzIG9mIHRoZSBvdXRwdXQgaW1hZ2UgdG8gdGhlIHNpemUgb2YgdGhlIGltYWdlLCBhcyBzb21ldGltZXMgdGhlIGVkZ2UgdGlsZXMgYXJlIG5vdCBmdWxsIHRpbGVzXG4gICAgZ2V0VGlsZUJvdW5kcyh4OiBudW1iZXIsIHk6IG51bWJlcik6IEJvdW5kaW5nQm94IHtcbiAgICAgICAgY29uc3QgeyBzaXplLCB0aWxlU2l6ZSB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgdG9wID0geSAqIHRpbGVTaXplLmhlaWdodDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHggKiB0aWxlU2l6ZS53aWR0aDtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBsZWZ0ICsgdGlsZVNpemUud2lkdGggPj0gc2l6ZS53aWR0aCA/IHNpemUud2lkdGggLSBsZWZ0IDogdGlsZVNpemUud2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRvcCArIHRpbGVTaXplLmhlaWdodCA+PSBzaXplLmhlaWdodCA/IHNpemUuaGVpZ2h0IC0gdG9wIDogdGlsZVNpemUuaGVpZ2h0O1xuICAgICAgICByZXR1cm4geyB4OiBsZWZ0LCB5OiB0b3AsIHdpZHRoLCBoZWlnaHQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGEgc3RyaXAgaW50byBhIHVpbnQ4IGFycmF5XG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggU3RyaXAgaW5kZXggdG8gcmVhZFxuICAgICAqL1xuICAgIGFzeW5jIGdldFN0cmlwKGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHsgbWltZVR5cGU6IFRpZmZNaW1lVHlwZTsgYnl0ZXM6IFVpbnQ4QXJyYXkgfSB8IG51bGw+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNUaWxlZCgpKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWFkIHN0cmlwZXMsIHRpZmYgaXMgdGlsZWQnKTtcblxuICAgICAgICBjb25zdCBieXRlQ291bnRzID0gdGhpcy50YWdzLmdldChUaWZmVGFnLlN0cmlwQnl0ZUNvdW50cykgYXMgQ29nVGlmZlRhZ09mZnNldDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IHRoaXMudGFncy5nZXQoVGlmZlRhZy5TdHJpcE9mZnNldHMpIGFzIENvZ1RpZmZUYWdPZmZzZXQ7XG5cbiAgICAgICAgaWYgKGluZGV4ID49IGJ5dGVDb3VudHMuZGF0YUNvdW50KSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZWFkIHN0cmlwLCBpbmRleCBvdXQgb2YgYm91bmRzJyk7XG5cbiAgICAgICAgY29uc3QgW2J5dGVDb3VudCwgb2Zmc2V0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtvZmZzZXRzLmdldFZhbHVlQXQoaW5kZXgpLCBieXRlQ291bnRzLmdldFZhbHVlQXQoaW5kZXgpXSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5dGVzKGJ5dGVDb3VudCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGpwZWcgaGVhZGVyIGlzIHN0b3JlZCBpbiB0aGUgSUZELCByZWFkIHRoZSBKUEVHIGhlYWRlciBhbmQgYWRqdXN0IHRoZSBieXRlIGFycmF5IHRvIGluY2x1ZGUgaXQgKi9cbiAgICBwcml2YXRlIGdldEpwZWdIZWFkZXIoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICAgICAgLy8gQm90aCB0aGUgSlBFR1RhYmxlIGFuZCB0aGUgQnl0ZXMgd2l0aCBoYXZlIHRoZSBzdGFydCBvZiBpbWFnZSBhbmQgZW5kIG9mIGltYWdlIG1hcmtlcnNcbiAgICAgICAgLy8gU3RhcnRPZkltYWdlIDB4ZmZkOCBFbmRPZkltYWdlIDB4ZmZkOVxuICAgICAgICBjb25zdCB0YWJsZXMgPSB0aGlzLnZhbHVlPG51bWJlcltdPihUaWZmVGFnLkpQRUdUYWJsZXMpO1xuICAgICAgICBpZiAodGFibGVzID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgSnBlZyBoZWFkZXInKTtcblxuICAgICAgICAvLyBSZW1vdmUgRW5kT2ZJbWFnZSBtYXJrZXJcbiAgICAgICAgY29uc3QgdGFibGVEYXRhID0gdGFibGVzLnNsaWNlKDAsIHRhYmxlcy5sZW5ndGggLSAyKTtcbiAgICAgICAgY29uc3QgYWN0dWFsQnl0ZXMgPSBuZXcgVWludDhBcnJheShieXRlcy5ieXRlTGVuZ3RoICsgdGFibGVEYXRhLmxlbmd0aCAtIDIpO1xuICAgICAgICBhY3R1YWxCeXRlcy5zZXQodGFibGVEYXRhLCAwKTtcbiAgICAgICAgYWN0dWFsQnl0ZXMuc2V0KGJ5dGVzLnNsaWNlKDIpLCB0YWJsZURhdGEubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGFjdHVhbEJ5dGVzO1xuICAgIH1cblxuICAgIC8qKiBSZWFkIGltYWdlIGJ5dGVzIGF0IHRoZSBnaXZlbiBvZmZzZXQgKi9cbiAgICBwcml2YXRlIGFzeW5jIGdldEJ5dGVzKFxuICAgICAgICBvZmZzZXQ6IG51bWJlcixcbiAgICAgICAgYnl0ZUNvdW50OiBudW1iZXIsXG4gICAgKTogUHJvbWlzZTx7IG1pbWVUeXBlOiBUaWZmTWltZVR5cGU7IGJ5dGVzOiBVaW50OEFycmF5IH0gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5jb21wcmVzc2lvbjtcbiAgICAgICAgaWYgKG1pbWVUeXBlID09IG51bGwpIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29tcHJlc3Npb246ICcgKyB0aGlzLnZhbHVlKFRpZmZUYWcuQ29tcHJlc3Npb24pKTtcbiAgICAgICAgaWYgKGJ5dGVDb3VudCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgYXdhaXQgdGhpcy50aWYuc291cmNlLmxvYWRCeXRlcyhvZmZzZXQsIGJ5dGVDb3VudCk7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy50aWYuc291cmNlLmJ5dGVzKG9mZnNldCwgYnl0ZUNvdW50KTtcblxuICAgICAgICBpZiAodGhpcy5jb21wcmVzc2lvbiA9PT0gVGlmZk1pbWVUeXBlLkpQRUcpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbWVUeXBlLCBieXRlczogdGhpcy5nZXRKcGVnSGVhZGVyKGJ5dGVzKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1pbWVUeXBlLCBieXRlcyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHRpbGUgYnVmZmVyLCB0aGlzIHdvcmtzIGJlc3Qgd2l0aCB3ZWJwXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgYWxzbyBhcHBseSB0aGUgSlBFRyBjb21wcmVzc2lvbiB0YWJsZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB4IFRpbGUgeCBvZmZzZXRcbiAgICAgKiBAcGFyYW0geSBUaWxlIHkgb2Zmc2V0XG4gICAgICovXG4gICAgYXN5bmMgZ2V0VGlsZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IFByb21pc2U8eyBtaW1lVHlwZTogVGlmZk1pbWVUeXBlOyBieXRlczogVWludDhBcnJheSB9IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBtaW1lVHlwZSA9IHRoaXMuY29tcHJlc3Npb247XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIGNvbnN0IHRpbGVzID0gdGhpcy50aWxlU2l6ZTtcblxuICAgICAgICBpZiAodGlsZXMgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdUaWZmIGlzIG5vdCB0aWxlZCcpO1xuICAgICAgICBpZiAobWltZVR5cGUgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjb21wcmVzc2lvbjogJyArIHRoaXMudmFsdWUoVGlmZlRhZy5Db21wcmVzc2lvbikpO1xuXG4gICAgICAgIC8vIFRPRE8gc3VwcG9ydCBHaG9zdE9wdGlvblRpbGVPcmRlclxuICAgICAgICBjb25zdCBueVRpbGVzID0gTWF0aC5jZWlsKHNpemUuaGVpZ2h0IC8gdGlsZXMuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgbnhUaWxlcyA9IE1hdGguY2VpbChzaXplLndpZHRoIC8gdGlsZXMud2lkdGgpO1xuXG4gICAgICAgIGlmICh4ID49IG54VGlsZXMgfHwgeSA+PSBueVRpbGVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRpbGUgaW5kZXggaXMgb3V0c2lkZSBvZiByYW5nZSB4OiR7eH0gPj0gJHtueFRpbGVzfSBvciB5OiR7eX0gPj0gJHtueVRpbGVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWR4ID0geSAqIG54VGlsZXMgKyB4O1xuICAgICAgICBjb25zdCB0b3RhbFRpbGVzID0gbnhUaWxlcyAqIG55VGlsZXM7XG4gICAgICAgIGlmIChpZHggPj0gdG90YWxUaWxlcykgdGhyb3cgbmV3IEVycm9yKGBUaWxlIGluZGV4IGlzIG91dHNpZGUgb2YgdGlsZSByYW5nZTogJHtpZHh9ID49ICR7dG90YWxUaWxlc31gKTtcblxuICAgICAgICBjb25zdCB7IG9mZnNldCwgaW1hZ2VTaXplIH0gPSBhd2FpdCB0aGlzLmdldFRpbGVTaXplKGlkeCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ5dGVzKG9mZnNldCwgaW1hZ2VTaXplKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VGlsZVNpemUoaW5kZXg6IG51bWJlcik6IFByb21pc2U8eyBvZmZzZXQ6IG51bWJlcjsgaW1hZ2VTaXplOiBudW1iZXIgfT4ge1xuICAgICAgICAvLyBHREFMIG9wdGltaXplcyB0aWxlcyBieSBzdG9yaW5nIHRoZSBzaXplIG9mIHRoZSB0aWxlIGluXG4gICAgICAgIC8vIHRoZSBmZXcgYnl0ZXMgbGVhZGluZyB1cCB0byB0aGUgdGlsZVxuICAgICAgICBpZiAodGhpcy50aWYub3B0aW9ucy50aWxlTGVhZGVyQnl0ZVNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGF3YWl0IHRoaXMuZ2V0VGlsZU9mZnNldChpbmRleCk7XG4gICAgICAgICAgICAvLyBTcGFyc2UgQ09HIG5vIGRhdGEgZm91bmRcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPT09IDApIHJldHVybiB7IG9mZnNldDogMCwgaW1hZ2VTaXplOiAwIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGxlYWRlckJ5dGVzID0gdGhpcy50aWYub3B0aW9ucy50aWxlTGVhZGVyQnl0ZVNpemU7XG4gICAgICAgICAgICAvLyBUaGlzIGZldGNoIHdpbGwgZ2VuZXJhbGx5IGxvYWQgaW4gdGhlIGJ5dGVzIG5lZWRlZCBmb3IgdGhlIGltYWdlIHRvb1xuICAgICAgICAgICAgLy8gcHJvdmlkZWQgdGhlIGltYWdlIHNpemUgaXMgbGVzcyB0aGFuIHRoZSBzaXplIG9mIGEgY2h1bmtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGlmLnNvdXJjZS5sb2FkQnl0ZXMob2Zmc2V0IC0gbGVhZGVyQnl0ZXMsIGxlYWRlckJ5dGVzKTtcbiAgICAgICAgICAgIHJldHVybiB7IG9mZnNldCwgaW1hZ2VTaXplOiB0aGlzLnRpZi5zb3VyY2UuZ2V0VWludChvZmZzZXQgLSBsZWFkZXJCeXRlcywgbGVhZGVyQnl0ZXMpIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBieXRlQ291bnRzID0gdGhpcy50YWdzLmdldChUaWZmVGFnLlRpbGVCeXRlQ291bnRzKSBhcyBDb2dUaWZmVGFnT2Zmc2V0O1xuICAgICAgICBpZiAoYnl0ZUNvdW50cyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRpbGUgYnl0ZSBjb3VudHMgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbb2Zmc2V0LCBpbWFnZVNpemVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuZ2V0VGlsZU9mZnNldChpbmRleCksIGJ5dGVDb3VudHMuZ2V0VmFsdWVBdChpbmRleCldKTtcbiAgICAgICAgcmV0dXJuIHsgb2Zmc2V0LCBpbWFnZVNpemUgfTtcbiAgICB9XG59XG4iXX0=
package/build/cog.tiff.js CHANGED
@@ -26,23 +26,23 @@ export class CogTiff {
26
26
  *
27
27
  * @param loadGeoKeys Whether to also initialize the GeoKeyDirectory
28
28
  */
29
- init(loadGeoKeys = false, logger) {
29
+ init(loadGeoKeys = false) {
30
30
  if (this._initPromise)
31
31
  return this._initPromise;
32
- this._initPromise = this.doInit(loadGeoKeys, logger);
32
+ this._initPromise = this.doInit(loadGeoKeys);
33
33
  return this._initPromise;
34
34
  }
35
- async doInit(loadGeoKeys = false, logger) {
35
+ async doInit(loadGeoKeys = false) {
36
36
  if (this.isInitialized)
37
37
  return this;
38
38
  // Load the first few KB in, more loads will run as more data is required
39
- await this.source.loadBytes(0, this.source.chunkSize, logger);
40
- await this.fetchIfd(logger);
41
- await Promise.all(this.images.map((c) => c.init(loadGeoKeys, logger)));
39
+ await this.source.loadBytes(0, this.source.chunkSize);
40
+ await this.fetchIfd();
41
+ await Promise.all(this.images.map((c) => c.init(loadGeoKeys)));
42
42
  this.isInitialized = true;
43
43
  return this;
44
44
  }
45
- async fetchIfd(logger) {
45
+ async fetchIfd() {
46
46
  const view = this.cursor.seekTo(0);
47
47
  const endian = view.uint16();
48
48
  this.source.isLittleEndian = endian === TiffEndian.Little;
@@ -69,10 +69,13 @@ export class CogTiff {
69
69
  const ghostSize = nextOffsetIfd - this.cursor.currentOffset;
70
70
  // GDAL now stores metadata between the IFD inside a ghost storage area
71
71
  if (ghostSize > 0 && ghostSize < 16 * 1024) {
72
- logger === null || logger === void 0 ? void 0 : logger.debug({ offset: toHexString(this.cursor.currentOffset), length: toHexString(ghostSize) }, 'GhostOptions');
72
+ // logger?.debug(
73
+ // { offset: toHexString(this.cursor.currentOffset), length: toHexString(ghostSize) },
74
+ // 'GhostOptions',
75
+ // );
73
76
  // this.options.process(this.source, view.currentOffset, ghostSize);
74
77
  }
75
- return this.processIfd(nextOffsetIfd, logger);
78
+ return this.processIfd(nextOffsetIfd);
76
79
  }
77
80
  getImage(z) {
78
81
  return this.images[z];
@@ -116,58 +119,27 @@ export class CogTiff {
116
119
  throw new Error('Tif is not tiled');
117
120
  return image.getTile(x, y);
118
121
  }
119
- async processIfd(offset, logger) {
120
- logger === null || logger === void 0 ? void 0 : logger.trace({ offset: toHexString(offset) }, 'NextImageOffset');
121
- if (!this.source.hasBytes(offset, 4096)) {
122
- await this.source.loadBytes(offset, 4096, logger);
123
- }
124
- const { image, nextOffset } = await this.readIfd(offset, logger);
122
+ async processIfd(offset) {
123
+ if (!this.source.hasBytes(offset, 4096))
124
+ await this.source.loadBytes(offset, 4096);
125
+ const { image, nextOffset } = await this.readIfd(offset);
125
126
  this.images.push(image);
126
- const size = image.size;
127
- if (image.isTiled()) {
128
- const tile = image.tileSize;
129
- logger === null || logger === void 0 ? void 0 : logger.debug({
130
- ...size,
131
- tileWidth: tile.width,
132
- tileHeight: tile.height,
133
- tileCount: Math.ceil(size.width / tile.width),
134
- }, 'GotImage');
135
- }
136
127
  if (nextOffset)
137
- await this.processIfd(nextOffset, logger);
128
+ await this.processIfd(nextOffset);
138
129
  }
139
- async readIfd(offset, log) {
130
+ async readIfd(offset) {
140
131
  if (!this.source.hasBytes(offset, 1024))
141
- await this.source.loadBytes(offset, this.source.chunkSize, log);
132
+ await this.source.loadBytes(offset, this.source.chunkSize);
142
133
  const view = this.cursor.seekTo(offset);
143
134
  const tagCount = view.offset();
144
135
  const byteStart = offset + this.ifdConfig.offset;
145
- const logger = log === null || log === void 0 ? void 0 : log.child({ imageId: this.images.length });
146
136
  const tags = new Map();
147
137
  let pos = byteStart;
148
138
  for (let i = 0; i < tagCount; i++) {
149
139
  const tag = CogTiffTag.create(this, pos);
150
140
  pos += tag.size;
151
- if (tag.name == null) {
152
- logger === null || logger === void 0 ? void 0 : logger.error({ code: toHexString(tag.id) }, `IFDUnknown`);
153
- continue;
154
- }
155
- if (!tag.isReady) {
156
- logger === null || logger === void 0 ? void 0 : logger.trace({
157
- offset: toHexString(pos - offset),
158
- code: toHexString(tag.id),
159
- tagName: tag.name,
160
- ptr: toHexString(tag.valuePointer),
161
- }, 'PartialReadIFD');
162
- }
163
- else {
164
- logger === null || logger === void 0 ? void 0 : logger.trace({
165
- offset: toHexString(pos - offset),
166
- code: toHexString(tag.id),
167
- tagName: tag.name,
168
- value: Array.isArray(tag.value) ? `[${tag.value.length}]` : tag.value,
169
- }, 'ReadIFD');
170
- }
141
+ if (tag.name == null)
142
+ throw new Error('Unknown IFD Tag: ' + toHexString(tag.id));
171
143
  tags.set(tag.id, tag);
172
144
  }
173
145
  const image = new CogTiffImage(this, this.images.length, tags);
@@ -180,4 +152,4 @@ export class CogTiff {
180
152
  await ((_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.close) === null || _b === void 0 ? void 0 : _b.call(_a));
181
153
  }
182
154
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nLnRpZmYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29nLnRpZmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBaUIsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sT0FBTztJQVNoQixZQUFZLE1BQW1CO1FBUC9CLFlBQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzNCLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFHbkMsY0FBUyxHQUFrQixhQUFhLENBQUM7UUFZekMsNkJBQTZCO1FBQzdCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBVmxCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQW1CO1FBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQU1EOzs7O09BSUc7SUFD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QUNaLENBQUM7YUFDTDtZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN6QjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsS0FBSyxDQUFDLEtBQUs7O1FBQ1AsTUFBTSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxLQUFLLGtEQUFJLENBQUEsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaHVua1NvdXJjZSwgTG9nVHlwZSB9IGZyb20gJ0BjaHVua2QvY29yZSc7XG5pbXBvcnQgeyBDb2dUaWZmSW1hZ2UgfSBmcm9tICcuL2NvZy50aWZmLmltYWdlLmpzJztcbmltcG9ydCB7IFRpZmZFbmRpYW4gfSBmcm9tICcuL2NvbnN0L3RpZmYuZW5kaWFuLmpzJztcbmltcG9ydCB7IFRpZmZUYWcgfSBmcm9tICcuL2NvbnN0L3RpZmYudGFnLmlkLmpzJztcbmltcG9ydCB7IFRpZmZWZXJzaW9uIH0gZnJvbSAnLi9jb25zdC90aWZmLnZlcnNpb24uanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZ0Jhc2UgfSBmcm9tICcuL3JlYWQvdGFnL3RpZmYudGFnLmJhc2UuanMnO1xuaW1wb3J0IHsgQ29nVGlmR2hvc3RPcHRpb25zIH0gZnJvbSAnLi9yZWFkL3RpZmYuZ2RhbC5qcyc7XG5pbXBvcnQgeyBUYWdUaWZmQmlnQ29uZmlnLCBUYWdUaWZmQ29uZmlnLCBUaWZmSWZkQ29uZmlnIH0gZnJvbSAnLi9yZWFkL3RpZmYuaWZkLmNvbmZpZy5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnIH0gZnJvbSAnLi9yZWFkL3RpZmYudGFnLmpzJztcbmltcG9ydCB7IENvZ1NvdXJjZUN1cnNvciB9IGZyb20gJy4vc291cmNlL2NvZy5zb3VyY2Uudmlldy5qcyc7XG5pbXBvcnQgeyB0b0hleFN0cmluZyB9IGZyb20gJy4vdXRpbC91dGlsLmhleC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2dUaWZmIHtcbiAgICBzb3VyY2U6IENodW5rU291cmNlO1xuICAgIHZlcnNpb24gPSBUaWZmVmVyc2lvbi5UaWZmO1xuICAgIGltYWdlczogQ29nVGlmZkltYWdlW10gPSBbXTtcbiAgICBvcHRpb25zID0gbmV3IENvZ1RpZkdob3N0T3B0aW9ucygpO1xuXG4gICAgcHJpdmF0ZSBjdXJzb3I6IENvZ1NvdXJjZUN1cnNvcjtcbiAgICBpZmRDb25maWc6IFRpZmZJZmRDb25maWcgPSBUYWdUaWZmQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3Ioc291cmNlOiBDaHVua1NvdXJjZSkge1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgdGhpcy5jdXJzb3IgPSBuZXcgQ29nU291cmNlQ3Vyc29yKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBDb2dUaWZmICovXG4gICAgc3RhdGljIGNyZWF0ZShzb3VyY2U6IENodW5rU291cmNlKTogUHJvbWlzZTxDb2dUaWZmPiB7XG4gICAgICAgIHJldHVybiBuZXcgQ29nVGlmZihzb3VyY2UpLmluaXQoKTtcbiAgICB9XG5cbiAgICAvKiogSGFzIGluaXQoKSBiZWVuIGNhbGxlZCAqL1xuICAgIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIF9pbml0UHJvbWlzZT86IFByb21pc2U8Q29nVGlmZj47XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0aGUgQ09HIGxvYWRpbmcgaW4gdGhlIGhlYWRlciBhbmQgYWxsIGltYWdlIGhlYWRlcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2FkR2VvS2V5cyBXaGV0aGVyIHRvIGFsc28gaW5pdGlhbGl6ZSB0aGUgR2VvS2V5RGlyZWN0b3J5XG4gICAgICovXG4gICAgaW5pdChsb2FkR2VvS2V5cyA9IGZhbHNlLCBsb2dnZXI/OiBMb2dUeXBlKTogUHJvbWlzZTxDb2dUaWZmPiB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX2luaXRQcm9taXNlO1xuICAgICAgICB0aGlzLl9pbml0UHJvbWlzZSA9IHRoaXMuZG9Jbml0KGxvYWRHZW9LZXlzLCBsb2dnZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5pdFByb21pc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBkb0luaXQobG9hZEdlb0tleXMgPSBmYWxzZSwgbG9nZ2VyPzogTG9nVHlwZSk6IFByb21pc2U8Q29nVGlmZj4ge1xuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSByZXR1cm4gdGhpcztcbiAgICAgICAgLy8gTG9hZCB0aGUgZmlyc3QgZmV3IEtCIGluLCBtb3JlIGxvYWRzIHdpbGwgcnVuIGFzIG1vcmUgZGF0YSBpcyByZXF1aXJlZFxuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZS5sb2FkQnl0ZXMoMCwgdGhpcy5zb3VyY2UuY2h1bmtTaXplLCBsb2dnZXIpO1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoSWZkKGxvZ2dlcik7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuaW1hZ2VzLm1hcCgoYykgPT4gYy5pbml0KGxvYWRHZW9LZXlzLCBsb2dnZXIpKSk7XG5cbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmZXRjaElmZChsb2dnZXI/OiBMb2dUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmN1cnNvci5zZWVrVG8oMCk7XG4gICAgICAgIGNvbnN0IGVuZGlhbiA9IHZpZXcudWludDE2KCk7XG4gICAgICAgIHRoaXMuc291cmNlLmlzTGl0dGxlRW5kaWFuID0gZW5kaWFuID09PSBUaWZmRW5kaWFuLkxpdHRsZTtcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZS5pc0xpdHRsZUVuZGlhbikgdGhyb3cgbmV3IEVycm9yKCdPbmx5IGxpdHRsZSBlbmRpYW4gaXMgc3VwcG9ydGVkJyk7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZpZXcudWludDE2KCk7XG5cbiAgICAgICAgbGV0IG5leHRPZmZzZXRJZmQ6IG51bWJlcjtcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gVGlmZlZlcnNpb24uQmlnVGlmZikge1xuICAgICAgICAgICAgdGhpcy5pZmRDb25maWcgPSBUYWdUaWZmQmlnQ29uZmlnO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRlclNpemUgPSB2aWV3LnVpbnQxNigpO1xuICAgICAgICAgICAgaWYgKHBvaW50ZXJTaXplICE9PSA4KSB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgOGJ5dGUgcG9pbnRlcnMgYXJlIHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgY29uc3QgemVyb3MgPSB2aWV3LnVpbnQxNigpO1xuICAgICAgICAgICAgaWYgKHplcm9zICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmlnIHRpZmYgaGVhZGVyJyk7XG4gICAgICAgICAgICBuZXh0T2Zmc2V0SWZkID0gdmlldy5wb2ludGVyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSBUaWZmVmVyc2lvbi5UaWZmKSB7XG4gICAgICAgICAgICBuZXh0T2Zmc2V0SWZkID0gdmlldy5wb2ludGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgdGlmZiBzdXBwb3J0ZWQgdmVyc2lvbjoke3RoaXMudmVyc2lvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdob3N0U2l6ZSA9IG5leHRPZmZzZXRJZmQgLSB0aGlzLmN1cnNvci5jdXJyZW50T2Zmc2V0O1xuICAgICAgICAvLyBHREFMIG5vdyBzdG9yZXMgbWV0YWRhdGEgYmV0d2VlbiB0aGUgSUZEIGluc2lkZSBhIGdob3N0IHN0b3JhZ2UgYXJlYVxuICAgICAgICBpZiAoZ2hvc3RTaXplID4gMCAmJiBnaG9zdFNpemUgPCAxNiAqIDEwMjQpIHtcbiAgICAgICAgICAgIGxvZ2dlcj8uZGVidWcoXG4gICAgICAgICAgICAgICAgeyBvZmZzZXQ6IHRvSGV4U3RyaW5nKHRoaXMuY3Vyc29yLmN1cnJlbnRPZmZzZXQpLCBsZW5ndGg6IHRvSGV4U3RyaW5nKGdob3N0U2l6ZSkgfSxcbiAgICAgICAgICAgICAgICAnR2hvc3RPcHRpb25zJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyB0aGlzLm9wdGlvbnMucHJvY2Vzcyh0aGlzLnNvdXJjZSwgdmlldy5jdXJyZW50T2Zmc2V0LCBnaG9zdFNpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0lmZChuZXh0T2Zmc2V0SWZkLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIGdldEltYWdlKHo6IG51bWJlcik6IENvZ1RpZmZJbWFnZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlc1t6XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgaW1hZ2Ugd2hpY2ggaGFzIGEgcmVzb2x1dGlvbiBzaW1pbGFyIHRvIHRoZSBwcm92aWRlZCByZXNvbHV0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzb2x1dGlvbiByZXNvbHV0aW9uIHRvIGZpbmRcbiAgICAgKi9cbiAgICBnZXRJbWFnZUJ5UmVzb2x1dGlvbihyZXNvbHV0aW9uOiBudW1iZXIpOiBDb2dUaWZmSW1hZ2Uge1xuICAgICAgICBjb25zdCBmaXJzdEltYWdlID0gdGhpcy5pbWFnZXNbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0SW1hZ2VTaXplID0gZmlyc3RJbWFnZS5zaXplO1xuICAgICAgICBjb25zdCBbcmVmWF0gPSBmaXJzdEltYWdlLnJlc29sdXRpb247XG5cbiAgICAgICAgY29uc3QgcmVzb2x1dGlvbkJhc2VYID0gcmVmWCAqIGZpcnN0SW1hZ2VTaXplLndpZHRoO1xuICAgICAgICAvLyBjb25zdCByZXNvbHV0aW9uQmFzZVkgPSByZWZZICogZmlyc3RJbWFnZVNpemUuaGVpZ2h0O1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5pbWFnZXMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgaW1nID0gdGhpcy5pbWFnZXNbaV07XG4gICAgICAgICAgICBjb25zdCBpbWdTaXplID0gaW1nLnNpemU7XG5cbiAgICAgICAgICAgIGNvbnN0IGltZ1Jlc29sdXRpb25YID0gcmVzb2x1dGlvbkJhc2VYIC8gaW1nU2l6ZS53aWR0aDtcbiAgICAgICAgICAgIC8vIFRPRE8gZG8gd2UgY2FyZSBhYm91dCB5IHJlc29sdXRpb25cbiAgICAgICAgICAgIC8vIGNvbnN0IGltZ1Jlc29sdXRpb25ZID0gcmVzb2x1dGlvbkJhc2VZIC8gaW1nU2l6ZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChpbWdSZXNvbHV0aW9uWCAtIHJlc29sdXRpb24gPD0gMC4wMSkgcmV0dXJuIGltZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RJbWFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJhdyBieXRlcyBmb3IgYSB0aWxlIGF0IGEgZ2l2ZW4geCx5LCBpbmRleC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IHJldHVybiBudWxsIGlmIHRoZSB0aWxlIGRvZXMgbm90IGV4aXN0IGVnIFNwYXJzZSBjb2dzLFxuICAgICAqXG4gICAgICogQHBhcmFtIHggdGlsZSB4IGluZGV4XG4gICAgICogQHBhcmFtIHkgdGlsZSB5IGluZGV4XG4gICAgICogQHBhcmFtIGluZGV4IGltYWdlIGluZGV4XG4gICAgICovXG4gICAgYXN5bmMgZ2V0VGlsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8eyBtaW1lVHlwZTogc3RyaW5nOyBieXRlczogVWludDhBcnJheSB9IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuZ2V0SW1hZ2UoaW5kZXgpO1xuICAgICAgICBpZiAoaW1hZ2UgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHo6ICR7aW5kZXh9YCk7XG4gICAgICAgIGlmICghaW1hZ2UuaXNUaWxlZCgpKSB0aHJvdyBuZXcgRXJyb3IoJ1RpZiBpcyBub3QgdGlsZWQnKTtcblxuICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0VGlsZSh4LCB5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NJZmQob2Zmc2V0OiBudW1iZXIsIGxvZ2dlcj86IExvZ1R5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbG9nZ2VyPy50cmFjZSh7IG9mZnNldDogdG9IZXhTdHJpbmcob2Zmc2V0KSB9LCAnTmV4dEltYWdlT2Zmc2V0Jyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZS5oYXNCeXRlcyhvZmZzZXQsIDQwOTYpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZS5sb2FkQnl0ZXMob2Zmc2V0LCA0MDk2LCBsb2dnZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBpbWFnZSwgbmV4dE9mZnNldCB9ID0gYXdhaXQgdGhpcy5yZWFkSWZkKG9mZnNldCwgbG9nZ2VyKTtcbiAgICAgICAgdGhpcy5pbWFnZXMucHVzaChpbWFnZSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBpbWFnZS5zaXplO1xuICAgICAgICBpZiAoaW1hZ2UuaXNUaWxlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gaW1hZ2UudGlsZVNpemU7XG4gICAgICAgICAgICBsb2dnZXI/LmRlYnVnKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgdGlsZVdpZHRoOiB0aWxlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB0aWxlSGVpZ2h0OiB0aWxlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGlsZUNvdW50OiBNYXRoLmNlaWwoc2l6ZS53aWR0aCAvIHRpbGUud2lkdGgpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ0dvdEltYWdlJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dE9mZnNldCkgYXdhaXQgdGhpcy5wcm9jZXNzSWZkKG5leHRPZmZzZXQsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZWFkSWZkKG9mZnNldDogbnVtYmVyLCBsb2c/OiBMb2dUeXBlKTogUHJvbWlzZTx7IG5leHRPZmZzZXQ6IG51bWJlcjsgaW1hZ2U6IENvZ1RpZmZJbWFnZSB9PiB7XG4gICAgICAgIGlmICghdGhpcy5zb3VyY2UuaGFzQnl0ZXMob2Zmc2V0LCAxMDI0KSkgYXdhaXQgdGhpcy5zb3VyY2UubG9hZEJ5dGVzKG9mZnNldCwgdGhpcy5zb3VyY2UuY2h1bmtTaXplLCBsb2cpO1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5jdXJzb3Iuc2Vla1RvKG9mZnNldCk7XG4gICAgICAgIGNvbnN0IHRhZ0NvdW50ID0gdmlldy5vZmZzZXQoKTtcbiAgICAgICAgY29uc3QgYnl0ZVN0YXJ0ID0gb2Zmc2V0ICsgdGhpcy5pZmRDb25maWcub2Zmc2V0O1xuICAgICAgICBjb25zdCBsb2dnZXIgPSBsb2c/LmNoaWxkKHsgaW1hZ2VJZDogdGhpcy5pbWFnZXMubGVuZ3RoIH0pO1xuICAgICAgICBjb25zdCB0YWdzOiBNYXA8VGlmZlRhZywgQ29nVGlmZlRhZ0Jhc2U+ID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIGxldCBwb3MgPSBieXRlU3RhcnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdGFnID0gQ29nVGlmZlRhZy5jcmVhdGUodGhpcywgcG9zKTtcbiAgICAgICAgICAgIHBvcyArPSB0YWcuc2l6ZTtcblxuICAgICAgICAgICAgaWYgKHRhZy5uYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXI/LmVycm9yKHsgY29kZTogdG9IZXhTdHJpbmcodGFnLmlkKSB9LCBgSUZEVW5rbm93bmApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRhZy5pc1JlYWR5KSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyPy50cmFjZShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB0b0hleFN0cmluZyhwb3MgLSBvZmZzZXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogdG9IZXhTdHJpbmcodGFnLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6IHRhZy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHRyOiB0b0hleFN0cmluZyh0YWcudmFsdWVQb2ludGVyKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgJ1BhcnRpYWxSZWFkSUZEJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXI/LnRyYWNlKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHRvSGV4U3RyaW5nKHBvcyAtIG9mZnNldCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiB0b0hleFN0cmluZyh0YWcuaWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnTmFtZTogdGFnLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh0YWcudmFsdWUpID8gYFske3RhZy52YWx1ZS5sZW5ndGh9XWAgOiB0YWcudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdSZWFkSUZEJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWdzLnNldCh0YWcuaWQsIHRhZyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBDb2dUaWZmSW1hZ2UodGhpcywgdGhpcy5pbWFnZXMubGVuZ3RoLCB0YWdzKTtcbiAgICAgICAgY29uc3QgbmV4dE9mZnNldCA9IHRoaXMuc291cmNlLmdldFVpbnQocG9zLCB0aGlzLmlmZENvbmZpZy5wb2ludGVyKTtcbiAgICAgICAgcmV0dXJuIHsgbmV4dE9mZnNldCwgaW1hZ2UgfTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2UgdGhlIGZpbGUgc291cmNlIGlmIGl0IG5lZWRzIGNsb3NpbmcgKi9cbiAgICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zb3VyY2U/LmNsb3NlPy4oKTtcbiAgICB9XG59XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nLnRpZmYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29nLnRpZmYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBaUIsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sT0FBTztJQVNoQixZQUFZLE1BQW1CO1FBUC9CLFlBQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQzNCLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFHbkMsY0FBUyxHQUFrQixhQUFhLENBQUM7UUFZekMsNkJBQTZCO1FBQzdCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBVmxCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQW1CO1FBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQU1EOzs7O09BSUc7SUFD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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFFaEIsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUk7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxLQUFLLENBQUMsS0FBSzs7UUFDUCxNQUFNLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssa0RBQUksQ0FBQSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENodW5rU291cmNlIH0gZnJvbSAnQGNodW5rZC9jb3JlJztcbmltcG9ydCB7IENvZ1RpZmZJbWFnZSB9IGZyb20gJy4vY29nLnRpZmYuaW1hZ2UuanMnO1xuaW1wb3J0IHsgVGlmZkVuZGlhbiB9IGZyb20gJy4vY29uc3QvdGlmZi5lbmRpYW4uanMnO1xuaW1wb3J0IHsgVGlmZlRhZyB9IGZyb20gJy4vY29uc3QvdGlmZi50YWcuaWQuanMnO1xuaW1wb3J0IHsgVGlmZlZlcnNpb24gfSBmcm9tICcuL2NvbnN0L3RpZmYudmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnQmFzZSB9IGZyb20gJy4vcmVhZC90YWcvdGlmZi50YWcuYmFzZS5qcyc7XG5pbXBvcnQgeyBDb2dUaWZHaG9zdE9wdGlvbnMgfSBmcm9tICcuL3JlYWQvdGlmZi5nZGFsLmpzJztcbmltcG9ydCB7IFRhZ1RpZmZCaWdDb25maWcsIFRhZ1RpZmZDb25maWcsIFRpZmZJZmRDb25maWcgfSBmcm9tICcuL3JlYWQvdGlmZi5pZmQuY29uZmlnLmpzJztcbmltcG9ydCB7IENvZ1RpZmZUYWcgfSBmcm9tICcuL3JlYWQvdGlmZi50YWcuanMnO1xuaW1wb3J0IHsgQ29nU291cmNlQ3Vyc29yIH0gZnJvbSAnLi9zb3VyY2UvY29nLnNvdXJjZS52aWV3LmpzJztcbmltcG9ydCB7IHRvSGV4U3RyaW5nIH0gZnJvbSAnLi91dGlsL3V0aWwuaGV4LmpzJztcblxuZXhwb3J0IGNsYXNzIENvZ1RpZmYge1xuICAgIHNvdXJjZTogQ2h1bmtTb3VyY2U7XG4gICAgdmVyc2lvbiA9IFRpZmZWZXJzaW9uLlRpZmY7XG4gICAgaW1hZ2VzOiBDb2dUaWZmSW1hZ2VbXSA9IFtdO1xuICAgIG9wdGlvbnMgPSBuZXcgQ29nVGlmR2hvc3RPcHRpb25zKCk7XG5cbiAgICBwcml2YXRlIGN1cnNvcjogQ29nU291cmNlQ3Vyc29yO1xuICAgIGlmZENvbmZpZzogVGlmZklmZENvbmZpZyA9IFRhZ1RpZmZDb25maWc7XG5cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2U6IENodW5rU291cmNlKSB7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLmN1cnNvciA9IG5ldyBDb2dTb3VyY2VDdXJzb3IodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIENvZ1RpZmYgKi9cbiAgICBzdGF0aWMgY3JlYXRlKHNvdXJjZTogQ2h1bmtTb3VyY2UpOiBQcm9taXNlPENvZ1RpZmY+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2dUaWZmKHNvdXJjZSkuaW5pdCgpO1xuICAgIH1cblxuICAgIC8qKiBIYXMgaW5pdCgpIGJlZW4gY2FsbGVkICovXG4gICAgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgX2luaXRQcm9taXNlPzogUHJvbWlzZTxDb2dUaWZmPjtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoZSBDT0cgbG9hZGluZyBpbiB0aGUgaGVhZGVyIGFuZCBhbGwgaW1hZ2UgaGVhZGVyc1xuICAgICAqXG4gICAgICogQHBhcmFtIGxvYWRHZW9LZXlzIFdoZXRoZXIgdG8gYWxzbyBpbml0aWFsaXplIHRoZSBHZW9LZXlEaXJlY3RvcnlcbiAgICAgKi9cbiAgICBpbml0KGxvYWRHZW9LZXlzID0gZmFsc2UpOiBQcm9taXNlPENvZ1RpZmY+IHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRQcm9taXNlKSByZXR1cm4gdGhpcy5faW5pdFByb21pc2U7XG4gICAgICAgIHRoaXMuX2luaXRQcm9taXNlID0gdGhpcy5kb0luaXQobG9hZEdlb0tleXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5pdFByb21pc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBkb0luaXQobG9hZEdlb0tleXMgPSBmYWxzZSk6IFByb21pc2U8Q29nVGlmZj4ge1xuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSByZXR1cm4gdGhpcztcbiAgICAgICAgLy8gTG9hZCB0aGUgZmlyc3QgZmV3IEtCIGluLCBtb3JlIGxvYWRzIHdpbGwgcnVuIGFzIG1vcmUgZGF0YSBpcyByZXF1aXJlZFxuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZS5sb2FkQnl0ZXMoMCwgdGhpcy5zb3VyY2UuY2h1bmtTaXplKTtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaElmZCgpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmltYWdlcy5tYXAoKGMpID0+IGMuaW5pdChsb2FkR2VvS2V5cykpKTtcblxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZldGNoSWZkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5jdXJzb3Iuc2Vla1RvKDApO1xuICAgICAgICBjb25zdCBlbmRpYW4gPSB2aWV3LnVpbnQxNigpO1xuICAgICAgICB0aGlzLnNvdXJjZS5pc0xpdHRsZUVuZGlhbiA9IGVuZGlhbiA9PT0gVGlmZkVuZGlhbi5MaXR0bGU7XG4gICAgICAgIGlmICghdGhpcy5zb3VyY2UuaXNMaXR0bGVFbmRpYW4pIHRocm93IG5ldyBFcnJvcignT25seSBsaXR0bGUgZW5kaWFuIGlzIHN1cHBvcnRlZCcpO1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB2aWV3LnVpbnQxNigpO1xuXG4gICAgICAgIGxldCBuZXh0T2Zmc2V0SWZkOiBudW1iZXI7XG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09IFRpZmZWZXJzaW9uLkJpZ1RpZmYpIHtcbiAgICAgICAgICAgIHRoaXMuaWZkQ29uZmlnID0gVGFnVGlmZkJpZ0NvbmZpZztcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ZXJTaXplID0gdmlldy51aW50MTYoKTtcbiAgICAgICAgICAgIGlmIChwb2ludGVyU2l6ZSAhPT0gOCkgdGhyb3cgbmV3IEVycm9yKCdPbmx5IDhieXRlIHBvaW50ZXJzIGFyZSBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgIGNvbnN0IHplcm9zID0gdmlldy51aW50MTYoKTtcbiAgICAgICAgICAgIGlmICh6ZXJvcyAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJpZyB0aWZmIGhlYWRlcicpO1xuICAgICAgICAgICAgbmV4dE9mZnNldElmZCA9IHZpZXcucG9pbnRlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmVyc2lvbiA9PT0gVGlmZlZlcnNpb24uVGlmZikge1xuICAgICAgICAgICAgbmV4dE9mZnNldElmZCA9IHZpZXcucG9pbnRlcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IHRpZmYgc3VwcG9ydGVkIHZlcnNpb246JHt0aGlzLnZlcnNpb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnaG9zdFNpemUgPSBuZXh0T2Zmc2V0SWZkIC0gdGhpcy5jdXJzb3IuY3VycmVudE9mZnNldDtcbiAgICAgICAgLy8gR0RBTCBub3cgc3RvcmVzIG1ldGFkYXRhIGJldHdlZW4gdGhlIElGRCBpbnNpZGUgYSBnaG9zdCBzdG9yYWdlIGFyZWFcbiAgICAgICAgaWYgKGdob3N0U2l6ZSA+IDAgJiYgZ2hvc3RTaXplIDwgMTYgKiAxMDI0KSB7XG4gICAgICAgICAgICAvLyBsb2dnZXI/LmRlYnVnKFxuICAgICAgICAgICAgLy8gICAgIHsgb2Zmc2V0OiB0b0hleFN0cmluZyh0aGlzLmN1cnNvci5jdXJyZW50T2Zmc2V0KSwgbGVuZ3RoOiB0b0hleFN0cmluZyhnaG9zdFNpemUpIH0sXG4gICAgICAgICAgICAvLyAgICAgJ0dob3N0T3B0aW9ucycsXG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgLy8gdGhpcy5vcHRpb25zLnByb2Nlc3ModGhpcy5zb3VyY2UsIHZpZXcuY3VycmVudE9mZnNldCwgZ2hvc3RTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJZmQobmV4dE9mZnNldElmZCk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2UoejogbnVtYmVyKTogQ29nVGlmZkltYWdlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzW3pdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBpbWFnZSB3aGljaCBoYXMgYSByZXNvbHV0aW9uIHNpbWlsYXIgdG8gdGhlIHByb3ZpZGVkIHJlc29sdXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNvbHV0aW9uIHJlc29sdXRpb24gdG8gZmluZFxuICAgICAqL1xuICAgIGdldEltYWdlQnlSZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcik6IENvZ1RpZmZJbWFnZSB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW1hZ2UgPSB0aGlzLmltYWdlc1swXTtcbiAgICAgICAgY29uc3QgZmlyc3RJbWFnZVNpemUgPSBmaXJzdEltYWdlLnNpemU7XG4gICAgICAgIGNvbnN0IFtyZWZYXSA9IGZpcnN0SW1hZ2UucmVzb2x1dGlvbjtcblxuICAgICAgICBjb25zdCByZXNvbHV0aW9uQmFzZVggPSByZWZYICogZmlyc3RJbWFnZVNpemUud2lkdGg7XG4gICAgICAgIC8vIGNvbnN0IHJlc29sdXRpb25CYXNlWSA9IHJlZlkgKiBmaXJzdEltYWdlU2l6ZS5oZWlnaHQ7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmltYWdlcy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmltYWdlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGltZ1NpemUgPSBpbWcuc2l6ZTtcblxuICAgICAgICAgICAgY29uc3QgaW1nUmVzb2x1dGlvblggPSByZXNvbHV0aW9uQmFzZVggLyBpbWdTaXplLndpZHRoO1xuICAgICAgICAgICAgLy8gVE9ETyBkbyB3ZSBjYXJlIGFib3V0IHkgcmVzb2x1dGlvblxuICAgICAgICAgICAgLy8gY29uc3QgaW1nUmVzb2x1dGlvblkgPSByZXNvbHV0aW9uQmFzZVkgLyBpbWdTaXplLmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGltZ1Jlc29sdXRpb25YIC0gcmVzb2x1dGlvbiA8PSAwLjAxKSByZXR1cm4gaW1nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdEltYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcmF3IGJ5dGVzIGZvciBhIHRpbGUgYXQgYSBnaXZlbiB4LHksIGluZGV4LlxuICAgICAqXG4gICAgICogVGhpcyBtYXkgcmV0dXJuIG51bGwgaWYgdGhlIHRpbGUgZG9lcyBub3QgZXhpc3QgZWcgU3BhcnNlIGNvZ3MsXG4gICAgICpcbiAgICAgKiBAcGFyYW0geCB0aWxlIHggaW5kZXhcbiAgICAgKiBAcGFyYW0geSB0aWxlIHkgaW5kZXhcbiAgICAgKiBAcGFyYW0gaW5kZXggaW1hZ2UgaW5kZXhcbiAgICAgKi9cbiAgICBhc3luYyBnZXRUaWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx7IG1pbWVUeXBlOiBzdHJpbmc7IGJ5dGVzOiBVaW50OEFycmF5IH0gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5nZXRJbWFnZShpbmRleCk7XG4gICAgICAgIGlmIChpbWFnZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgejogJHtpbmRleH1gKTtcbiAgICAgICAgaWYgKCFpbWFnZS5pc1RpbGVkKCkpIHRocm93IG5ldyBFcnJvcignVGlmIGlzIG5vdCB0aWxlZCcpO1xuXG4gICAgICAgIHJldHVybiBpbWFnZS5nZXRUaWxlKHgsIHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0lmZChvZmZzZXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuc291cmNlLmhhc0J5dGVzKG9mZnNldCwgNDA5NikpIGF3YWl0IHRoaXMuc291cmNlLmxvYWRCeXRlcyhvZmZzZXQsIDQwOTYpO1xuXG4gICAgICAgIGNvbnN0IHsgaW1hZ2UsIG5leHRPZmZzZXQgfSA9IGF3YWl0IHRoaXMucmVhZElmZChvZmZzZXQpO1xuICAgICAgICB0aGlzLmltYWdlcy5wdXNoKGltYWdlKTtcblxuICAgICAgICBpZiAobmV4dE9mZnNldCkgYXdhaXQgdGhpcy5wcm9jZXNzSWZkKG5leHRPZmZzZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVhZElmZChvZmZzZXQ6IG51bWJlcik6IFByb21pc2U8eyBuZXh0T2Zmc2V0OiBudW1iZXI7IGltYWdlOiBDb2dUaWZmSW1hZ2UgfT4ge1xuICAgICAgICBpZiAoIXRoaXMuc291cmNlLmhhc0J5dGVzKG9mZnNldCwgMTAyNCkpIGF3YWl0IHRoaXMuc291cmNlLmxvYWRCeXRlcyhvZmZzZXQsIHRoaXMuc291cmNlLmNodW5rU2l6ZSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmN1cnNvci5zZWVrVG8ob2Zmc2V0KTtcbiAgICAgICAgY29uc3QgdGFnQ291bnQgPSB2aWV3Lm9mZnNldCgpO1xuICAgICAgICBjb25zdCBieXRlU3RhcnQgPSBvZmZzZXQgKyB0aGlzLmlmZENvbmZpZy5vZmZzZXQ7XG4gICAgICAgIGNvbnN0IHRhZ3M6IE1hcDxUaWZmVGFnLCBDb2dUaWZmVGFnQmFzZT4gPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgbGV0IHBvcyA9IGJ5dGVTdGFydDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBDb2dUaWZmVGFnLmNyZWF0ZSh0aGlzLCBwb3MpO1xuICAgICAgICAgICAgcG9zICs9IHRhZy5zaXplO1xuXG4gICAgICAgICAgICBpZiAodGFnLm5hbWUgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIElGRCBUYWc6ICcgKyB0b0hleFN0cmluZyh0YWcuaWQpKTtcbiAgICAgICAgICAgIHRhZ3Muc2V0KHRhZy5pZCwgdGFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IENvZ1RpZmZJbWFnZSh0aGlzLCB0aGlzLmltYWdlcy5sZW5ndGgsIHRhZ3MpO1xuICAgICAgICBjb25zdCBuZXh0T2Zmc2V0ID0gdGhpcy5zb3VyY2UuZ2V0VWludChwb3MsIHRoaXMuaWZkQ29uZmlnLnBvaW50ZXIpO1xuICAgICAgICByZXR1cm4geyBuZXh0T2Zmc2V0LCBpbWFnZSB9O1xuICAgIH1cblxuICAgIC8qKiBDbG9zZSB0aGUgZmlsZSBzb3VyY2UgaWYgaXQgbmVlZHMgY2xvc2luZyAqL1xuICAgIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZT8uY2xvc2U/LigpO1xuICAgIH1cbn1cbiJdfQ==
@@ -20,4 +20,4 @@ o.spec('TiffTag', () => {
20
20
  o(lazy.value).deepEquals(res);
21
21
  });
22
22
  });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVhZC90YWcvX190ZXN0X18vdGFnLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDLENBQUM7SUFFMUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsQ0FBQyxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEZpbGVDaHVua1NvdXJjZSB9IGZyb20gJ0BjaHVua2QvY29yZS9idWlsZC9fX3Rlc3RfXy9jaHVuay5zb3VyY2UuZmFrZS5qcyc7XG5pbXBvcnQgbyBmcm9tICdvc3BlYyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBDb2dUaWZmIH0gZnJvbSAnLi4vLi4vLi4vY29nLnRpZmYuanMnO1xuaW1wb3J0IHsgQ29nVGlmZlRhZ0xhenkgfSBmcm9tICcuLi90aWZmLnRhZy5sYXp5LmpzJztcblxuby5zcGVjKCdUaWZmVGFnJywgKCkgPT4ge1xuICAgIGNvbnN0IGRpck5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG4gICAgY29uc3QgY29nU291cmNlRmlsZSA9IG5ldyBUZXN0RmlsZUNodW5rU291cmNlKHBhdGguam9pbihkaXJOYW1lLCAnLi4vLi4vLi4vLi4vLi4vZGF0YS9yZ2JhOF90aWxlZC50aWZmJykpO1xuXG4gICAgby5iZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgY29nU291cmNlRmlsZS5jaHVua3MuY2xlYXIoKTtcbiAgICB9KTtcblxuICAgIG8oJ3Nob3VsZCBsb2FkIGxhenkgdGFncycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdGlmZiA9IG5ldyBDb2dUaWZmKGNvZ1NvdXJjZUZpbGUpO1xuXG4gICAgICAgIGF3YWl0IGNvZ1NvdXJjZUZpbGUubG9hZEJ5dGVzKDM2ODAsIDgpO1xuICAgICAgICBjb25zdCBsYXp5ID0gbmV3IENvZ1RpZmZUYWdMYXp5KDMzOSwgdGlmZiwgMzY4MCk7XG4gICAgICAgIG8obGF6eS52YWx1ZSkuZXF1YWxzKG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGxhenkuZmV0Y2goKTtcbiAgICAgICAgbyhyZXMpLmRlZXBFcXVhbHMoWzE4NzYxLCA0MywgOCwgMF0pO1xuICAgICAgICBvKGxhenkudmFsdWUpLmRlZXBFcXVhbHMocmVzKTtcbiAgICB9KTtcbn0pO1xuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmVhZC90YWcvX190ZXN0X18vdGFnLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDLENBQUM7SUFFMUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDYixhQUFhLENBQUMsTUFBZ0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4QyxNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RGaWxlQ2h1bmtTb3VyY2UgfSBmcm9tICdAY2h1bmtkL2NvcmUvYnVpbGQvX190ZXN0X18vY2h1bmsuc291cmNlLmZha2UuanMnO1xuaW1wb3J0IG8gZnJvbSAnb3NwZWMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgQ29nVGlmZiB9IGZyb20gJy4uLy4uLy4uL2NvZy50aWZmLmpzJztcbmltcG9ydCB7IENvZ1RpZmZUYWdMYXp5IH0gZnJvbSAnLi4vdGlmZi50YWcubGF6eS5qcyc7XG5cbm8uc3BlYygnVGlmZlRhZycsICgpID0+IHtcbiAgICBjb25zdCBkaXJOYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICAgIGNvbnN0IGNvZ1NvdXJjZUZpbGUgPSBuZXcgVGVzdEZpbGVDaHVua1NvdXJjZShwYXRoLmpvaW4oZGlyTmFtZSwgJy4uLy4uLy4uLy4uLy4uL2RhdGEvcmdiYThfdGlsZWQudGlmZicpKTtcblxuICAgIG8uYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIChjb2dTb3VyY2VGaWxlLmNodW5rcyBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pLmNsZWFyKCk7XG4gICAgfSk7XG5cbiAgICBvKCdzaG91bGQgbG9hZCBsYXp5IHRhZ3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpZmYgPSBuZXcgQ29nVGlmZihjb2dTb3VyY2VGaWxlKTtcblxuICAgICAgICBhd2FpdCBjb2dTb3VyY2VGaWxlLmxvYWRCeXRlcygzNjgwLCA4KTtcbiAgICAgICAgY29uc3QgbGF6eSA9IG5ldyBDb2dUaWZmVGFnTGF6eSgzMzksIHRpZmYsIDM2ODApO1xuICAgICAgICBvKGxhenkudmFsdWUpLmVxdWFscyhudWxsKTtcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBsYXp5LmZldGNoKCk7XG4gICAgICAgIG8ocmVzKS5kZWVwRXF1YWxzKFsxODc2MSwgNDMsIDgsIDBdKTtcbiAgICAgICAgbyhsYXp5LnZhbHVlKS5kZWVwRXF1YWxzKHJlcyk7XG4gICAgfSk7XG59KTtcbiJdfQ==
@@ -1,8 +1,7 @@
1
- import { LogType } from '@chunkd/core';
2
1
  import { CogTiffTagBase } from './tiff.tag.base.js';
3
2
  export declare class CogTiffTagLazy<T> extends CogTiffTagBase<T> {
4
3
  value: T | null;
5
4
  get isReady(): boolean;
6
- fetch(l?: LogType): Promise<T>;
5
+ fetch(): Promise<T>;
7
6
  }
8
7
  //# sourceMappingURL=tiff.tag.lazy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.tag.lazy.d.ts","sourceRoot":"","sources":["../../../src/read/tag/tiff.tag.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACpD,KAAK,EAAE,CAAC,GAAG,IAAI,CAAQ;IAEvB,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAOvC"}
1
+ {"version":3,"file":"tiff.tag.lazy.d.ts","sourceRoot":"","sources":["../../../src/read/tag/tiff.tag.lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACpD,KAAK,EAAE,CAAC,GAAG,IAAI,CAAQ;IAEvB,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC;CAO5B"}
@@ -7,12 +7,12 @@ export class CogTiffTagLazy extends CogTiffTagBase {
7
7
  get isReady() {
8
8
  return this.value != null;
9
9
  }
10
- async fetch(l) {
10
+ async fetch() {
11
11
  if (this.tiff.source.hasBytes(this.valuePointer, this.dataLength) === false) {
12
- await this.tiff.source.loadBytes(this.valuePointer, this.dataLength, l);
12
+ await this.tiff.source.loadBytes(this.valuePointer, this.dataLength);
13
13
  }
14
14
  this.value = this.readValue();
15
15
  return this.value;
16
16
  }
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlmZi50YWcubGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWFkL3RhZy90aWZmLnRhZy5sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxNQUFNLE9BQU8sY0FBa0IsU0FBUSxjQUFpQjtJQUF4RDs7UUFDSSxVQUFLLEdBQWEsSUFBSSxDQUFDO0lBYTNCLENBQUM7SUFYRyxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQVc7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dUeXBlIH0gZnJvbSAnQGNodW5rZC9jb3JlJztcbmltcG9ydCB7IENvZ1RpZmZUYWdCYXNlIH0gZnJvbSAnLi90aWZmLnRhZy5iYXNlLmpzJztcblxuZXhwb3J0IGNsYXNzIENvZ1RpZmZUYWdMYXp5PFQ+IGV4dGVuZHMgQ29nVGlmZlRhZ0Jhc2U8VD4ge1xuICAgIHZhbHVlOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaChsPzogTG9nVHlwZSk6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAodGhpcy50aWZmLnNvdXJjZS5oYXNCeXRlcyh0aGlzLnZhbHVlUG9pbnRlciwgdGhpcy5kYXRhTGVuZ3RoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGlmZi5zb3VyY2UubG9hZEJ5dGVzKHRoaXMudmFsdWVQb2ludGVyLCB0aGlzLmRhdGFMZW5ndGgsIGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlYWRWYWx1ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG59XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlmZi50YWcubGF6eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWFkL3RhZy90aWZmLnRhZy5sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxNQUFNLE9BQU8sY0FBa0IsU0FBUSxjQUFpQjtJQUF4RDs7UUFDSSxVQUFLLEdBQWEsSUFBSSxDQUFDO0lBYTNCLENBQUM7SUFYRyxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRTtZQUN6RSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2dUaWZmVGFnQmFzZSB9IGZyb20gJy4vdGlmZi50YWcuYmFzZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2dUaWZmVGFnTGF6eTxUPiBleHRlbmRzIENvZ1RpZmZUYWdCYXNlPFQ+IHtcbiAgICB2YWx1ZTogVCB8IG51bGwgPSBudWxsO1xuXG4gICAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9IG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLnRpZmYuc291cmNlLmhhc0J5dGVzKHRoaXMudmFsdWVQb2ludGVyLCB0aGlzLmRhdGFMZW5ndGgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50aWZmLnNvdXJjZS5sb2FkQnl0ZXModGhpcy52YWx1ZVBvaW50ZXIsIHRoaXMuZGF0YUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucmVhZFZhbHVlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,4 +1,3 @@
1
- import { LogType } from '@chunkd/core';
2
1
  import { CogTiff } from '../../cog.tiff.js';
3
2
  import { CogTiffTagBase } from './tiff.tag.base.js';
4
3
  /**
@@ -11,12 +10,12 @@ export declare class CogTiffTagOffset extends CogTiffTagBase<number[]> {
11
10
  constructor(tagId: number, tiff: CogTiff, offset: number);
12
11
  get value(): number[] | null;
13
12
  /** Load the entire index into memory */
14
- load(l: LogType): Promise<void>;
13
+ load(): Promise<void>;
15
14
  readValue(): number[];
16
15
  /**
17
16
  * Read a specific value from the offset array
18
17
  * @param index index to read at
19
18
  */
20
- getValueAt(index: number, l?: LogType): Promise<number>;
19
+ getValueAt(index: number): Promise<number>;
21
20
  }
22
21
  //# sourceMappingURL=tiff.tag.offset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiff.tag.offset.d.ts","sourceRoot":"","sources":["../../../src/read/tag/tiff.tag.offset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc,CAAC,MAAM,EAAE,CAAC;IAC1D,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAIxD,IAAI,KAAK,IAAI,MAAM,EAAE,GAAG,IAAI,CAS3B;IAED,wCAAwC;IAClC,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,SAAS,IAAI,MAAM,EAAE;IAWrB;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAYhE"}
1
+ {"version":3,"file":"tiff.tag.offset.d.ts","sourceRoot":"","sources":["../../../src/read/tag/tiff.tag.offset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc,CAAC,MAAM,EAAE,CAAC;IAC1D,OAAO,CAAC,YAAY,CAAyB;gBAEjC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAIxD,IAAI,KAAK,IAAI,MAAM,EAAE,GAAG,IAAI,CAS3B;IAED,wCAAwC;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,SAAS,IAAI,MAAM,EAAE;IAWrB;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYnD"}
@@ -20,8 +20,8 @@ export class CogTiffTagOffset extends CogTiffTagBase {
20
20
  return null;
21
21
  }
22
22
  /** Load the entire index into memory */
23
- async load(l) {
24
- await this.tiff.source.loadBytes(this.valuePointer, this.dataLength, l);
23
+ async load() {
24
+ await this.tiff.source.loadBytes(this.valuePointer, this.dataLength);
25
25
  this.readValue();
26
26
  }
27
27
  readValue() {
@@ -39,16 +39,16 @@ export class CogTiffTagOffset extends CogTiffTagBase {
39
39
  * Read a specific value from the offset array
40
40
  * @param index index to read at
41
41
  */
42
- async getValueAt(index, l) {
42
+ async getValueAt(index) {
43
43
  if (this.loadedValues)
44
44
  return this.loadedValues[index];
45
45
  const dataSize = this.dataTypeSize;
46
46
  const valueOffset = this.valuePointer + dataSize * index;
47
47
  const convert = getTiffTagValueReader(this.dataType);
48
48
  if (!this.tiff.source.hasBytes(valueOffset, dataSize)) {
49
- await this.tiff.source.loadBytes(valueOffset, dataSize, l);
49
+ await this.tiff.source.loadBytes(valueOffset, dataSize);
50
50
  }
51
51
  return convert(this.tiff.source, valueOffset);
52
52
  }
53
53
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlmZi50YWcub2Zmc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlYWQvdGFnL3RpZmYudGFnLm9mZnNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxjQUF3QjtJQUcxRCxZQUFZLEtBQWEsRUFBRSxJQUFhLEVBQUUsTUFBYztRQUNwRCxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUh2QixpQkFBWSxHQUFvQixJQUFJLENBQUM7SUFJN0MsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXhELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBVTtRQUNqQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLG1FQUFtRTtRQUNuRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWEsRUFBRSxDQUFXO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ25ELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQVcsQ0FBQztJQUM1RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dUeXBlIH0gZnJvbSAnQGNodW5rZC9jb3JlJztcbmltcG9ydCB7IENvZ1RpZmYgfSBmcm9tICcuLi8uLi9jb2cudGlmZi5qcyc7XG5pbXBvcnQgeyBnZXRUaWZmVGFnVmFsdWVSZWFkZXIgfSBmcm9tICcuLi90aWZmLnZhbHVlLnJlYWRlci5qcyc7XG5pbXBvcnQgeyBDb2dUaWZmVGFnQmFzZSB9IGZyb20gJy4vdGlmZi50YWcuYmFzZS5qcyc7XG5cbi8qKlxuICogVGlmZlRhZyBmb3Igb2Zmc2V0IGFycmF5c1xuICpcbiAqIEFsbG93cyBpbmRpdmlkdWFsIGFjY2VzcyB0byBzcGVjaWZpYyByZWNvcmRzIHdpdGhvdXQgaGF2aW5nIHRvIHJlYWQgdGhlIGVudGlyZSB0YWcgaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2dUaWZmVGFnT2Zmc2V0IGV4dGVuZHMgQ29nVGlmZlRhZ0Jhc2U8bnVtYmVyW10+IHtcbiAgICBwcml2YXRlIGxvYWRlZFZhbHVlczogbnVtYmVyW10gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHRhZ0lkOiBudW1iZXIsIHRpZmY6IENvZ1RpZmYsIG9mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKHRhZ0lkLCB0aWZmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBudW1iZXJbXSB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWRWYWx1ZXMgIT0gbnVsbCkgcmV0dXJuIHRoaXMubG9hZGVkVmFsdWVzO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0J5dGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRWYWx1ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkVmFsdWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqIExvYWQgdGhlIGVudGlyZSBpbmRleCBpbnRvIG1lbW9yeSAqL1xuICAgIGFzeW5jIGxvYWQobDogTG9nVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnRpZmYuc291cmNlLmxvYWRCeXRlcyh0aGlzLnZhbHVlUG9pbnRlciwgdGhpcy5kYXRhTGVuZ3RoLCBsKTtcbiAgICAgICAgdGhpcy5yZWFkVmFsdWUoKTtcbiAgICB9XG5cbiAgICByZWFkVmFsdWUoKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCB2YWwgPSBzdXBlci5yZWFkVmFsdWUoKTtcbiAgICAgICAgLy8gaWYgb25seSBvbmUgdmFsdWUgaXMgcmVhZCBpbiwgaXQgd2lsbCBub3QgYmUgcmV0dXJuZWQgYXMgYSBhcnJheVxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkVmFsdWVzID0gW3ZhbF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlZFZhbHVlcyA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWRWYWx1ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZCBhIHNwZWNpZmljIHZhbHVlIGZyb20gdGhlIG9mZnNldCBhcnJheVxuICAgICAqIEBwYXJhbSBpbmRleCBpbmRleCB0byByZWFkIGF0XG4gICAgICovXG4gICAgYXN5bmMgZ2V0VmFsdWVBdChpbmRleDogbnVtYmVyLCBsPzogTG9nVHlwZSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFZhbHVlcykgcmV0dXJuIHRoaXMubG9hZGVkVmFsdWVzW2luZGV4XTtcblxuICAgICAgICBjb25zdCBkYXRhU2l6ZSA9IHRoaXMuZGF0YVR5cGVTaXplO1xuICAgICAgICBjb25zdCB2YWx1ZU9mZnNldCA9IHRoaXMudmFsdWVQb2ludGVyICsgZGF0YVNpemUgKiBpbmRleDtcbiAgICAgICAgY29uc3QgY29udmVydCA9IGdldFRpZmZUYWdWYWx1ZVJlYWRlcih0aGlzLmRhdGFUeXBlKTtcblxuICAgICAgICBpZiAoIXRoaXMudGlmZi5zb3VyY2UuaGFzQnl0ZXModmFsdWVPZmZzZXQsIGRhdGFTaXplKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50aWZmLnNvdXJjZS5sb2FkQnl0ZXModmFsdWVPZmZzZXQsIGRhdGFTaXplLCBsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udmVydCh0aGlzLnRpZmYuc291cmNlLCB2YWx1ZU9mZnNldCkgYXMgbnVtYmVyO1xuICAgIH1cbn1cbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlmZi50YWcub2Zmc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlYWQvdGFnL3RpZmYudGFnLm9mZnNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxjQUF3QjtJQUcxRCxZQUFZLEtBQWEsRUFBRSxJQUFhLEVBQUUsTUFBYztRQUNwRCxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUh2QixpQkFBWSxHQUFvQixJQUFJLENBQUM7SUFJN0MsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXhELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLEtBQUssQ0FBQyxJQUFJO1FBQ04sTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLG1FQUFtRTtRQUNuRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDMUIsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbkQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFXLENBQUM7SUFDNUQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29nVGlmZiB9IGZyb20gJy4uLy4uL2NvZy50aWZmLmpzJztcbmltcG9ydCB7IGdldFRpZmZUYWdWYWx1ZVJlYWRlciB9IGZyb20gJy4uL3RpZmYudmFsdWUucmVhZGVyLmpzJztcbmltcG9ydCB7IENvZ1RpZmZUYWdCYXNlIH0gZnJvbSAnLi90aWZmLnRhZy5iYXNlLmpzJztcblxuLyoqXG4gKiBUaWZmVGFnIGZvciBvZmZzZXQgYXJyYXlzXG4gKlxuICogQWxsb3dzIGluZGl2aWR1YWwgYWNjZXNzIHRvIHNwZWNpZmljIHJlY29yZHMgd2l0aG91dCBoYXZpbmcgdG8gcmVhZCB0aGUgZW50aXJlIHRhZyBpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ1RpZmZUYWdPZmZzZXQgZXh0ZW5kcyBDb2dUaWZmVGFnQmFzZTxudW1iZXJbXT4ge1xuICAgIHByaXZhdGUgbG9hZGVkVmFsdWVzOiBudW1iZXJbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IodGFnSWQ6IG51bWJlciwgdGlmZjogQ29nVGlmZiwgb2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIodGFnSWQsIHRpZmYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFZhbHVlcyAhPSBudWxsKSByZXR1cm4gdGhpcy5sb2FkZWRWYWx1ZXM7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQnl0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZFZhbHVlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWRWYWx1ZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogTG9hZCB0aGUgZW50aXJlIGluZGV4IGludG8gbWVtb3J5ICovXG4gICAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy50aWZmLnNvdXJjZS5sb2FkQnl0ZXModGhpcy52YWx1ZVBvaW50ZXIsIHRoaXMuZGF0YUxlbmd0aCk7XG4gICAgICAgIHRoaXMucmVhZFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcmVhZFZhbHVlKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgdmFsID0gc3VwZXIucmVhZFZhbHVlKCk7XG4gICAgICAgIC8vIGlmIG9ubHkgb25lIHZhbHVlIGlzIHJlYWQgaW4sIGl0IHdpbGwgbm90IGJlIHJldHVybmVkIGFzIGEgYXJyYXlcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlZFZhbHVlcyA9IFt2YWxdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRWYWx1ZXMgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGVkVmFsdWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWQgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIHRoZSBvZmZzZXQgYXJyYXlcbiAgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggdG8gcmVhZCBhdFxuICAgICAqL1xuICAgIGFzeW5jIGdldFZhbHVlQXQoaW5kZXg6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZFZhbHVlcykgcmV0dXJuIHRoaXMubG9hZGVkVmFsdWVzW2luZGV4XTtcblxuICAgICAgICBjb25zdCBkYXRhU2l6ZSA9IHRoaXMuZGF0YVR5cGVTaXplO1xuICAgICAgICBjb25zdCB2YWx1ZU9mZnNldCA9IHRoaXMudmFsdWVQb2ludGVyICsgZGF0YVNpemUgKiBpbmRleDtcbiAgICAgICAgY29uc3QgY29udmVydCA9IGdldFRpZmZUYWdWYWx1ZVJlYWRlcih0aGlzLmRhdGFUeXBlKTtcblxuICAgICAgICBpZiAoIXRoaXMudGlmZi5zb3VyY2UuaGFzQnl0ZXModmFsdWVPZmZzZXQsIGRhdGFTaXplKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy50aWZmLnNvdXJjZS5sb2FkQnl0ZXModmFsdWVPZmZzZXQsIGRhdGFTaXplKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udmVydCh0aGlzLnRpZmYuc291cmNlLCB2YWx1ZU9mZnNldCkgYXMgbnVtYmVyO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogeotiff/core",
3
- "version": "6.1.1",
3
+ "version": "7.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/blacha/cogeotiff.git",
@@ -18,16 +18,15 @@
18
18
  "test": "ospec --globs 'build/**/*.test.js'"
19
19
  },
20
20
  "dependencies": {
21
- "@chunkd/core": "^8.0.3",
21
+ "@chunkd/core": "^8.1.0",
22
22
  "ieee754": "^1.1.13"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^14.14.22",
26
- "@types/ospec": "^4.0.0",
27
- "ospec": "^4.0.0"
26
+ "@types/ospec": "^4.0.3"
28
27
  },
29
28
  "publishConfig": {
30
29
  "access": "public"
31
30
  },
32
- "gitHead": "377f418fb624d01a1a4ed598ec8fce9c52f1372c"
31
+ "gitHead": "a2352ec8df0f0eb5f5dddacc0f3cdea855dceda3"
33
32
  }
@@ -1,4 +1,3 @@
1
- import { LogType } from '@chunkd/core';
2
1
  import { CogTiff } from './cog.tiff.js';
3
2
  import { TiffCompression, TiffMimeType } from './const/tiff.mime.js';
4
3
  import { TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
@@ -56,27 +55,27 @@ export class CogTiffImage {
56
55
  *
57
56
  * @param loadGeoTags Whether to load the GeoKeyDirectory and unpack it
58
57
  */
59
- async init(loadGeoTags = false, l: LogType = null as any): Promise<void> {
58
+ async init(loadGeoTags = false): Promise<void> {
60
59
  const requiredTags = [
61
- this.fetch(TiffTag.Compression, l),
62
- this.fetch(TiffTag.ImageHeight, l),
63
- this.fetch(TiffTag.ImageWidth, l),
64
- this.fetch(TiffTag.ModelPixelScale, l),
65
- this.fetch(TiffTag.ModelTiePoint, l),
66
- this.fetch(TiffTag.ModelTransformation, l),
67
- this.fetch(TiffTag.TileHeight, l),
68
- this.fetch(TiffTag.TileWidth, l),
60
+ this.fetch(TiffTag.Compression),
61
+ this.fetch(TiffTag.ImageHeight),
62
+ this.fetch(TiffTag.ImageWidth),
63
+ this.fetch(TiffTag.ModelPixelScale),
64
+ this.fetch(TiffTag.ModelTiePoint),
65
+ this.fetch(TiffTag.ModelTransformation),
66
+ this.fetch(TiffTag.TileHeight),
67
+ this.fetch(TiffTag.TileWidth),
69
68
  ];
70
69
 
71
70
  if (loadGeoTags) {
72
- requiredTags.push(this.fetch(TiffTag.GeoKeyDirectory, l));
73
- requiredTags.push(this.fetch(TiffTag.GeoAsciiParams, l));
74
- requiredTags.push(this.fetch(TiffTag.GeoDoubleParams, l));
71
+ requiredTags.push(this.fetch(TiffTag.GeoKeyDirectory));
72
+ requiredTags.push(this.fetch(TiffTag.GeoAsciiParams));
73
+ requiredTags.push(this.fetch(TiffTag.GeoDoubleParams));
75
74
  }
76
75
 
77
76
  await Promise.all(requiredTags);
78
77
  if (loadGeoTags) {
79
- await this.loadGeoTiffTags(l);
78
+ await this.loadGeoTiffTags();
80
79
  }
81
80
  }
82
81
 
@@ -92,7 +91,7 @@ export class CogTiffImage {
92
91
  /**
93
92
  * Load and unpack the GeoKeyDirectory
94
93
  */
95
- async loadGeoTiffTags(l: LogType): Promise<void> {
94
+ async loadGeoTiffTags(): Promise<void> {
96
95
  // Already loaded
97
96
  if (this.tagsGeoLoaded) return;
98
97
  const sourceTag = this.tags.get(TiffTag.GeoKeyDirectory);
@@ -103,9 +102,9 @@ export class CogTiffImage {
103
102
  if (!sourceTag.isReady && sourceTag instanceof CogTiffTagLazy) {
104
103
  // Load all the required keys
105
104
  await Promise.all([
106
- this.fetch(TiffTag.GeoKeyDirectory, l),
107
- this.fetch(TiffTag.GeoAsciiParams, l),
108
- this.fetch(TiffTag.GeoDoubleParams, l),
105
+ this.fetch(TiffTag.GeoKeyDirectory),
106
+ this.fetch(TiffTag.GeoAsciiParams),
107
+ this.fetch(TiffTag.GeoDoubleParams),
109
108
  ]);
110
109
  }
111
110
  this.tagsGeoLoaded = true;
@@ -145,10 +144,10 @@ export class CogTiffImage {
145
144
  * Load a tag, if it is not currently loaded, fetch the required data for the tag.
146
145
  * @param tag tag to fetch
147
146
  */
148
- public async fetch<T>(tag: TiffTag, l: LogType): Promise<T | null> {
147
+ public async fetch<T>(tag: TiffTag): Promise<T | null> {
149
148
  const sourceTag = this.tags.get(tag);
150
149
  if (sourceTag == null) return null;
151
- if (CogTiffTag.isLazy(sourceTag)) return sourceTag.fetch(l) as any;
150
+ if (CogTiffTag.isLazy(sourceTag)) return sourceTag.fetch() as any;
152
151
  return sourceTag.value as T;
153
152
  }
154
153
 
@@ -342,14 +341,14 @@ export class CogTiffImage {
342
341
  * @param index tile index
343
342
  * @returns file offset of the specified tile
344
343
  */
345
- protected async getTileOffset(index: number, l?: LogType): Promise<number> {
344
+ protected async getTileOffset(index: number): Promise<number> {
346
345
  const tileOffset = this.tileOffset;
347
346
  if (index < 0 || index > tileOffset.dataCount) {
348
347
  throw new Error(`Tile offset: ${index} out of range: 0 -> ${tileOffset.dataCount}`);
349
348
  }
350
349
 
351
350
  // Fetch only the part of the offsets that are needed
352
- return tileOffset.getValueAt(index, l);
351
+ return tileOffset.getValueAt(index);
353
352
  }
354
353
 
355
354
  // Clamp the bounds of the output image to the size of the image, as sometimes the edge tiles are not full tiles
@@ -398,13 +397,12 @@ export class CogTiffImage {
398
397
  private async getBytes(
399
398
  offset: number,
400
399
  byteCount: number,
401
- l?: LogType,
402
400
  ): Promise<{ mimeType: TiffMimeType; bytes: Uint8Array } | null> {
403
401
  const mimeType = this.compression;
404
402
  if (mimeType == null) throw new Error('Unsupported compression: ' + this.value(TiffTag.Compression));
405
403
  if (byteCount === 0) return null;
406
404
 
407
- await this.tif.source.loadBytes(offset, byteCount, l);
405
+ await this.tif.source.loadBytes(offset, byteCount);
408
406
  const bytes = this.tif.source.bytes(offset, byteCount);
409
407
 
410
408
  if (this.compression === TiffMimeType.JPEG) {
@@ -421,7 +419,7 @@ export class CogTiffImage {
421
419
  * @param x Tile x offset
422
420
  * @param y Tile y offset
423
421
  */
424
- async getTile(x: number, y: number, l?: LogType): Promise<{ mimeType: TiffMimeType; bytes: Uint8Array } | null> {
422
+ async getTile(x: number, y: number): Promise<{ mimeType: TiffMimeType; bytes: Uint8Array } | null> {
425
423
  const mimeType = this.compression;
426
424
  const size = this.size;
427
425
  const tiles = this.tileSize;
@@ -441,22 +439,22 @@ export class CogTiffImage {
441
439
  const totalTiles = nxTiles * nyTiles;
442
440
  if (idx >= totalTiles) throw new Error(`Tile index is outside of tile range: ${idx} >= ${totalTiles}`);
443
441
 
444
- const { offset, imageSize } = await this.getTileSize(idx, l);
445
- return this.getBytes(offset, imageSize, l);
442
+ const { offset, imageSize } = await this.getTileSize(idx);
443
+ return this.getBytes(offset, imageSize);
446
444
  }
447
445
 
448
- protected async getTileSize(index: number, l?: LogType): Promise<{ offset: number; imageSize: number }> {
446
+ protected async getTileSize(index: number): Promise<{ offset: number; imageSize: number }> {
449
447
  // GDAL optimizes tiles by storing the size of the tile in
450
448
  // the few bytes leading up to the tile
451
449
  if (this.tif.options.tileLeaderByteSize) {
452
- const offset = await this.getTileOffset(index, l);
450
+ const offset = await this.getTileOffset(index);
453
451
  // Sparse COG no data found
454
452
  if (offset === 0) return { offset: 0, imageSize: 0 };
455
453
 
456
454
  const leaderBytes = this.tif.options.tileLeaderByteSize;
457
455
  // This fetch will generally load in the bytes needed for the image too
458
456
  // provided the image size is less than the size of a chunk
459
- await this.tif.source.loadBytes(offset - leaderBytes, leaderBytes, l);
457
+ await this.tif.source.loadBytes(offset - leaderBytes, leaderBytes);
460
458
  return { offset, imageSize: this.tif.source.getUint(offset - leaderBytes, leaderBytes) };
461
459
  }
462
460
 
@@ -464,7 +462,7 @@ export class CogTiffImage {
464
462
  if (byteCounts == null) {
465
463
  throw new Error('No tile byte counts found');
466
464
  }
467
- const [offset, imageSize] = await Promise.all([this.getTileOffset(index, l), byteCounts.getValueAt(index, l)]);
465
+ const [offset, imageSize] = await Promise.all([this.getTileOffset(index), byteCounts.getValueAt(index)]);
468
466
  return { offset, imageSize };
469
467
  }
470
468
  }
package/src/cog.tiff.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ChunkSource, LogType } from '@chunkd/core';
1
+ import { ChunkSource } from '@chunkd/core';
2
2
  import { CogTiffImage } from './cog.tiff.image.js';
3
3
  import { TiffEndian } from './const/tiff.endian.js';
4
4
  import { TiffTag } from './const/tiff.tag.id.js';
@@ -38,24 +38,24 @@ export class CogTiff {
38
38
  *
39
39
  * @param loadGeoKeys Whether to also initialize the GeoKeyDirectory
40
40
  */
41
- init(loadGeoKeys = false, logger?: LogType): Promise<CogTiff> {
41
+ init(loadGeoKeys = false): Promise<CogTiff> {
42
42
  if (this._initPromise) return this._initPromise;
43
- this._initPromise = this.doInit(loadGeoKeys, logger);
43
+ this._initPromise = this.doInit(loadGeoKeys);
44
44
  return this._initPromise;
45
45
  }
46
46
 
47
- private async doInit(loadGeoKeys = false, logger?: LogType): Promise<CogTiff> {
47
+ private async doInit(loadGeoKeys = false): Promise<CogTiff> {
48
48
  if (this.isInitialized) return this;
49
49
  // Load the first few KB in, more loads will run as more data is required
50
- await this.source.loadBytes(0, this.source.chunkSize, logger);
51
- await this.fetchIfd(logger);
52
- await Promise.all(this.images.map((c) => c.init(loadGeoKeys, logger)));
50
+ await this.source.loadBytes(0, this.source.chunkSize);
51
+ await this.fetchIfd();
52
+ await Promise.all(this.images.map((c) => c.init(loadGeoKeys)));
53
53
 
54
54
  this.isInitialized = true;
55
55
  return this;
56
56
  }
57
57
 
58
- private async fetchIfd(logger?: LogType): Promise<void> {
58
+ private async fetchIfd(): Promise<void> {
59
59
  const view = this.cursor.seekTo(0);
60
60
  const endian = view.uint16();
61
61
  this.source.isLittleEndian = endian === TiffEndian.Little;
@@ -79,14 +79,14 @@ export class CogTiff {
79
79
  const ghostSize = nextOffsetIfd - this.cursor.currentOffset;
80
80
  // GDAL now stores metadata between the IFD inside a ghost storage area
81
81
  if (ghostSize > 0 && ghostSize < 16 * 1024) {
82
- logger?.debug(
83
- { offset: toHexString(this.cursor.currentOffset), length: toHexString(ghostSize) },
84
- 'GhostOptions',
85
- );
82
+ // logger?.debug(
83
+ // { offset: toHexString(this.cursor.currentOffset), length: toHexString(ghostSize) },
84
+ // 'GhostOptions',
85
+ // );
86
86
  // this.options.process(this.source, view.currentOffset, ghostSize);
87
87
  }
88
88
 
89
- return this.processIfd(nextOffsetIfd, logger);
89
+ return this.processIfd(nextOffsetIfd);
90
90
  }
91
91
 
92
92
  getImage(z: number): CogTiffImage {
@@ -135,38 +135,20 @@ export class CogTiff {
135
135
  return image.getTile(x, y);
136
136
  }
137
137
 
138
- private async processIfd(offset: number, logger?: LogType): Promise<void> {
139
- logger?.trace({ offset: toHexString(offset) }, 'NextImageOffset');
138
+ private async processIfd(offset: number): Promise<void> {
139
+ if (!this.source.hasBytes(offset, 4096)) await this.source.loadBytes(offset, 4096);
140
140
 
141
- if (!this.source.hasBytes(offset, 4096)) {
142
- await this.source.loadBytes(offset, 4096, logger);
143
- }
144
-
145
- const { image, nextOffset } = await this.readIfd(offset, logger);
141
+ const { image, nextOffset } = await this.readIfd(offset);
146
142
  this.images.push(image);
147
- const size = image.size;
148
- if (image.isTiled()) {
149
- const tile = image.tileSize;
150
- logger?.debug(
151
- {
152
- ...size,
153
- tileWidth: tile.width,
154
- tileHeight: tile.height,
155
- tileCount: Math.ceil(size.width / tile.width),
156
- },
157
- 'GotImage',
158
- );
159
- }
160
143
 
161
- if (nextOffset) await this.processIfd(nextOffset, logger);
144
+ if (nextOffset) await this.processIfd(nextOffset);
162
145
  }
163
146
 
164
- private async readIfd(offset: number, log?: LogType): Promise<{ nextOffset: number; image: CogTiffImage }> {
165
- if (!this.source.hasBytes(offset, 1024)) await this.source.loadBytes(offset, this.source.chunkSize, log);
147
+ private async readIfd(offset: number): Promise<{ nextOffset: number; image: CogTiffImage }> {
148
+ if (!this.source.hasBytes(offset, 1024)) await this.source.loadBytes(offset, this.source.chunkSize);
166
149
  const view = this.cursor.seekTo(offset);
167
150
  const tagCount = view.offset();
168
151
  const byteStart = offset + this.ifdConfig.offset;
169
- const logger = log?.child({ imageId: this.images.length });
170
152
  const tags: Map<TiffTag, CogTiffTagBase> = new Map();
171
153
 
172
154
  let pos = byteStart;
@@ -174,33 +156,7 @@ export class CogTiff {
174
156
  const tag = CogTiffTag.create(this, pos);
175
157
  pos += tag.size;
176
158
 
177
- if (tag.name == null) {
178
- logger?.error({ code: toHexString(tag.id) }, `IFDUnknown`);
179
- continue;
180
- }
181
-
182
- if (!tag.isReady) {
183
- logger?.trace(
184
- {
185
- offset: toHexString(pos - offset),
186
- code: toHexString(tag.id),
187
- tagName: tag.name,
188
- ptr: toHexString(tag.valuePointer),
189
- },
190
- 'PartialReadIFD',
191
- );
192
- } else {
193
- logger?.trace(
194
- {
195
- offset: toHexString(pos - offset),
196
- code: toHexString(tag.id),
197
- tagName: tag.name,
198
- value: Array.isArray(tag.value) ? `[${tag.value.length}]` : tag.value,
199
- },
200
- 'ReadIFD',
201
- );
202
- }
203
-
159
+ if (tag.name == null) throw new Error('Unknown IFD Tag: ' + toHexString(tag.id));
204
160
  tags.set(tag.id, tag);
205
161
  }
206
162
 
@@ -10,7 +10,7 @@ o.spec('TiffTag', () => {
10
10
  const cogSourceFile = new TestFileChunkSource(path.join(dirName, '../../../../../data/rgba8_tiled.tiff'));
11
11
 
12
12
  o.beforeEach(() => {
13
- cogSourceFile.chunks.clear();
13
+ (cogSourceFile.chunks as Map<unknown, unknown>).clear();
14
14
  });
15
15
 
16
16
  o('should load lazy tags', async () => {
@@ -1,4 +1,3 @@
1
- import { LogType } from '@chunkd/core';
2
1
  import { CogTiffTagBase } from './tiff.tag.base.js';
3
2
 
4
3
  export class CogTiffTagLazy<T> extends CogTiffTagBase<T> {
@@ -8,9 +7,9 @@ export class CogTiffTagLazy<T> extends CogTiffTagBase<T> {
8
7
  return this.value != null;
9
8
  }
10
9
 
11
- async fetch(l?: LogType): Promise<T> {
10
+ async fetch(): Promise<T> {
12
11
  if (this.tiff.source.hasBytes(this.valuePointer, this.dataLength) === false) {
13
- await this.tiff.source.loadBytes(this.valuePointer, this.dataLength, l);
12
+ await this.tiff.source.loadBytes(this.valuePointer, this.dataLength);
14
13
  }
15
14
  this.value = this.readValue();
16
15
  return this.value;
@@ -1,4 +1,3 @@
1
- import { LogType } from '@chunkd/core';
2
1
  import { CogTiff } from '../../cog.tiff.js';
3
2
  import { getTiffTagValueReader } from '../tiff.value.reader.js';
4
3
  import { CogTiffTagBase } from './tiff.tag.base.js';
@@ -27,8 +26,8 @@ export class CogTiffTagOffset extends CogTiffTagBase<number[]> {
27
26
  }
28
27
 
29
28
  /** Load the entire index into memory */
30
- async load(l: LogType): Promise<void> {
31
- await this.tiff.source.loadBytes(this.valuePointer, this.dataLength, l);
29
+ async load(): Promise<void> {
30
+ await this.tiff.source.loadBytes(this.valuePointer, this.dataLength);
32
31
  this.readValue();
33
32
  }
34
33
 
@@ -47,7 +46,7 @@ export class CogTiffTagOffset extends CogTiffTagBase<number[]> {
47
46
  * Read a specific value from the offset array
48
47
  * @param index index to read at
49
48
  */
50
- async getValueAt(index: number, l?: LogType): Promise<number> {
49
+ async getValueAt(index: number): Promise<number> {
51
50
  if (this.loadedValues) return this.loadedValues[index];
52
51
 
53
52
  const dataSize = this.dataTypeSize;
@@ -55,7 +54,7 @@ export class CogTiffTagOffset extends CogTiffTagBase<number[]> {
55
54
  const convert = getTiffTagValueReader(this.dataType);
56
55
 
57
56
  if (!this.tiff.source.hasBytes(valueOffset, dataSize)) {
58
- await this.tiff.source.loadBytes(valueOffset, dataSize, l);
57
+ await this.tiff.source.loadBytes(valueOffset, dataSize);
59
58
  }
60
59
  return convert(this.tiff.source, valueOffset) as number;
61
60
  }