@konfirm/geojson 1.0.0 → 1.0.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +7 -7
  2. package/dist/{geojson.d.ts → main.d.mts} +18 -79
  3. package/dist/main.d.ts +137 -15
  4. package/dist/main.global.js +853 -0
  5. package/dist/main.global.js.map +1 -0
  6. package/dist/main.js +824 -0
  7. package/dist/main.js.map +1 -0
  8. package/dist/main.mjs +772 -0
  9. package/dist/main.mjs.map +1 -0
  10. package/package.json +101 -63
  11. package/.editorconfig +0 -16
  12. package/.github/workflows/release.yml +0 -21
  13. package/.github/workflows/tests.yml +0 -56
  14. package/CHANGELOG.md +0 -21
  15. package/dist/Domain/Constants.d.ts +0 -5
  16. package/dist/Domain/GeoJSON/Concept/Altitude.d.ts +0 -3
  17. package/dist/Domain/GeoJSON/Concept/BoundingBox.d.ts +0 -6
  18. package/dist/Domain/GeoJSON/Concept/ExteriorRing.d.ts +0 -4
  19. package/dist/Domain/GeoJSON/Concept/GeoJSONObject.d.ts +0 -11
  20. package/dist/Domain/GeoJSON/Concept/InteriorRing.d.ts +0 -4
  21. package/dist/Domain/GeoJSON/Concept/Latitude.d.ts +0 -3
  22. package/dist/Domain/GeoJSON/Concept/LinearRing.d.ts +0 -4
  23. package/dist/Domain/GeoJSON/Concept/Longitude.d.ts +0 -3
  24. package/dist/Domain/GeoJSON/Concept/Position.d.ts +0 -7
  25. package/dist/Domain/GeoJSON/Feature.d.ts +0 -12
  26. package/dist/Domain/GeoJSON/FeatureCollection.d.ts +0 -8
  27. package/dist/Domain/GeoJSON/GeoJSON.d.ts +0 -7
  28. package/dist/Domain/GeoJSON/Geometry/LineString.d.ts +0 -11
  29. package/dist/Domain/GeoJSON/Geometry/MultiLineString.d.ts +0 -7
  30. package/dist/Domain/GeoJSON/Geometry/MultiPoint.d.ts +0 -8
  31. package/dist/Domain/GeoJSON/Geometry/MultiPolygon.d.ts +0 -7
  32. package/dist/Domain/GeoJSON/Geometry/Point.d.ts +0 -11
  33. package/dist/Domain/GeoJSON/Geometry/Polygon.d.ts +0 -11
  34. package/dist/Domain/GeoJSON/Geometry.d.ts +0 -9
  35. package/dist/Domain/GeoJSON/GeometryCollection.d.ts +0 -8
  36. package/dist/Domain/GeoJSON/GeometryObject.d.ts +0 -12
  37. package/dist/Domain/Guards/Number.d.ts +0 -3
  38. package/dist/Domain/Guards/Tuple.d.ts +0 -3
  39. package/dist/Domain/Iterator/IterablePair.d.ts +0 -32
  40. package/dist/Domain/Iterator/SimpleGeometry.d.ts +0 -90
  41. package/dist/Domain/Utility/Calculate.d.ts +0 -9
  42. package/dist/Domain/Utility/Distance.d.ts +0 -3
  43. package/dist/Domain/Utility/Intersect.d.ts +0 -2
  44. package/dist/Domain/Utility/Segments.d.ts +0 -2
  45. package/dist/Domain/Utility/Winding.d.ts +0 -3
  46. package/dist/geojson.cjs.js +0 -655
  47. package/dist/geojson.cjs.min.js +0 -1
  48. package/dist/geojson.es.js +0 -627
  49. package/dist/geojson.es.min.js +0 -1
  50. package/dist/geojson.js +0 -660
  51. package/dist/geojson.min.js +0 -1
  52. package/rollup.config.mjs +0 -43
  53. package/source/Domain/Constants.ts +0 -5
  54. package/source/Domain/GeoJSON/Concept/Altitude.ts +0 -9
  55. package/source/Domain/GeoJSON/Concept/BoundingBox.ts +0 -31
  56. package/source/Domain/GeoJSON/Concept/ExteriorRing.ts +0 -12
  57. package/source/Domain/GeoJSON/Concept/GeoJSONObject.ts +0 -23
  58. package/source/Domain/GeoJSON/Concept/InteriorRing.ts +0 -12
  59. package/source/Domain/GeoJSON/Concept/Latitude.ts +0 -7
  60. package/source/Domain/GeoJSON/Concept/LinearRing.ts +0 -14
  61. package/source/Domain/GeoJSON/Concept/Longitude.ts +0 -7
  62. package/source/Domain/GeoJSON/Concept/Position.ts +0 -18
  63. package/source/Domain/GeoJSON/Feature.ts +0 -24
  64. package/source/Domain/GeoJSON/FeatureCollection.ts +0 -16
  65. package/source/Domain/GeoJSON/GeoJSON.ts +0 -9
  66. package/source/Domain/GeoJSON/Geometry/LineString.ts +0 -12
  67. package/source/Domain/GeoJSON/Geometry/MultiLineString.ts +0 -9
  68. package/source/Domain/GeoJSON/Geometry/MultiPoint.ts +0 -10
  69. package/source/Domain/GeoJSON/Geometry/MultiPolygon.ts +0 -9
  70. package/source/Domain/GeoJSON/Geometry/Point.ts +0 -12
  71. package/source/Domain/GeoJSON/Geometry/Polygon.ts +0 -20
  72. package/source/Domain/GeoJSON/Geometry.ts +0 -11
  73. package/source/Domain/GeoJSON/GeometryCollection.ts +0 -23
  74. package/source/Domain/GeoJSON/GeometryObject.ts +0 -20
  75. package/source/Domain/Guards/Number.ts +0 -13
  76. package/source/Domain/Guards/Tuple.ts +0 -6
  77. package/source/Domain/Guards/Utility.ts +0 -1
  78. package/source/Domain/Iterator/IterablePair.ts +0 -47
  79. package/source/Domain/Iterator/SimpleGeometry.ts +0 -137
  80. package/source/Domain/Utility/Calculate.ts +0 -143
  81. package/source/Domain/Utility/Distance.ts +0 -56
  82. package/source/Domain/Utility/Intersect.ts +0 -42
  83. package/source/Domain/Utility/Numeric.ts +0 -8
  84. package/source/Domain/Utility/Segments.ts +0 -5
  85. package/source/Domain/Utility/Winding.ts +0 -19
  86. package/source/main.ts +0 -20
  87. package/test/Domain/GeoJSON/Concept/Altitude.ts +0 -58
  88. package/test/Domain/GeoJSON/Concept/BoundingBox.ts +0 -77
  89. package/test/Domain/GeoJSON/Concept/ExteriorRing.ts +0 -65
  90. package/test/Domain/GeoJSON/Concept/GeoJSONObject.ts +0 -56
  91. package/test/Domain/GeoJSON/Concept/InteriorRing.ts +0 -65
  92. package/test/Domain/GeoJSON/Concept/Latitude.ts +0 -56
  93. package/test/Domain/GeoJSON/Concept/LinearRing.ts +0 -63
  94. package/test/Domain/GeoJSON/Concept/Longitude.ts +0 -56
  95. package/test/Domain/GeoJSON/Concept/Position.ts +0 -56
  96. package/test/Domain/GeoJSON/Feature.ts +0 -9
  97. package/test/Domain/GeoJSON/FeatureCollection.ts +0 -9
  98. package/test/Domain/GeoJSON/GeoJSON.ts +0 -21
  99. package/test/Domain/GeoJSON/Geometry/LineString.ts +0 -11
  100. package/test/Domain/GeoJSON/Geometry/MultiLineString.ts +0 -11
  101. package/test/Domain/GeoJSON/Geometry/MultiPoint.ts +0 -11
  102. package/test/Domain/GeoJSON/Geometry/MultiPolygon.ts +0 -11
  103. package/test/Domain/GeoJSON/Geometry/Point.ts +0 -11
  104. package/test/Domain/GeoJSON/Geometry/Polygon.ts +0 -11
  105. package/test/Domain/GeoJSON/Geometry.ts +0 -9
  106. package/test/Domain/GeoJSON/GeometryCollection.ts +0 -9
  107. package/test/Domain/GeoJSON/GeometryObject.ts +0 -4
  108. package/test/Domain/Guards/Number.ts +0 -49
  109. package/test/Domain/Guards/Tuple.ts +0 -27
  110. package/test/Domain/Iterator/IterablePair.ts +0 -203
  111. package/test/Domain/Iterator/SimpleGeometry.ts +0 -195
  112. package/test/Domain/Utility/Calculate.ts +0 -178
  113. package/test/Domain/Utility/Distance.ts +0 -19
  114. package/test/Domain/Utility/Intersect.ts +0 -54
  115. package/test/Domain/Utility/Numeric.ts +0 -30
  116. package/test/Domain/Utility/Winding.ts +0 -52
  117. package/test/README.ts +0 -123
  118. package/test/data/Distance.ts +0 -51
  119. package/test/data/HolySee.ts +0 -74
  120. package/test/data/Intersect.ts +0 -300
  121. package/test/data/Italy.ts +0 -2883
  122. package/test/data/SanMarino.ts +0 -83
  123. package/test/data/Shapes.ts +0 -107
  124. package/test/helper/geometry.ts +0 -76
  125. package/test/helper/malform.ts +0 -82
  126. package/test/main.ts +0 -4
  127. package/tsconfig.json +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../source/main.ts","../source/Domain/GeoJSON/Concept/Position.ts","../source/Domain/Guards/Tuple.ts","../source/Domain/Constants.ts","../source/Domain/Guards/Number.ts","../source/Domain/GeoJSON/Concept/Altitude.ts","../source/Domain/GeoJSON/Concept/Latitude.ts","../source/Domain/GeoJSON/Concept/Longitude.ts","../source/Domain/GeoJSON/Feature.ts","../source/Domain/GeoJSON/Concept/GeoJSONObject.ts","../source/Domain/GeoJSON/Concept/BoundingBox.ts","../source/Domain/GeoJSON/Geometry.ts","../source/Domain/GeoJSON/GeometryObject.ts","../source/Domain/GeoJSON/Geometry/MultiPoint.ts","../source/Domain/GeoJSON/Geometry/Point.ts","../source/Domain/GeoJSON/Geometry/LineString.ts","../source/Domain/GeoJSON/Geometry/MultiLineString.ts","../source/Domain/GeoJSON/Geometry/MultiPolygon.ts","../source/Domain/GeoJSON/Geometry/Polygon.ts","../source/Domain/GeoJSON/Concept/ExteriorRing.ts","../source/Domain/Utility/Winding.ts","../source/Domain/GeoJSON/Concept/LinearRing.ts","../source/Domain/GeoJSON/Concept/InteriorRing.ts","../source/Domain/GeoJSON/GeometryCollection.ts","../source/Domain/GeoJSON/FeatureCollection.ts","../source/Domain/GeoJSON/GeoJSON.ts","../source/Domain/Iterator/SimpleGeometry.ts","../source/Domain/Iterator/IterablePair.ts","../source/Domain/Utility/Box.ts","../source/Domain/Utility/Calculate.ts","../source/Domain/Utility/Segments.ts","../source/Domain/Utility/Distance.ts","../source/Domain/Utility/Intersect.ts"],"sourcesContent":["// intersect and distance functions\n\n// the individual GeoJSON types and type guards\nexport {\n\tisPosition,\n\tisStrictPosition,\n\tPosition,\n} from './Domain/GeoJSON/Concept/Position';\nexport { Feature, isFeature, isStrictFeature } from './Domain/GeoJSON/Feature';\nexport {\n\tFeatureCollection,\n\tisFeatureCollection,\n\tisStrictFeatureCollection,\n} from './Domain/GeoJSON/FeatureCollection';\nexport { GeoJSON, isGeoJSON, isStrictGeoJSON } from './Domain/GeoJSON/GeoJSON';\nexport {\n\tGeometry,\n\tisGeometry,\n\tisStrictGeometry,\n} from './Domain/GeoJSON/Geometry';\nexport {\n\tisLineString,\n\tisStrictLineString,\n\tLineString,\n} from './Domain/GeoJSON/Geometry/LineString';\nexport {\n\tisMultiLineString,\n\tisStrictMultiLineString,\n\tMultiLineString,\n} from './Domain/GeoJSON/Geometry/MultiLineString';\nexport {\n\tisMultiPoint,\n\tisStrictMultiPoint,\n\tMultiPoint,\n} from './Domain/GeoJSON/Geometry/MultiPoint';\nexport {\n\tisMultiPolygon,\n\tisStrictMultiPolygon,\n\tMultiPolygon,\n} from './Domain/GeoJSON/Geometry/MultiPolygon';\nexport { isPoint, isStrictPoint, Point } from './Domain/GeoJSON/Geometry/Point';\nexport {\n\tisPolygon,\n\tisStrictPolygon,\n\tPolygon,\n} from './Domain/GeoJSON/Geometry/Polygon';\nexport {\n\tGeometryCollection,\n\tisGeometryCollection,\n\tisStrictGeometryCollection,\n} from './Domain/GeoJSON/GeometryCollection';\n// SimpleGeometryIterator\nexport { SimpleGeometryIterator } from './Domain/Iterator/SimpleGeometry';\nexport { distance } from './Domain/Utility/Distance';\nexport { intersect } from './Domain/Utility/Intersect';\n","import { any } from '@konfirm/guard';\nimport { isTuple } from '../../Guards/Tuple';\nimport { type Altitude, isAltitude, isStrictAltitude } from './Altitude';\nimport { isLatitude, isStrictLatitude, type Latitude } from './Latitude';\nimport { isLongitude, isStrictLongitude, type Longitude } from './Longitude';\n\nexport type Position = [Longitude, Latitude, Altitude?];\nexport const isPosition = any<Position>(\n\tisTuple(isLongitude, isLatitude),\n\tisTuple(isLongitude, isLatitude, isAltitude),\n);\nexport const isStrictPosition = any<Position>(\n\tisTuple(isStrictLongitude, isStrictLatitude),\n\tisTuple(isStrictLongitude, isStrictLatitude, isStrictAltitude),\n);\nexport function isEquivalentPosition(one: unknown, two: unknown): boolean {\n\treturn (\n\t\tisPosition(one) &&\n\t\tisPosition(two) &&\n\t\tone.length === two.length &&\n\t\tone.every((v, i) => v === two[i])\n\t);\n}\n","import { type Guard, isArray, type Validator } from '@konfirm/guard';\n\nexport function isTuple<T extends Array<unknown>>(\n\t...rules: Array<Validator>\n): Guard<T> {\n\treturn (value: unknown): value is T =>\n\t\tisArray(value) &&\n\t\tvalue.length === rules.length &&\n\t\trules.every((rule, index) => rule(value[index]));\n}\n","export const EARTH_RADIUS = 6_371_008.7714; // mean radius\nexport const EARTH_RADIUS_MAJOR = 6_378_137; // equatorial radius\nexport const EARTH_RADIUS_MINOR = 6_356_752.314_245; // semiminor axis\nexport const EARTH_FLATTENING = 298.257_223_563;\nexport const GPS_SATELLITE_ORBIT = 20_180_000;\n","import { type Guard, isNumber } from '@konfirm/guard';\n\nexport function isNumberValue<T extends number>(value: unknown): value is T {\n\treturn isNumber(value) && Number.isFinite(value);\n}\n\nexport function isNumberBetween<T extends number>(\n\ta: number,\n\tb: number = Infinity,\n): Guard<T> {\n\tconst min = Math.min(a, b);\n\tconst max = Math.max(a, b);\n\n\treturn (value: unknown): value is T =>\n\t\tisNumberValue(value) && value >= min && value <= max;\n}\n","import { EARTH_RADIUS, GPS_SATELLITE_ORBIT } from '../../Constants';\nimport { isNumberBetween, isNumberValue } from '../../Guards/Number';\n\nexport type Altitude = number;\nexport function isAltitude(value: unknown): value is Altitude {\n\treturn isNumberValue(value);\n}\n\nexport const isStrictAltitude = isNumberBetween<Altitude>(\n\t-EARTH_RADIUS,\n\tGPS_SATELLITE_ORBIT,\n);\n","import { isNumberBetween, isNumberValue } from '../../Guards/Number';\n\nexport type Latitude = number;\nexport function isLatitude(value: unknown): value is Latitude {\n\treturn isNumberValue(value);\n}\nexport const isStrictLatitude = isNumberBetween<Latitude>(-90, 90);\n","import { isNumberBetween, isNumberValue } from '../../Guards/Number';\n\nexport type Longitude = number;\nexport function isLongitude(value: unknown): value is Longitude {\n\treturn isNumberValue(value);\n}\nexport const isStrictLongitude = isNumberBetween<Longitude>(-180, 180);\n","import { all, any, isNULL, isObject, isStructure } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\nimport { type Geometry, isGeometry, isStrictGeometry } from './Geometry';\nimport {\n\ttype GeometryCollection,\n\tisGeometryCollection,\n\tisStrictGeometryCollection,\n} from './GeometryCollection';\n\nexport type Feature = GeoJSONObject<{\n\ttype: 'Feature';\n\tgeometry: Geometry | GeometryCollection;\n\tproperties: { [key: string]: unknown } | null;\n}>;\nexport const isFeature = all<Feature>(\n\tisGeoJSONObject('Feature'),\n\tisStructure({\n\t\tgeometry: any(isGeometry, isGeometryCollection),\n\t\tproperties: any(isNULL, isObject),\n\t}),\n);\nexport const isStrictFeature = all<Feature>(\n\tisGeoJSONObject('Feature'),\n\tisStructure({\n\t\tgeometry: any(isStrictGeometry, isStrictGeometryCollection),\n\t\tproperties: any(isNULL, isObject),\n\t}),\n);\n","import { all, type Guard, isString, isStructure } from '@konfirm/guard';\nimport {\n\ttype BoundingBox,\n\tisBoundingBox,\n\tisStrictBoundingBox,\n} from './BoundingBox';\n\ntype GeoJSONBase = {\n\ttype: string;\n\tbbox?: BoundingBox;\n\t[key: string]: unknown;\n};\nexport type GeoJSONObject<T extends GeoJSONBase = GeoJSONBase> = GeoJSONBase &\n\tT;\nexport function isGeoJSONObject<T extends GeoJSONBase>(type: string): Guard<T> {\n\treturn isStructure<T>(\n\t\t{\n\t\t\ttype: all(isString, (value: unknown) => value === type),\n\t\t\tbbox: isBoundingBox,\n\t\t},\n\t\t'bbox',\n\t);\n}\nexport function isStrictGeoJSONObject<T extends GeoJSONBase>(\n\ttype: string,\n): Guard<T> {\n\treturn isStructure<T>(\n\t\t{\n\t\t\ttype: all(isString, (value: unknown) => value === type),\n\t\t\tbbox: isStrictBoundingBox,\n\t\t},\n\t\t'bbox',\n\t);\n}\n","import { all, any } from '@konfirm/guard';\nimport { isTuple } from '../../Guards/Tuple';\nimport { type Altitude, isAltitude, isStrictAltitude } from './Altitude';\nimport { isLatitude, isStrictLatitude, type Latitude } from './Latitude';\nimport { isLongitude, isStrictLongitude, type Longitude } from './Longitude';\n\nexport type BoundingBox =\n\t| [Longitude, Latitude, Altitude, Longitude, Latitude, Altitude]\n\t| [Longitude, Latitude, Longitude, Latitude];\nconst isBoundingBoxWithAltitude = all(\n\tisTuple(\n\t\tisLongitude,\n\t\tisLatitude,\n\t\tisAltitude,\n\t\tisLongitude,\n\t\tisLatitude,\n\t\tisAltitude,\n\t),\n\t([, s, , , n]) => s <= n,\n);\nconst isBoundingBoxWithoutAltitude = all(\n\tisTuple(isLongitude, isLatitude, isLongitude, isLatitude),\n\t([, s, , n]) => s <= n,\n);\nexport const isBoundingBox = any<BoundingBox>(\n\tisBoundingBoxWithAltitude,\n\tisBoundingBoxWithoutAltitude,\n);\nexport const isStrictBoundingBox = any<BoundingBox>(\n\tall(\n\t\tisTuple(\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t\tisStrictAltitude,\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t\tisStrictAltitude,\n\t\t),\n\t\tisBoundingBoxWithAltitude,\n\t),\n\tall(\n\t\tisTuple(\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t\tisStrictLongitude,\n\t\t\tisStrictLatitude,\n\t\t),\n\t\tisBoundingBoxWithoutAltitude,\n\t),\n);\n","import { any } from '@konfirm/guard';\nimport {\n\tisLineString,\n\tisStrictLineString,\n\ttype LineString,\n} from './Geometry/LineString';\nimport {\n\tisMultiLineString,\n\tisStrictMultiLineString,\n\ttype MultiLineString,\n} from './Geometry/MultiLineString';\nimport {\n\tisMultiPoint,\n\tisStrictMultiPoint,\n\ttype MultiPoint,\n} from './Geometry/MultiPoint';\nimport {\n\tisMultiPolygon,\n\tisStrictMultiPolygon,\n\ttype MultiPolygon,\n} from './Geometry/MultiPolygon';\nimport { isPoint, isStrictPoint, type Point } from './Geometry/Point';\nimport { isPolygon, isStrictPolygon, type Polygon } from './Geometry/Polygon';\n\nexport type Geometry =\n\t| Point\n\t| MultiPoint\n\t| LineString\n\t| MultiLineString\n\t| Polygon\n\t| MultiPolygon;\nexport const isGeometry = any<Geometry>(\n\tisPoint,\n\tisMultiPoint,\n\tisLineString,\n\tisMultiLineString,\n\tisPolygon,\n\tisMultiPolygon,\n);\nexport const isStrictGeometry = any<Geometry>(\n\tisStrictPoint,\n\tisStrictMultiPoint,\n\tisStrictLineString,\n\tisStrictMultiLineString,\n\tisStrictPolygon,\n\tisStrictMultiPolygon,\n);\n","import { all, type Guard, isKeyOfType, type Validator } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\n\ntype GeometryBase = GeoJSONObject & {\n\tcoordinates: Array<unknown>;\n};\n\nexport type GeometryObject<T extends GeometryBase> = Omit<\n\tGeometryBase,\n\t'coordinates'\n> &\n\tT;\nexport type MultiGeometryObject<T extends GeometryBase> = GeometryObject<{\n\ttype: `Multi${T['type']}`;\n\tcoordinates: Array<T['coordinates']>;\n}>;\nexport function isGeometryObject<T extends GeometryBase>(\n\ttype: string,\n\tisCoordinates: Validator,\n): Guard<T> {\n\treturn all<T>(\n\t\tisGeoJSONObject(type),\n\t\tisKeyOfType('coordinates', isCoordinates),\n\t);\n}\n","import { type Guard, isArrayOfType } from '@konfirm/guard';\nimport { isGeometryObject, type MultiGeometryObject } from '../GeometryObject';\nimport {\n\tisPointCoordinates,\n\tisStrictPointCoordinates,\n\ttype Point,\n} from './Point';\n\nexport type MultiPoint = MultiGeometryObject<Point>;\nexport const isMultiPointCoordinates: Guard<MultiPoint['coordinates']> =\n\tisArrayOfType(isPointCoordinates);\nexport const isMultiPoint = isGeometryObject<MultiPoint>(\n\t'MultiPoint',\n\tisMultiPointCoordinates,\n);\nexport const isStrictMultiPointCoordinates: Guard<MultiPoint['coordinates']> =\n\tisArrayOfType(isStrictPointCoordinates);\nexport const isStrictMultiPoint = isGeometryObject<MultiPoint>(\n\t'MultiPoint',\n\tisStrictMultiPointCoordinates,\n);\n","import type { Guard } from '@konfirm/guard';\nimport {\n\tisPosition,\n\tisStrictPosition,\n\ttype Position,\n} from '../Concept/Position';\nimport { type GeometryObject, isGeometryObject } from '../GeometryObject';\n\nexport type Point = GeometryObject<{\n\ttype: 'Point';\n\tcoordinates: Position;\n}>;\nexport const isPointCoordinates: Guard<Point['coordinates']> = isPosition;\nexport const isPoint: Guard<Point> = isGeometryObject<Point>(\n\t'Point',\n\tisPointCoordinates,\n);\nexport const isStrictPointCoordinates: Guard<Point['coordinates']> =\n\tisStrictPosition;\nexport const isStrictPoint: Guard<Point> = isGeometryObject<Point>(\n\t'Point',\n\tisStrictPointCoordinates,\n);\n","import type { Guard } from '@konfirm/guard';\nimport { type GeometryObject, isGeometryObject } from '../GeometryObject';\nimport {\n\tisMultiPointCoordinates,\n\tisStrictMultiPointCoordinates,\n\ttype MultiPoint,\n} from './MultiPoint';\n\nexport type LineString = GeometryObject<{\n\ttype: 'LineString';\n\tcoordinates: MultiPoint['coordinates'];\n}>;\nexport const isLineStringCoordinates = isMultiPointCoordinates;\nexport const isLineString: Guard<LineString> = isGeometryObject<LineString>(\n\t'LineString',\n\tisLineStringCoordinates,\n);\nexport const isStrictLineStringCoordinates = isStrictMultiPointCoordinates;\nexport const isStrictLineString: Guard<LineString> =\n\tisGeometryObject<LineString>('LineString', isStrictLineStringCoordinates);\n","import { isArrayOfType } from '@konfirm/guard';\nimport { isGeometryObject, type MultiGeometryObject } from '../GeometryObject';\nimport {\n\tisLineStringCoordinates,\n\tisStrictLineStringCoordinates,\n\ttype LineString,\n} from './LineString';\n\nexport type MultiLineString = MultiGeometryObject<LineString>;\nexport const isMultiLineStringCoordinates = isArrayOfType(\n\tisLineStringCoordinates,\n);\nexport const isMultiLineString = isGeometryObject<MultiLineString>(\n\t'MultiLineString',\n\tisMultiLineStringCoordinates,\n);\nexport const isStrictMultiLineStringCoordinates = isArrayOfType(\n\tisStrictLineStringCoordinates,\n);\nexport const isStrictMultiLineString = isGeometryObject<MultiLineString>(\n\t'MultiLineString',\n\tisStrictMultiLineStringCoordinates,\n);\n","import { isArrayOfType } from '@konfirm/guard';\nimport { isGeometryObject, type MultiGeometryObject } from '../GeometryObject';\nimport {\n\tisPolygonCoordinates,\n\tisStrictPolygonCoordinates,\n\ttype Polygon,\n} from './Polygon';\n\nexport type MultiPolygon = MultiGeometryObject<Polygon>;\nexport const isMultiPolygonCoordinates = isArrayOfType(isPolygonCoordinates);\nexport const isMultiPolygon = isGeometryObject<MultiPolygon>(\n\t'MultiPolygon',\n\tisMultiPolygonCoordinates,\n);\nexport const isStrictMultiPolygonCoordinates = isArrayOfType(\n\tisStrictPolygonCoordinates,\n);\nexport const isStrictMultiPolygon = isGeometryObject<MultiPolygon>(\n\t'MultiPolygon',\n\tisStrictMultiPolygonCoordinates,\n);\n","import { all, isArrayOfType } from '@konfirm/guard';\nimport { type ExteriorRing, isExteriorRing } from '../Concept/ExteriorRing';\nimport { type InteriorRing, isInteriorRing } from '../Concept/InteriorRing';\nimport { isLinearRing, isStrictLinearRing } from '../Concept/LinearRing';\nimport { type GeometryObject, isGeometryObject } from '../GeometryObject';\n\nexport type Polygon = GeometryObject<{\n\ttype: 'Polygon';\n\tcoordinates: [ExteriorRing, ...Array<InteriorRing>];\n}>;\nexport const isPolygonCoordinates = all(isArrayOfType(isLinearRing));\nexport const isPolygon = isGeometryObject<Polygon>(\n\t'Polygon',\n\tisPolygonCoordinates,\n);\nexport const isStrictPolygonCoordinates = all(\n\tisArrayOfType(isStrictLinearRing),\n\t(value: unknown) => isExteriorRing((<Array<unknown>>value)[0]),\n\t(value: unknown) => (<Array<unknown>>value).slice(1).every(isInteriorRing),\n);\nexport const isStrictPolygon = isGeometryObject<Polygon>(\n\t'Polygon',\n\tisStrictPolygonCoordinates,\n);\n","import { all } from '@konfirm/guard';\nimport { isCounterClockwiseWinding } from '../../Utility/Winding';\nimport {\n\tisLinearRing,\n\tisStrictLinearRing,\n\ttype LinearRing,\n} from './LinearRing';\n\nexport type ExteriorRing = LinearRing;\nexport const isExteriorRing = all<ExteriorRing>(isLinearRing);\nexport const isStrictExteriorRing = all<ExteriorRing>(\n\tisStrictLinearRing,\n\tisCounterClockwiseWinding,\n);\n","import { isArrayOfType } from '@konfirm/guard';\nimport { isPosition, type Position } from '../GeoJSON/Concept/Position';\n\nfunction winding(positions: Array<Position>): number {\n\treturn positions.reduce((carry, [x, y], i, a) => {\n\t\tconst [nx, ny] = a[(i + 1) % a.length];\n\n\t\treturn carry + (nx - x) * (ny + y);\n\t}, 0);\n}\n\nconst isPositionArray = isArrayOfType<Array<Position>>(isPosition);\n\nexport function isClockwiseWinding<T extends Array<Position>>(\n\tvalue: unknown,\n): value is T {\n\treturn isPositionArray(value) && winding(value) <= 0;\n}\nexport function isCounterClockwiseWinding<T extends Array<Position>>(\n\tvalue: unknown,\n): value is T {\n\treturn isPositionArray(value) && winding(value) >= 0;\n}\n","import { all, isArrayOfSize, isArrayOfType } from '@konfirm/guard';\nimport { isPosition, isStrictPosition, type Position } from './Position';\n\nexport type LinearRing = Array<Position>;\nexport const isLinearRing = all<LinearRing>(\n\tisArrayOfType(isPosition),\n\tisArrayOfSize(4),\n\t(value: Array<Position>) =>\n\t\tvalue[value.length - 1].every((v, i) => v === value[0][i]),\n);\nexport const isStrictLinearRing = all<LinearRing>(\n\tisArrayOfType(isStrictPosition),\n\tisArrayOfSize(4),\n\t(value: Array<Position>) =>\n\t\tvalue[value.length - 1].every((v, i) => v === value[0][i]),\n);\n","import { all } from '@konfirm/guard';\nimport { isClockwiseWinding } from '../../Utility/Winding';\nimport {\n\tisLinearRing,\n\tisStrictLinearRing,\n\ttype LinearRing,\n} from './LinearRing';\n\nexport type InteriorRing = LinearRing;\nexport const isInteriorRing = all<InteriorRing>(isLinearRing);\nexport const isStrictInteriorRing = all<InteriorRing>(\n\tisStrictLinearRing,\n\tisClockwiseWinding,\n);\n","import { all, any, isArrayOfType, isKeyOfType } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\nimport { type Geometry, isGeometry, isStrictGeometry } from './Geometry';\n\nexport type GeometryCollection = GeoJSONObject<{\n\ttype: 'GeometryCollection';\n\tgeometries: Array<Geometry | GeometryCollection>;\n}>;\n\nconst isGeometryCollectionObject = all<GeometryCollection>(\n\tisGeoJSONObject('GeometryCollection'),\n\tisKeyOfType(\n\t\t'geometries',\n\t\tisArrayOfType(any(isGeometry, isGeometryCollection)),\n\t),\n);\nconst isStrictGeometryCollectionObject = all<GeometryCollection>(\n\tisGeoJSONObject('GeometryCollection'),\n\tisKeyOfType(\n\t\t'geometries',\n\t\tisArrayOfType(any(isStrictGeometry, isStrictGeometryCollection)),\n\t),\n);\nexport function isGeometryCollection(\n\tvalue: unknown,\n): value is GeometryCollection {\n\treturn isGeometryCollectionObject(value);\n}\nexport function isStrictGeometryCollection(\n\tvalue: unknown,\n): value is GeometryCollection {\n\treturn isStrictGeometryCollectionObject(value);\n}\n","import { all, isArrayOfType, isKeyOfType } from '@konfirm/guard';\nimport { type GeoJSONObject, isGeoJSONObject } from './Concept/GeoJSONObject';\nimport { type Feature, isFeature, isStrictFeature } from './Feature';\n\nexport type FeatureCollection = GeoJSONObject<{\n\ttype: 'FeatureCollection';\n\tfeatures: Array<Feature>;\n}>;\nexport const isFeatureCollection = all<FeatureCollection>(\n\tisGeoJSONObject('FeatureCollection'),\n\tisKeyOfType('features', isArrayOfType(isFeature)),\n);\nexport const isStrictFeatureCollection = all<FeatureCollection>(\n\tisGeoJSONObject('FeatureCollection'),\n\tisKeyOfType('features', isArrayOfType(isStrictFeature)),\n);\n","import { any } from '@konfirm/guard';\nimport { type Feature, isFeature, isStrictFeature } from './Feature';\nimport {\n\ttype FeatureCollection,\n\tisFeatureCollection,\n\tisStrictFeatureCollection,\n} from './FeatureCollection';\nimport { type Geometry, isGeometry, isStrictGeometry } from './Geometry';\nimport {\n\ttype GeometryCollection,\n\tisGeometryCollection,\n\tisStrictGeometryCollection,\n} from './GeometryCollection';\n\nexport type GeoJSON =\n\t| Geometry\n\t| GeometryCollection\n\t| Feature\n\t| FeatureCollection;\nexport const isGeoJSON = any<GeoJSON>(\n\tisGeometry,\n\tisGeometryCollection,\n\tisFeature,\n\tisFeatureCollection,\n);\nexport const isStrictGeoJSON = any<GeoJSON>(\n\tisStrictGeometry,\n\tisStrictGeometryCollection,\n\tisStrictFeature,\n\tisStrictFeatureCollection,\n);\n","import type {\n\tLineString,\n\tMultiLineString,\n\tMultiPoint,\n\tMultiPolygon,\n\tPoint,\n\tPolygon,\n} from '../../main';\nimport type { Feature } from '../GeoJSON/Feature';\nimport type { FeatureCollection } from '../GeoJSON/FeatureCollection';\nimport type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { GeometryCollection } from '../GeoJSON/GeometryCollection';\n\ntype SimpleGeometry = Point | LineString | Polygon;\ntype UnwrapGeometry = Exclude<GeoJSON, SimpleGeometry>;\n\ntype Reducer = {\n\t[K in UnwrapGeometry['type']]: (\n\t\tgeo: Extract<UnwrapGeometry, { type: K }>,\n\t\tunwrap: (geo: GeoJSON) => Iterable<SimpleGeometry>,\n\t) => Iterable<SimpleGeometry>;\n};\n\nconst reducers: Reducer = {\n\t*MultiPoint(\n\t\t{ coordinates, ...rest }: MultiPoint,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const pair of coordinates) {\n\t\t\tyield* unwrap(<Point>{\n\t\t\t\tcoordinates: pair,\n\t\t\t\t...rest,\n\t\t\t\ttype: 'Point',\n\t\t\t});\n\t\t}\n\t},\n\t*MultiLineString(\n\t\t{ coordinates, ...rest }: MultiLineString,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const pair of coordinates) {\n\t\t\tyield* unwrap(<LineString>{\n\t\t\t\tcoordinates: pair,\n\t\t\t\t...rest,\n\t\t\t\ttype: 'LineString',\n\t\t\t});\n\t\t}\n\t},\n\t*MultiPolygon(\n\t\t{ coordinates, ...rest }: MultiPolygon,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const pair of coordinates) {\n\t\t\tyield* unwrap(<Polygon>{\n\t\t\t\tcoordinates: pair,\n\t\t\t\t...rest,\n\t\t\t\ttype: 'Polygon',\n\t\t\t});\n\t\t}\n\t},\n\t*GeometryCollection(\n\t\t{ geometries }: GeometryCollection,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const geometry of geometries) {\n\t\t\tyield* unwrap(geometry);\n\t\t}\n\t},\n\t*Feature({ geometry }: Feature, unwrap): Iterable<SimpleGeometry> {\n\t\tyield* unwrap(geometry);\n\t},\n\t*FeatureCollection(\n\t\t{ features }: FeatureCollection,\n\t\tunwrap,\n\t): Iterable<SimpleGeometry> {\n\t\tfor (const { geometry } of features) {\n\t\t\tyield* unwrap(geometry);\n\t\t}\n\t},\n};\n\n/**\n * Iterator class to turn any GeoJSON structure into one or more SimpleGeometry (Point | LineString | Polygon) objects\n *\n * @export\n * @class SimpleGeometryIterator\n */\nexport class SimpleGeometryIterator {\n\tprivate readonly inputs: Array<GeoJSON> = [];\n\n\tconstructor(...inputs: [GeoJSON, ...Array<GeoJSON>]) {\n\t\tthis.inputs = inputs;\n\t}\n\n\t/**\n\t * Generator yielding all SimpleGeometry objects from the provided GeoJSON structure(s)\n\t *\n\t * @return {*} {Iterator<SimpleGeometry>}\n\t * @memberof SimpleGeometryIterator\n\t */\n\t*[Symbol.iterator](): Iterator<SimpleGeometry> {\n\t\tfor (const input of this.inputs) {\n\t\t\tfor (const simple of this.unwrap(input)) {\n\t\t\t\tyield simple;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * unwrap any GeoJSON object into one or more SimpleGeometry object\n\t *\n\t * @private\n\t * @param {GeoJSON} geo\n\t * @return {*} {Iterable<SimpleGeometry>}\n\t * @memberof SimpleGeometryIterator\n\t */\n\tprivate *unwrap(geo: GeoJSON): Iterable<SimpleGeometry> {\n\t\ttype Invoke = (\n\t\t\tgeo: GeoJSON,\n\t\t\tunwrap: (geo: GeoJSON) => Iterable<SimpleGeometry>,\n\t\t) => Iterable<SimpleGeometry>;\n\t\tgeo.type in reducers\n\t\t\t? yield* (<Invoke>reducers[<keyof Reducer>geo.type])(\n\t\t\t\t\tgeo,\n\t\t\t\t\t(g: GeoJSON): Iterable<SimpleGeometry> => this.unwrap(g),\n\t\t\t\t)\n\t\t\t: yield <SimpleGeometry>geo;\n\t}\n}\n","/**\n * Iterator class which traverses all value pairs of two or more Iterable instances\n *\n * @export\n * @class IterablePairIterator\n * @template T\n */\nexport class IterablePairIterator<T = unknown> {\n\tprivate readonly iterators: Array<Iterable<T>> = [];\n\n\t/**\n\t * Constructs a new instance of IterablePairIterator\n\t *\n\t * @param iterators\n\t */\n\tconstructor(\n\t\t...iterators: [Iterable<T>, Iterable<T>, ...Array<Iterable<T>>]\n\t) {\n\t\tthis.iterators = iterators;\n\t}\n\n\t/**\n\t * Generator yielding all value pairs from the provided iterators\n\t *\n\t * @return {*} {Iterator<[T, T]>}\n\t * @memberof IterablePairIterator\n\t */\n\t*[Symbol.iterator](): Iterator<[T, T]> {\n\t\tfor (const [a, b] of this.pairs(this.iterators)) {\n\t\t\tfor (const one of a) {\n\t\t\t\tfor (const two of b) {\n\t\t\t\t\tyield [one, two];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Create unique Iterator<T> combinations to traverse over\n\t *\n\t * @private\n\t * @param {Array<Iterable<T>>} source\n\t * @return {*} {Array<[Iterable<T>, Iterable<T>]>}\n\t * @memberof IterablePairIterator\n\t */\n\tprivate pairs(\n\t\tsource: Array<Iterable<T>>,\n\t): Array<[Iterable<T>, Iterable<T>]> {\n\t\treturn source.flatMap((a, i) =>\n\t\t\tsource.slice(i + 1).map((b) => [a, b]),\n\t\t) as Array<[Iterable<T>, Iterable<T>]>;\n\t}\n}\n","import type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport { SimpleGeometryIterator } from '../Iterator/SimpleGeometry';\n\nexport type Box = [\n\tminLon: number,\n\tminLat: number,\n\tmaxLon: number,\n\tmaxLat: number,\n];\n\nfunction* positions(\n\tcoordinates: Array<unknown>,\n): Generator<Point['coordinates']> {\n\tif (typeof coordinates[0] === 'number') {\n\t\tyield coordinates as Point['coordinates'];\n\t} else {\n\t\tfor (const child of coordinates as Array<Array<unknown>>) {\n\t\t\tyield* positions(child);\n\t\t}\n\t}\n}\n\nfunction boxFromPositions(source: Iterable<Point['coordinates']>): Box {\n\tlet minLon = Infinity,\n\t\tminLat = Infinity,\n\t\tmaxLon = -Infinity,\n\t\tmaxLat = -Infinity;\n\n\tfor (const [lon, lat] of source) {\n\t\tif (lon < minLon) minLon = lon;\n\t\tif (lat < minLat) minLat = lat;\n\t\tif (lon > maxLon) maxLon = lon;\n\t\tif (lat > maxLat) maxLat = lat;\n\t}\n\n\treturn [minLon, minLat, maxLon, maxLat];\n}\n\nexport function createBoxFromCoordinates(coordinates: Array<unknown>): Box {\n\treturn boxFromPositions(positions(coordinates));\n}\n\nexport function createBox(shape: GeoJSON): Box {\n\treturn boxFromPositions(\n\t\t(function* () {\n\t\t\tfor (const geometry of new SimpleGeometryIterator(shape)) {\n\t\t\t\tyield* positions(\n\t\t\t\t\t(geometry as unknown as { coordinates: Array<unknown> })\n\t\t\t\t\t\t.coordinates,\n\t\t\t\t);\n\t\t\t}\n\t\t})(),\n\t);\n}\n\nexport function isWithinBox(\n\t[lon, lat]: Point['coordinates'],\n\t[minLon, minLat, maxLon, maxLat]: Box,\n): boolean {\n\treturn lon >= minLon && lon <= maxLon && lat >= minLat && lat <= maxLat;\n}\n","import {\n\tEARTH_FLATTENING,\n\tEARTH_RADIUS,\n\tEARTH_RADIUS_MAJOR,\n\tEARTH_RADIUS_MINOR,\n} from '../Constants';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport { createBoxFromCoordinates, isWithinBox } from './Box';\n\nconst D2R = Math.PI / 180;\nconst π = Math.PI;\n\nfunction constrain(value: number, min: number, max: number): number {\n\treturn Math.max(Math.min(value, max), min);\n}\n\nfunction squared(n: number): number {\n\treturn n * n;\n}\n\nfunction rad(n: number): number {\n\treturn n * D2R;\n}\n\nconst EARTH_RADIUS_MAJOR_SQUARED = squared(EARTH_RADIUS_MAJOR);\nconst EARTH_RADIUS_MINOR_SQUARED = squared(EARTH_RADIUS_MINOR);\nconst EARTH_RADIUS_FACTOR =\n\t(EARTH_RADIUS_MAJOR_SQUARED - EARTH_RADIUS_MINOR_SQUARED) /\n\tEARTH_RADIUS_MINOR_SQUARED;\nconst EARTH_INVERSE_FLATTENING = 1 / EARTH_FLATTENING;\n\nconst PointToPoint: {\n\t[key: string]: (\n\t\t...positions: [Point['coordinates'], Point['coordinates']]\n\t) => number;\n} = {\n\tcartesian([λa, φa], [λb, φb]) {\n\t\treturn (\n\t\t\tEARTH_RADIUS * rad(Math.sqrt(squared(λb - λa) + squared(φb - φa)))\n\t\t);\n\t},\n\thaversine([λa, φa], [λb, φb]) {\n\t\t//https://www.movable-type.co.uk/scripts/latlong.html\n\t\tconst Δ =\n\t\t\tsquared(Math.sin(rad(φb - φa) / 2)) +\n\t\t\tMath.cos(rad(φa)) *\n\t\t\t\tMath.cos(rad(φb)) *\n\t\t\t\tsquared(Math.sin(rad(λb - λa) / 2));\n\n\t\treturn EARTH_RADIUS * Math.atan2(Math.sqrt(Δ), Math.sqrt(1 - Δ)) * 2;\n\t},\n\tvincenty(...points) {\n\t\t//https://www.movable-type.co.uk/scripts/latlong-vincenty.html\n\t\tconst [[λ1, φ1], [λ2, φ2]] = points.map((p) =>\n\t\t\t(<Array<number>>p).map(rad),\n\t\t);\n\t\tconst L = λ2 - λ1; // L = difference in longitude, U = reduced latitude, defined by tan U = (1-f)·tanφ.\n\t\tconst tanU1 = (1 - EARTH_INVERSE_FLATTENING) * Math.tan(φ1),\n\t\t\tcosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1),\n\t\t\tsinU1 = tanU1 * cosU1;\n\t\tconst tanU2 = (1 - EARTH_INVERSE_FLATTENING) * Math.tan(φ2),\n\t\t\tcosU2 = 1 / Math.sqrt(1 + tanU2 * tanU2),\n\t\t\tsinU2 = tanU2 * cosU2;\n\n\t\tconst antipodal = Math.abs(L) > π / 2 || Math.abs(φ2 - φ1) > π / 2;\n\n\t\tlet λ = L;\n\t\tlet sinλ = null;\n\t\tlet cosλ = null; // λ = difference in longitude on an auxiliary sphere\n\t\tlet σ = antipodal ? π : 0;\n\t\tlet sinσ = 0;\n\t\tlet cosσ = antipodal ? -1 : 1;\n\t\tlet sinSqσ = null; // σ = angular distance P₁ P₂ on the sphere\n\t\tlet cos2σₘ = 1; // σₘ = angular distance on the sphere from the equator to the midpoint of the line\n\t\tlet cosSqα = 1; // α = azimuth of the geodesic at the equator\n\t\tlet λʹ = null;\n\t\tlet iterations = 0;\n\n\t\tdo {\n\t\t\tsinλ = Math.sin(λ);\n\t\t\tcosλ = Math.cos(λ);\n\t\t\tsinSqσ =\n\t\t\t\t(cosU2 * sinλ) ** 2 +\n\t\t\t\t(cosU1 * sinU2 - sinU1 * cosU2 * cosλ) ** 2;\n\t\t\tif (Math.abs(sinSqσ) < 1e-24) break; // co-incident/antipodal points (σ < ≈0.006mm)\n\t\t\tsinσ = Math.sqrt(sinSqσ);\n\t\t\tcosσ = sinU1 * sinU2 + cosU1 * cosU2 * cosλ;\n\t\t\tσ = Math.atan2(sinσ, cosσ);\n\t\t\tconst sinα = (cosU1 * cosU2 * sinλ) / sinσ;\n\t\t\tcosSqα = 1 - sinα * sinα;\n\t\t\tcos2σₘ = cosSqα !== 0 ? cosσ - (2 * sinU1 * sinU2) / cosSqα : 0; // on equatorial line cos²α = 0 (§6)\n\t\t\tconst C =\n\t\t\t\t(EARTH_INVERSE_FLATTENING / 16) *\n\t\t\t\tcosSqα *\n\t\t\t\t(4 + EARTH_INVERSE_FLATTENING * (4 - 3 * cosSqα));\n\t\t\tλʹ = λ;\n\t\t\tλ =\n\t\t\t\tL +\n\t\t\t\t(1 - C) *\n\t\t\t\t\tEARTH_INVERSE_FLATTENING *\n\t\t\t\t\tsinα *\n\t\t\t\t\t(σ +\n\t\t\t\t\t\tC *\n\t\t\t\t\t\t\tsinσ *\n\t\t\t\t\t\t\t(cos2σₘ + C * cosσ * (-1 + 2 * cos2σₘ * cos2σₘ)));\n\t\t\t// TODO: add tests\n\t\t\t// const iterationCheck = antipodal ? Math.abs(λ) - π : Math.abs(λ);\n\t\t\t// if (iterationCheck > π) throw new EvalError('λ > π');\n\t\t} while (Math.abs(λ - λʹ) > 1e-12 && ++iterations < 1000); // TV: 'iterate until negligible change in λ' (≈0.006mm)\n\t\t// TODO: add tests\n\t\t// if (iterations >= 1000) throw new EvalError('Vincenty formula failed to converge');\n\n\t\tconst uSq = cosSqα * EARTH_RADIUS_FACTOR;\n\t\tconst A =\n\t\t\t1 + (uSq / 16384) * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));\n\t\tconst B = (uSq / 1024) * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));\n\t\tconst Δσ =\n\t\t\tB *\n\t\t\tsinσ *\n\t\t\t(cos2σₘ +\n\t\t\t\t(B / 4) *\n\t\t\t\t\t(cosσ * (-1 + 2 * cos2σₘ * cos2σₘ) -\n\t\t\t\t\t\t(B / 6) *\n\t\t\t\t\t\t\tcos2σₘ *\n\t\t\t\t\t\t\t(-3 + 4 * sinσ * sinσ) *\n\t\t\t\t\t\t\t(-3 + 4 * cos2σₘ * cos2σₘ)));\n\n\t\treturn EARTH_RADIUS_MINOR * A * (σ - Δσ);\n\t},\n};\n\nexport type PointToPointCalculation =\n\t| 'cartesian'\n\t| 'haversine'\n\t| 'vincenty'\n\t| ((a: Point['coordinates'], b: Point['coordinates']) => number);\n\nexport function getClosestPointOnLineByPoint(\n\tpoint: Point['coordinates'],\n\tline: [Point['coordinates'], Point['coordinates']],\n): Point['coordinates'] {\n\tconst [[px, py], [ax, ay], [bx, by]] = [point, ...line];\n\tconst [abx, aby] = [bx - ax, by - ay];\n\tconst [apx, apy] = [px - ax, py - ay];\n\tconst t = constrain(\n\t\t(apx * abx + apy * aby) / (abx * abx + aby * aby),\n\t\t0,\n\t\t1,\n\t);\n\n\treturn t === 0 || t === 1 ? line[t] : [ax + abx * t, ay + aby * t];\n}\n\nexport function getDistanceOfPointToPoint(\n\ta: Point['coordinates'],\n\tb: Point['coordinates'],\n\tcalculation: PointToPointCalculation,\n): number {\n\tconst calc =\n\t\ttypeof calculation === 'function'\n\t\t\t? calculation\n\t\t\t: PointToPoint[calculation];\n\n\tif (typeof calc === 'function') {\n\t\treturn calc(a, b);\n\t}\n\n\tthrow new Error(`Not a PointToPoint calculation function ${calculation}`);\n}\n\nexport function getDistanceOfPointToLine(\n\tpoint: Point['coordinates'],\n\tline: [Point['coordinates'], Point['coordinates']],\n\tcalculation: PointToPointCalculation,\n): number {\n\treturn getDistanceOfPointToPoint(\n\t\tpoint,\n\t\tgetClosestPointOnLineByPoint(point, line),\n\t\tcalculation,\n\t);\n}\n\nexport function getDistanceOfLineToLine(\n\ta: [Point['coordinates'], Point['coordinates']],\n\tb: [Point['coordinates'], Point['coordinates']],\n\tcalculation: PointToPointCalculation,\n): number {\n\treturn isLinesCrossing(a, b)\n\t\t? 0\n\t\t: Math.min(\n\t\t\t\t...a.map((a) => getDistanceOfPointToLine(a, b, calculation)),\n\t\t\t\t...b.map((b) => getDistanceOfPointToLine(b, a, calculation)),\n\t\t\t);\n}\n\nexport function isLinesCrossing(\n\ta: [Point['coordinates'], Point['coordinates']],\n\tb: [Point['coordinates'], Point['coordinates']],\n): boolean {\n\tconst [[a1x, a1y], [a2x, a2y]] = a;\n\tconst [[b1x, b1y], [b2x, b2y]] = b;\n\tconst [s1x, s1y, s2x, s2y] = [a2x - a1x, a2y - a1y, b2x - b1x, b2y - b1y];\n\tconst s =\n\t\t(-s1y * (a1x - b1x) + s1x * (a1y - b1y)) / (-s2x * s1y + s1x * s2y);\n\tconst t =\n\t\t(s2x * (a1y - b1y) - s2y * (a1x - b1x)) / (-s2x * s1y + s1x * s2y);\n\n\treturn s >= 0 && s <= 1 && t >= 0 && t <= 1;\n}\n\nexport function isPointOnLine(\n\tpoint: Point['coordinates'],\n\tline: [Point['coordinates'], Point['coordinates']],\n\tthreshold: number = 1e-14,\n): boolean {\n\treturn getDistanceOfPointToLine(point, line, 'cartesian') < threshold;\n}\n\nexport function isPointInRing(\n\tp: Point['coordinates'],\n\tring: Array<Point['coordinates']>,\n): boolean {\n\tif (!isWithinBox(p, createBoxFromCoordinates(ring))) {\n\t\treturn false;\n\t}\n\n\tconst { length } = ring;\n\tconst odd = ring.reduce((odd, a, i) => {\n\t\tconst b = ring[(length + i - 1) % length];\n\n\t\treturn ((a[1] < p[1] && b[1] >= p[1]) ||\n\t\t\t(b[1] < p[1] && a[1] >= p[1])) &&\n\t\t\t(a[0] <= p[0] || b[0] <= p[0])\n\t\t\t? odd ^\n\t\t\t\t\tNumber(\n\t\t\t\t\t\ta[0] + ((p[1] - a[1]) / (b[1] - a[1])) * (b[0] - a[0]) <\n\t\t\t\t\t\t\tp[0],\n\t\t\t\t\t)\n\t\t\t: odd;\n\t}, 0);\n\n\treturn (\n\t\todd !== 0 ||\n\t\tring.slice(1).some((a, index) => isPointOnLine(p, [ring[index], a]))\n\t);\n}\n","import type { Point } from '../GeoJSON/Geometry/Point';\n\nexport function segments(\n\tline: Array<Point['coordinates']>,\n): Array<[Point['coordinates'], Point['coordinates']]> {\n\treturn line.slice(1).map((point, index) => [line[index], point]);\n}\n","import type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { LineString } from '../GeoJSON/Geometry/LineString';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport type { Polygon } from '../GeoJSON/Geometry/Polygon';\nimport { IterablePairIterator } from '../Iterator/IterablePair';\nimport { SimpleGeometryIterator } from '../Iterator/SimpleGeometry';\nimport {\n\tgetDistanceOfLineToLine,\n\tgetDistanceOfPointToLine,\n\tgetDistanceOfPointToPoint,\n\tisPointInRing,\n\ttype PointToPointCalculation,\n} from './Calculate';\nimport { segments } from './Segments';\n\nconst geometries = {\n\tPointPoint(\n\t\ta: Point['coordinates'],\n\t\tb: Point['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\treturn getDistanceOfPointToPoint(a, b, calculation);\n\t},\n\tLineStringPoint(\n\t\ta: LineString['coordinates'],\n\t\tb: Point['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\treturn Math.min(\n\t\t\t...segments(a).map((line) =>\n\t\t\t\tgetDistanceOfPointToLine(b, line, calculation),\n\t\t\t),\n\t\t);\n\t},\n\tLineStringLineString(\n\t\ta: LineString['coordinates'],\n\t\tb: LineString['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\tconst sa = segments(a);\n\t\tconst sb = segments(b);\n\n\t\treturn sa.reduce(\n\t\t\t(carry, a) =>\n\t\t\t\tsb.reduce(\n\t\t\t\t\t(carry, b) =>\n\t\t\t\t\t\tcarry > 0\n\t\t\t\t\t\t\t? Math.min(\n\t\t\t\t\t\t\t\t\tcarry,\n\t\t\t\t\t\t\t\t\tgetDistanceOfLineToLine(a, b, calculation),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: carry,\n\t\t\t\t\tcarry,\n\t\t\t\t),\n\t\t\tInfinity,\n\t\t);\n\t},\n\tPolygonPoint(\n\t\t[exterior, ...interior]: Polygon['coordinates'],\n\t\tb: Point['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\tif (isPointInRing(b, exterior)) {\n\t\t\tconst [excluded] = interior.filter((ring) =>\n\t\t\t\tisPointInRing(b, ring),\n\t\t\t);\n\n\t\t\treturn excluded\n\t\t\t\t? this.LineStringPoint(excluded, b, calculation)\n\t\t\t\t: 0;\n\t\t}\n\n\t\treturn this.LineStringPoint(exterior, b, calculation);\n\t},\n\tPolygonLineString(\n\t\ta: Polygon['coordinates'],\n\t\tb: LineString['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\tconst [exterior, ...interior] = a;\n\t\tconst line = segments(b);\n\t\tconst ring = b.some((b) => isPointInRing(b, exterior))\n\t\t\t? interior.find((a) => b.every((b) => isPointInRing(b, a)))\n\t\t\t: exterior;\n\n\t\treturn ring\n\t\t\t? Math.min(\n\t\t\t\t\t...segments(ring).map((a) =>\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t...line.map((b) =>\n\t\t\t\t\t\t\t\tgetDistanceOfLineToLine(a, b, calculation),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t: 0;\n\t},\n\tPolygonPolygon(\n\t\ta: Polygon['coordinates'],\n\t\tb: Polygon['coordinates'],\n\t\tcalculation: PointToPointCalculation,\n\t): number {\n\t\treturn Math.min(\n\t\t\tthis.PolygonLineString(a, b[0], calculation),\n\t\t\tthis.PolygonLineString(b, a[0], calculation),\n\t\t);\n\t},\n};\n\nexport function distance(\n\ta: GeoJSON,\n\tb: GeoJSON,\n\tcalculation: PointToPointCalculation = 'cartesian',\n): number {\n\tconst lookup = <\n\t\tRecord<\n\t\t\tstring,\n\t\t\t(\n\t\t\t\ta: unknown,\n\t\t\t\tb: unknown,\n\t\t\t\tcalculation: PointToPointCalculation,\n\t\t\t) => number\n\t\t>\n\t>geometries;\n\treturn Math.min(\n\t\t...[\n\t\t\t...new IterablePairIterator(\n\t\t\t\tnew SimpleGeometryIterator(a),\n\t\t\t\tnew SimpleGeometryIterator(b),\n\t\t\t),\n\t\t].map(([a, b]) => {\n\t\t\treturn a.type + b.type in lookup\n\t\t\t\t? lookup[a.type + b.type](\n\t\t\t\t\t\ta.coordinates,\n\t\t\t\t\t\tb.coordinates,\n\t\t\t\t\t\tcalculation,\n\t\t\t\t\t)\n\t\t\t\t: b.type + a.type in lookup\n\t\t\t\t\t? lookup[b.type + a.type](\n\t\t\t\t\t\t\tb.coordinates,\n\t\t\t\t\t\t\ta.coordinates,\n\t\t\t\t\t\t\tcalculation,\n\t\t\t\t\t\t)\n\t\t\t\t\t: Infinity;\n\t\t}),\n\t);\n}\n","import type { GeoJSON } from '../GeoJSON/GeoJSON';\nimport type { LineString } from '../GeoJSON/Geometry/LineString';\nimport type { Point } from '../GeoJSON/Geometry/Point';\nimport type { Polygon } from '../GeoJSON/Geometry/Polygon';\nimport { IterablePairIterator } from '../Iterator/IterablePair';\nimport { SimpleGeometryIterator } from '../Iterator/SimpleGeometry';\nimport { isLinesCrossing, isPointInRing, isPointOnLine } from './Calculate';\nimport { segments } from './Segments';\n\nconst geometries = {\n\tPointPoint(a: Point['coordinates'], b: Point['coordinates']): boolean {\n\t\treturn (\n\t\t\ta.length >= 2 &&\n\t\t\tb.length >= 2 &&\n\t\t\ta.slice(0, 2).every((v, i) => v === b[i])\n\t\t);\n\t},\n\tLineStringPoint(\n\t\ta: LineString['coordinates'],\n\t\tb: Point['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\ta.some((a) => this.PointPoint(a, b)) ||\n\t\t\tsegments(a).some((line) => isPointOnLine(b, line))\n\t\t);\n\t},\n\tLineStringLineString(\n\t\ta: LineString['coordinates'],\n\t\tb: LineString['coordinates'],\n\t): boolean {\n\t\tconst lines = segments(b);\n\n\t\treturn segments(a).some((a) =>\n\t\t\tlines.some((b) => isLinesCrossing(a, b)),\n\t\t);\n\t},\n\tPolygonPoint(\n\t\t[exterior, ...interior]: Polygon['coordinates'],\n\t\tb: Point['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\t(this.LineStringPoint(exterior, b) || isPointInRing(b, exterior)) &&\n\t\t\t(!interior.length ||\n\t\t\t\tinterior.every((ring) => !isPointInRing(b, ring)))\n\t\t);\n\t},\n\tPolygonLineString(\n\t\ta: Polygon['coordinates'],\n\t\tb: LineString['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\ta.some((ring) => this.LineStringLineString(ring, b)) ||\n\t\t\tb.some((point) => this.PolygonPoint(a, point))\n\t\t);\n\t},\n\tPolygonPolygon(\n\t\ta: Polygon['coordinates'],\n\t\tb: Polygon['coordinates'],\n\t): boolean {\n\t\treturn (\n\t\t\tb.some(\n\t\t\t\t(b1) =>\n\t\t\t\t\tthis.PolygonLineString(a, b1) ||\n\t\t\t\t\tb1.some((b2) => this.PolygonPoint(a, b2)),\n\t\t\t) ||\n\t\t\ta.some(\n\t\t\t\t(a1) =>\n\t\t\t\t\tthis.PolygonLineString(b, a1) ||\n\t\t\t\t\ta1.some((a2) => this.PolygonPoint(b, a2)),\n\t\t\t)\n\t\t);\n\t},\n};\n\nexport function intersect(a: GeoJSON, b: GeoJSON): boolean {\n\tconst lookup = <Record<string, (a: unknown, b: unknown) => boolean>>(\n\t\tgeometries\n\t);\n\tfor (const [itA, itB] of new IterablePairIterator(\n\t\tnew SimpleGeometryIterator(a),\n\t\tnew SimpleGeometryIterator(b),\n\t)) {\n\t\tif (\n\t\t\t(itA.type + itB.type in lookup &&\n\t\t\t\tlookup[itA.type + itB.type](\n\t\t\t\t\titA.coordinates,\n\t\t\t\t\titB.coordinates,\n\t\t\t\t)) ||\n\t\t\t(itB.type + itA.type in lookup &&\n\t\t\t\tlookup[itB.type + itA.type](itB.coordinates, itA.coordinates))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAAoB;;;ACApB,mBAAoD;AAE7C,SAAS,WACZ,OACQ;AACX,SAAO,CAAC,cACP,sBAAQ,KAAK,KACb,MAAM,WAAW,MAAM,UACvB,MAAM,MAAM,CAAC,MAAM,UAAU,KAAK,MAAM,KAAK,CAAC,CAAC;AACjD;;;ACTO,IAAM,eAAe;AACrB,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;;;ACJnC,IAAAC,gBAAqC;AAE9B,SAAS,cAAgC,OAA4B;AAC3E,aAAO,wBAAS,KAAK,KAAK,OAAO,SAAS,KAAK;AAChD;AAEO,SAAS,gBACf,GACA,IAAY,UACD;AACX,QAAM,MAAM,KAAK,IAAI,GAAG,CAAC;AACzB,QAAM,MAAM,KAAK,IAAI,GAAG,CAAC;AAEzB,SAAO,CAAC,UACP,cAAc,KAAK,KAAK,SAAS,OAAO,SAAS;AACnD;;;ACXO,SAAS,WAAW,OAAmC;AAC7D,SAAO,cAAc,KAAK;AAC3B;AAEO,IAAM,mBAAmB;AAAA,EAC/B,CAAC;AAAA,EACD;AACD;;;ACRO,SAAS,WAAW,OAAmC;AAC7D,SAAO,cAAc,KAAK;AAC3B;AACO,IAAM,mBAAmB,gBAA0B,KAAK,EAAE;;;ACH1D,SAAS,YAAY,OAAoC;AAC/D,SAAO,cAAc,KAAK;AAC3B;AACO,IAAM,oBAAoB,gBAA2B,MAAM,GAAG;;;ANC9D,IAAM,iBAAa;AAAA,EACzB,QAAQ,aAAa,UAAU;AAAA,EAC/B,QAAQ,aAAa,YAAY,UAAU;AAC5C;AACO,IAAM,uBAAmB;AAAA,EAC/B,QAAQ,mBAAmB,gBAAgB;AAAA,EAC3C,QAAQ,mBAAmB,kBAAkB,gBAAgB;AAC9D;;;AOdA,IAAAC,iBAAwD;;;ACAxD,IAAAC,gBAAuD;;;ACAvD,IAAAC,gBAAyB;AASzB,IAAM,gCAA4B;AAAA,EACjC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,KAAK;AACxB;AACA,IAAM,mCAA+B;AAAA,EACpC,QAAQ,aAAa,YAAY,aAAa,UAAU;AAAA,EACxD,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK;AACtB;AACO,IAAM,oBAAgB;AAAA,EAC5B;AAAA,EACA;AACD;AACO,IAAM,0BAAsB;AAAA,MAClC;AAAA,IACC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA;AAAA,EACD;AAAA,MACA;AAAA,IACC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA;AAAA,EACD;AACD;;;ADnCO,SAAS,gBAAuC,MAAwB;AAC9E,aAAO;AAAA,IACN;AAAA,MACC,UAAM,mBAAI,wBAAU,CAAC,UAAmB,UAAU,IAAI;AAAA,MACtD,MAAM;AAAA,IACP;AAAA,IACA;AAAA,EACD;AACD;;;AEtBA,IAAAC,iBAAoB;;;ACApB,IAAAC,gBAA6D;AAgBtD,SAAS,iBACf,MACA,eACW;AACX,aAAO;AAAA,IACN,gBAAgB,IAAI;AAAA,QACpB,2BAAY,eAAe,aAAa;AAAA,EACzC;AACD;;;ACxBA,IAAAC,gBAA0C;;;ACYnC,IAAM,qBAAkD;AACxD,IAAM,UAAwB;AAAA,EACpC;AAAA,EACA;AACD;AACO,IAAM,2BACZ;AACM,IAAM,gBAA8B;AAAA,EAC1C;AAAA,EACA;AACD;;;ADbO,IAAM,8BACZ,6BAAc,kBAAkB;AAC1B,IAAM,eAAe;AAAA,EAC3B;AAAA,EACA;AACD;AACO,IAAM,oCACZ,6BAAc,wBAAwB;AAChC,IAAM,qBAAqB;AAAA,EACjC;AAAA,EACA;AACD;;;AERO,IAAM,0BAA0B;AAChC,IAAM,eAAkC;AAAA,EAC9C;AAAA,EACA;AACD;AACO,IAAM,gCAAgC;AACtC,IAAM,qBACZ,iBAA6B,cAAc,6BAA6B;;;ACnBzE,IAAAC,gBAA8B;AASvB,IAAM,mCAA+B;AAAA,EAC3C;AACD;AACO,IAAM,oBAAoB;AAAA,EAChC;AAAA,EACA;AACD;AACO,IAAM,yCAAqC;AAAA,EACjD;AACD;AACO,IAAM,0BAA0B;AAAA,EACtC;AAAA,EACA;AACD;;;ACtBA,IAAAC,iBAA8B;;;ACA9B,IAAAC,iBAAmC;;;ACAnC,IAAAC,iBAAoB;;;ACApB,IAAAC,gBAA8B;AAG9B,SAAS,QAAQC,YAAoC;AACpD,SAAOA,WAAU,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM;AAChD,UAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,EAAE,MAAM;AAErC,WAAO,SAAS,KAAK,MAAM,KAAK;AAAA,EACjC,GAAG,CAAC;AACL;AAEA,IAAM,sBAAkB,6BAA+B,UAAU;AAE1D,SAAS,mBACf,OACa;AACb,SAAO,gBAAgB,KAAK,KAAK,QAAQ,KAAK,KAAK;AACpD;AACO,SAAS,0BACf,OACa;AACb,SAAO,gBAAgB,KAAK,KAAK,QAAQ,KAAK,KAAK;AACpD;;;ACtBA,IAAAC,iBAAkD;AAI3C,IAAM,mBAAe;AAAA,MAC3B,8BAAc,UAAU;AAAA,MACxB,8BAAc,CAAC;AAAA,EACf,CAAC,UACA,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3D;AACO,IAAM,yBAAqB;AAAA,MACjC,8BAAc,gBAAgB;AAAA,MAC9B,8BAAc,CAAC;AAAA,EACf,CAAC,UACA,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3D;;;AFNO,IAAM,qBAAiB,oBAAkB,YAAY;AACrD,IAAM,2BAAuB;AAAA,EACnC;AAAA,EACA;AACD;;;AGbA,IAAAC,iBAAoB;AASb,IAAM,qBAAiB,oBAAkB,YAAY;AACrD,IAAM,2BAAuB;AAAA,EACnC;AAAA,EACA;AACD;;;AJHO,IAAM,2BAAuB,wBAAI,8BAAc,YAAY,CAAC;AAC5D,IAAM,YAAY;AAAA,EACxB;AAAA,EACA;AACD;AACO,IAAM,iCAA6B;AAAA,MACzC,8BAAc,kBAAkB;AAAA,EAChC,CAAC,UAAmB,eAAgC,MAAO,CAAC,CAAC;AAAA,EAC7D,CAAC,UAAoC,MAAO,MAAM,CAAC,EAAE,MAAM,cAAc;AAC1E;AACO,IAAM,kBAAkB;AAAA,EAC9B;AAAA,EACA;AACD;;;ADdO,IAAM,gCAA4B,8BAAc,oBAAoB;AACpE,IAAM,iBAAiB;AAAA,EAC7B;AAAA,EACA;AACD;AACO,IAAM,sCAAkC;AAAA,EAC9C;AACD;AACO,IAAM,uBAAuB;AAAA,EACnC;AAAA,EACA;AACD;;;ANWO,IAAM,iBAAa;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACO,IAAM,uBAAmB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;AY9CA,IAAAC,iBAAqD;AASrD,IAAM,iCAA6B;AAAA,EAClC,gBAAgB,oBAAoB;AAAA,MACpC;AAAA,IACC;AAAA,QACA,kCAAc,oBAAI,YAAY,oBAAoB,CAAC;AAAA,EACpD;AACD;AACA,IAAM,uCAAmC;AAAA,EACxC,gBAAgB,oBAAoB;AAAA,MACpC;AAAA,IACC;AAAA,QACA,kCAAc,oBAAI,kBAAkB,0BAA0B,CAAC;AAAA,EAChE;AACD;AACO,SAAS,qBACf,OAC8B;AAC9B,SAAO,2BAA2B,KAAK;AACxC;AACO,SAAS,2BACf,OAC8B;AAC9B,SAAO,iCAAiC,KAAK;AAC9C;;;AflBO,IAAM,gBAAY;AAAA,EACxB,gBAAgB,SAAS;AAAA,MACzB,4BAAY;AAAA,IACX,cAAU,oBAAI,YAAY,oBAAoB;AAAA,IAC9C,gBAAY,oBAAI,uBAAQ,uBAAQ;AAAA,EACjC,CAAC;AACF;AACO,IAAM,sBAAkB;AAAA,EAC9B,gBAAgB,SAAS;AAAA,MACzB,4BAAY;AAAA,IACX,cAAU,oBAAI,kBAAkB,0BAA0B;AAAA,IAC1D,gBAAY,oBAAI,uBAAQ,uBAAQ;AAAA,EACjC,CAAC;AACF;;;AgB3BA,IAAAC,iBAAgD;AAQzC,IAAM,0BAAsB;AAAA,EAClC,gBAAgB,mBAAmB;AAAA,MACnC,4BAAY,gBAAY,8BAAc,SAAS,CAAC;AACjD;AACO,IAAM,gCAA4B;AAAA,EACxC,gBAAgB,mBAAmB;AAAA,MACnC,4BAAY,gBAAY,8BAAc,eAAe,CAAC;AACvD;;;ACfA,IAAAC,iBAAoB;AAmBb,IAAM,gBAAY;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AACO,IAAM,sBAAkB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;;;ACPA,IAAM,WAAoB;AAAA,EACzB,CAAC,WACA,EAAE,aAAa,GAAG,KAAK,GACvB,QAC2B;AAC3B,eAAW,QAAQ,aAAa;AAC/B,aAAO,OAAc;AAAA,QACpB,aAAa;AAAA,QACb,GAAG;AAAA,QACH,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EACA,CAAC,gBACA,EAAE,aAAa,GAAG,KAAK,GACvB,QAC2B;AAC3B,eAAW,QAAQ,aAAa;AAC/B,aAAO,OAAmB;AAAA,QACzB,aAAa;AAAA,QACb,GAAG;AAAA,QACH,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EACA,CAAC,aACA,EAAE,aAAa,GAAG,KAAK,GACvB,QAC2B;AAC3B,eAAW,QAAQ,aAAa;AAC/B,aAAO,OAAgB;AAAA,QACtB,aAAa;AAAA,QACb,GAAG;AAAA,QACH,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EACA,CAAC,mBACA,EAAE,YAAAC,YAAW,GACb,QAC2B;AAC3B,eAAW,YAAYA,aAAY;AAClC,aAAO,OAAO,QAAQ;AAAA,IACvB;AAAA,EACD;AAAA,EACA,CAAC,QAAQ,EAAE,SAAS,GAAY,QAAkC;AACjE,WAAO,OAAO,QAAQ;AAAA,EACvB;AAAA,EACA,CAAC,kBACA,EAAE,SAAS,GACX,QAC2B;AAC3B,eAAW,EAAE,SAAS,KAAK,UAAU;AACpC,aAAO,OAAO,QAAQ;AAAA,IACvB;AAAA,EACD;AACD;AAQO,IAAM,yBAAN,MAA6B;AAAA,EAGnC,eAAe,QAAsC;AAFrD,SAAiB,SAAyB,CAAC;AAG1C,SAAK,SAAS;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,EAAE,OAAO,QAAQ,IAA8B;AAC9C,eAAW,SAAS,KAAK,QAAQ;AAChC,iBAAW,UAAU,KAAK,OAAO,KAAK,GAAG;AACxC,cAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,CAAS,OAAO,KAAwC;AAKvD,QAAI,QAAQ,WACT,OAAgB,SAAwB,IAAI,IAAI;AAAA,MAChD;AAAA,MACA,CAAC,MAAyC,KAAK,OAAO,CAAC;AAAA,IACxD,IACC,MAAsB;AAAA,EAC1B;AACD;;;ACzHO,IAAM,uBAAN,MAAwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9C,eACI,WACF;AATF,SAAiB,YAAgC,CAAC;AAUjD,SAAK,YAAY;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,EAAE,OAAO,QAAQ,IAAsB;AACtC,eAAW,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,KAAK,SAAS,GAAG;AAChD,iBAAW,OAAO,GAAG;AACpB,mBAAW,OAAO,GAAG;AACpB,gBAAM,CAAC,KAAK,GAAG;AAAA,QAChB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,MACP,QACoC;AACpC,WAAO,OAAO;AAAA,MAAQ,CAAC,GAAG,MACzB,OAAO,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IACtC;AAAA,EACD;AACD;;;ACzCA,UAAU,UACT,aACkC;AAClC,MAAI,OAAO,YAAY,CAAC,MAAM,UAAU;AACvC,UAAM;AAAA,EACP,OAAO;AACN,eAAW,SAAS,aAAsC;AACzD,aAAO,UAAU,KAAK;AAAA,IACvB;AAAA,EACD;AACD;AAEA,SAAS,iBAAiB,QAA6C;AACtE,MAAI,SAAS,UACZ,SAAS,UACT,SAAS,WACT,SAAS;AAEV,aAAW,CAAC,KAAK,GAAG,KAAK,QAAQ;AAChC,QAAI,MAAM,OAAQ,UAAS;AAC3B,QAAI,MAAM,OAAQ,UAAS;AAC3B,QAAI,MAAM,OAAQ,UAAS;AAC3B,QAAI,MAAM,OAAQ,UAAS;AAAA,EAC5B;AAEA,SAAO,CAAC,QAAQ,QAAQ,QAAQ,MAAM;AACvC;AAEO,SAAS,yBAAyB,aAAkC;AAC1E,SAAO,iBAAiB,UAAU,WAAW,CAAC;AAC/C;AAeO,SAAS,YACf,CAAC,KAAK,GAAG,GACT,CAAC,QAAQ,QAAQ,QAAQ,MAAM,GACrB;AACV,SAAO,OAAO,UAAU,OAAO,UAAU,OAAO,UAAU,OAAO;AAClE;;;ACpDA,IAAM,MAAM,KAAK,KAAK;AACtB,IAAM,SAAI,KAAK;AAEf,SAAS,UAAU,OAAe,KAAa,KAAqB;AACnE,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC1C;AAEA,SAAS,QAAQ,GAAmB;AACnC,SAAO,IAAI;AACZ;AAEA,SAAS,IAAI,GAAmB;AAC/B,SAAO,IAAI;AACZ;AAEA,IAAM,6BAA6B,QAAQ,kBAAkB;AAC7D,IAAM,6BAA6B,QAAQ,kBAAkB;AAC7D,IAAM,uBACJ,6BAA6B,8BAC9B;AACD,IAAM,2BAA2B,IAAI;AAErC,IAAM,eAIF;AAAA,EACH,UAAU,CAAC,SAAI,OAAE,GAAG,CAAC,SAAI,OAAE,GAAG;AAC7B,WACC,eAAe,IAAI,KAAK,KAAK,QAAQ,UAAK,OAAE,IAAI,QAAQ,UAAK,OAAE,CAAC,CAAC;AAAA,EAEnE;AAAA,EACA,UAAU,CAAC,SAAI,OAAE,GAAG,CAAC,SAAI,OAAE,GAAG;AAE7B,UAAM,SACL,QAAQ,KAAK,IAAI,IAAI,UAAK,OAAE,IAAI,CAAC,CAAC,IAClC,KAAK,IAAI,IAAI,OAAE,CAAC,IACf,KAAK,IAAI,IAAI,OAAE,CAAC,IAChB,QAAQ,KAAK,IAAI,IAAI,UAAK,OAAE,IAAI,CAAC,CAAC;AAEpC,WAAO,eAAe,KAAK,MAAM,KAAK,KAAK,MAAC,GAAG,KAAK,KAAK,IAAI,MAAC,CAAC,IAAI;AAAA,EACpE;AAAA,EACA,YAAY,QAAQ;AAEnB,UAAM,CAAC,CAAC,SAAI,OAAE,GAAG,CAAC,SAAI,OAAE,CAAC,IAAI,OAAO;AAAA,MAAI,CAAC,MACxB,EAAG,IAAI,GAAG;AAAA,IAC3B;AACA,UAAM,IAAI,UAAK;AACf,UAAM,SAAS,IAAI,4BAA4B,KAAK,IAAI,OAAE,GACzD,QAAQ,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,GACvC,QAAQ,QAAQ;AACjB,UAAM,SAAS,IAAI,4BAA4B,KAAK,IAAI,OAAE,GACzD,QAAQ,IAAI,KAAK,KAAK,IAAI,QAAQ,KAAK,GACvC,QAAQ,QAAQ;AAEjB,UAAM,YAAY,KAAK,IAAI,CAAC,IAAI,SAAI,KAAK,KAAK,IAAI,UAAK,OAAE,IAAI,SAAI;AAEjE,QAAI,SAAI;AACR,QAAI,YAAO;AACX,QAAI,YAAO;AACX,QAAI,SAAI,YAAY,SAAI;AACxB,QAAI,YAAO;AACX,QAAI,YAAO,YAAY,KAAK;AAC5B,QAAI,cAAS;AACb,QAAI,mBAAS;AACb,QAAI,cAAS;AACb,QAAI,eAAK;AACT,QAAI,aAAa;AAEjB,OAAG;AACF,kBAAO,KAAK,IAAI,MAAC;AACjB,kBAAO,KAAK,IAAI,MAAC;AACjB,qBACE,QAAQ,cAAS,KACjB,QAAQ,QAAQ,QAAQ,QAAQ,cAAS;AAC3C,UAAI,KAAK,IAAI,WAAM,IAAI,MAAO;AAC9B,kBAAO,KAAK,KAAK,WAAM;AACvB,kBAAO,QAAQ,QAAQ,QAAQ,QAAQ;AACvC,eAAI,KAAK,MAAM,WAAM,SAAI;AACzB,YAAM,YAAQ,QAAQ,QAAQ,YAAQ;AACtC,oBAAS,IAAI,YAAO;AACpB,yBAAS,gBAAW,IAAI,YAAQ,IAAI,QAAQ,QAAS,cAAS;AAC9D,YAAM,IACJ,2BAA2B,KAC5B,eACC,IAAI,4BAA4B,IAAI,IAAI;AAC1C,qBAAK;AACL,eACC,KACC,IAAI,KACJ,2BACA,aACC,SACA,IACC,aACC,mBAAS,IAAI,aAAQ,KAAK,IAAI,mBAAS;AAAA,IAI7C,SAAS,KAAK,IAAI,SAAI,YAAE,IAAI,SAAS,EAAE,aAAa;AAIpD,UAAM,MAAM,cAAS;AACrB,UAAM,IACL,IAAK,MAAM,SAAU,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM;AAC9D,UAAM,IAAK,MAAM,QAAS,MAAM,OAAO,OAAO,OAAO,KAAK,KAAK;AAC/D,UAAM,eACL,IACA,aACC,mBACC,IAAI,KACH,aAAQ,KAAK,IAAI,mBAAS,oBACzB,IAAI,IACJ,oBACC,KAAK,IAAI,YAAO,cAChB,KAAK,IAAI,mBAAS;AAExB,WAAO,qBAAqB,KAAK,SAAI;AAAA,EACtC;AACD;AAQO,SAAS,6BACf,OACA,MACuB;AACvB,QAAM,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;AACtD,QAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE;AACpC,QAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE;AACpC,QAAM,IAAI;AAAA,KACR,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM,MAAM;AAAA,IAC7C;AAAA,IACA;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,KAAK,MAAM,CAAC;AAClE;AAEO,SAAS,0BACf,GACA,GACA,aACS;AACT,QAAM,OACL,OAAO,gBAAgB,aACpB,cACA,aAAa,WAAW;AAE5B,MAAI,OAAO,SAAS,YAAY;AAC/B,WAAO,KAAK,GAAG,CAAC;AAAA,EACjB;AAEA,QAAM,IAAI,MAAM,2CAA2C,WAAW,EAAE;AACzE;AAEO,SAAS,yBACf,OACA,MACA,aACS;AACT,SAAO;AAAA,IACN;AAAA,IACA,6BAA6B,OAAO,IAAI;AAAA,IACxC;AAAA,EACD;AACD;AAEO,SAAS,wBACf,GACA,GACA,aACS;AACT,SAAO,gBAAgB,GAAG,CAAC,IACxB,IACA,KAAK;AAAA,IACL,GAAG,EAAE,IAAI,CAACC,OAAM,yBAAyBA,IAAG,GAAG,WAAW,CAAC;AAAA,IAC3D,GAAG,EAAE,IAAI,CAACC,OAAM,yBAAyBA,IAAG,GAAG,WAAW,CAAC;AAAA,EAC5D;AACH;AAEO,SAAS,gBACf,GACA,GACU;AACV,QAAM,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI;AACjC,QAAM,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI;AACjC,QAAM,CAAC,KAAK,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG;AACxE,QAAM,KACJ,CAAC,OAAO,MAAM,OAAO,OAAO,MAAM,SAAS,CAAC,MAAM,MAAM,MAAM;AAChE,QAAM,KACJ,OAAO,MAAM,OAAO,OAAO,MAAM,SAAS,CAAC,MAAM,MAAM,MAAM;AAE/D,SAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK;AAC3C;AAEO,SAAS,cACf,OACA,MACA,YAAoB,OACV;AACV,SAAO,yBAAyB,OAAO,MAAM,WAAW,IAAI;AAC7D;AAEO,SAAS,cACf,GACA,MACU;AACV,MAAI,CAAC,YAAY,GAAG,yBAAyB,IAAI,CAAC,GAAG;AACpD,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,MAAM,KAAK,OAAO,CAACC,MAAK,GAAG,MAAM;AACtC,UAAM,IAAI,MAAM,SAAS,IAAI,KAAK,MAAM;AAExC,YAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KACjC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,OAC1B,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAC1BA,OACA;AAAA,MACC,EAAE,CAAC,KAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KACnD,EAAE,CAAC;AAAA,IACL,IACAA;AAAA,EACJ,GAAG,CAAC;AAEJ,SACC,QAAQ,KACR,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,UAAU,cAAc,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC;AAErE;;;ACnPO,SAAS,SACf,MACsD;AACtD,SAAO,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,KAAK,GAAG,KAAK,CAAC;AAChE;;;ACSA,IAAM,aAAa;AAAA,EAClB,WACC,GACA,GACA,aACS;AACT,WAAO,0BAA0B,GAAG,GAAG,WAAW;AAAA,EACnD;AAAA,EACA,gBACC,GACA,GACA,aACS;AACT,WAAO,KAAK;AAAA,MACX,GAAG,SAAS,CAAC,EAAE;AAAA,QAAI,CAAC,SACnB,yBAAyB,GAAG,MAAM,WAAW;AAAA,MAC9C;AAAA,IACD;AAAA,EACD;AAAA,EACA,qBACC,GACA,GACA,aACS;AACT,UAAM,KAAK,SAAS,CAAC;AACrB,UAAM,KAAK,SAAS,CAAC;AAErB,WAAO,GAAG;AAAA,MACT,CAAC,OAAOC,OACP,GAAG;AAAA,QACF,CAACC,QAAOC,OACPD,SAAQ,IACL,KAAK;AAAA,UACLA;AAAA,UACA,wBAAwBD,IAAGE,IAAG,WAAW;AAAA,QAC1C,IACCD;AAAA,QACJ;AAAA,MACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,aACC,CAAC,UAAU,GAAG,QAAQ,GACtB,GACA,aACS;AACT,QAAI,cAAc,GAAG,QAAQ,GAAG;AAC/B,YAAM,CAAC,QAAQ,IAAI,SAAS;AAAA,QAAO,CAAC,SACnC,cAAc,GAAG,IAAI;AAAA,MACtB;AAEA,aAAO,WACJ,KAAK,gBAAgB,UAAU,GAAG,WAAW,IAC7C;AAAA,IACJ;AAEA,WAAO,KAAK,gBAAgB,UAAU,GAAG,WAAW;AAAA,EACrD;AAAA,EACA,kBACC,GACA,GACA,aACS;AACT,UAAM,CAAC,UAAU,GAAG,QAAQ,IAAI;AAChC,UAAM,OAAO,SAAS,CAAC;AACvB,UAAM,OAAO,EAAE,KAAK,CAACC,OAAM,cAAcA,IAAG,QAAQ,CAAC,IAClD,SAAS,KAAK,CAACF,OAAM,EAAE,MAAM,CAACE,OAAM,cAAcA,IAAGF,EAAC,CAAC,CAAC,IACxD;AAEH,WAAO,OACJ,KAAK;AAAA,MACL,GAAG,SAAS,IAAI,EAAE;AAAA,QAAI,CAACA,OACtB,KAAK;AAAA,UACJ,GAAG,KAAK;AAAA,YAAI,CAACE,OACZ,wBAAwBF,IAAGE,IAAG,WAAW;AAAA,UAC1C;AAAA,QACD;AAAA,MACD;AAAA,IACD,IACC;AAAA,EACJ;AAAA,EACA,eACC,GACA,GACA,aACS;AACT,WAAO,KAAK;AAAA,MACX,KAAK,kBAAkB,GAAG,EAAE,CAAC,GAAG,WAAW;AAAA,MAC3C,KAAK,kBAAkB,GAAG,EAAE,CAAC,GAAG,WAAW;AAAA,IAC5C;AAAA,EACD;AACD;AAEO,SAAS,SACf,GACA,GACA,cAAuC,aAC9B;AACT,QAAM,SASL;AACD,SAAO,KAAK;AAAA,IACX,GAAG;AAAA,MACF,GAAG,IAAI;AAAA,QACN,IAAI,uBAAuB,CAAC;AAAA,QAC5B,IAAI,uBAAuB,CAAC;AAAA,MAC7B;AAAA,IACD,EAAE,IAAI,CAAC,CAACF,IAAGE,EAAC,MAAM;AACjB,aAAOF,GAAE,OAAOE,GAAE,QAAQ,SACvB,OAAOF,GAAE,OAAOE,GAAE,IAAI;AAAA,QACtBF,GAAE;AAAA,QACFE,GAAE;AAAA,QACF;AAAA,MACD,IACCA,GAAE,OAAOF,GAAE,QAAQ,SAClB,OAAOE,GAAE,OAAOF,GAAE,IAAI;AAAA,QACtBE,GAAE;AAAA,QACFF,GAAE;AAAA,QACF;AAAA,MACD,IACC;AAAA,IACL,CAAC;AAAA,EACF;AACD;;;ACzIA,IAAMG,cAAa;AAAA,EAClB,WAAW,GAAyB,GAAkC;AACrE,WACC,EAAE,UAAU,KACZ,EAAE,UAAU,KACZ,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC;AAAA,EAE1C;AAAA,EACA,gBACC,GACA,GACU;AACV,WACC,EAAE,KAAK,CAACC,OAAM,KAAK,WAAWA,IAAG,CAAC,CAAC,KACnC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,cAAc,GAAG,IAAI,CAAC;AAAA,EAEnD;AAAA,EACA,qBACC,GACA,GACU;AACV,UAAM,QAAQ,SAAS,CAAC;AAExB,WAAO,SAAS,CAAC,EAAE;AAAA,MAAK,CAACA,OACxB,MAAM,KAAK,CAACC,OAAM,gBAAgBD,IAAGC,EAAC,CAAC;AAAA,IACxC;AAAA,EACD;AAAA,EACA,aACC,CAAC,UAAU,GAAG,QAAQ,GACtB,GACU;AACV,YACE,KAAK,gBAAgB,UAAU,CAAC,KAAK,cAAc,GAAG,QAAQ,OAC9D,CAAC,SAAS,UACV,SAAS,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC;AAAA,EAEnD;AAAA,EACA,kBACC,GACA,GACU;AACV,WACC,EAAE,KAAK,CAAC,SAAS,KAAK,qBAAqB,MAAM,CAAC,CAAC,KACnD,EAAE,KAAK,CAAC,UAAU,KAAK,aAAa,GAAG,KAAK,CAAC;AAAA,EAE/C;AAAA,EACA,eACC,GACA,GACU;AACV,WACC,EAAE;AAAA,MACD,CAAC,OACA,KAAK,kBAAkB,GAAG,EAAE,KAC5B,GAAG,KAAK,CAAC,OAAO,KAAK,aAAa,GAAG,EAAE,CAAC;AAAA,IAC1C,KACA,EAAE;AAAA,MACD,CAAC,OACA,KAAK,kBAAkB,GAAG,EAAE,KAC5B,GAAG,KAAK,CAAC,OAAO,KAAK,aAAa,GAAG,EAAE,CAAC;AAAA,IAC1C;AAAA,EAEF;AACD;AAEO,SAAS,UAAU,GAAY,GAAqB;AAC1D,QAAM,SACLF;AAED,aAAW,CAAC,KAAK,GAAG,KAAK,IAAI;AAAA,IAC5B,IAAI,uBAAuB,CAAC;AAAA,IAC5B,IAAI,uBAAuB,CAAC;AAAA,EAC7B,GAAG;AACF,QACE,IAAI,OAAO,IAAI,QAAQ,UACvB,OAAO,IAAI,OAAO,IAAI,IAAI;AAAA,MACzB,IAAI;AAAA,MACJ,IAAI;AAAA,IACL,KACA,IAAI,OAAO,IAAI,QAAQ,UACvB,OAAO,IAAI,OAAO,IAAI,IAAI,EAAE,IAAI,aAAa,IAAI,WAAW,GAC5D;AACD,aAAO;AAAA,IACR;AAAA,EACD;AAEA,SAAO;AACR;","names":["import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","import_guard","positions","import_guard","import_guard","import_guard","import_guard","import_guard","geometries","a","b","odd","a","carry","b","geometries","a","b"]}