New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

deck.gl

Package Overview
Dependencies
Maintainers
6
Versions
677
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

deck.gl - npm Package Compare versions

Comparing version 4.1.1 to 4.1.2

6

CHANGELOG.md

@@ -20,2 +20,8 @@ # Change Log

#### [4.1.2] - 2017-9-1
- Bump luma.gl dependency from 4.0.1 to 4.0.2.
- Fix the icon rotation issue (#900)
- Fix sin calculation using sin() (#885)
#### [4.1.1] - 2017-8-25

@@ -22,0 +28,0 @@

4

dist-es6/layers/core/icon-layer/icon-layer-vertex-64.glsl.js

@@ -21,3 +21,3 @@ // Copyright (c) 2015 - 2017 Uber Technologies, Inc.

export default "#define SHADER_NAME icon-layer-vertex-shader-64\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sqrt(1.0 - cos_angle * cos_angle);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n vec2 iconSize_clipspace = iconSize / viewportSize * 2.0;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // The vertex variable is in clip space and should not go through project_to_clipspace call\n vec2 vertex = (positions / 2.0 + instanceOffsets);\n vertex = rotate_by_angle(vertex, instanceAngles) * iconSize_clipspace *\n sizeScale * instanceScale;\n\n vertex.y *= -1.0;\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(instancePositions.z), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace) + vec4(vertex, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4LTY0Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiaWNvbi1sYXllci12ZXJ0ZXgtNjQuZ2xzbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgaWNvbi1sYXllci12ZXJ0ZXgtc2hhZGVyLTY0XG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9ucztcblxuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQb3NpdGlvbnM7XG5hdHRyaWJ1dGUgdmVjMiBpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3c7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VTaXplcztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZUFuZ2xlcztcbmF0dHJpYnV0ZSB2ZWM0IGluc3RhbmNlQ29sb3JzO1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VJY29uRnJhbWVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQ29sb3JNb2RlcztcbmF0dHJpYnV0ZSB2ZWMyIGluc3RhbmNlT2Zmc2V0cztcblxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2l6ZVNjYWxlO1xudW5pZm9ybSBmbG9hdCByZW5kZXJQaWNraW5nQnVmZmVyO1xudW5pZm9ybSB2ZWMyIGljb25zVGV4dHVyZURpbTtcblxudmFyeWluZyBmbG9hdCB2Q29sb3JNb2RlO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkcztcblxudmVjMiByb3RhdGVfYnlfYW5nbGUodmVjMiB2ZXJ0ZXgsIGZsb2F0IGFuZ2xlKSB7XG4gIGZsb2F0IGFuZ2xlX3JhZGlhbiA9IGFuZ2xlICogUEkgLyAxODAuMDtcbiAgZmxvYXQgY29zX2FuZ2xlID0gY29zKGFuZ2xlX3JhZGlhbik7XG4gIGZsb2F0IHNpbl9hbmdsZSA9IHNxcnQoMS4wIC0gY29zX2FuZ2xlICogY29zX2FuZ2xlKTtcbiAgbWF0MiByb3RhdGlvbk1hdHJpeCA9IG1hdDIoY29zX2FuZ2xlLCAtc2luX2FuZ2xlLCBzaW5fYW5nbGUsIGNvc19hbmdsZSk7XG4gIHJldHVybiByb3RhdGlvbk1hdHJpeCAqIHZlcnRleDtcbn1cblxudm9pZCBtYWluKHZvaWQpIHtcbiAgdmVjMiBpY29uU2l6ZSA9IGluc3RhbmNlSWNvbkZyYW1lcy56dztcbiAgdmVjMiBpY29uU2l6ZV9jbGlwc3BhY2UgPSBpY29uU2l6ZSAvIHZpZXdwb3J0U2l6ZSAqIDIuMDtcbiAgLy8gc2NhbGUgaWNvbiBoZWlnaHQgdG8gbWF0Y2ggaW5zdGFuY2VTaXplXG4gIGZsb2F0IGluc3RhbmNlU2NhbGUgPSBpY29uU2l6ZS55ID09IDAuMCA/IDAuMCA6IGluc3RhbmNlU2l6ZXMgLyBpY29uU2l6ZS55O1xuXG4gIC8vIFRoZSB2ZXJ0ZXggdmFyaWFibGUgaXMgaW4gY2xpcCBzcGFjZSBhbmQgc2hvdWxkIG5vdCBnbyB0aHJvdWdoIHByb2plY3RfdG9fY2xpcHNwYWNlIGNhbGxcbiAgdmVjMiB2ZXJ0ZXggPSAocG9zaXRpb25zIC8gMi4wICsgaW5zdGFuY2VPZmZzZXRzKTtcbiAgdmVydGV4ID0gcm90YXRlX2J5X2FuZ2xlKHZlcnRleCwgaW5zdGFuY2VBbmdsZXMpICogaWNvblNpemVfY2xpcHNwYWNlICpcbiAgICBzaXplU2NhbGUgKiBpbnN0YW5jZVNjYWxlO1xuXG4gIHZlcnRleC55ICo9IC0xLjA7XG5cbiAgdmVjNCBpbnN0YW5jZVBvc2l0aW9uczY0eHkgPSB2ZWM0KFxuICAgIGluc3RhbmNlUG9zaXRpb25zLngsIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdy54LFxuICAgIGluc3RhbmNlUG9zaXRpb25zLnksIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdy55KTtcblxuICB2ZWMyIHByb2plY3RlZF9jb29yZF94eVsyXTtcbiAgcHJvamVjdF9wb3NpdGlvbl9mcDY0KGluc3RhbmNlUG9zaXRpb25zNjR4eSwgcHJvamVjdGVkX2Nvb3JkX3h5KTtcblxuICB2ZWMyIHZlcnRleF9wb3NfbW9kZWxzcGFjZVs0XTtcbiAgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzBdID0gcHJvamVjdGVkX2Nvb3JkX3h5WzBdO1xuICB2ZXJ0ZXhfcG9zX21vZGVsc3BhY2VbMV0gPSBwcm9qZWN0ZWRfY29vcmRfeHlbMV07XG4gIHZlcnRleF9wb3NfbW9kZWxzcGFjZVsyXSA9IHZlYzIocHJvamVjdF9zY2FsZShpbnN0YW5jZVBvc2l0aW9ucy56KSwgMC4wKTtcbiAgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzNdID0gdmVjMigxLjAsIDAuMCk7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0X3RvX2NsaXBzcGFjZV9mcDY0KHZlcnRleF9wb3NfbW9kZWxzcGFjZSkgKyB2ZWM0KHZlcnRleCwgMC4wLCAwLjApO1xuXG4gIHZUZXh0dXJlQ29vcmRzID0gbWl4KFxuICAgIGluc3RhbmNlSWNvbkZyYW1lcy54eSxcbiAgICBpbnN0YW5jZUljb25GcmFtZXMueHkgKyBpY29uU2l6ZSxcbiAgICAocG9zaXRpb25zLnh5ICsgMS4wKSAvIDIuMFxuICApIC8gaWNvbnNUZXh0dXJlRGltO1xuXG4gIHZUZXh0dXJlQ29vcmRzLnkgPSAxLjAgLSB2VGV4dHVyZUNvb3Jkcy55O1xuXG4gIHZlYzQgY29sb3IgPSBpbnN0YW5jZUNvbG9ycyAvIDI1NS47XG4gIHZlYzQgcGlja2luZ0NvbG9yID0gdmVjNChpbnN0YW5jZVBpY2tpbmdDb2xvcnMgLyAyNTUuLCAxLik7XG4gIHZDb2xvciA9IG1peChjb2xvciwgcGlja2luZ0NvbG9yLCByZW5kZXJQaWNraW5nQnVmZmVyKTtcblxuICB2Q29sb3JNb2RlID0gaW5zdGFuY2VDb2xvck1vZGVzO1xufVxuYDtcbiJdfQ==
export default "#define SHADER_NAME icon-layer-vertex-shader-64\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n// devicePixelRatio is set up as uniform but not declared in the shader function\nuniform float devicePixelRatio;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) / viewportSize * sizeScale *\n instanceScale * devicePixelRatio;\n pixelOffset.y *= -1.0;\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(instancePositions.z), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace) + vec4(pixelOffset, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4LTY0Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiaWNvbi1sYXllci12ZXJ0ZXgtNjQuZ2xzbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgaWNvbi1sYXllci12ZXJ0ZXgtc2hhZGVyLTY0XG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9ucztcblxuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQb3NpdGlvbnM7XG5hdHRyaWJ1dGUgdmVjMiBpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3c7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VTaXplcztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZUFuZ2xlcztcbmF0dHJpYnV0ZSB2ZWM0IGluc3RhbmNlQ29sb3JzO1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VJY29uRnJhbWVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQ29sb3JNb2RlcztcbmF0dHJpYnV0ZSB2ZWMyIGluc3RhbmNlT2Zmc2V0cztcblxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2l6ZVNjYWxlO1xudW5pZm9ybSBmbG9hdCByZW5kZXJQaWNraW5nQnVmZmVyO1xudW5pZm9ybSB2ZWMyIGljb25zVGV4dHVyZURpbTtcbi8vIGRldmljZVBpeGVsUmF0aW8gaXMgc2V0IHVwIGFzIHVuaWZvcm0gYnV0IG5vdCBkZWNsYXJlZCBpbiB0aGUgc2hhZGVyIGZ1bmN0aW9uXG51bmlmb3JtIGZsb2F0IGRldmljZVBpeGVsUmF0aW87XG5cbnZhcnlpbmcgZmxvYXQgdkNvbG9yTW9kZTtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZHM7XG5cbnZlYzIgcm90YXRlX2J5X2FuZ2xlKHZlYzIgdmVydGV4LCBmbG9hdCBhbmdsZSkge1xuICBmbG9hdCBhbmdsZV9yYWRpYW4gPSBhbmdsZSAqIFBJIC8gMTgwLjA7XG4gIGZsb2F0IGNvc19hbmdsZSA9IGNvcyhhbmdsZV9yYWRpYW4pO1xuICBmbG9hdCBzaW5fYW5nbGUgPSBzaW4oYW5nbGVfcmFkaWFuKTtcbiAgbWF0MiByb3RhdGlvbk1hdHJpeCA9IG1hdDIoY29zX2FuZ2xlLCAtc2luX2FuZ2xlLCBzaW5fYW5nbGUsIGNvc19hbmdsZSk7XG4gIHJldHVybiByb3RhdGlvbk1hdHJpeCAqIHZlcnRleDtcbn1cblxudm9pZCBtYWluKHZvaWQpIHtcbiAgdmVjMiBpY29uU2l6ZSA9IGluc3RhbmNlSWNvbkZyYW1lcy56dztcbiAgLy8gc2NhbGUgaWNvbiBoZWlnaHQgdG8gbWF0Y2ggaW5zdGFuY2VTaXplXG4gIGZsb2F0IGluc3RhbmNlU2NhbGUgPSBpY29uU2l6ZS55ID09IDAuMCA/IDAuMCA6IGluc3RhbmNlU2l6ZXMgLyBpY29uU2l6ZS55O1xuXG4gIC8vIHNjYWxlIGFuZCByb3RhdGUgdmVydGV4IGluIFwicGl4ZWxcIiB2YWx1ZSBhbmQgY29udmVydCBiYWNrIHRvIGZyYWN0aW9uIGluIGNsaXBzcGFjZVxuICB2ZWMyIHBpeGVsT2Zmc2V0ID0gcG9zaXRpb25zIC8gMi4wICogaWNvblNpemUgKyBpbnN0YW5jZU9mZnNldHM7XG4gIHBpeGVsT2Zmc2V0ID0gcm90YXRlX2J5X2FuZ2xlKHBpeGVsT2Zmc2V0LCBpbnN0YW5jZUFuZ2xlcykgLyB2aWV3cG9ydFNpemUgKiBzaXplU2NhbGUgKlxuICAgIGluc3RhbmNlU2NhbGUgKiBkZXZpY2VQaXhlbFJhdGlvO1xuICBwaXhlbE9mZnNldC55ICo9IC0xLjA7XG5cbiAgdmVjNCBpbnN0YW5jZVBvc2l0aW9uczY0eHkgPSB2ZWM0KFxuICAgIGluc3RhbmNlUG9zaXRpb25zLngsIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdy54LFxuICAgIGluc3RhbmNlUG9zaXRpb25zLnksIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdy55KTtcblxuICB2ZWMyIHByb2plY3RlZF9jb29yZF94eVsyXTtcbiAgcHJvamVjdF9wb3NpdGlvbl9mcDY0KGluc3RhbmNlUG9zaXRpb25zNjR4eSwgcHJvamVjdGVkX2Nvb3JkX3h5KTtcblxuICB2ZWMyIHZlcnRleF9wb3NfbW9kZWxzcGFjZVs0XTtcbiAgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzBdID0gcHJvamVjdGVkX2Nvb3JkX3h5WzBdO1xuICB2ZXJ0ZXhfcG9zX21vZGVsc3BhY2VbMV0gPSBwcm9qZWN0ZWRfY29vcmRfeHlbMV07XG4gIHZlcnRleF9wb3NfbW9kZWxzcGFjZVsyXSA9IHZlYzIocHJvamVjdF9zY2FsZShpbnN0YW5jZVBvc2l0aW9ucy56KSwgMC4wKTtcbiAgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzNdID0gdmVjMigxLjAsIDAuMCk7XG5cbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0X3RvX2NsaXBzcGFjZV9mcDY0KHZlcnRleF9wb3NfbW9kZWxzcGFjZSkgKyB2ZWM0KHBpeGVsT2Zmc2V0LCAwLjAsIDAuMCk7XG5cbiAgdlRleHR1cmVDb29yZHMgPSBtaXgoXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5LFxuICAgIGluc3RhbmNlSWNvbkZyYW1lcy54eSArIGljb25TaXplLFxuICAgIChwb3NpdGlvbnMueHkgKyAxLjApIC8gMi4wXG4gICkgLyBpY29uc1RleHR1cmVEaW07XG5cbiAgdlRleHR1cmVDb29yZHMueSA9IDEuMCAtIHZUZXh0dXJlQ29vcmRzLnk7XG5cbiAgdmVjNCBjb2xvciA9IGluc3RhbmNlQ29sb3JzIC8gMjU1LjtcbiAgdmVjNCBwaWNraW5nQ29sb3IgPSB2ZWM0KGluc3RhbmNlUGlja2luZ0NvbG9ycyAvIDI1NS4sIDEuKTtcbiAgdkNvbG9yID0gbWl4KGNvbG9yLCBwaWNraW5nQ29sb3IsIHJlbmRlclBpY2tpbmdCdWZmZXIpO1xuXG4gIHZDb2xvck1vZGUgPSBpbnN0YW5jZUNvbG9yTW9kZXM7XG59XG5gO1xuIl19

@@ -21,3 +21,3 @@ // Copyright (c) 2015 - 2017 Uber Technologies, Inc.

export default "#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n vec2 iconSize_clipspace = iconSize / viewportSize * 2.0;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n vec3 center = project_position(instancePositions);\n vec2 vertex = (positions / 2.0 + instanceOffsets);\n vertex = rotate_by_angle(vertex, instanceAngles) * iconSize_clipspace *\n sizeScale * instanceScale;\n vertex.y *= -1.0;\n\n gl_Position = project_to_clipspace(vec4(center, 1.0)) + vec4(vertex, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiaWNvbi1sYXllci12ZXJ0ZXguZ2xzbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgaWNvbi1sYXllci12ZXJ0ZXgtc2hhZGVyXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9ucztcblxuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQb3NpdGlvbnM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VTaXplcztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZUFuZ2xlcztcbmF0dHJpYnV0ZSB2ZWM0IGluc3RhbmNlQ29sb3JzO1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VJY29uRnJhbWVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQ29sb3JNb2RlcztcbmF0dHJpYnV0ZSB2ZWMyIGluc3RhbmNlT2Zmc2V0cztcblxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2l6ZVNjYWxlO1xudW5pZm9ybSBmbG9hdCByZW5kZXJQaWNraW5nQnVmZmVyO1xudW5pZm9ybSB2ZWMyIGljb25zVGV4dHVyZURpbTtcblxudmFyeWluZyBmbG9hdCB2Q29sb3JNb2RlO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkcztcblxudmVjMiByb3RhdGVfYnlfYW5nbGUodmVjMiB2ZXJ0ZXgsIGZsb2F0IGFuZ2xlKSB7XG4gIGZsb2F0IGFuZ2xlX3JhZGlhbiA9IGFuZ2xlICogUEkgLyAxODAuMDtcbiAgZmxvYXQgY29zX2FuZ2xlID0gY29zKGFuZ2xlX3JhZGlhbik7XG4gIGZsb2F0IHNpbl9hbmdsZSA9IHNpbihhbmdsZV9yYWRpYW4pO1xuICBtYXQyIHJvdGF0aW9uTWF0cml4ID0gbWF0Mihjb3NfYW5nbGUsIC1zaW5fYW5nbGUsIHNpbl9hbmdsZSwgY29zX2FuZ2xlKTtcbiAgcmV0dXJuIHJvdGF0aW9uTWF0cml4ICogdmVydGV4O1xufVxuXG52b2lkIG1haW4odm9pZCkge1xuICB2ZWMyIGljb25TaXplID0gaW5zdGFuY2VJY29uRnJhbWVzLnp3O1xuICB2ZWMyIGljb25TaXplX2NsaXBzcGFjZSA9IGljb25TaXplIC8gdmlld3BvcnRTaXplICogMi4wO1xuICAvLyBzY2FsZSBpY29uIGhlaWdodCB0byBtYXRjaCBpbnN0YW5jZVNpemVcbiAgZmxvYXQgaW5zdGFuY2VTY2FsZSA9IGljb25TaXplLnkgPT0gMC4wID8gMC4wIDogaW5zdGFuY2VTaXplcyAvIGljb25TaXplLnk7XG4gIHZlYzMgY2VudGVyID0gcHJvamVjdF9wb3NpdGlvbihpbnN0YW5jZVBvc2l0aW9ucyk7XG4gIHZlYzIgdmVydGV4ID0gKHBvc2l0aW9ucyAvIDIuMCArIGluc3RhbmNlT2Zmc2V0cyk7XG4gIHZlcnRleCA9IHJvdGF0ZV9ieV9hbmdsZSh2ZXJ0ZXgsIGluc3RhbmNlQW5nbGVzKSAqIGljb25TaXplX2NsaXBzcGFjZSAqXG4gICAgc2l6ZVNjYWxlICogaW5zdGFuY2VTY2FsZTtcbiAgdmVydGV4LnkgKj0gLTEuMDtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3RfdG9fY2xpcHNwYWNlKHZlYzQoY2VudGVyLCAxLjApKSArIHZlYzQodmVydGV4LCAwLjAsIDAuMCk7XG5cbiAgdlRleHR1cmVDb29yZHMgPSBtaXgoXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5LFxuICAgIGluc3RhbmNlSWNvbkZyYW1lcy54eSArIGljb25TaXplLFxuICAgIChwb3NpdGlvbnMueHkgKyAxLjApIC8gMi4wXG4gICkgLyBpY29uc1RleHR1cmVEaW07XG5cbiAgdlRleHR1cmVDb29yZHMueSA9IDEuMCAtIHZUZXh0dXJlQ29vcmRzLnk7XG5cbiAgdmVjNCBjb2xvciA9IGluc3RhbmNlQ29sb3JzIC8gMjU1LjtcbiAgdmVjNCBwaWNraW5nQ29sb3IgPSB2ZWM0KGluc3RhbmNlUGlja2luZ0NvbG9ycyAvIDI1NS4sIDEuKTtcbiAgdkNvbG9yID0gbWl4KGNvbG9yLCBwaWNraW5nQ29sb3IsIHJlbmRlclBpY2tpbmdCdWZmZXIpO1xuXG4gIHZDb2xvck1vZGUgPSBpbnN0YW5jZUNvbG9yTW9kZXM7XG59XG5gO1xuIl19
export default "#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n// devicePixelRatio is set up as uniform but not declared in the shader function\nuniform float devicePixelRatio;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) / viewportSize * sizeScale *\n instanceScale * devicePixelRatio;\n pixelOffset.y *= -1.0;\n\n vec3 center = project_position(instancePositions);\n gl_Position = project_to_clipspace(vec4(center, 1.0)) + vec4(pixelOffset, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiaWNvbi1sYXllci12ZXJ0ZXguZ2xzbC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQgZGVmYXVsdCBgXFxcbiNkZWZpbmUgU0hBREVSX05BTUUgaWNvbi1sYXllci12ZXJ0ZXgtc2hhZGVyXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9ucztcblxuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQb3NpdGlvbnM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VTaXplcztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZUFuZ2xlcztcbmF0dHJpYnV0ZSB2ZWM0IGluc3RhbmNlQ29sb3JzO1xuYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VQaWNraW5nQ29sb3JzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VJY29uRnJhbWVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQ29sb3JNb2RlcztcbmF0dHJpYnV0ZSB2ZWMyIGluc3RhbmNlT2Zmc2V0cztcblxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2l6ZVNjYWxlO1xudW5pZm9ybSBmbG9hdCByZW5kZXJQaWNraW5nQnVmZmVyO1xudW5pZm9ybSB2ZWMyIGljb25zVGV4dHVyZURpbTtcbi8vIGRldmljZVBpeGVsUmF0aW8gaXMgc2V0IHVwIGFzIHVuaWZvcm0gYnV0IG5vdCBkZWNsYXJlZCBpbiB0aGUgc2hhZGVyIGZ1bmN0aW9uXG51bmlmb3JtIGZsb2F0IGRldmljZVBpeGVsUmF0aW87XG5cbnZhcnlpbmcgZmxvYXQgdkNvbG9yTW9kZTtcbnZhcnlpbmcgdmVjNCB2Q29sb3I7XG52YXJ5aW5nIHZlYzIgdlRleHR1cmVDb29yZHM7XG5cbnZlYzIgcm90YXRlX2J5X2FuZ2xlKHZlYzIgdmVydGV4LCBmbG9hdCBhbmdsZSkge1xuICBmbG9hdCBhbmdsZV9yYWRpYW4gPSBhbmdsZSAqIFBJIC8gMTgwLjA7XG4gIGZsb2F0IGNvc19hbmdsZSA9IGNvcyhhbmdsZV9yYWRpYW4pO1xuICBmbG9hdCBzaW5fYW5nbGUgPSBzaW4oYW5nbGVfcmFkaWFuKTtcbiAgbWF0MiByb3RhdGlvbk1hdHJpeCA9IG1hdDIoY29zX2FuZ2xlLCAtc2luX2FuZ2xlLCBzaW5fYW5nbGUsIGNvc19hbmdsZSk7XG4gIHJldHVybiByb3RhdGlvbk1hdHJpeCAqIHZlcnRleDtcbn1cblxudm9pZCBtYWluKHZvaWQpIHtcbiAgdmVjMiBpY29uU2l6ZSA9IGluc3RhbmNlSWNvbkZyYW1lcy56dztcbiAgLy8gc2NhbGUgaWNvbiBoZWlnaHQgdG8gbWF0Y2ggaW5zdGFuY2VTaXplXG4gIGZsb2F0IGluc3RhbmNlU2NhbGUgPSBpY29uU2l6ZS55ID09IDAuMCA/IDAuMCA6IGluc3RhbmNlU2l6ZXMgLyBpY29uU2l6ZS55O1xuXG4gIC8vIHNjYWxlIGFuZCByb3RhdGUgdmVydGV4IGluIFwicGl4ZWxcIiB2YWx1ZSBhbmQgY29udmVydCBiYWNrIHRvIGZyYWN0aW9uIGluIGNsaXBzcGFjZVxuICB2ZWMyIHBpeGVsT2Zmc2V0ID0gcG9zaXRpb25zIC8gMi4wICogaWNvblNpemUgKyBpbnN0YW5jZU9mZnNldHM7XG4gIHBpeGVsT2Zmc2V0ID0gcm90YXRlX2J5X2FuZ2xlKHBpeGVsT2Zmc2V0LCBpbnN0YW5jZUFuZ2xlcykgLyB2aWV3cG9ydFNpemUgKiBzaXplU2NhbGUgKlxuICAgIGluc3RhbmNlU2NhbGUgKiBkZXZpY2VQaXhlbFJhdGlvO1xuICBwaXhlbE9mZnNldC55ICo9IC0xLjA7XG5cbiAgdmVjMyBjZW50ZXIgPSBwcm9qZWN0X3Bvc2l0aW9uKGluc3RhbmNlUG9zaXRpb25zKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0X3RvX2NsaXBzcGFjZSh2ZWM0KGNlbnRlciwgMS4wKSkgKyB2ZWM0KHBpeGVsT2Zmc2V0LCAwLjAsIDAuMCk7XG5cbiAgdlRleHR1cmVDb29yZHMgPSBtaXgoXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5LFxuICAgIGluc3RhbmNlSWNvbkZyYW1lcy54eSArIGljb25TaXplLFxuICAgIChwb3NpdGlvbnMueHkgKyAxLjApIC8gMi4wXG4gICkgLyBpY29uc1RleHR1cmVEaW07XG5cbiAgdlRleHR1cmVDb29yZHMueSA9IDEuMCAtIHZUZXh0dXJlQ29vcmRzLnk7XG5cbiAgdmVjNCBjb2xvciA9IGluc3RhbmNlQ29sb3JzIC8gMjU1LjtcbiAgdmVjNCBwaWNraW5nQ29sb3IgPSB2ZWM0KGluc3RhbmNlUGlja2luZ0NvbG9ycyAvIDI1NS4sIDEuKTtcbiAgdkNvbG9yID0gbWl4KGNvbG9yLCBwaWNraW5nQ29sb3IsIHJlbmRlclBpY2tpbmdCdWZmZXIpO1xuXG4gIHZDb2xvck1vZGUgPSBpbnN0YW5jZUNvbG9yTW9kZXM7XG59XG5gO1xuIl19

@@ -7,2 +7,4 @@ var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

@@ -43,2 +45,5 @@

var DEFAULT_COLOR = [0, 0, 0, 255];
var DEFAULT_TEXTURE_MIN_FILTER = GL.LINEAR_MIPMAP_LINEAR;
// GL.LINEAR is the default value but explicitly set it here
var DEFAULT_TEXTURE_MAG_FILTER = GL.LINEAR;

@@ -177,2 +182,5 @@ /*

if (iconAtlas instanceof Texture2D) {
var _iconAtlas$setParamet;
iconAtlas.setParameters((_iconAtlas$setParamet = {}, _defineProperty(_iconAtlas$setParamet, GL.TEXTURE_MIN_FILTER, DEFAULT_TEXTURE_MIN_FILTER), _defineProperty(_iconAtlas$setParamet, GL.TEXTURE_MAG_FILTER, DEFAULT_TEXTURE_MAG_FILTER), _iconAtlas$setParamet));
this.setState({ iconsTexture: iconAtlas });

@@ -183,5 +191,8 @@ } else if (typeof iconAtlas === 'string') {

}).then(function (_ref3) {
var _texture$setParameter;
var _ref4 = _slicedToArray(_ref3, 1),
texture = _ref4[0];
texture.setParameters((_texture$setParameter = {}, _defineProperty(_texture$setParameter, GL.TEXTURE_MIN_FILTER, DEFAULT_TEXTURE_MIN_FILTER), _defineProperty(_texture$setParameter, GL.TEXTURE_MAG_FILTER, DEFAULT_TEXTURE_MAG_FILTER), _texture$setParameter));
_this2.setState({ iconsTexture: texture });

@@ -431,4 +442,4 @@ });

var rect = iconMapping[icon] || {};
value[i++] = 1 / 2 - rect.anchorX / rect.width || 0;
value[i++] = 1 / 2 - rect.anchorY / rect.height || 0;
value[i++] = rect.width / 2 - rect.anchorX || 0;
value[i++] = rect.height / 2 - rect.anchorY || 0;
}

@@ -537,2 +548,2 @@ } catch (err) {

IconLayer.defaultProps = defaultProps;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXIuanMiXSwibmFtZXMiOlsiTGF5ZXIiLCJHTCIsIk1vZGVsIiwiR2VvbWV0cnkiLCJUZXh0dXJlMkQiLCJsb2FkVGV4dHVyZXMiLCJmcDY0aWZ5IiwiZW5hYmxlNjRiaXRTdXBwb3J0IiwiQ09PUkRJTkFURV9TWVNURU0iLCJ2cyIsInZzNjQiLCJmcyIsIkRFRkFVTFRfQ09MT1IiLCJkZWZhdWx0UHJvcHMiLCJpY29uQXRsYXMiLCJpY29uTWFwcGluZyIsInNpemVTY2FsZSIsImZwNjQiLCJnZXRQb3NpdGlvbiIsIngiLCJwb3NpdGlvbiIsImdldEljb24iLCJpY29uIiwiZ2V0Q29sb3IiLCJjb2xvciIsImdldFNpemUiLCJzaXplIiwiZ2V0QW5nbGUiLCJhbmdsZSIsIkljb25MYXllciIsInByb3BzIiwibW9kdWxlcyIsImF0dHJpYnV0ZU1hbmFnZXIiLCJzdGF0ZSIsImdsIiwiY29udGV4dCIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlUG9zaXRpb25zIiwiYWNjZXNzb3IiLCJ1cGRhdGUiLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9ucyIsImluc3RhbmNlU2l6ZXMiLCJjYWxjdWxhdGVJbnN0YW5jZVNpemVzIiwiaW5zdGFuY2VPZmZzZXRzIiwiY2FsY3VsYXRlSW5zdGFuY2VPZmZzZXRzIiwiaW5zdGFuY2VJY29uRnJhbWVzIiwiY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzIiwiaW5zdGFuY2VDb2xvck1vZGVzIiwidHlwZSIsIlVOU0lHTkVEX0JZVEUiLCJjYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZSIsImluc3RhbmNlQ29sb3JzIiwiY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnMiLCJpbnN0YW5jZUFuZ2xlcyIsImNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzIiwic2V0U3RhdGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJpbnZhbGlkYXRlQWxsIiwicHJvamVjdGlvbk1vZGUiLCJMTkdMQVQiLCJpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJyZW1vdmUiLCJpbnZhbGlkYXRlIiwiaWNvbnNUZXh0dXJlIiwidXJscyIsInRoZW4iLCJ0ZXh0dXJlIiwidXBkYXRlQXR0cmlidXRlIiwidW5pZm9ybXMiLCJyZW5kZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpY29uc1RleHR1cmVEaW0iLCJ3aWR0aCIsImhlaWdodCIsInBvc2l0aW9ucyIsImdldFNoYWRlcnMiLCJpZCIsImdlb21ldHJ5IiwiZHJhd01vZGUiLCJUUklBTkdMRV9GQU4iLCJGbG9hdDMyQXJyYXkiLCJpc0luc3RhbmNlZCIsInNoYWRlckNhY2hlIiwiYXR0cmlidXRlIiwiZGF0YSIsInZhbHVlIiwiaSIsIm9iamVjdCIsInBvaW50IiwiaXNOYU4iLCJyZWN0IiwiYW5jaG9yWCIsImFuY2hvclkiLCJjb2xvck1vZGUiLCJtYXNrIiwieSIsImxheWVyTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFRQSxLQUFSLFFBQW9CLGNBQXBCO0FBQ0EsU0FBUUMsRUFBUixFQUFZQyxLQUFaLEVBQW1CQyxRQUFuQixFQUE2QkMsU0FBN0IsRUFBd0NDLFlBQXhDLFFBQTJELFNBQTNEO0FBQ0EsU0FBUUMsT0FBUixFQUFpQkMsa0JBQWpCLFFBQTBDLHlCQUExQztBQUNBLFNBQVFDLGlCQUFSLFFBQWdDLGNBQWhDOztBQUVBLE9BQU9DLEVBQVAsTUFBZSwwQkFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsNkJBQWpCO0FBQ0EsT0FBT0MsRUFBUCxNQUFlLDRCQUFmOztBQUVBLElBQU1DLGdCQUFnQixDQUFDLENBQUQsRUFB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QUFBLFVBQzlCMkQsSUFEOEIsV0FDOUJBLElBRDhCO0FBQUEsVUFDeEIxRSxXQUR3QixXQUN4QkEsV0FEd0I7QUFBQSxVQUNYTSxPQURXLFdBQ1hBLE9BRFc7QUFBQSxVQUU5QnFFLEtBRjhCLEdBRXJCRixTQUZxQixDQUU5QkUsS0FGOEI7O0FBR3JDLFVBQUlDLElBQUksQ0FBUjtBQUhxQztBQUFBO0FBQUE7O0FBQUE7QUFJckMsOEJBQXFCRixJQUFyQixtSUFBMkI7QUFBQSxjQUFoQkcsTUFBZ0I7O0FBQ3pCLGNBQU10RSxPQUFPRCxRQUFRdUUsTUFBUixDQUFiO0FBQ0EsY0FBTUcsT0FBT2hGLFlBQVlPLElBQVosS0FBcUIsRUFBbEM7QUFDQW9FLGdCQUFNQyxHQUFOLElBQWFJLEtBQUs1RSxDQUFMLElBQVUsQ0FBdkI7QUFDQXVFLGdCQUFNQyxHQUFOLElBQWFJLEtBQUtLLENBQUwsSUFBVSxDQUF2QjtBQUNBVixnQkFBTUMsR0FBTixJQUFhSSxLQUFLbEIsS0FBTCxJQUFjLENBQTNCO0FBQ0FhLGdCQUFNQyxHQUFOLElBQWFJLEtBQUtqQixNQUFMLElBQWUsQ0FBNUI7QUFDRDtBQVhvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWXRDOzs7O0VBeE1vQzlFLEs7O2VBQWxCNkIsUzs7O0FBMk1yQkEsVUFBVXdFLFNBQVYsR0FBc0IsV0FBdEI7QUFDQXhFLFVBQVVoQixZQUFWLEdBQXlCQSxZQUF6QiIsImZpbGUiOiJpY29uLWxheWVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5pbXBvcnQge0xheWVyfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHtHTCwgTW9kZWwsIEdlb21ldHJ5LCBUZXh0dXJlMkQsIGxvYWRUZXh0dXJlc30gZnJvbSAnbHVtYS5nbCc7XG5pbXBvcnQge2ZwNjRpZnksIGVuYWJsZTY0Yml0U3VwcG9ydH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzL2ZwNjQnO1xuaW1wb3J0IHtDT09SRElOQVRFX1NZU1RFTX0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuaW1wb3J0IHZzIGZyb20gJy4vaWNvbi1sYXllci12ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgdnM2NCBmcm9tICcuL2ljb24tbGF5ZXItdmVydGV4LTY0Lmdsc2wnO1xuaW1wb3J0IGZzIGZyb20gJy4vaWNvbi1sYXllci1mcmFnbWVudC5nbHNsJztcblxuY29uc3QgREVGQVVMVF9DT0xPUiA9IFswLCAwLCAwLCAyNTVdO1xuXG4vKlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge1RleHR1cmUyRCB8IHN0cmluZ30gcHJvcHMuaWNvbkF0bGFzIC0gYXRsYXMgaW1hZ2UgdXJsIG9yIHRleHR1cmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZyAtIGljb24gbmFtZXMgbWFwcGVkIHRvIGljb24gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLnggLSB4IHBvc2l0aW9uIG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS55IC0geSBwb3NpdGlvbiBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0ud2lkdGggLSB3aWR0aCBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0uaGVpZ2h0IC0gaGVpZ2h0IG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS5hbmNob3JYIC0geCBhbmNob3Igb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2UsXG4gKiAgIGRlZmF1bHQgdG8gd2lkdGggLyAyXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS5hbmNob3JZIC0geSBhbmNob3Igb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2UsXG4gKiAgIGRlZmF1bHQgdG8gaGVpZ2h0IC8gMlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0ubWFzayAtIHdoZXRoZXIgaWNvbiBpcyB0cmVhdGVkIGFzIGEgdHJhbnNwYXJlbmN5XG4gKiAgIG1hc2suIElmIHRydWUsIHVzZXIgZGVmaW5lZCBjb2xvciBpcyBhcHBsaWVkLiBJZiBmYWxzZSwgb3JpZ2luYWwgY29sb3IgZnJvbSB0aGUgaW1hZ2UgaXNcbiAqICAgYXBwbGllZC4gRGVmYXVsdCB0byBmYWxzZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wcy5zaXplIC0gaWNvbiBzaXplIGluIHBpeGVsc1xuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRQb3NpdGlvbiAtIHJldHVybnMgYW5jaG9yIHBvc2l0aW9uIG9mIHRoZSBpY29uLCBpbiBbbG5nLCBsYXQsIHpdXG4gKiBAcGFyYW0ge2Z1bmN9IHByb3BzLmdldEljb24gLSByZXR1cm5zIGljb24gbmFtZSBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRTaXplIC0gcmV0dXJucyBpY29uIHNpemUgbXVsdGlwbGllciBhcyBhIG51bWJlclxuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRDb2xvciAtIHJldHVybnMgY29sb3Igb2YgdGhlIGljb24gaW4gW3IsIGcsIGIsIGFdLiBPbmx5IHdvcmtzIG9uIGljb25zXG4gKiAgIHdpdGggbWFzazogdHJ1ZS5cbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0QW5nbGUgLSByZXR1cm5zIHJvdGF0aW5nIGFuZ2xlIChpbiBkZWdyZWUpIG9mIHRoZSBpY29uLlxuICovXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIGljb25BdGxhczogbnVsbCxcbiAgaWNvbk1hcHBpbmc6IHt9LFxuICBzaXplU2NhbGU6IDEsXG4gIGZwNjQ6IGZhbHNlLFxuXG4gIGdldFBvc2l0aW9uOiB4ID0+IHgucG9zaXRpb24sXG4gIGdldEljb246IHggPT4geC5pY29uLFxuICBnZXRDb2xvcjogeCA9PiB4LmNvbG9yIHx8IERFRkFVTFRfQ09MT1IsXG4gIGdldFNpemU6IHggPT4geC5zaXplIHx8IDEsXG4gIGdldEFuZ2xlOiB4ID0+IHguYW5nbGUgfHwgMFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWNvbkxheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBnZXRTaGFkZXJzKCkge1xuICAgIHJldHVybiBlbmFibGU2NGJpdFN1cHBvcnQodGhpcy5wcm9wcykgP1xuICAgICAge3ZzOiB2czY0LCBmcywgbW9kdWxlczogWydwcm9qZWN0NjQnXX0gOlxuICAgICAge3ZzLCBmc307ICAvLyAncHJvamVjdCcgbW9kdWxlIGFkZGVkIGJ5IGRlZmF1bHQuXG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlUG9zaXRpb25zOiB7c2l6ZTogMywgYWNjZXNzb3I6ICdnZXRQb3NpdGlvbicsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uc30sXG4gICAgICBpbnN0YW5jZVNpemVzOiB7c2l6ZTogMSwgYWNjZXNzb3I6ICdnZXRTaXplJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlU2l6ZXN9LFxuICAgICAgaW5zdGFuY2VPZmZzZXRzOiB7c2l6ZTogMiwgYWNjZXNzb3I6ICdnZXRJY29uJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlT2Zmc2V0c30sXG4gICAgICBpbnN0YW5jZUljb25GcmFtZXM6IHtzaXplOiA0LCBhY2Nlc3NvcjogJ2dldEljb24nLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzfSxcbiAgICAgIGluc3RhbmNlQ29sb3JNb2Rlczoge3NpemU6IDEsIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsIGFjY2Vzc29yOiAnZ2V0SWNvbicsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZX0sXG4gICAgICBpbnN0YW5jZUNvbG9yczoge3NpemU6IDQsIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsIGFjY2Vzc29yOiAnZ2V0Q29sb3InLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnN9LFxuICAgICAgaW5zdGFuY2VBbmdsZXM6IHtzaXplOiAxLCBhY2Nlc3NvcjogJ2dldEFuZ2xlJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzfVxuICAgIH0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7bW9kZWw6IHRoaXMuX2dldE1vZGVsKGdsKX0pO1xuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSkge1xuICAgIGlmIChwcm9wcy5mcDY0ICE9PSBvbGRQcm9wcy5mcDY0KSB7XG4gICAgICBjb25zdCB7YXR0cmlidXRlTWFuYWdlcn0gPSB0aGlzLnN0YXRlO1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5pbnZhbGlkYXRlQWxsKCk7XG5cbiAgICAgIGlmIChwcm9wcy5mcDY0ICYmIHByb3BzLnByb2plY3Rpb25Nb2RlID09PSBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQpIHtcbiAgICAgICAgYXR0cmlidXRlTWFuYWdlci5hZGRJbnN0YW5jZWQoe1xuICAgICAgICAgIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdzoge1xuICAgICAgICAgICAgc2l6ZTogMixcbiAgICAgICAgICAgIGFjY2Vzc29yOiAnZ2V0UG9zaXRpb24nLFxuICAgICAgICAgICAgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlUG9zaXRpb25zNjR4eUxvd1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVNYW5hZ2VyLnJlbW92ZShbXG4gICAgICAgICAgJ2luc3RhbmNlUG9zaXRpb25zNjR4eUxvdydcbiAgICAgICAgXSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc30pIHtcbiAgICBzdXBlci51cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pO1xuXG4gICAgY29uc3Qge2ljb25BdGxhcywgaWNvbk1hcHBpbmd9ID0gcHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMuaWNvbk1hcHBpbmcgIT09IGljb25NYXBwaW5nKSB7XG4gICAgICBjb25zdCB7YXR0cmlidXRlTWFuYWdlcn0gPSB0aGlzLnN0YXRlO1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5pbnZhbGlkYXRlKCdpbnN0YW5jZU9mZnNldHMnKTtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuaW52YWxpZGF0ZSgnaW5zdGFuY2VJY29uRnJhbWVzJyk7XG4gICAgICBhdHRyaWJ1dGVNYW5hZ2VyLmludmFsaWRhdGUoJ2luc3RhbmNlQ29sb3JNb2RlcycpO1xuICAgIH1cblxuICAgIGlmIChvbGRQcm9wcy5pY29uQXRsYXMgIT09IGljb25BdGxhcykge1xuXG4gICAgICBpZiAoaWNvbkF0bGFzIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ljb25zVGV4dHVyZTogaWNvbkF0bGFzfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpY29uQXRsYXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxvYWRUZXh0dXJlcyh0aGlzLmNvbnRleHQuZ2wsIHtcbiAgICAgICAgICB1cmxzOiBbaWNvbkF0bGFzXVxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoW3RleHR1cmVdKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aWNvbnNUZXh0dXJlOiB0ZXh0dXJlfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5mcDY0ICE9PSBvbGRQcm9wcy5mcDY0KSB7XG4gICAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kZWw6IHRoaXMuX2dldE1vZGVsKGdsKX0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUF0dHJpYnV0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pO1xuXG4gIH1cblxuICBkcmF3KHt1bmlmb3Jtc30pIHtcbiAgICBjb25zdCB7c2l6ZVNjYWxlfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge2ljb25zVGV4dHVyZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKGljb25zVGV4dHVyZSkge1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5yZW5kZXIoT2JqZWN0LmFzc2lnbih7fSwgdW5pZm9ybXMsIHtcbiAgICAgICAgaWNvbnNUZXh0dXJlLFxuICAgICAgICBpY29uc1RleHR1cmVEaW06IFtpY29uc1RleHR1cmUud2lkdGgsIGljb25zVGV4dHVyZS5oZWlnaHRdLFxuICAgICAgICBzaXplU2NhbGVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0TW9kZWwoZ2wpIHtcblxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFstMSwgLTEsIDAsIC0xLCAxLCAwLCAxLCAxLCAwLCAxLCAtMSwgMF07XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsKGdsLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFNoYWRlcnMoKSwge1xuICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcbiAgICAgICAgZHJhd01vZGU6IEdMLlRSSUFOR0xFX0ZBTixcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucylcbiAgICAgIH0pLFxuICAgICAgaXNJbnN0YW5jZWQ6IHRydWUsXG4gICAgICBzaGFkZXJDYWNoZTogdGhpcy5jb250ZXh0LnNoYWRlckNhY2hlXG4gICAgfSkpO1xuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VQb3NpdGlvbnMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldFBvc2l0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihvYmplY3QpO1xuICAgICAgdmFsdWVbaSsrXSA9IHBvc2l0aW9uWzBdO1xuICAgICAgdmFsdWVbaSsrXSA9IHBvc2l0aW9uWzFdO1xuICAgICAgdmFsdWVbaSsrXSA9IHBvc2l0aW9uWzJdIHx8IDA7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VQb3NpdGlvbnM2NHh5TG93KGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRQb3NpdGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgZGF0YSkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihwb2ludCk7XG4gICAgICB2YWx1ZVtpKytdID0gZnA2NGlmeShwb3NpdGlvblswXSlbMV07XG4gICAgICB2YWx1ZVtpKytdID0gZnA2NGlmeShwb3NpdGlvblsxXSlbMV07XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VTaXplcyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0U2l6ZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIHZhbHVlW2krK10gPSBnZXRTaXplKG9iamVjdCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VBbmdsZXMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldEFuZ2xlfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgdmFsdWVbaSsrXSA9IGdldEFuZ2xlKG9iamVjdCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldENvbG9yfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgY29sb3IgPSBnZXRDb2xvcihvYmplY3QpO1xuXG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JbMF07XG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JbMV07XG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JbMl07XG4gICAgICB2YWx1ZVtpKytdID0gaXNOYU4oY29sb3JbM10pID8gMjU1IDogY29sb3JbM107XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VPZmZzZXRzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBpY29uTWFwcGluZywgZ2V0SWNvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKG9iamVjdCk7XG4gICAgICBjb25zdCByZWN0ID0gaWNvbk1hcHBpbmdbaWNvbl0gfHwge307XG4gICAgICB2YWx1ZVtpKytdID0gKDEgLyAyIC0gcmVjdC5hbmNob3JYIC8gcmVjdC53aWR0aCkgfHwgMDtcbiAgICAgIHZhbHVlW2krK10gPSAoMSAvIDIgLSByZWN0LmFuY2hvclkgLyByZWN0LmhlaWdodCkgfHwgMDtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZShhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgaWNvbk1hcHBpbmcsIGdldEljb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBpY29uID0gZ2V0SWNvbihvYmplY3QpO1xuICAgICAgY29uc3QgY29sb3JNb2RlID0gaWNvbk1hcHBpbmdbaWNvbl0gJiYgaWNvbk1hcHBpbmdbaWNvbl0ubWFzaztcbiAgICAgIHZhbHVlW2krK10gPSBjb2xvck1vZGUgPyAxIDogMDtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZUljb25GcmFtZXMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGljb25NYXBwaW5nLCBnZXRJY29ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgaWNvbiA9IGdldEljb24ob2JqZWN0KTtcbiAgICAgIGNvbnN0IHJlY3QgPSBpY29uTWFwcGluZ1tpY29uXSB8fCB7fTtcbiAgICAgIHZhbHVlW2krK10gPSByZWN0LnggfHwgMDtcbiAgICAgIHZhbHVlW2krK10gPSByZWN0LnkgfHwgMDtcbiAgICAgIHZhbHVlW2krK10gPSByZWN0LndpZHRoIHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC5oZWlnaHQgfHwgMDtcbiAgICB9XG4gIH1cbn1cblxuSWNvbkxheWVyLmxheWVyTmFtZSA9ICdJY29uTGF5ZXInO1xuSWNvbkxheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXIuanMiXSwibmFtZXMiOlsiTGF5ZXIiLCJHTCIsIk1vZGVsIiwiR2VvbWV0cnkiLCJUZXh0dXJlMkQiLCJsb2FkVGV4dHVyZXMiLCJmcDY0aWZ5IiwiZW5hYmxlNjRiaXRTdXBwb3J0IiwiQ09PUkRJTkFURV9TWVNURU0iLCJ2cyIsInZzNjQiLCJmcyIsIkRFRkFVTFRfQ09MT1IiLCJERUZBVUxUX1RFWFRVUkVfTUlOX0ZJTFRFUiIsIkxJTkVBUl9NSVBNQVBfTElORUFSIiwiREVGQVVMVF9URVhUVVJFX01BR19GSUxURVIiLCJMSU5FQVIiLCJkZWZhdWx0UHJvcHMiLCJpY29uQXRsYXMiLCJpY29uTWFwcGluZyIsInNpemVTY2FsZSIsImZwNjQiLCJnZXRQb3NpdGlvbiIsIngiLCJwb3NpdGlvbiIsImdldEljb24iLCJpY29uIiwiZ2V0Q29sb3IiLCJjb2xvciIsImdldFNpemUiLCJzaXplIiwiZ2V0QW5nbGUiLCJhbmdsZSIsIkljb25MYXllciIsInByb3BzIiwibW9kdWxlcyIsImF0dHJpYnV0ZU1hbmFnZXIiLCJzdGF0ZSIsImdsIiwiY29udGV4dCIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlUG9zaXRpb25zIiwiYWNjZXNzb3IiLCJ1cGRhdGUiLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9ucyIsImluc3RhbmNlU2l6ZXMiLCJjYWxjdWxhdGVJbnN0YW5jZVNpemVzIiwiaW5zdGFuY2VPZmZzZXRzIiwiY2FsY3VsYXRlSW5zdGFuY2VPZmZzZXRzIiwiaW5zdGFuY2VJY29uRnJhbWVzIiwiY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzIiwiaW5zdGFuY2VDb2xvck1vZGVzIiwidHlwZSIsIlVOU0lHTkVEX0JZVEUiLCJjYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZSIsImluc3RhbmNlQ29sb3JzIiwiY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnMiLCJpbnN0YW5jZUFuZ2xlcyIsImNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzIiwic2V0U3RhdGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJpbnZhbGlkYXRlQWxsIiwicHJvamVjdGlvbk1vZGUiLCJMTkdMQVQiLCJpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJyZW1vdmUiLCJpbnZhbGlkYXRlIiwic2V0UGFyYW1ldGVycyIsIlRFWFRVUkVfTUlOX0ZJTFRFUiIsIlRFWFRVUkVfTUFHX0ZJTFRFUiIsImljb25zVGV4dHVyZSIsInVybHMiLCJ0aGVuIiwidGV4dHVyZSIsInVwZGF0ZUF0dHJpYnV0ZSIsInVuaWZvcm1zIiwicmVuZGVyIiwiT2JqZWN0IiwiYXNzaWduIiwiaWNvbnNUZXh0dXJlRGltIiwid2lkdGgiLCJoZWlnaHQiLCJwb3NpdGlvbnMiLCJnZXRTaGFkZXJzIiwiaWQiLCJnZW9tZXRyeSIsImRyYXdNb2RlIiwiVFJJQU5HTEVfRkFOIiwiRmxvYXQzMkFycmF5IiwiaXNJbnN0YW5jZWQiLCJzaGFkZXJDYWNoZSIsImF0dHJpYnV0ZSIsImRhdGEiLCJ2YWx1ZSIsImkiLCJvYmplY3QiLCJwb2ludCIsImlzTmFOIiwicmVjdCIsImFuY2hvclgiLCJhbmNob3JZIiwiY29sb3JNb2RlIiwibWFzayIsInkiLCJsYXllck5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFRQSxLQUFSLFFBQW9CLGNBQXBCO0FBQ0EsU0FBUUMsRUFBUixFQUFZQyxLQUFaLEVBQW1CQyxRQUFuQixFQUE2QkMsU0FBN0IsRUFBd0NDLFlBQXhDLFFBQTJELFNBQTNEO0FBQ0EsU0FBUUMsT0FBUixFQUFpQkMsa0JBQWpCLFFBQTBDLHlC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O0FBQ0Q7QUFYb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVl0Qzs7OztFQWhOb0NyRixLOztlQUFsQmlDLFM7OztBQW1OckJBLFVBQVUyRSxTQUFWLEdBQXNCLFdBQXRCO0FBQ0EzRSxVQUFVaEIsWUFBVixHQUF5QkEsWUFBekIiLCJmaWxlIjoiaWNvbi1sYXllci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuaW1wb3J0IHtMYXllcn0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7R0wsIE1vZGVsLCBHZW9tZXRyeSwgVGV4dHVyZTJELCBsb2FkVGV4dHVyZXN9IGZyb20gJ2x1bWEuZ2wnO1xuaW1wb3J0IHtmcDY0aWZ5LCBlbmFibGU2NGJpdFN1cHBvcnR9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscy9mcDY0JztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmltcG9ydCB2cyBmcm9tICcuL2ljb24tbGF5ZXItdmVydGV4Lmdsc2wnO1xuaW1wb3J0IHZzNjQgZnJvbSAnLi9pY29uLWxheWVyLXZlcnRleC02NC5nbHNsJztcbmltcG9ydCBmcyBmcm9tICcuL2ljb24tbGF5ZXItZnJhZ21lbnQuZ2xzbCc7XG5cbmNvbnN0IERFRkFVTFRfQ09MT1IgPSBbMCwgMCwgMCwgMjU1XTtcbmNvbnN0IERFRkFVTFRfVEVYVFVSRV9NSU5fRklMVEVSID0gR0wuTElORUFSX01JUE1BUF9MSU5FQVI7XG4vLyBHTC5MSU5FQVIgaXMgdGhlIGRlZmF1bHQgdmFsdWUgYnV0IGV4cGxpY2l0bHkgc2V0IGl0IGhlcmVcbmNvbnN0IERFRkFVTFRfVEVYVFVSRV9NQUdfRklMVEVSID0gR0wuTElORUFSO1xuXG4vKlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge1RleHR1cmUyRCB8IHN0cmluZ30gcHJvcHMuaWNvbkF0bGFzIC0gYXRsYXMgaW1hZ2UgdXJsIG9yIHRleHR1cmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZyAtIGljb24gbmFtZXMgbWFwcGVkIHRvIGljb24gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLnggLSB4IHBvc2l0aW9uIG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS55IC0geSBwb3NpdGlvbiBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0ud2lkdGggLSB3aWR0aCBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0uaGVpZ2h0IC0gaGVpZ2h0IG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS5hbmNob3JYIC0geCBhbmNob3Igb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2UsXG4gKiAgIGRlZmF1bHQgdG8gd2lkdGggLyAyXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS5hbmNob3JZIC0geSBhbmNob3Igb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2UsXG4gKiAgIGRlZmF1bHQgdG8gaGVpZ2h0IC8gMlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0ubWFzayAtIHdoZXRoZXIgaWNvbiBpcyB0cmVhdGVkIGFzIGEgdHJhbnNwYXJlbmN5XG4gKiAgIG1hc2suIElmIHRydWUsIHVzZXIgZGVmaW5lZCBjb2xvciBpcyBhcHBsaWVkLiBJZiBmYWxzZSwgb3JpZ2luYWwgY29sb3IgZnJvbSB0aGUgaW1hZ2UgaXNcbiAqICAgYXBwbGllZC4gRGVmYXVsdCB0byBmYWxzZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wcy5zaXplIC0gaWNvbiBzaXplIGluIHBpeGVsc1xuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRQb3NpdGlvbiAtIHJldHVybnMgYW5jaG9yIHBvc2l0aW9uIG9mIHRoZSBpY29uLCBpbiBbbG5nLCBsYXQsIHpdXG4gKiBAcGFyYW0ge2Z1bmN9IHByb3BzLmdldEljb24gLSByZXR1cm5zIGljb24gbmFtZSBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRTaXplIC0gcmV0dXJucyBpY29uIHNpemUgbXVsdGlwbGllciBhcyBhIG51bWJlclxuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRDb2xvciAtIHJldHVybnMgY29sb3Igb2YgdGhlIGljb24gaW4gW3IsIGcsIGIsIGFdLiBPbmx5IHdvcmtzIG9uIGljb25zXG4gKiAgIHdpdGggbWFzazogdHJ1ZS5cbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0QW5nbGUgLSByZXR1cm5zIHJvdGF0aW5nIGFuZ2xlIChpbiBkZWdyZWUpIG9mIHRoZSBpY29uLlxuICovXG5jb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gIGljb25BdGxhczogbnVsbCxcbiAgaWNvbk1hcHBpbmc6IHt9LFxuICBzaXplU2NhbGU6IDEsXG4gIGZwNjQ6IGZhbHNlLFxuXG4gIGdldFBvc2l0aW9uOiB4ID0+IHgucG9zaXRpb24sXG4gIGdldEljb246IHggPT4geC5pY29uLFxuICBnZXRDb2xvcjogeCA9PiB4LmNvbG9yIHx8IERFRkFVTFRfQ09MT1IsXG4gIGdldFNpemU6IHggPT4geC5zaXplIHx8IDEsXG4gIGdldEFuZ2xlOiB4ID0+IHguYW5nbGUgfHwgMFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWNvbkxheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBnZXRTaGFkZXJzKCkge1xuICAgIHJldHVybiBlbmFibGU2NGJpdFN1cHBvcnQodGhpcy5wcm9wcykgP1xuICAgICAge3ZzOiB2czY0LCBmcywgbW9kdWxlczogWydwcm9qZWN0NjQnXX0gOlxuICAgICAge3ZzLCBmc307ICAvLyAncHJvamVjdCcgbW9kdWxlIGFkZGVkIGJ5IGRlZmF1bHQuXG4gIH1cblxuICBpbml0aWFsaXplU3RhdGUoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkSW5zdGFuY2VkKHtcbiAgICAgIGluc3RhbmNlUG9zaXRpb25zOiB7c2l6ZTogMywgYWNjZXNzb3I6ICdnZXRQb3NpdGlvbicsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uc30sXG4gICAgICBpbnN0YW5jZVNpemVzOiB7c2l6ZTogMSwgYWNjZXNzb3I6ICdnZXRTaXplJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlU2l6ZXN9LFxuICAgICAgaW5zdGFuY2VPZmZzZXRzOiB7c2l6ZTogMiwgYWNjZXNzb3I6ICdnZXRJY29uJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlT2Zmc2V0c30sXG4gICAgICBpbnN0YW5jZUljb25GcmFtZXM6IHtzaXplOiA0LCBhY2Nlc3NvcjogJ2dldEljb24nLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzfSxcbiAgICAgIGluc3RhbmNlQ29sb3JNb2Rlczoge3NpemU6IDEsIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsIGFjY2Vzc29yOiAnZ2V0SWNvbicsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZX0sXG4gICAgICBpbnN0YW5jZUNvbG9yczoge3NpemU6IDQsIHR5cGU6IEdMLlVOU0lHTkVEX0JZVEUsIGFjY2Vzc29yOiAnZ2V0Q29sb3InLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnN9LFxuICAgICAgaW5zdGFuY2VBbmdsZXM6IHtzaXplOiAxLCBhY2Nlc3NvcjogJ2dldEFuZ2xlJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzfVxuICAgIH0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7bW9kZWw6IHRoaXMuX2dldE1vZGVsKGdsKX0pO1xuICB9XG5cbiAgdXBkYXRlQXR0cmlidXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSkge1xuICAgIGlmIChwcm9wcy5mcDY0ICE9PSBvbGRQcm9wcy5mcDY0KSB7XG4gICAgICBjb25zdCB7YXR0cmlidXRlTWFuYWdlcn0gPSB0aGlzLnN0YXRlO1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5pbnZhbGlkYXRlQWxsKCk7XG5cbiAgICAgIGlmIChwcm9wcy5mcDY0ICYmIHByb3BzLnByb2plY3Rpb25Nb2RlID09PSBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQpIHtcbiAgICAgICAgYXR0cmlidXRlTWFuYWdlci5hZGRJbnN0YW5jZWQoe1xuICAgICAgICAgIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdzoge1xuICAgICAgICAgICAgc2l6ZTogMixcbiAgICAgICAgICAgIGFjY2Vzc29yOiAnZ2V0UG9zaXRpb24nLFxuICAgICAgICAgICAgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlUG9zaXRpb25zNjR4eUxvd1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdHRyaWJ1dGVNYW5hZ2VyLnJlbW92ZShbXG4gICAgICAgICAgJ2luc3RhbmNlUG9zaXRpb25zNjR4eUxvdydcbiAgICAgICAgXSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc30pIHtcbiAgICBzdXBlci51cGRhdGVTdGF0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pO1xuXG4gICAgY29uc3Qge2ljb25BdGxhcywgaWNvbk1hcHBpbmd9ID0gcHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMuaWNvbk1hcHBpbmcgIT09IGljb25NYXBwaW5nKSB7XG4gICAgICBjb25zdCB7YXR0cmlidXRlTWFuYWdlcn0gPSB0aGlzLnN0YXRlO1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5pbnZhbGlkYXRlKCdpbnN0YW5jZU9mZnNldHMnKTtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuaW52YWxpZGF0ZSgnaW5zdGFuY2VJY29uRnJhbWVzJyk7XG4gICAgICBhdHRyaWJ1dGVNYW5hZ2VyLmludmFsaWRhdGUoJ2luc3RhbmNlQ29sb3JNb2RlcycpO1xuICAgIH1cblxuICAgIGlmIChvbGRQcm9wcy5pY29uQXRsYXMgIT09IGljb25BdGxhcykge1xuXG4gICAgICBpZiAoaWNvbkF0bGFzIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XG4gICAgICAgIGljb25BdGxhcy5zZXRQYXJhbWV0ZXJzKHtcbiAgICAgICAgICBbR0wuVEVYVFVSRV9NSU5fRklMVEVSXTogREVGQVVMVF9URVhUVVJFX01JTl9GSUxURVIsXG4gICAgICAgICAgW0dMLlRFWFRVUkVfTUFHX0ZJTFRFUl06IERFRkFVTFRfVEVYVFVSRV9NQUdfRklMVEVSXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtpY29uc1RleHR1cmU6IGljb25BdGxhc30pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaWNvbkF0bGFzID09PSAnc3RyaW5nJykge1xuICAgICAgICBsb2FkVGV4dHVyZXModGhpcy5jb250ZXh0LmdsLCB7XG4gICAgICAgICAgdXJsczogW2ljb25BdGxhc11cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKFt0ZXh0dXJlXSkgPT4ge1xuICAgICAgICAgIHRleHR1cmUuc2V0UGFyYW1ldGVycyh7XG4gICAgICAgICAgICBbR0wuVEVYVFVSRV9NSU5fRklMVEVSXTogREVGQVVMVF9URVhUVVJFX01JTl9GSUxURVIsXG4gICAgICAgICAgICBbR0wuVEVYVFVSRV9NQUdfRklMVEVSXTogREVGQVVMVF9URVhUVVJFX01BR19GSUxURVJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtpY29uc1RleHR1cmU6IHRleHR1cmV9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmZwNjQgIT09IG9sZFByb3BzLmZwNjQpIHtcbiAgICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHttb2RlbDogdGhpcy5fZ2V0TW9kZWwoZ2wpfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQXR0cmlidXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzfSk7XG5cbiAgfVxuXG4gIGRyYXcoe3VuaWZvcm1zfSkge1xuICAgIGNvbnN0IHtzaXplU2NhbGV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7aWNvbnNUZXh0dXJlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBpZiAoaWNvbnNUZXh0dXJlKSB7XG4gICAgICB0aGlzLnN0YXRlLm1vZGVsLnJlbmRlcihPYmplY3QuYXNzaWduKHt9LCB1bmlmb3Jtcywge1xuICAgICAgICBpY29uc1RleHR1cmUsXG4gICAgICAgIGljb25zVGV4dHVyZURpbTogW2ljb25zVGV4dHVyZS53aWR0aCwgaWNvbnNUZXh0dXJlLmhlaWdodF0sXG4gICAgICAgIHNpemVTY2FsZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRNb2RlbChnbCkge1xuXG4gICAgY29uc3QgcG9zaXRpb25zID0gWy0xLCAtMSwgMCwgLTEsIDEsIDAsIDEsIDEsIDAsIDEsIC0xLCAwXTtcblxuICAgIHJldHVybiBuZXcgTW9kZWwoZ2wsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0U2hhZGVycygpLCB7XG4gICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgIGdlb21ldHJ5OiBuZXcgR2VvbWV0cnkoe1xuICAgICAgICBkcmF3TW9kZTogR0wuVFJJQU5HTEVfRkFOLFxuICAgICAgICBwb3NpdGlvbnM6IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zKVxuICAgICAgfSksXG4gICAgICBpc0luc3RhbmNlZDogdHJ1ZSxcbiAgICAgIHNoYWRlckNhY2hlOiB0aGlzLmNvbnRleHQuc2hhZGVyQ2FjaGVcbiAgICB9KSk7XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9ucyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0UG9zaXRpb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9uKG9iamVjdCk7XG4gICAgICB2YWx1ZVtpKytdID0gcG9zaXRpb25bMF07XG4gICAgICB2YWx1ZVtpKytdID0gcG9zaXRpb25bMV07XG4gICAgICB2YWx1ZVtpKytdID0gcG9zaXRpb25bMl0gfHwgMDtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3coYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldFBvc2l0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9uKHBvaW50KTtcbiAgICAgIHZhbHVlW2krK10gPSBmcDY0aWZ5KHBvc2l0aW9uWzBdKVsxXTtcbiAgICAgIHZhbHVlW2krK10gPSBmcDY0aWZ5KHBvc2l0aW9uWzFdKVsxXTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZVNpemVzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRTaXplfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgdmFsdWVbaSsrXSA9IGdldFNpemUob2JqZWN0KTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZUFuZ2xlcyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0QW5nbGV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICB2YWx1ZVtpKytdID0gZ2V0QW5nbGUob2JqZWN0KTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZUNvbG9ycyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0Q29sb3J9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBjb2xvciA9IGdldENvbG9yKG9iamVjdCk7XG5cbiAgICAgIHZhbHVlW2krK10gPSBjb2xvclswXTtcbiAgICAgIHZhbHVlW2krK10gPSBjb2xvclsxXTtcbiAgICAgIHZhbHVlW2krK10gPSBjb2xvclsyXTtcbiAgICAgIHZhbHVlW2krK10gPSBpc05hTihjb2xvclszXSkgPyAyNTUgOiBjb2xvclszXTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZU9mZnNldHMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGljb25NYXBwaW5nLCBnZXRJY29ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgaWNvbiA9IGdldEljb24ob2JqZWN0KTtcbiAgICAgIGNvbnN0IHJlY3QgPSBpY29uTWFwcGluZ1tpY29uXSB8fCB7fTtcbiAgICAgIHZhbHVlW2krK10gPSAocmVjdC53aWR0aCAvIDIgLSByZWN0LmFuY2hvclgpIHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gKHJlY3QuaGVpZ2h0IC8gMiAtIHJlY3QuYW5jaG9yWSkgfHwgMDtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZShhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgaWNvbk1hcHBpbmcsIGdldEljb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBpY29uID0gZ2V0SWNvbihvYmplY3QpO1xuICAgICAgY29uc3QgY29sb3JNb2RlID0gaWNvbk1hcHBpbmdbaWNvbl0gJiYgaWNvbk1hcHBpbmdbaWNvbl0ubWFzaztcbiAgICAgIHZhbHVlW2krK10gPSBjb2xvck1vZGUgPyAxIDogMDtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVJbnN0YW5jZUljb25GcmFtZXMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGljb25NYXBwaW5nLCBnZXRJY29ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgaWNvbiA9IGdldEljb24ob2JqZWN0KTtcbiAgICAgIGNvbnN0IHJlY3QgPSBpY29uTWFwcGluZ1tpY29uXSB8fCB7fTtcbiAgICAgIHZhbHVlW2krK10gPSByZWN0LnggfHwgMDtcbiAgICAgIHZhbHVlW2krK10gPSByZWN0LnkgfHwgMDtcbiAgICAgIHZhbHVlW2krK10gPSByZWN0LndpZHRoIHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC5oZWlnaHQgfHwgMDtcbiAgICB9XG4gIH1cbn1cblxuSWNvbkxheWVyLmxheWVyTmFtZSA9ICdJY29uTGF5ZXInO1xuSWNvbkxheWVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiJdfQ==

@@ -26,3 +26,3 @@ "use strict";

exports.default = "#define SHADER_NAME icon-layer-vertex-shader-64\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sqrt(1.0 - cos_angle * cos_angle);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n vec2 iconSize_clipspace = iconSize / viewportSize * 2.0;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // The vertex variable is in clip space and should not go through project_to_clipspace call\n vec2 vertex = (positions / 2.0 + instanceOffsets);\n vertex = rotate_by_angle(vertex, instanceAngles) * iconSize_clipspace *\n sizeScale * instanceScale;\n\n vertex.y *= -1.0;\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(instancePositions.z), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace) + vec4(vertex, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4LTY0Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJpY29uLWxheWVyLXZlcnRleC02NC5nbHNsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmV4cG9ydCBkZWZhdWx0IGBcXFxuI2RlZmluZSBTSEFERVJfTkFNRSBpY29uLWxheWVyLXZlcnRleC1zaGFkZXItNjRcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25zO1xuXG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBvc2l0aW9ucztcbmF0dHJpYnV0ZSB2ZWMyIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZVNpemVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQW5nbGVzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjNCBpbnN0YW5jZUljb25GcmFtZXM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VDb2xvck1vZGVzO1xuYXR0cmlidXRlIHZlYzIgaW5zdGFuY2VPZmZzZXRzO1xuXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplO1xudW5pZm9ybSBmbG9hdCBzaXplU2NhbGU7XG51bmlmb3JtIGZsb2F0IHJlbmRlclBpY2tpbmdCdWZmZXI7XG51bmlmb3JtIHZlYzIgaWNvbnNUZXh0dXJlRGltO1xuXG52YXJ5aW5nIGZsb2F0IHZDb2xvck1vZGU7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmRzO1xuXG52ZWMyIHJvdGF0ZV9ieV9hbmdsZSh2ZWMyIHZlcnRleCwgZmxvYXQgYW5nbGUpIHtcbiAgZmxvYXQgYW5nbGVfcmFkaWFuID0gYW5nbGUgKiBQSSAvIDE4MC4wO1xuICBmbG9hdCBjb3NfYW5nbGUgPSBjb3MoYW5nbGVfcmFkaWFuKTtcbiAgZmxvYXQgc2luX2FuZ2xlID0gc3FydCgxLjAgLSBjb3NfYW5nbGUgKiBjb3NfYW5nbGUpO1xuICBtYXQyIHJvdGF0aW9uTWF0cml4ID0gbWF0Mihjb3NfYW5nbGUsIC1zaW5fYW5nbGUsIHNpbl9hbmdsZSwgY29zX2FuZ2xlKTtcbiAgcmV0dXJuIHJvdGF0aW9uTWF0cml4ICogdmVydGV4O1xufVxuXG52b2lkIG1haW4odm9pZCkge1xuICB2ZWMyIGljb25TaXplID0gaW5zdGFuY2VJY29uRnJhbWVzLnp3O1xuICB2ZWMyIGljb25TaXplX2NsaXBzcGFjZSA9IGljb25TaXplIC8gdmlld3BvcnRTaXplICogMi4wO1xuICAvLyBzY2FsZSBpY29uIGhlaWdodCB0byBtYXRjaCBpbnN0YW5jZVNpemVcbiAgZmxvYXQgaW5zdGFuY2VTY2FsZSA9IGljb25TaXplLnkgPT0gMC4wID8gMC4wIDogaW5zdGFuY2VTaXplcyAvIGljb25TaXplLnk7XG5cbiAgLy8gVGhlIHZlcnRleCB2YXJpYWJsZSBpcyBpbiBjbGlwIHNwYWNlIGFuZCBzaG91bGQgbm90IGdvIHRocm91Z2ggcHJvamVjdF90b19jbGlwc3BhY2UgY2FsbFxuICB2ZWMyIHZlcnRleCA9IChwb3NpdGlvbnMgLyAyLjAgKyBpbnN0YW5jZU9mZnNldHMpO1xuICB2ZXJ0ZXggPSByb3RhdGVfYnlfYW5nbGUodmVydGV4LCBpbnN0YW5jZUFuZ2xlcykgKiBpY29uU2l6ZV9jbGlwc3BhY2UgKlxuICAgIHNpemVTY2FsZSAqIGluc3RhbmNlU2NhbGU7XG5cbiAgdmVydGV4LnkgKj0gLTEuMDtcblxuICB2ZWM0IGluc3RhbmNlUG9zaXRpb25zNjR4eSA9IHZlYzQoXG4gICAgaW5zdGFuY2VQb3NpdGlvbnMueCwgaW5zdGFuY2VQb3NpdGlvbnM2NHh5TG93LngsXG4gICAgaW5zdGFuY2VQb3NpdGlvbnMueSwgaW5zdGFuY2VQb3NpdGlvbnM2NHh5TG93LnkpO1xuXG4gIHZlYzIgcHJvamVjdGVkX2Nvb3JkX3h5WzJdO1xuICBwcm9qZWN0X3Bvc2l0aW9uX2ZwNjQoaW5zdGFuY2VQb3NpdGlvbnM2NHh5LCBwcm9qZWN0ZWRfY29vcmRfeHkpO1xuXG4gIHZlYzIgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzRdO1xuICB2ZXJ0ZXhfcG9zX21vZGVsc3BhY2VbMF0gPSBwcm9qZWN0ZWRfY29vcmRfeHlbMF07XG4gIHZlcnRleF9wb3NfbW9kZWxzcGFjZVsxXSA9IHByb2plY3RlZF9jb29yZF94eVsxXTtcbiAgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzJdID0gdmVjMihwcm9qZWN0X3NjYWxlKGluc3RhbmNlUG9zaXRpb25zLnopLCAwLjApO1xuICB2ZXJ0ZXhfcG9zX21vZGVsc3BhY2VbM10gPSB2ZWMyKDEuMCwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3RfdG9fY2xpcHNwYWNlX2ZwNjQodmVydGV4X3Bvc19tb2RlbHNwYWNlKSArIHZlYzQodmVydGV4LCAwLjAsIDAuMCk7XG5cbiAgdlRleHR1cmVDb29yZHMgPSBtaXgoXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5LFxuICAgIGluc3RhbmNlSWNvbkZyYW1lcy54eSArIGljb25TaXplLFxuICAgIChwb3NpdGlvbnMueHkgKyAxLjApIC8gMi4wXG4gICkgLyBpY29uc1RleHR1cmVEaW07XG5cbiAgdlRleHR1cmVDb29yZHMueSA9IDEuMCAtIHZUZXh0dXJlQ29vcmRzLnk7XG5cbiAgdmVjNCBjb2xvciA9IGluc3RhbmNlQ29sb3JzIC8gMjU1LjtcbiAgdmVjNCBwaWNraW5nQ29sb3IgPSB2ZWM0KGluc3RhbmNlUGlja2luZ0NvbG9ycyAvIDI1NS4sIDEuKTtcbiAgdkNvbG9yID0gbWl4KGNvbG9yLCBwaWNraW5nQ29sb3IsIHJlbmRlclBpY2tpbmdCdWZmZXIpO1xuXG4gIHZDb2xvck1vZGUgPSBpbnN0YW5jZUNvbG9yTW9kZXM7XG59XG5gO1xuIl19
exports.default = "#define SHADER_NAME icon-layer-vertex-shader-64\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute vec2 instancePositions64xyLow;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n// devicePixelRatio is set up as uniform but not declared in the shader function\nuniform float devicePixelRatio;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) / viewportSize * sizeScale *\n instanceScale * devicePixelRatio;\n pixelOffset.y *= -1.0;\n\n vec4 instancePositions64xy = vec4(\n instancePositions.x, instancePositions64xyLow.x,\n instancePositions.y, instancePositions64xyLow.y);\n\n vec2 projected_coord_xy[2];\n project_position_fp64(instancePositions64xy, projected_coord_xy);\n\n vec2 vertex_pos_modelspace[4];\n vertex_pos_modelspace[0] = projected_coord_xy[0];\n vertex_pos_modelspace[1] = projected_coord_xy[1];\n vertex_pos_modelspace[2] = vec2(project_scale(instancePositions.z), 0.0);\n vertex_pos_modelspace[3] = vec2(1.0, 0.0);\n\n gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace) + vec4(pixelOffset, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4LTY0Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJpY29uLWxheWVyLXZlcnRleC02NC5nbHNsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmV4cG9ydCBkZWZhdWx0IGBcXFxuI2RlZmluZSBTSEFERVJfTkFNRSBpY29uLWxheWVyLXZlcnRleC1zaGFkZXItNjRcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25zO1xuXG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBvc2l0aW9ucztcbmF0dHJpYnV0ZSB2ZWMyIGluc3RhbmNlUG9zaXRpb25zNjR4eUxvdztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZVNpemVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQW5nbGVzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjNCBpbnN0YW5jZUljb25GcmFtZXM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VDb2xvck1vZGVzO1xuYXR0cmlidXRlIHZlYzIgaW5zdGFuY2VPZmZzZXRzO1xuXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplO1xudW5pZm9ybSBmbG9hdCBzaXplU2NhbGU7XG51bmlmb3JtIGZsb2F0IHJlbmRlclBpY2tpbmdCdWZmZXI7XG51bmlmb3JtIHZlYzIgaWNvbnNUZXh0dXJlRGltO1xuLy8gZGV2aWNlUGl4ZWxSYXRpbyBpcyBzZXQgdXAgYXMgdW5pZm9ybSBidXQgbm90IGRlY2xhcmVkIGluIHRoZSBzaGFkZXIgZnVuY3Rpb25cbnVuaWZvcm0gZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbztcblxudmFyeWluZyBmbG9hdCB2Q29sb3JNb2RlO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkcztcblxudmVjMiByb3RhdGVfYnlfYW5nbGUodmVjMiB2ZXJ0ZXgsIGZsb2F0IGFuZ2xlKSB7XG4gIGZsb2F0IGFuZ2xlX3JhZGlhbiA9IGFuZ2xlICogUEkgLyAxODAuMDtcbiAgZmxvYXQgY29zX2FuZ2xlID0gY29zKGFuZ2xlX3JhZGlhbik7XG4gIGZsb2F0IHNpbl9hbmdsZSA9IHNpbihhbmdsZV9yYWRpYW4pO1xuICBtYXQyIHJvdGF0aW9uTWF0cml4ID0gbWF0Mihjb3NfYW5nbGUsIC1zaW5fYW5nbGUsIHNpbl9hbmdsZSwgY29zX2FuZ2xlKTtcbiAgcmV0dXJuIHJvdGF0aW9uTWF0cml4ICogdmVydGV4O1xufVxuXG52b2lkIG1haW4odm9pZCkge1xuICB2ZWMyIGljb25TaXplID0gaW5zdGFuY2VJY29uRnJhbWVzLnp3O1xuICAvLyBzY2FsZSBpY29uIGhlaWdodCB0byBtYXRjaCBpbnN0YW5jZVNpemVcbiAgZmxvYXQgaW5zdGFuY2VTY2FsZSA9IGljb25TaXplLnkgPT0gMC4wID8gMC4wIDogaW5zdGFuY2VTaXplcyAvIGljb25TaXplLnk7XG5cbiAgLy8gc2NhbGUgYW5kIHJvdGF0ZSB2ZXJ0ZXggaW4gXCJwaXhlbFwiIHZhbHVlIGFuZCBjb252ZXJ0IGJhY2sgdG8gZnJhY3Rpb24gaW4gY2xpcHNwYWNlXG4gIHZlYzIgcGl4ZWxPZmZzZXQgPSBwb3NpdGlvbnMgLyAyLjAgKiBpY29uU2l6ZSArIGluc3RhbmNlT2Zmc2V0cztcbiAgcGl4ZWxPZmZzZXQgPSByb3RhdGVfYnlfYW5nbGUocGl4ZWxPZmZzZXQsIGluc3RhbmNlQW5nbGVzKSAvIHZpZXdwb3J0U2l6ZSAqIHNpemVTY2FsZSAqXG4gICAgaW5zdGFuY2VTY2FsZSAqIGRldmljZVBpeGVsUmF0aW87XG4gIHBpeGVsT2Zmc2V0LnkgKj0gLTEuMDtcblxuICB2ZWM0IGluc3RhbmNlUG9zaXRpb25zNjR4eSA9IHZlYzQoXG4gICAgaW5zdGFuY2VQb3NpdGlvbnMueCwgaW5zdGFuY2VQb3NpdGlvbnM2NHh5TG93LngsXG4gICAgaW5zdGFuY2VQb3NpdGlvbnMueSwgaW5zdGFuY2VQb3NpdGlvbnM2NHh5TG93LnkpO1xuXG4gIHZlYzIgcHJvamVjdGVkX2Nvb3JkX3h5WzJdO1xuICBwcm9qZWN0X3Bvc2l0aW9uX2ZwNjQoaW5zdGFuY2VQb3NpdGlvbnM2NHh5LCBwcm9qZWN0ZWRfY29vcmRfeHkpO1xuXG4gIHZlYzIgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzRdO1xuICB2ZXJ0ZXhfcG9zX21vZGVsc3BhY2VbMF0gPSBwcm9qZWN0ZWRfY29vcmRfeHlbMF07XG4gIHZlcnRleF9wb3NfbW9kZWxzcGFjZVsxXSA9IHByb2plY3RlZF9jb29yZF94eVsxXTtcbiAgdmVydGV4X3Bvc19tb2RlbHNwYWNlWzJdID0gdmVjMihwcm9qZWN0X3NjYWxlKGluc3RhbmNlUG9zaXRpb25zLnopLCAwLjApO1xuICB2ZXJ0ZXhfcG9zX21vZGVsc3BhY2VbM10gPSB2ZWMyKDEuMCwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3RfdG9fY2xpcHNwYWNlX2ZwNjQodmVydGV4X3Bvc19tb2RlbHNwYWNlKSArIHZlYzQocGl4ZWxPZmZzZXQsIDAuMCwgMC4wKTtcblxuICB2VGV4dHVyZUNvb3JkcyA9IG1peChcbiAgICBpbnN0YW5jZUljb25GcmFtZXMueHksXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5ICsgaWNvblNpemUsXG4gICAgKHBvc2l0aW9ucy54eSArIDEuMCkgLyAyLjBcbiAgKSAvIGljb25zVGV4dHVyZURpbTtcblxuICB2VGV4dHVyZUNvb3Jkcy55ID0gMS4wIC0gdlRleHR1cmVDb29yZHMueTtcblxuICB2ZWM0IGNvbG9yID0gaW5zdGFuY2VDb2xvcnMgLyAyNTUuO1xuICB2ZWM0IHBpY2tpbmdDb2xvciA9IHZlYzQoaW5zdGFuY2VQaWNraW5nQ29sb3JzIC8gMjU1LiwgMS4pO1xuICB2Q29sb3IgPSBtaXgoY29sb3IsIHBpY2tpbmdDb2xvciwgcmVuZGVyUGlja2luZ0J1ZmZlcik7XG5cbiAgdkNvbG9yTW9kZSA9IGluc3RhbmNlQ29sb3JNb2Rlcztcbn1cbmA7XG4iXX0=

@@ -26,3 +26,3 @@ "use strict";

exports.default = "#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n vec2 iconSize_clipspace = iconSize / viewportSize * 2.0;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n vec3 center = project_position(instancePositions);\n vec2 vertex = (positions / 2.0 + instanceOffsets);\n vertex = rotate_by_angle(vertex, instanceAngles) * iconSize_clipspace *\n sizeScale * instanceScale;\n vertex.y *= -1.0;\n\n gl_Position = project_to_clipspace(vec4(center, 1.0)) + vec4(vertex, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJpY29uLWxheWVyLXZlcnRleC5nbHNsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmV4cG9ydCBkZWZhdWx0IGBcXFxuI2RlZmluZSBTSEFERVJfTkFNRSBpY29uLWxheWVyLXZlcnRleC1zaGFkZXJcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25zO1xuXG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBvc2l0aW9ucztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZVNpemVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQW5nbGVzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjNCBpbnN0YW5jZUljb25GcmFtZXM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VDb2xvck1vZGVzO1xuYXR0cmlidXRlIHZlYzIgaW5zdGFuY2VPZmZzZXRzO1xuXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplO1xudW5pZm9ybSBmbG9hdCBzaXplU2NhbGU7XG51bmlmb3JtIGZsb2F0IHJlbmRlclBpY2tpbmdCdWZmZXI7XG51bmlmb3JtIHZlYzIgaWNvbnNUZXh0dXJlRGltO1xuXG52YXJ5aW5nIGZsb2F0IHZDb2xvck1vZGU7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xudmFyeWluZyB2ZWMyIHZUZXh0dXJlQ29vcmRzO1xuXG52ZWMyIHJvdGF0ZV9ieV9hbmdsZSh2ZWMyIHZlcnRleCwgZmxvYXQgYW5nbGUpIHtcbiAgZmxvYXQgYW5nbGVfcmFkaWFuID0gYW5nbGUgKiBQSSAvIDE4MC4wO1xuICBmbG9hdCBjb3NfYW5nbGUgPSBjb3MoYW5nbGVfcmFkaWFuKTtcbiAgZmxvYXQgc2luX2FuZ2xlID0gc2luKGFuZ2xlX3JhZGlhbik7XG4gIG1hdDIgcm90YXRpb25NYXRyaXggPSBtYXQyKGNvc19hbmdsZSwgLXNpbl9hbmdsZSwgc2luX2FuZ2xlLCBjb3NfYW5nbGUpO1xuICByZXR1cm4gcm90YXRpb25NYXRyaXggKiB2ZXJ0ZXg7XG59XG5cbnZvaWQgbWFpbih2b2lkKSB7XG4gIHZlYzIgaWNvblNpemUgPSBpbnN0YW5jZUljb25GcmFtZXMuenc7XG4gIHZlYzIgaWNvblNpemVfY2xpcHNwYWNlID0gaWNvblNpemUgLyB2aWV3cG9ydFNpemUgKiAyLjA7XG4gIC8vIHNjYWxlIGljb24gaGVpZ2h0IHRvIG1hdGNoIGluc3RhbmNlU2l6ZVxuICBmbG9hdCBpbnN0YW5jZVNjYWxlID0gaWNvblNpemUueSA9PSAwLjAgPyAwLjAgOiBpbnN0YW5jZVNpemVzIC8gaWNvblNpemUueTtcbiAgdmVjMyBjZW50ZXIgPSBwcm9qZWN0X3Bvc2l0aW9uKGluc3RhbmNlUG9zaXRpb25zKTtcbiAgdmVjMiB2ZXJ0ZXggPSAocG9zaXRpb25zIC8gMi4wICsgaW5zdGFuY2VPZmZzZXRzKTtcbiAgdmVydGV4ID0gcm90YXRlX2J5X2FuZ2xlKHZlcnRleCwgaW5zdGFuY2VBbmdsZXMpICogaWNvblNpemVfY2xpcHNwYWNlICpcbiAgICBzaXplU2NhbGUgKiBpbnN0YW5jZVNjYWxlO1xuICB2ZXJ0ZXgueSAqPSAtMS4wO1xuXG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdF90b19jbGlwc3BhY2UodmVjNChjZW50ZXIsIDEuMCkpICsgdmVjNCh2ZXJ0ZXgsIDAuMCwgMC4wKTtcblxuICB2VGV4dHVyZUNvb3JkcyA9IG1peChcbiAgICBpbnN0YW5jZUljb25GcmFtZXMueHksXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5ICsgaWNvblNpemUsXG4gICAgKHBvc2l0aW9ucy54eSArIDEuMCkgLyAyLjBcbiAgKSAvIGljb25zVGV4dHVyZURpbTtcblxuICB2VGV4dHVyZUNvb3Jkcy55ID0gMS4wIC0gdlRleHR1cmVDb29yZHMueTtcblxuICB2ZWM0IGNvbG9yID0gaW5zdGFuY2VDb2xvcnMgLyAyNTUuO1xuICB2ZWM0IHBpY2tpbmdDb2xvciA9IHZlYzQoaW5zdGFuY2VQaWNraW5nQ29sb3JzIC8gMjU1LiwgMS4pO1xuICB2Q29sb3IgPSBtaXgoY29sb3IsIHBpY2tpbmdDb2xvciwgcmVuZGVyUGlja2luZ0J1ZmZlcik7XG5cbiAgdkNvbG9yTW9kZSA9IGluc3RhbmNlQ29sb3JNb2Rlcztcbn1cbmA7XG4iXX0=
exports.default = "#define SHADER_NAME icon-layer-vertex-shader\n\nattribute vec2 positions;\n\nattribute vec3 instancePositions;\nattribute float instanceSizes;\nattribute float instanceAngles;\nattribute vec4 instanceColors;\nattribute vec3 instancePickingColors;\nattribute vec4 instanceIconFrames;\nattribute float instanceColorModes;\nattribute vec2 instanceOffsets;\n\nuniform vec2 viewportSize;\nuniform float sizeScale;\nuniform float renderPickingBuffer;\nuniform vec2 iconsTextureDim;\n// devicePixelRatio is set up as uniform but not declared in the shader function\nuniform float devicePixelRatio;\n\nvarying float vColorMode;\nvarying vec4 vColor;\nvarying vec2 vTextureCoords;\n\nvec2 rotate_by_angle(vec2 vertex, float angle) {\n float angle_radian = angle * PI / 180.0;\n float cos_angle = cos(angle_radian);\n float sin_angle = sin(angle_radian);\n mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);\n return rotationMatrix * vertex;\n}\n\nvoid main(void) {\n vec2 iconSize = instanceIconFrames.zw;\n // scale icon height to match instanceSize\n float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;\n\n // scale and rotate vertex in \"pixel\" value and convert back to fraction in clipspace\n vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;\n pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) / viewportSize * sizeScale *\n instanceScale * devicePixelRatio;\n pixelOffset.y *= -1.0;\n\n vec3 center = project_position(instancePositions);\n gl_Position = project_to_clipspace(vec4(center, 1.0)) + vec4(pixelOffset, 0.0, 0.0);\n\n vTextureCoords = mix(\n instanceIconFrames.xy,\n instanceIconFrames.xy + iconSize,\n (positions.xy + 1.0) / 2.0\n ) / iconsTextureDim;\n\n vTextureCoords.y = 1.0 - vTextureCoords.y;\n\n vec4 color = instanceColors / 255.;\n vec4 pickingColor = vec4(instancePickingColors / 255., 1.);\n vColor = mix(color, pickingColor, renderPickingBuffer);\n\n vColorMode = instanceColorModes;\n}\n";
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXItdmVydGV4Lmdsc2wuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJpY29uLWxheWVyLXZlcnRleC5nbHNsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxNyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmV4cG9ydCBkZWZhdWx0IGBcXFxuI2RlZmluZSBTSEFERVJfTkFNRSBpY29uLWxheWVyLXZlcnRleC1zaGFkZXJcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25zO1xuXG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBvc2l0aW9ucztcbmF0dHJpYnV0ZSBmbG9hdCBpbnN0YW5jZVNpemVzO1xuYXR0cmlidXRlIGZsb2F0IGluc3RhbmNlQW5nbGVzO1xuYXR0cmlidXRlIHZlYzQgaW5zdGFuY2VDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZVBpY2tpbmdDb2xvcnM7XG5hdHRyaWJ1dGUgdmVjNCBpbnN0YW5jZUljb25GcmFtZXM7XG5hdHRyaWJ1dGUgZmxvYXQgaW5zdGFuY2VDb2xvck1vZGVzO1xuYXR0cmlidXRlIHZlYzIgaW5zdGFuY2VPZmZzZXRzO1xuXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplO1xudW5pZm9ybSBmbG9hdCBzaXplU2NhbGU7XG51bmlmb3JtIGZsb2F0IHJlbmRlclBpY2tpbmdCdWZmZXI7XG51bmlmb3JtIHZlYzIgaWNvbnNUZXh0dXJlRGltO1xuLy8gZGV2aWNlUGl4ZWxSYXRpbyBpcyBzZXQgdXAgYXMgdW5pZm9ybSBidXQgbm90IGRlY2xhcmVkIGluIHRoZSBzaGFkZXIgZnVuY3Rpb25cbnVuaWZvcm0gZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbztcblxudmFyeWluZyBmbG9hdCB2Q29sb3JNb2RlO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcbnZhcnlpbmcgdmVjMiB2VGV4dHVyZUNvb3JkcztcblxudmVjMiByb3RhdGVfYnlfYW5nbGUodmVjMiB2ZXJ0ZXgsIGZsb2F0IGFuZ2xlKSB7XG4gIGZsb2F0IGFuZ2xlX3JhZGlhbiA9IGFuZ2xlICogUEkgLyAxODAuMDtcbiAgZmxvYXQgY29zX2FuZ2xlID0gY29zKGFuZ2xlX3JhZGlhbik7XG4gIGZsb2F0IHNpbl9hbmdsZSA9IHNpbihhbmdsZV9yYWRpYW4pO1xuICBtYXQyIHJvdGF0aW9uTWF0cml4ID0gbWF0Mihjb3NfYW5nbGUsIC1zaW5fYW5nbGUsIHNpbl9hbmdsZSwgY29zX2FuZ2xlKTtcbiAgcmV0dXJuIHJvdGF0aW9uTWF0cml4ICogdmVydGV4O1xufVxuXG52b2lkIG1haW4odm9pZCkge1xuICB2ZWMyIGljb25TaXplID0gaW5zdGFuY2VJY29uRnJhbWVzLnp3O1xuICAvLyBzY2FsZSBpY29uIGhlaWdodCB0byBtYXRjaCBpbnN0YW5jZVNpemVcbiAgZmxvYXQgaW5zdGFuY2VTY2FsZSA9IGljb25TaXplLnkgPT0gMC4wID8gMC4wIDogaW5zdGFuY2VTaXplcyAvIGljb25TaXplLnk7XG5cbiAgLy8gc2NhbGUgYW5kIHJvdGF0ZSB2ZXJ0ZXggaW4gXCJwaXhlbFwiIHZhbHVlIGFuZCBjb252ZXJ0IGJhY2sgdG8gZnJhY3Rpb24gaW4gY2xpcHNwYWNlXG4gIHZlYzIgcGl4ZWxPZmZzZXQgPSBwb3NpdGlvbnMgLyAyLjAgKiBpY29uU2l6ZSArIGluc3RhbmNlT2Zmc2V0cztcbiAgcGl4ZWxPZmZzZXQgPSByb3RhdGVfYnlfYW5nbGUocGl4ZWxPZmZzZXQsIGluc3RhbmNlQW5nbGVzKSAvIHZpZXdwb3J0U2l6ZSAqIHNpemVTY2FsZSAqXG4gICAgaW5zdGFuY2VTY2FsZSAqIGRldmljZVBpeGVsUmF0aW87XG4gIHBpeGVsT2Zmc2V0LnkgKj0gLTEuMDtcblxuICB2ZWMzIGNlbnRlciA9IHByb2plY3RfcG9zaXRpb24oaW5zdGFuY2VQb3NpdGlvbnMpO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3RfdG9fY2xpcHNwYWNlKHZlYzQoY2VudGVyLCAxLjApKSArIHZlYzQocGl4ZWxPZmZzZXQsIDAuMCwgMC4wKTtcblxuICB2VGV4dHVyZUNvb3JkcyA9IG1peChcbiAgICBpbnN0YW5jZUljb25GcmFtZXMueHksXG4gICAgaW5zdGFuY2VJY29uRnJhbWVzLnh5ICsgaWNvblNpemUsXG4gICAgKHBvc2l0aW9ucy54eSArIDEuMCkgLyAyLjBcbiAgKSAvIGljb25zVGV4dHVyZURpbTtcblxuICB2VGV4dHVyZUNvb3Jkcy55ID0gMS4wIC0gdlRleHR1cmVDb29yZHMueTtcblxuICB2ZWM0IGNvbG9yID0gaW5zdGFuY2VDb2xvcnMgLyAyNTUuO1xuICB2ZWM0IHBpY2tpbmdDb2xvciA9IHZlYzQoaW5zdGFuY2VQaWNraW5nQ29sb3JzIC8gMjU1LiwgMS4pO1xuICB2Q29sb3IgPSBtaXgoY29sb3IsIHBpY2tpbmdDb2xvciwgcmVuZGVyUGlja2luZ0J1ZmZlcik7XG5cbiAgdkNvbG9yTW9kZSA9IGluc3RhbmNlQ29sb3JNb2Rlcztcbn1cbmA7XG4iXX0=

@@ -33,2 +33,4 @@ 'use strict';

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

@@ -60,2 +62,5 @@

var DEFAULT_COLOR = [0, 0, 0, 255];
var DEFAULT_TEXTURE_MIN_FILTER = _luma.GL.LINEAR_MIPMAP_LINEAR;
// GL.LINEAR is the default value but explicitly set it here
var DEFAULT_TEXTURE_MAG_FILTER = _luma.GL.LINEAR;

@@ -194,2 +199,5 @@ /*

if (iconAtlas instanceof _luma.Texture2D) {
var _iconAtlas$setParamet;
iconAtlas.setParameters((_iconAtlas$setParamet = {}, _defineProperty(_iconAtlas$setParamet, _luma.GL.TEXTURE_MIN_FILTER, DEFAULT_TEXTURE_MIN_FILTER), _defineProperty(_iconAtlas$setParamet, _luma.GL.TEXTURE_MAG_FILTER, DEFAULT_TEXTURE_MAG_FILTER), _iconAtlas$setParamet));
this.setState({ iconsTexture: iconAtlas });

@@ -200,5 +208,8 @@ } else if (typeof iconAtlas === 'string') {

}).then(function (_ref3) {
var _texture$setParameter;
var _ref4 = _slicedToArray(_ref3, 1),
texture = _ref4[0];
texture.setParameters((_texture$setParameter = {}, _defineProperty(_texture$setParameter, _luma.GL.TEXTURE_MIN_FILTER, DEFAULT_TEXTURE_MIN_FILTER), _defineProperty(_texture$setParameter, _luma.GL.TEXTURE_MAG_FILTER, DEFAULT_TEXTURE_MAG_FILTER), _texture$setParameter));
_this2.setState({ iconsTexture: texture });

@@ -448,4 +459,4 @@ });

var rect = iconMapping[icon] || {};
value[i++] = 1 / 2 - rect.anchorX / rect.width || 0;
value[i++] = 1 / 2 - rect.anchorY / rect.height || 0;
value[i++] = rect.width / 2 - rect.anchorX || 0;
value[i++] = rect.height / 2 - rect.anchorY || 0;
}

@@ -554,2 +565,2 @@ } catch (err) {

IconLayer.defaultProps = defaultProps;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXIuanMiXSwibmFtZXMiOlsiREVGQVVMVF9DT0xPUiIsImRlZmF1bHRQcm9wcyIsImljb25BdGxhcyIsImljb25NYXBwaW5nIiwic2l6ZVNjYWxlIiwiZnA2NCIsImdldFBvc2l0aW9uIiwieCIsInBvc2l0aW9uIiwiZ2V0SWNvbiIsImljb24iLCJnZXRDb2xvciIsImNvbG9yIiwiZ2V0U2l6ZSIsInNpemUiLCJnZXRBbmdsZSIsImFuZ2xlIiwiSWNvbkxheWVyIiwicHJvcHMiLCJ2cyIsImZzIiwibW9kdWxlcyIsImF0dHJpYnV0ZU1hbmFnZXIiLCJzdGF0ZSIsImdsIiwiY29udGV4dCIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlUG9zaXRpb25zIiwiYWNjZXNzb3IiLCJ1cGRhdGUiLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9ucyIsImluc3RhbmNlU2l6ZXMiLCJjYWxjdWxhdGVJbnN0YW5jZVNpemVzIiwiaW5zdGFuY2VPZmZzZXRzIiwiY2FsY3VsYXRlSW5zdGFuY2VPZmZzZXRzIiwiaW5zdGFuY2VJY29uRnJhbWVzIiwiY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzIiwiaW5zdGFuY2VDb2xvck1vZGVzIiwidHlwZSIsIlVOU0lHTkVEX0JZVEUiLCJjYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZSIsImluc3RhbmNlQ29sb3JzIiwiY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnMiLCJpbnN0YW5jZUFuZ2xlcyIsImNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzIiwic2V0U3RhdGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJpbnZhbGlkYXRlQWxsIiwicHJvamVjdGlvbk1vZGUiLCJMTkdMQVQiLCJpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJyZW1vdmUiLCJpbnZhbGlkYXRlIiwiaWNvbnNUZXh0dXJlIiwidXJscyIsInRoZW4iLCJ0ZXh0dXJlIiwidXBkYXRlQXR0cmlidXRlIiwidW5pZm9ybXMiLCJyZW5kZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpY29uc1RleHR1cmVEaW0iLCJ3aWR0aCIsImhlaWdodCIsInBvc2l0aW9ucyIsImdldFNoYWRlcnMiLCJpZCIsImdlb21ldHJ5IiwiZHJhd01vZGUiLCJUUklBTkdMRV9GQU4iLCJGbG9hdDMyQXJyYXkiLCJpc0luc3RhbmNlZCIsInNoYWRlckNhY2hlIiwiYXR0cmlidXRlIiwiZGF0YSIsInZhbHVlIiwiaSIsIm9iamVjdCIsInBvaW50IiwiaXNOYU4iLCJyZWN0IiwiYW5jaG9yWCIsImFuY2hvclkiLCJjb2xvck1vZGUiLCJtYXNrIiwieSIsImxheWVyTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBbUJBOztBQUNBOztBQUNBOztBQUdBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7OzsrZUExQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQVVBLElBQU1BLGdCQUFnQixDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLEdBQVYsQ0FBdEI7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLElBQU1DLGVBQWU7QUFDbkJDLGFBQVcsSUFEUTtBQUVuQkMsZUFBYSxFQUZNO0FBR25CQyxhQUFXLENBSFE7QUFJbkJDLFFBQU0sS0FKYTs7QUFNbkJDLGVBQWE7QUFBQSxXQUFLQyxFQUFFQyxRQUFQO0FBQUEsR0FOTTtBQU9uQkMsV0FBUztBQUFBLFdBQUtGLEVBQUVHLElBQVA7QUFBQSxHQVBVO0FBUW5CQyxZQUFVO0FBQUEsV0FBS0osRUFBRUssS0FBRixJQUFXWixhQUFoQjtBQUFBLEdBUlM7QUFTbkJhLFdBQVM7QUFBQSxXQUFLTixFQUFFTyxJQUFGLElB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QUtLLENBQUwsSUFBVSxDQUF2QjtBQUNBVixnQkFBTUMsR0FBTixJQUFhSSxLQUFLbEIsS0FBTCxJQUFjLENBQTNCO0FBQ0FhLGdCQUFNQyxHQUFOLElBQWFJLEtBQUtqQixNQUFMLElBQWUsQ0FBNUI7QUFDRDtBQVhvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWXRDOzs7Ozs7a0JBeE1rQm5ELFM7OztBQTJNckJBLFVBQVUwRSxTQUFWLEdBQXNCLFdBQXRCO0FBQ0ExRSxVQUFVaEIsWUFBVixHQUF5QkEsWUFBekIiLCJmaWxlIjoiaWNvbi1sYXllci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTcgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuaW1wb3J0IHtMYXllcn0gZnJvbSAnLi4vLi4vLi4vbGliJztcbmltcG9ydCB7R0wsIE1vZGVsLCBHZW9tZXRyeSwgVGV4dHVyZTJELCBsb2FkVGV4dHVyZXN9IGZyb20gJ2x1bWEuZ2wnO1xuaW1wb3J0IHtmcDY0aWZ5LCBlbmFibGU2NGJpdFN1cHBvcnR9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscy9mcDY0JztcbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJy4uLy4uLy4uL2xpYic7XG5cbmltcG9ydCB2cyBmcm9tICcuL2ljb24tbGF5ZXItdmVydGV4Lmdsc2wnO1xuaW1wb3J0IHZzNjQgZnJvbSAnLi9pY29uLWxheWVyLXZlcnRleC02NC5nbHNsJztcbmltcG9ydCBmcyBmcm9tICcuL2ljb24tbGF5ZXItZnJhZ21lbnQuZ2xzbCc7XG5cbmNvbnN0IERFRkFVTFRfQ09MT1IgPSBbMCwgMCwgMCwgMjU1XTtcblxuLypcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtUZXh0dXJlMkQgfCBzdHJpbmd9IHByb3BzLmljb25BdGxhcyAtIGF0bGFzIGltYWdlIHVybCBvciB0ZXh0dXJlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmcgLSBpY29uIG5hbWVzIG1hcHBlZCB0byBpY29uIGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS54IC0geCBwb3NpdGlvbiBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0ueSAtIHkgcG9zaXRpb24gb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLndpZHRoIC0gd2lkdGggb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLmhlaWdodCAtIGhlaWdodCBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0uYW5jaG9yWCAtIHggYW5jaG9yIG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlLFxuICogICBkZWZhdWx0IHRvIHdpZHRoIC8gMlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0uYW5jaG9yWSAtIHkgYW5jaG9yIG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlLFxuICogICBkZWZhdWx0IHRvIGhlaWdodCAvIDJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLm1hc2sgLSB3aGV0aGVyIGljb24gaXMgdHJlYXRlZCBhcyBhIHRyYW5zcGFyZW5jeVxuICogICBtYXNrLiBJZiB0cnVlLCB1c2VyIGRlZmluZWQgY29sb3IgaXMgYXBwbGllZC4gSWYgZmFsc2UsIG9yaWdpbmFsIGNvbG9yIGZyb20gdGhlIGltYWdlIGlzXG4gKiAgIGFwcGxpZWQuIERlZmF1bHQgdG8gZmFsc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMuc2l6ZSAtIGljb24gc2l6ZSBpbiBwaXhlbHNcbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0UG9zaXRpb24gLSByZXR1cm5zIGFuY2hvciBwb3NpdGlvbiBvZiB0aGUgaWNvbiwgaW4gW2xuZywgbGF0LCB6XVxuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRJY29uIC0gcmV0dXJucyBpY29uIG5hbWUgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0U2l6ZSAtIHJldHVybnMgaWNvbiBzaXplIG11bHRpcGxpZXIgYXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0Q29sb3IgLSByZXR1cm5zIGNvbG9yIG9mIHRoZSBpY29uIGluIFtyLCBnLCBiLCBhXS4gT25seSB3b3JrcyBvbiBpY29uc1xuICogICB3aXRoIG1hc2s6IHRydWUuXG4gKiBAcGFyYW0ge2Z1bmN9IHByb3BzLmdldEFuZ2xlIC0gcmV0dXJucyByb3RhdGluZyBhbmdsZSAoaW4gZGVncmVlKSBvZiB0aGUgaWNvbi5cbiAqL1xuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBpY29uQXRsYXM6IG51bGwsXG4gIGljb25NYXBwaW5nOiB7fSxcbiAgc2l6ZVNjYWxlOiAxLFxuICBmcDY0OiBmYWxzZSxcblxuICBnZXRQb3NpdGlvbjogeCA9PiB4LnBvc2l0aW9uLFxuICBnZXRJY29uOiB4ID0+IHguaWNvbixcbiAgZ2V0Q29sb3I6IHggPT4geC5jb2xvciB8fCBERUZBVUxUX0NPTE9SLFxuICBnZXRTaXplOiB4ID0+IHguc2l6ZSB8fCAxLFxuICBnZXRBbmdsZTogeCA9PiB4LmFuZ2xlIHx8IDBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEljb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICByZXR1cm4gZW5hYmxlNjRiaXRTdXBwb3J0KHRoaXMucHJvcHMpID9cbiAgICAgIHt2czogdnM2NCwgZnMsIG1vZHVsZXM6IFsncHJvamVjdDY0J119IDpcbiAgICAgIHt2cywgZnN9OyAgLy8gJ3Byb2plY3QnIG1vZHVsZSBhZGRlZCBieSBkZWZhdWx0LlxuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGVNYW5hZ2VyfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVBvc2l0aW9uczoge3NpemU6IDMsIGFjY2Vzc29yOiAnZ2V0UG9zaXRpb24nLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VQb3NpdGlvbnN9LFxuICAgICAgaW5zdGFuY2VTaXplczoge3NpemU6IDEsIGFjY2Vzc29yOiAnZ2V0U2l6ZScsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZVNpemVzfSxcbiAgICAgIGluc3RhbmNlT2Zmc2V0czoge3NpemU6IDIsIGFjY2Vzc29yOiAnZ2V0SWNvbicsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZU9mZnNldHN9LFxuICAgICAgaW5zdGFuY2VJY29uRnJhbWVzOiB7c2l6ZTogNCwgYWNjZXNzb3I6ICdnZXRJY29uJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlSWNvbkZyYW1lc30sXG4gICAgICBpbnN0YW5jZUNvbG9yTW9kZXM6IHtzaXplOiAxLCB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLCBhY2Nlc3NvcjogJ2dldEljb24nLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VDb2xvck1vZGV9LFxuICAgICAgaW5zdGFuY2VDb2xvcnM6IHtzaXplOiA0LCB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLCBhY2Nlc3NvcjogJ2dldENvbG9yJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlQ29sb3JzfSxcbiAgICAgIGluc3RhbmNlQW5nbGVzOiB7c2l6ZTogMSwgYWNjZXNzb3I6ICdnZXRBbmdsZScsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZUFuZ2xlc31cbiAgICB9KTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuICAgIHRoaXMuc2V0U3RhdGUoe21vZGVsOiB0aGlzLl9nZXRNb2RlbChnbCl9KTtcbiAgfVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pIHtcbiAgICBpZiAocHJvcHMuZnA2NCAhPT0gb2xkUHJvcHMuZnA2NCkge1xuICAgICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuaW52YWxpZGF0ZUFsbCgpO1xuXG4gICAgICBpZiAocHJvcHMuZnA2NCAmJiBwcm9wcy5wcm9qZWN0aW9uTW9kZSA9PT0gQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUKSB7XG4gICAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkSW5zdGFuY2VkKHtcbiAgICAgICAgICBpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3c6IHtcbiAgICAgICAgICAgIHNpemU6IDIsXG4gICAgICAgICAgICBhY2Nlc3NvcjogJ2dldFBvc2l0aW9uJyxcbiAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3dcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlTWFuYWdlci5yZW1vdmUoW1xuICAgICAgICAgICdpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3cnXG4gICAgICAgIF0pO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RhdGUoe29sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3N9KSB7XG4gICAgc3VwZXIudXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3N9KTtcblxuICAgIGNvbnN0IHtpY29uQXRsYXMsIGljb25NYXBwaW5nfSA9IHByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzLmljb25NYXBwaW5nICE9PSBpY29uTWFwcGluZykge1xuICAgICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuaW52YWxpZGF0ZSgnaW5zdGFuY2VPZmZzZXRzJyk7XG4gICAgICBhdHRyaWJ1dGVNYW5hZ2VyLmludmFsaWRhdGUoJ2luc3RhbmNlSWNvbkZyYW1lcycpO1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5pbnZhbGlkYXRlKCdpbnN0YW5jZUNvbG9yTW9kZXMnKTtcbiAgICB9XG5cbiAgICBpZiAob2xkUHJvcHMuaWNvbkF0bGFzICE9PSBpY29uQXRsYXMpIHtcblxuICAgICAgaWYgKGljb25BdGxhcyBpbnN0YW5jZW9mIFRleHR1cmUyRCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtpY29uc1RleHR1cmU6IGljb25BdGxhc30pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaWNvbkF0bGFzID09PSAnc3RyaW5nJykge1xuICAgICAgICBsb2FkVGV4dHVyZXModGhpcy5jb250ZXh0LmdsLCB7XG4gICAgICAgICAgdXJsczogW2ljb25BdGxhc11cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKFt0ZXh0dXJlXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2ljb25zVGV4dHVyZTogdGV4dHVyZX0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZnA2NCAhPT0gb2xkUHJvcHMuZnA2NCkge1xuICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe21vZGVsOiB0aGlzLl9nZXRNb2RlbChnbCl9KTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVBdHRyaWJ1dGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3N9KTtcblxuICB9XG5cbiAgZHJhdyh7dW5pZm9ybXN9KSB7XG4gICAgY29uc3Qge3NpemVTY2FsZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtpY29uc1RleHR1cmV9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGlmIChpY29uc1RleHR1cmUpIHtcbiAgICAgIHRoaXMuc3RhdGUubW9kZWwucmVuZGVyKE9iamVjdC5hc3NpZ24oe30sIHVuaWZvcm1zLCB7XG4gICAgICAgIGljb25zVGV4dHVyZSxcbiAgICAgICAgaWNvbnNUZXh0dXJlRGltOiBbaWNvbnNUZXh0dXJlLndpZHRoLCBpY29uc1RleHR1cmUuaGVpZ2h0XSxcbiAgICAgICAgc2l6ZVNjYWxlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgX2dldE1vZGVsKGdsKSB7XG5cbiAgICBjb25zdCBwb3NpdGlvbnMgPSBbLTEsIC0xLCAwLCAtMSwgMSwgMCwgMSwgMSwgMCwgMSwgLTEsIDBdO1xuXG4gICAgcmV0dXJuIG5ldyBNb2RlbChnbCwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRTaGFkZXJzKCksIHtcbiAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XG4gICAgICAgIGRyYXdNb2RlOiBHTC5UUklBTkdMRV9GQU4sXG4gICAgICAgIHBvc2l0aW9uczogbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMpXG4gICAgICB9KSxcbiAgICAgIGlzSW5zdGFuY2VkOiB0cnVlLFxuICAgICAgc2hhZGVyQ2FjaGU6IHRoaXMuY29udGV4dC5zaGFkZXJDYWNoZVxuICAgIH0pKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUluc3RhbmNlUG9zaXRpb25zKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRQb3NpdGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb24ob2JqZWN0KTtcbiAgICAgIHZhbHVlW2krK10gPSBwb3NpdGlvblswXTtcbiAgICAgIHZhbHVlW2krK10gPSBwb3NpdGlvblsxXTtcbiAgICAgIHZhbHVlW2krK10gPSBwb3NpdGlvblsyXSB8fCAwO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUluc3RhbmNlUG9zaXRpb25zNjR4eUxvdyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0UG9zaXRpb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IHBvaW50IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb24ocG9pbnQpO1xuICAgICAgdmFsdWVbaSsrXSA9IGZwNjRpZnkocG9zaXRpb25bMF0pWzFdO1xuICAgICAgdmFsdWVbaSsrXSA9IGZwNjRpZnkocG9zaXRpb25bMV0pWzFdO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUluc3RhbmNlU2l6ZXMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldFNpemV9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICB2YWx1ZVtpKytdID0gZ2V0U2l6ZShvYmplY3QpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRBbmdsZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIHZhbHVlW2krK10gPSBnZXRBbmdsZShvYmplY3QpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUluc3RhbmNlQ29sb3JzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRDb2xvcn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29sb3Iob2JqZWN0KTtcblxuICAgICAgdmFsdWVbaSsrXSA9IGNvbG9yWzBdO1xuICAgICAgdmFsdWVbaSsrXSA9IGNvbG9yWzFdO1xuICAgICAgdmFsdWVbaSsrXSA9IGNvbG9yWzJdO1xuICAgICAgdmFsdWVbaSsrXSA9IGlzTmFOKGNvbG9yWzNdKSA/IDI1NSA6IGNvbG9yWzNdO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUluc3RhbmNlT2Zmc2V0cyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgaWNvbk1hcHBpbmcsIGdldEljb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7dmFsdWV9ID0gYXR0cmlidXRlO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IG9iamVjdCBvZiBkYXRhKSB7XG4gICAgICBjb25zdCBpY29uID0gZ2V0SWNvbihvYmplY3QpO1xuICAgICAgY29uc3QgcmVjdCA9IGljb25NYXBwaW5nW2ljb25dIHx8IHt9O1xuICAgICAgdmFsdWVbaSsrXSA9ICgxIC8gMiAtIHJlY3QuYW5jaG9yWCAvIHJlY3Qud2lkdGgpIHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gKDEgLyAyIC0gcmVjdC5hbmNob3JZIC8gcmVjdC5oZWlnaHQpIHx8IDA7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VDb2xvck1vZGUoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGljb25NYXBwaW5nLCBnZXRJY29ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgaWNvbiA9IGdldEljb24ob2JqZWN0KTtcbiAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IGljb25NYXBwaW5nW2ljb25dICYmIGljb25NYXBwaW5nW2ljb25dLm1hc2s7XG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JNb2RlID8gMSA6IDA7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBpY29uTWFwcGluZywgZ2V0SWNvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKG9iamVjdCk7XG4gICAgICBjb25zdCByZWN0ID0gaWNvbk1hcHBpbmdbaWNvbl0gfHwge307XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC54IHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC55IHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC53aWR0aCB8fCAwO1xuICAgICAgdmFsdWVbaSsrXSA9IHJlY3QuaGVpZ2h0IHx8IDA7XG4gICAgfVxuICB9XG59XG5cbkljb25MYXllci5sYXllck5hbWUgPSAnSWNvbkxheWVyJztcbkljb25MYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9sYXllcnMvY29yZS9pY29uLWxheWVyL2ljb24tbGF5ZXIuanMiXSwibmFtZXMiOlsiREVGQVVMVF9DT0xPUiIsIkRFRkFVTFRfVEVYVFVSRV9NSU5fRklMVEVSIiwiTElORUFSX01JUE1BUF9MSU5FQVIiLCJERUZBVUxUX1RFWFRVUkVfTUFHX0ZJTFRFUiIsIkxJTkVBUiIsImRlZmF1bHRQcm9wcyIsImljb25BdGxhcyIsImljb25NYXBwaW5nIiwic2l6ZVNjYWxlIiwiZnA2NCIsImdldFBvc2l0aW9uIiwieCIsInBvc2l0aW9uIiwiZ2V0SWNvbiIsImljb24iLCJnZXRDb2xvciIsImNvbG9yIiwiZ2V0U2l6ZSIsInNpemUiLCJnZXRBbmdsZSIsImFuZ2xlIiwiSWNvbkxheWVyIiwicHJvcHMiLCJ2cyIsImZzIiwibW9kdWxlcyIsImF0dHJpYnV0ZU1hbmFnZXIiLCJzdGF0ZSIsImdsIiwiY29udGV4dCIsImFkZEluc3RhbmNlZCIsImluc3RhbmNlUG9zaXRpb25zIiwiYWNjZXNzb3IiLCJ1cGRhdGUiLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9ucyIsImluc3RhbmNlU2l6ZXMiLCJjYWxjdWxhdGVJbnN0YW5jZVNpemVzIiwiaW5zdGFuY2VPZmZzZXRzIiwiY2FsY3VsYXRlSW5zdGFuY2VPZmZzZXRzIiwiaW5zdGFuY2VJY29uRnJhbWVzIiwiY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzIiwiaW5zdGFuY2VDb2xvck1vZGVzIiwidHlwZSIsIlVOU0lHTkVEX0JZVEUiLCJjYWxjdWxhdGVJbnN0YW5jZUNvbG9yTW9kZSIsImluc3RhbmNlQ29sb3JzIiwiY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnMiLCJpbnN0YW5jZUFuZ2xlcyIsImNhbGN1bGF0ZUluc3RhbmNlQW5nbGVzIiwic2V0U3RhdGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsIm9sZFByb3BzIiwiY2hhbmdlRmxhZ3MiLCJpbnZhbGlkYXRlQWxsIiwicHJvamVjdGlvbk1vZGUiLCJMTkdMQVQiLCJpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJjYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3ciLCJyZW1vdmUiLCJpbnZhbGlkYXRlIiwic2V0UGFyYW1ldGVycyIsIlRFWFRVUkVfTUlOX0ZJTFRFUiIsIlRFWFRVUkVfTUFHX0ZJTFRFUiIsImljb25zVGV4dHVyZSIsInVybHMiLCJ0aGVuIiwidGV4dHVyZSIsInVwZGF0ZUF0dHJpYnV0ZSIsInVuaWZvcm1zIiwicmVuZGVyIiwiT2JqZWN0IiwiYXNzaWduIiwiaWNvbnNUZXh0dXJlRGltIiwid2lkdGgiLCJoZWlnaHQiLCJwb3NpdGlvbnMiLCJnZXRTaGFkZXJzIiwiaWQiLCJnZW9tZXRyeSIsImRyYXdNb2RlIiwiVFJJQU5HTEVfRkFOIiwiRmxvYXQzMkFycmF5IiwiaXNJbnN0YW5jZWQiLCJzaGFkZXJDYWNoZSIsImF0dHJpYnV0ZSIsImRhdGEiLCJ2YWx1ZSIsImkiLCJvYmplY3QiLCJwb2ludCIsImlzTmFOIiwicmVjdCIsImFuY2hvclgiLCJhbmNob3JZIiwiY29sb3JNb2RlIiwibWFzayIsInkiLCJsYXllck5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQW1CQTs7QUFDQTs7QUFDQTs7QUFHQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7Ozs7OzsrZUExQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQVVBLElBQU1BLGdCQUFnQixDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLEdBQVYsQ0FBdEI7QUFDQSxJQUFNQyw2QkFBNkIsU0FBR0Msb0JBQXRDO0FBQ0E7QUFDQSxJQUFNQyw2QkFBNkIsU0FBR0MsTUFBdEM7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLElBQU1DLGVBQWU7QUFDbkJDLGFBQVcsSUFEUTtBQUVuQkMsZUFBYSxFQUZN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b0JBQ0EsS0FBSy9ELEtBREw7QUFBQSxVQUM5QmdFLElBRDhCLFdBQzlCQSxJQUQ4QjtBQUFBLFVBQ3hCL0UsV0FEd0IsV0FDeEJBLFdBRHdCO0FBQUEsVUFDWE0sT0FEVyxXQUNYQSxPQURXO0FBQUEsVUFFOUIwRSxLQUY4QixHQUVyQkYsU0FGcUIsQ0FFOUJFLEtBRjhCOztBQUdyQyxVQUFJQyxJQUFJLENBQVI7QUFIcUM7QUFBQTtBQUFBOztBQUFBO0FBSXJDLDhCQUFxQkYsSUFBckIsbUlBQTJCO0FBQUEsY0FBaEJHLE1BQWdCOztBQUN6QixjQUFNM0UsT0FBT0QsUUFBUTRFLE1BQVIsQ0FBYjtBQUNBLGNBQU1HLE9BQU9yRixZQUFZTyxJQUFaLEtBQXFCLEVBQWxDO0FBQ0F5RSxnQkFBTUMsR0FBTixJQUFhSSxLQUFLakYsQ0FBTCxJQUFVLENBQXZCO0FBQ0E0RSxnQkFBTUMsR0FBTixJQUFhSSxLQUFLSyxDQUFMLElBQVUsQ0FBdkI7QUFDQVYsZ0JBQU1DLEdBQU4sSUFBYUksS0FBS2xCLEtBQUwsSUFBYyxDQUEzQjtBQUNBYSxnQkFBTUMsR0FBTixJQUFhSSxLQUFLakIsTUFBTCxJQUFlLENBQTVCO0FBQ0Q7QUFYb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVl0Qzs7Ozs7O2tCQWhOa0J0RCxTOzs7QUFtTnJCQSxVQUFVNkUsU0FBVixHQUFzQixXQUF0QjtBQUNBN0UsVUFBVWhCLFlBQVYsR0FBeUJBLFlBQXpCIiwiZmlsZSI6Imljb24tbGF5ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTUgLSAyMDE3IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cbmltcG9ydCB7TGF5ZXJ9IGZyb20gJy4uLy4uLy4uL2xpYic7XG5pbXBvcnQge0dMLCBNb2RlbCwgR2VvbWV0cnksIFRleHR1cmUyRCwgbG9hZFRleHR1cmVzfSBmcm9tICdsdW1hLmdsJztcbmltcG9ydCB7ZnA2NGlmeSwgZW5hYmxlNjRiaXRTdXBwb3J0fSBmcm9tICcuLi8uLi8uLi9saWIvdXRpbHMvZnA2NCc7XG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5pbXBvcnQgdnMgZnJvbSAnLi9pY29uLWxheWVyLXZlcnRleC5nbHNsJztcbmltcG9ydCB2czY0IGZyb20gJy4vaWNvbi1sYXllci12ZXJ0ZXgtNjQuZ2xzbCc7XG5pbXBvcnQgZnMgZnJvbSAnLi9pY29uLWxheWVyLWZyYWdtZW50Lmdsc2wnO1xuXG5jb25zdCBERUZBVUxUX0NPTE9SID0gWzAsIDAsIDAsIDI1NV07XG5jb25zdCBERUZBVUxUX1RFWFRVUkVfTUlOX0ZJTFRFUiA9IEdMLkxJTkVBUl9NSVBNQVBfTElORUFSO1xuLy8gR0wuTElORUFSIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGJ1dCBleHBsaWNpdGx5IHNldCBpdCBoZXJlXG5jb25zdCBERUZBVUxUX1RFWFRVUkVfTUFHX0ZJTFRFUiA9IEdMLkxJTkVBUjtcblxuLypcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtUZXh0dXJlMkQgfCBzdHJpbmd9IHByb3BzLmljb25BdGxhcyAtIGF0bGFzIGltYWdlIHVybCBvciB0ZXh0dXJlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmcgLSBpY29uIG5hbWVzIG1hcHBlZCB0byBpY29uIGRlZmluaXRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMuaWNvbk1hcHBpbmdbaWNvbl9uYW1lXS54IC0geCBwb3NpdGlvbiBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0ueSAtIHkgcG9zaXRpb24gb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLndpZHRoIC0gd2lkdGggb2YgaWNvbiBvbiB0aGUgYXRsYXMgaW1hZ2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLmhlaWdodCAtIGhlaWdodCBvZiBpY29uIG9uIHRoZSBhdGxhcyBpbWFnZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0uYW5jaG9yWCAtIHggYW5jaG9yIG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlLFxuICogICBkZWZhdWx0IHRvIHdpZHRoIC8gMlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzLmljb25NYXBwaW5nW2ljb25fbmFtZV0uYW5jaG9yWSAtIHkgYW5jaG9yIG9mIGljb24gb24gdGhlIGF0bGFzIGltYWdlLFxuICogICBkZWZhdWx0IHRvIGhlaWdodCAvIDJcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5pY29uTWFwcGluZ1tpY29uX25hbWVdLm1hc2sgLSB3aGV0aGVyIGljb24gaXMgdHJlYXRlZCBhcyBhIHRyYW5zcGFyZW5jeVxuICogICBtYXNrLiBJZiB0cnVlLCB1c2VyIGRlZmluZWQgY29sb3IgaXMgYXBwbGllZC4gSWYgZmFsc2UsIG9yaWdpbmFsIGNvbG9yIGZyb20gdGhlIGltYWdlIGlzXG4gKiAgIGFwcGxpZWQuIERlZmF1bHQgdG8gZmFsc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMuc2l6ZSAtIGljb24gc2l6ZSBpbiBwaXhlbHNcbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0UG9zaXRpb24gLSByZXR1cm5zIGFuY2hvciBwb3NpdGlvbiBvZiB0aGUgaWNvbiwgaW4gW2xuZywgbGF0LCB6XVxuICogQHBhcmFtIHtmdW5jfSBwcm9wcy5nZXRJY29uIC0gcmV0dXJucyBpY29uIG5hbWUgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0U2l6ZSAtIHJldHVybnMgaWNvbiBzaXplIG11bHRpcGxpZXIgYXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7ZnVuY30gcHJvcHMuZ2V0Q29sb3IgLSByZXR1cm5zIGNvbG9yIG9mIHRoZSBpY29uIGluIFtyLCBnLCBiLCBhXS4gT25seSB3b3JrcyBvbiBpY29uc1xuICogICB3aXRoIG1hc2s6IHRydWUuXG4gKiBAcGFyYW0ge2Z1bmN9IHByb3BzLmdldEFuZ2xlIC0gcmV0dXJucyByb3RhdGluZyBhbmdsZSAoaW4gZGVncmVlKSBvZiB0aGUgaWNvbi5cbiAqL1xuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBpY29uQXRsYXM6IG51bGwsXG4gIGljb25NYXBwaW5nOiB7fSxcbiAgc2l6ZVNjYWxlOiAxLFxuICBmcDY0OiBmYWxzZSxcblxuICBnZXRQb3NpdGlvbjogeCA9PiB4LnBvc2l0aW9uLFxuICBnZXRJY29uOiB4ID0+IHguaWNvbixcbiAgZ2V0Q29sb3I6IHggPT4geC5jb2xvciB8fCBERUZBVUxUX0NPTE9SLFxuICBnZXRTaXplOiB4ID0+IHguc2l6ZSB8fCAxLFxuICBnZXRBbmdsZTogeCA9PiB4LmFuZ2xlIHx8IDBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEljb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgZ2V0U2hhZGVycygpIHtcbiAgICByZXR1cm4gZW5hYmxlNjRiaXRTdXBwb3J0KHRoaXMucHJvcHMpID9cbiAgICAgIHt2czogdnM2NCwgZnMsIG1vZHVsZXM6IFsncHJvamVjdDY0J119IDpcbiAgICAgIHt2cywgZnN9OyAgLy8gJ3Byb2plY3QnIG1vZHVsZSBhZGRlZCBieSBkZWZhdWx0LlxuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGVNYW5hZ2VyfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICBpbnN0YW5jZVBvc2l0aW9uczoge3NpemU6IDMsIGFjY2Vzc29yOiAnZ2V0UG9zaXRpb24nLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VQb3NpdGlvbnN9LFxuICAgICAgaW5zdGFuY2VTaXplczoge3NpemU6IDEsIGFjY2Vzc29yOiAnZ2V0U2l6ZScsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZVNpemVzfSxcbiAgICAgIGluc3RhbmNlT2Zmc2V0czoge3NpemU6IDIsIGFjY2Vzc29yOiAnZ2V0SWNvbicsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZU9mZnNldHN9LFxuICAgICAgaW5zdGFuY2VJY29uRnJhbWVzOiB7c2l6ZTogNCwgYWNjZXNzb3I6ICdnZXRJY29uJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlSWNvbkZyYW1lc30sXG4gICAgICBpbnN0YW5jZUNvbG9yTW9kZXM6IHtzaXplOiAxLCB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLCBhY2Nlc3NvcjogJ2dldEljb24nLCB1cGRhdGU6IHRoaXMuY2FsY3VsYXRlSW5zdGFuY2VDb2xvck1vZGV9LFxuICAgICAgaW5zdGFuY2VDb2xvcnM6IHtzaXplOiA0LCB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLCBhY2Nlc3NvcjogJ2dldENvbG9yJywgdXBkYXRlOiB0aGlzLmNhbGN1bGF0ZUluc3RhbmNlQ29sb3JzfSxcbiAgICAgIGluc3RhbmNlQW5nbGVzOiB7c2l6ZTogMSwgYWNjZXNzb3I6ICdnZXRBbmdsZScsIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZUFuZ2xlc31cbiAgICB9KTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuICAgIHRoaXMuc2V0U3RhdGUoe21vZGVsOiB0aGlzLl9nZXRNb2RlbChnbCl9KTtcbiAgfVxuXG4gIHVwZGF0ZUF0dHJpYnV0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pIHtcbiAgICBpZiAocHJvcHMuZnA2NCAhPT0gb2xkUHJvcHMuZnA2NCkge1xuICAgICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuaW52YWxpZGF0ZUFsbCgpO1xuXG4gICAgICBpZiAocHJvcHMuZnA2NCAmJiBwcm9wcy5wcm9qZWN0aW9uTW9kZSA9PT0gQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUKSB7XG4gICAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuYWRkSW5zdGFuY2VkKHtcbiAgICAgICAgICBpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3c6IHtcbiAgICAgICAgICAgIHNpemU6IDIsXG4gICAgICAgICAgICBhY2Nlc3NvcjogJ2dldFBvc2l0aW9uJyxcbiAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5jYWxjdWxhdGVJbnN0YW5jZVBvc2l0aW9uczY0eHlMb3dcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlTWFuYWdlci5yZW1vdmUoW1xuICAgICAgICAgICdpbnN0YW5jZVBvc2l0aW9uczY0eHlMb3cnXG4gICAgICAgIF0pO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RhdGUoe29sZFByb3BzLCBwcm9wcywgY2hhbmdlRmxhZ3N9KSB7XG4gICAgc3VwZXIudXBkYXRlU3RhdGUoe3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3N9KTtcblxuICAgIGNvbnN0IHtpY29uQXRsYXMsIGljb25NYXBwaW5nfSA9IHByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzLmljb25NYXBwaW5nICE9PSBpY29uTWFwcGluZykge1xuICAgICAgY29uc3Qge2F0dHJpYnV0ZU1hbmFnZXJ9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGF0dHJpYnV0ZU1hbmFnZXIuaW52YWxpZGF0ZSgnaW5zdGFuY2VPZmZzZXRzJyk7XG4gICAgICBhdHRyaWJ1dGVNYW5hZ2VyLmludmFsaWRhdGUoJ2luc3RhbmNlSWNvbkZyYW1lcycpO1xuICAgICAgYXR0cmlidXRlTWFuYWdlci5pbnZhbGlkYXRlKCdpbnN0YW5jZUNvbG9yTW9kZXMnKTtcbiAgICB9XG5cbiAgICBpZiAob2xkUHJvcHMuaWNvbkF0bGFzICE9PSBpY29uQXRsYXMpIHtcblxuICAgICAgaWYgKGljb25BdGxhcyBpbnN0YW5jZW9mIFRleHR1cmUyRCkge1xuICAgICAgICBpY29uQXRsYXMuc2V0UGFyYW1ldGVycyh7XG4gICAgICAgICAgW0dMLlRFWFRVUkVfTUlOX0ZJTFRFUl06IERFRkFVTFRfVEVYVFVSRV9NSU5fRklMVEVSLFxuICAgICAgICAgIFtHTC5URVhUVVJFX01BR19GSUxURVJdOiBERUZBVUxUX1RFWFRVUkVfTUFHX0ZJTFRFUlxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aWNvbnNUZXh0dXJlOiBpY29uQXRsYXN9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGljb25BdGxhcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbG9hZFRleHR1cmVzKHRoaXMuY29udGV4dC5nbCwge1xuICAgICAgICAgIHVybHM6IFtpY29uQXRsYXNdXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChbdGV4dHVyZV0pID0+IHtcbiAgICAgICAgICB0ZXh0dXJlLnNldFBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgW0dMLlRFWFRVUkVfTUlOX0ZJTFRFUl06IERFRkFVTFRfVEVYVFVSRV9NSU5fRklMVEVSLFxuICAgICAgICAgICAgW0dMLlRFWFRVUkVfTUFHX0ZJTFRFUl06IERFRkFVTFRfVEVYVFVSRV9NQUdfRklMVEVSXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aWNvbnNUZXh0dXJlOiB0ZXh0dXJlfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5mcDY0ICE9PSBvbGRQcm9wcy5mcDY0KSB7XG4gICAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bW9kZWw6IHRoaXMuX2dldE1vZGVsKGdsKX0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUF0dHJpYnV0ZSh7cHJvcHMsIG9sZFByb3BzLCBjaGFuZ2VGbGFnc30pO1xuXG4gIH1cblxuICBkcmF3KHt1bmlmb3Jtc30pIHtcbiAgICBjb25zdCB7c2l6ZVNjYWxlfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge2ljb25zVGV4dHVyZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKGljb25zVGV4dHVyZSkge1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5yZW5kZXIoT2JqZWN0LmFzc2lnbih7fSwgdW5pZm9ybXMsIHtcbiAgICAgICAgaWNvbnNUZXh0dXJlLFxuICAgICAgICBpY29uc1RleHR1cmVEaW06IFtpY29uc1RleHR1cmUud2lkdGgsIGljb25zVGV4dHVyZS5oZWlnaHRdLFxuICAgICAgICBzaXplU2NhbGVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0TW9kZWwoZ2wpIHtcblxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFstMSwgLTEsIDAsIC0xLCAxLCAwLCAxLCAxLCAwLCAxLCAtMSwgMF07XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsKGdsLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFNoYWRlcnMoKSwge1xuICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcbiAgICAgICAgZHJhd01vZGU6IEdMLlRSSUFOR0xFX0ZBTixcbiAgICAgICAgcG9zaXRpb25zOiBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucylcbiAgICAgIH0pLFxuICAgICAgaXNJbnN0YW5jZWQ6IHRydWUsXG4gICAgICBzaGFkZXJDYWNoZTogdGhpcy5jb250ZXh0LnNoYWRlckNhY2hlXG4gICAgfSkpO1xuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VQb3NpdGlvbnMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldFBvc2l0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihvYmplY3QpO1xuICAgICAgdmFsdWVbaSsrXSA9IHBvc2l0aW9uWzBdO1xuICAgICAgdmFsdWVbaSsrXSA9IHBvc2l0aW9uWzFdO1xuICAgICAgdmFsdWVbaSsrXSA9IHBvc2l0aW9uWzJdIHx8IDA7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VQb3NpdGlvbnM2NHh5TG93KGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBnZXRQb3NpdGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgZGF0YSkge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbihwb2ludCk7XG4gICAgICB2YWx1ZVtpKytdID0gZnA2NGlmeShwb3NpdGlvblswXSlbMV07XG4gICAgICB2YWx1ZVtpKytdID0gZnA2NGlmeShwb3NpdGlvblsxXSlbMV07XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VTaXplcyhhdHRyaWJ1dGUpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ2V0U2l6ZX0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIHZhbHVlW2krK10gPSBnZXRTaXplKG9iamVjdCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VBbmdsZXMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldEFuZ2xlfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgdmFsdWVbaSsrXSA9IGdldEFuZ2xlKG9iamVjdCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VDb2xvcnMoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGdldENvbG9yfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgY29sb3IgPSBnZXRDb2xvcihvYmplY3QpO1xuXG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JbMF07XG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JbMV07XG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JbMl07XG4gICAgICB2YWx1ZVtpKytdID0gaXNOYU4oY29sb3JbM10pID8gMjU1IDogY29sb3JbM107XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VPZmZzZXRzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBpY29uTWFwcGluZywgZ2V0SWNvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKG9iamVjdCk7XG4gICAgICBjb25zdCByZWN0ID0gaWNvbk1hcHBpbmdbaWNvbl0gfHwge307XG4gICAgICB2YWx1ZVtpKytdID0gKHJlY3Qud2lkdGggLyAyIC0gcmVjdC5hbmNob3JYKSB8fCAwO1xuICAgICAgdmFsdWVbaSsrXSA9IChyZWN0LmhlaWdodCAvIDIgLSByZWN0LmFuY2hvclkpIHx8IDA7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VDb2xvck1vZGUoYXR0cmlidXRlKSB7XG4gICAgY29uc3Qge2RhdGEsIGljb25NYXBwaW5nLCBnZXRJY29ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3ZhbHVlfSA9IGF0dHJpYnV0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yIChjb25zdCBvYmplY3Qgb2YgZGF0YSkge1xuICAgICAgY29uc3QgaWNvbiA9IGdldEljb24ob2JqZWN0KTtcbiAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IGljb25NYXBwaW5nW2ljb25dICYmIGljb25NYXBwaW5nW2ljb25dLm1hc2s7XG4gICAgICB2YWx1ZVtpKytdID0gY29sb3JNb2RlID8gMSA6IDA7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlSW5zdGFuY2VJY29uRnJhbWVzKGF0dHJpYnV0ZSkge1xuICAgIGNvbnN0IHtkYXRhLCBpY29uTWFwcGluZywgZ2V0SWNvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBhdHRyaWJ1dGU7XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAoY29uc3Qgb2JqZWN0IG9mIGRhdGEpIHtcbiAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKG9iamVjdCk7XG4gICAgICBjb25zdCByZWN0ID0gaWNvbk1hcHBpbmdbaWNvbl0gfHwge307XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC54IHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC55IHx8IDA7XG4gICAgICB2YWx1ZVtpKytdID0gcmVjdC53aWR0aCB8fCAwO1xuICAgICAgdmFsdWVbaSsrXSA9IHJlY3QuaGVpZ2h0IHx8IDA7XG4gICAgfVxuICB9XG59XG5cbkljb25MYXllci5sYXllck5hbWUgPSAnSWNvbkxheWVyJztcbkljb25MYXllci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG4iXX0=

@@ -5,3 +5,3 @@ {

"license": "MIT",
"version": "4.1.1",
"version": "4.1.2",
"keywords": [

@@ -79,3 +79,3 @@ "webgl",

"jsdom": "^9.11.0",
"luma.gl": "^4.0.1",
"luma.gl": "^4.0.2",
"module-alias": "^2.0.0",

@@ -99,3 +99,3 @@ "nyc": "^10.2.0",

"peerDependencies": {
"luma.gl": "^4.0.1",
"luma.gl": "^4.0.2",
"react": "0.14.x - 15.x",

@@ -102,0 +102,0 @@ "react-dom": "0.14.x - 15.x"

@@ -40,2 +40,4 @@ // Copyright (c) 2015 - 2017 Uber Technologies, Inc.

uniform vec2 iconsTextureDim;
// devicePixelRatio is set up as uniform but not declared in the shader function
uniform float devicePixelRatio;

@@ -49,3 +51,3 @@ varying float vColorMode;

float cos_angle = cos(angle_radian);
float sin_angle = sqrt(1.0 - cos_angle * cos_angle);
float sin_angle = sin(angle_radian);
mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle);

@@ -57,13 +59,11 @@ return rotationMatrix * vertex;

vec2 iconSize = instanceIconFrames.zw;
vec2 iconSize_clipspace = iconSize / viewportSize * 2.0;
// scale icon height to match instanceSize
float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;
// The vertex variable is in clip space and should not go through project_to_clipspace call
vec2 vertex = (positions / 2.0 + instanceOffsets);
vertex = rotate_by_angle(vertex, instanceAngles) * iconSize_clipspace *
sizeScale * instanceScale;
// scale and rotate vertex in "pixel" value and convert back to fraction in clipspace
vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;
pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) / viewportSize * sizeScale *
instanceScale * devicePixelRatio;
pixelOffset.y *= -1.0;
vertex.y *= -1.0;
vec4 instancePositions64xy = vec4(

@@ -82,3 +82,3 @@ instancePositions.x, instancePositions64xyLow.x,

gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace) + vec4(vertex, 0.0, 0.0);
gl_Position = project_to_clipspace_fp64(vertex_pos_modelspace) + vec4(pixelOffset, 0.0, 0.0);

@@ -85,0 +85,0 @@ vTextureCoords = mix(

@@ -39,2 +39,4 @@ // Copyright (c) 2015 - 2017 Uber Technologies, Inc.

uniform vec2 iconsTextureDim;
// devicePixelRatio is set up as uniform but not declared in the shader function
uniform float devicePixelRatio;

@@ -55,13 +57,14 @@ varying float vColorMode;

vec2 iconSize = instanceIconFrames.zw;
vec2 iconSize_clipspace = iconSize / viewportSize * 2.0;
// scale icon height to match instanceSize
float instanceScale = iconSize.y == 0.0 ? 0.0 : instanceSizes / iconSize.y;
// scale and rotate vertex in "pixel" value and convert back to fraction in clipspace
vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets;
pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) / viewportSize * sizeScale *
instanceScale * devicePixelRatio;
pixelOffset.y *= -1.0;
vec3 center = project_position(instancePositions);
vec2 vertex = (positions / 2.0 + instanceOffsets);
vertex = rotate_by_angle(vertex, instanceAngles) * iconSize_clipspace *
sizeScale * instanceScale;
vertex.y *= -1.0;
gl_Position = project_to_clipspace(vec4(center, 1.0)) + vec4(pixelOffset, 0.0, 0.0);
gl_Position = project_to_clipspace(vec4(center, 1.0)) + vec4(vertex, 0.0, 0.0);
vTextureCoords = mix(

@@ -68,0 +71,0 @@ instanceIconFrames.xy,

@@ -30,2 +30,5 @@ // Copyright (c) 2015 - 2017 Uber Technologies, Inc.

const DEFAULT_COLOR = [0, 0, 0, 255];
const DEFAULT_TEXTURE_MIN_FILTER = GL.LINEAR_MIPMAP_LINEAR;
// GL.LINEAR is the default value but explicitly set it here
const DEFAULT_TEXTURE_MAG_FILTER = GL.LINEAR;

@@ -131,2 +134,6 @@ /*

if (iconAtlas instanceof Texture2D) {
iconAtlas.setParameters({
[GL.TEXTURE_MIN_FILTER]: DEFAULT_TEXTURE_MIN_FILTER,
[GL.TEXTURE_MAG_FILTER]: DEFAULT_TEXTURE_MAG_FILTER
});
this.setState({iconsTexture: iconAtlas});

@@ -138,2 +145,6 @@ } else if (typeof iconAtlas === 'string') {

.then(([texture]) => {
texture.setParameters({
[GL.TEXTURE_MIN_FILTER]: DEFAULT_TEXTURE_MIN_FILTER,
[GL.TEXTURE_MAG_FILTER]: DEFAULT_TEXTURE_MAG_FILTER
});
this.setState({iconsTexture: texture});

@@ -242,4 +253,4 @@ });

const rect = iconMapping[icon] || {};
value[i++] = (1 / 2 - rect.anchorX / rect.width) || 0;
value[i++] = (1 / 2 - rect.anchorY / rect.height) || 0;
value[i++] = (rect.width / 2 - rect.anchorX) || 0;
value[i++] = (rect.height / 2 - rect.anchorY) || 0;
}

@@ -246,0 +257,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc