UNPKG

repoweaver

Version:

A GitHub App that skillfully weaves multiple templates together to create and update repositories with intelligent merge strategies

1 lines 171 kB
{"ast":null,"code":"import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport RefreshControl from \"../../../exports/RefreshControl\";\nimport ScrollView from \"../../../exports/ScrollView\";\nimport View from \"../../../exports/View\";\nimport StyleSheet from \"../../../exports/StyleSheet\";\nimport Batchinator from \"../Batchinator\";\nimport clamp from \"../Utilities/clamp\";\nimport infoLog from \"../infoLog\";\nimport { CellRenderMask } from \"./CellRenderMask\";\nimport ChildListCollection from \"./ChildListCollection\";\nimport FillRateHelper from \"../FillRateHelper\";\nimport StateSafePureComponent from \"./StateSafePureComponent\";\nimport ViewabilityHelper from \"../ViewabilityHelper\";\nimport CellRenderer from \"./VirtualizedListCellRenderer\";\nimport { VirtualizedListCellContextProvider, VirtualizedListContext, VirtualizedListContextProvider } from \"./VirtualizedListContext.js\";\nimport { computeWindowedRenderLimits, keyExtractor as defaultKeyExtractor } from \"../VirtualizeUtils\";\nimport invariant from 'fbjs/lib/invariant';\nimport nullthrows from 'nullthrows';\nimport * as React from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar ON_EDGE_REACHED_EPSILON = 0.001;\nvar _usedIndexForKey = false;\nvar _keylessItemComponentName = '';\nfunction horizontalOrDefault(horizontal) {\n  return horizontal !== null && horizontal !== void 0 ? horizontal : false;\n}\nfunction initialNumToRenderOrDefault(initialNumToRender) {\n  return initialNumToRender !== null && initialNumToRender !== void 0 ? initialNumToRender : 10;\n}\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch) {\n  return maxToRenderPerBatch !== null && maxToRenderPerBatch !== void 0 ? maxToRenderPerBatch : 10;\n}\nfunction onStartReachedThresholdOrDefault(onStartReachedThreshold) {\n  return onStartReachedThreshold !== null && onStartReachedThreshold !== void 0 ? onStartReachedThreshold : 2;\n}\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold) {\n  return onEndReachedThreshold !== null && onEndReachedThreshold !== void 0 ? onEndReachedThreshold : 2;\n}\nfunction getScrollingThreshold(threshold, visibleLength) {\n  return threshold * visibleLength / 2;\n}\nfunction scrollEventThrottleOrDefault(scrollEventThrottle) {\n  return scrollEventThrottle !== null && scrollEventThrottle !== void 0 ? scrollEventThrottle : 50;\n}\nfunction windowSizeOrDefault(windowSize) {\n  return windowSize !== null && windowSize !== void 0 ? windowSize : 21;\n}\nfunction findLastWhere(arr, predicate) {\n  for (var i = arr.length - 1; i >= 0; i--) {\n    if (predicate(arr[i])) {\n      return arr[i];\n    }\n  }\n  return null;\n}\nclass VirtualizedList extends StateSafePureComponent {\n  scrollToEnd(params) {\n    var animated = params ? params.animated : true;\n    var veryLast = this.props.getItemCount(this.props.data) - 1;\n    if (veryLast < 0) {\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(veryLast, this.props);\n    var offset = Math.max(0, frame.offset + frame.length + this._footerLength - this._scrollMetrics.visibleLength);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n  scrollToIndex(params) {\n    var _this$props = this.props,\n      data = _this$props.data,\n      horizontal = _this$props.horizontal,\n      getItemCount = _this$props.getItemCount,\n      getItemLayout = _this$props.getItemLayout,\n      onScrollToIndexFailed = _this$props.onScrollToIndexFailed;\n    var animated = params.animated,\n      index = params.index,\n      viewOffset = params.viewOffset,\n      viewPosition = params.viewPosition;\n    invariant(index >= 0, \"scrollToIndex out of range: requested index \" + index + \" but minimum is 0\");\n    invariant(getItemCount(data) >= 1, \"scrollToIndex out of range: item length \" + getItemCount(data) + \" but minimum is 1\");\n    invariant(index < getItemCount(data), \"scrollToIndex out of range: requested index \" + index + \" is out of 0 to \" + (getItemCount(data) - 1));\n    if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n      invariant(!!onScrollToIndexFailed, 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' + 'otherwise there is no way to know the location of offscreen indices or handle failures.');\n      onScrollToIndexFailed({\n        averageItemLength: this._averageCellLength,\n        highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n        index\n      });\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(Math.floor(index), this.props);\n    var offset = Math.max(0, this._getOffsetApprox(index, this.props) - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length)) - (viewOffset || 0);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontal ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n  scrollToItem(params) {\n    var item = params.item;\n    var _this$props2 = this.props,\n      data = _this$props2.data,\n      getItem = _this$props2.getItem,\n      getItemCount = _this$props2.getItemCount;\n    var itemCount = getItemCount(data);\n    for (var _index = 0; _index < itemCount; _index++) {\n      if (getItem(data, _index) === item) {\n        this.scrollToIndex(_objectSpread(_objectSpread({}, params), {}, {\n          index: _index\n        }));\n        break;\n      }\n    }\n  }\n  scrollToOffset(params) {\n    var animated = params.animated,\n      offset = params.offset;\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n  recordInteraction() {\n    this._nestedChildLists.forEach(childList => {\n      childList.recordInteraction();\n    });\n    this._viewabilityTuples.forEach(t => {\n      t.viewabilityHelper.recordInteraction();\n    });\n    this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n  }\n  flashScrollIndicators() {\n    if (this._scrollRef == null) {\n      return;\n    }\n    this._scrollRef.flashScrollIndicators();\n  }\n  getScrollResponder() {\n    if (this._scrollRef && this._scrollRef.getScrollResponder) {\n      return this._scrollRef.getScrollResponder();\n    }\n  }\n  getScrollableNode() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      return this._scrollRef.getScrollableNode();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  getScrollRef() {\n    if (this._scrollRef && this._scrollRef.getScrollRef) {\n      return this._scrollRef.getScrollRef();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  _getCellKey() {\n    var _this$context;\n    return ((_this$context = this.context) == null ? void 0 : _this$context.cellKey) || 'rootList';\n  }\n  hasMore() {\n    return this._hasMore;\n  }\n  constructor(_props) {\n    var _this$props$updateCel;\n    super(_props);\n    this._getScrollMetrics = () => {\n      return this._scrollMetrics;\n    };\n    this._getOutermostParentListRef = () => {\n      if (this._isNestedWithSameOrientation()) {\n        return this.context.getOutermostParentListRef();\n      } else {\n        return this;\n      }\n    };\n    this._registerAsNestedChild = childList => {\n      this._nestedChildLists.add(childList.ref, childList.cellKey);\n      if (this._hasInteracted) {\n        childList.ref.recordInteraction();\n      }\n    };\n    this._unregisterAsNestedChild = childList => {\n      this._nestedChildLists.remove(childList.ref);\n    };\n    this._onUpdateSeparators = (keys, newProps) => {\n      keys.forEach(key => {\n        var ref = key != null && this._cellRefs[key];\n        ref && ref.updateSeparatorProps(newProps);\n      });\n    };\n    this._getSpacerKey = isVertical => isVertical ? 'height' : 'width';\n    this._averageCellLength = 0;\n    this._cellRefs = {};\n    this._frames = {};\n    this._footerLength = 0;\n    this._hasTriggeredInitialScrollToIndex = false;\n    this._hasInteracted = false;\n    this._hasMore = false;\n    this._hasWarned = {};\n    this._headerLength = 0;\n    this._hiPriInProgress = false;\n    this._highestMeasuredFrameIndex = 0;\n    this._indicesToKeys = new Map();\n    this._lastFocusedCellKey = null;\n    this._nestedChildLists = new ChildListCollection();\n    this._offsetFromParentVirtualizedList = 0;\n    this._prevParentOffset = 0;\n    this._scrollMetrics = {\n      contentLength: 0,\n      dOffset: 0,\n      dt: 10,\n      offset: 0,\n      timestamp: 0,\n      velocity: 0,\n      visibleLength: 0,\n      zoomScale: 1\n    };\n    this._scrollRef = null;\n    this._sentStartForContentLength = 0;\n    this._sentEndForContentLength = 0;\n    this._totalCellLength = 0;\n    this._totalCellsMeasured = 0;\n    this._viewabilityTuples = [];\n    this._captureScrollRef = ref => {\n      this._scrollRef = ref;\n    };\n    this._defaultRenderScrollComponent = props => {\n      var onRefresh = props.onRefresh;\n      if (this._isNestedWithSameOrientation()) {\n        return React.createElement(View, props);\n      } else if (onRefresh) {\n        var _props$refreshing;\n        invariant(typeof props.refreshing === 'boolean', '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + JSON.stringify((_props$refreshing = props.refreshing) !== null && _props$refreshing !== void 0 ? _props$refreshing : 'undefined') + '`');\n        return (React.createElement(ScrollView, _extends({}, props, {\n            refreshControl: props.refreshControl == null ? React.createElement(RefreshControl, {\n              refreshing: props.refreshing,\n              onRefresh: onRefresh,\n              progressViewOffset: props.progressViewOffset\n            }) : props.refreshControl\n          }))\n        );\n      } else {\n        return React.createElement(ScrollView, props);\n      }\n    };\n    this._onCellLayout = (e, cellKey, index) => {\n      var layout = e.nativeEvent.layout;\n      var next = {\n        offset: this._selectOffset(layout),\n        length: this._selectLength(layout),\n        index,\n        inLayout: true\n      };\n      var curr = this._frames[cellKey];\n      if (!curr || next.offset !== curr.offset || next.length !== curr.length || index !== curr.index) {\n        this._totalCellLength += next.length - (curr ? curr.length : 0);\n        this._totalCellsMeasured += curr ? 0 : 1;\n        this._averageCellLength = this._totalCellLength / this._totalCellsMeasured;\n        this._frames[cellKey] = next;\n        this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index);\n        this._scheduleCellsToRenderUpdate();\n      } else {\n        this._frames[cellKey].inLayout = true;\n      }\n      this._triggerRemeasureForChildListsInCell(cellKey);\n      this._computeBlankness();\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n    };\n    this._onCellUnmount = cellKey => {\n      delete this._cellRefs[cellKey];\n      var curr = this._frames[cellKey];\n      if (curr) {\n        this._frames[cellKey] = _objectSpread(_objectSpread({}, curr), {}, {\n          inLayout: false\n        });\n      }\n    };\n    this._onLayout = e => {\n      if (this._isNestedWithSameOrientation()) {\n        this.measureLayoutRelativeToContainingList();\n      } else {\n        this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout);\n      }\n      this.props.onLayout && this.props.onLayout(e);\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._onLayoutEmpty = e => {\n      this.props.onLayout && this.props.onLayout(e);\n    };\n    this._onLayoutFooter = e => {\n      this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n      this._footerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onLayoutHeader = e => {\n      this._headerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onContentSizeChange = (width, height) => {\n      if (width > 0 && height > 0 && this.props.initialScrollIndex != null && this.props.initialScrollIndex > 0 && !this._hasTriggeredInitialScrollToIndex) {\n        if (this.props.contentOffset == null) {\n          if (this.props.initialScrollIndex < this.props.getItemCount(this.props.data)) {\n            this.scrollToIndex({\n              animated: false,\n              index: nullthrows(this.props.initialScrollIndex)\n            });\n          } else {\n            this.scrollToEnd({\n              animated: false\n            });\n          }\n        }\n        this._hasTriggeredInitialScrollToIndex = true;\n      }\n      if (this.props.onContentSizeChange) {\n        this.props.onContentSizeChange(width, height);\n      }\n      this._scrollMetrics.contentLength = this._selectLength({\n        height,\n        width\n      });\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._convertParentScrollMetrics = metrics => {\n      var offset = metrics.offset - this._offsetFromParentVirtualizedList;\n      var visibleLength = metrics.visibleLength;\n      var dOffset = offset - this._scrollMetrics.offset;\n      var contentLength = this._scrollMetrics.contentLength;\n      return {\n        visibleLength,\n        contentLength,\n        offset,\n        dOffset\n      };\n    };\n    this._onScroll = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScroll(e);\n      });\n      if (this.props.onScroll) {\n        this.props.onScroll(e);\n      }\n      var timestamp = e.timeStamp;\n      var visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n      var contentLength = this._selectLength(e.nativeEvent.contentSize);\n      var offset = this._selectOffset(e.nativeEvent.contentOffset);\n      var dOffset = offset - this._scrollMetrics.offset;\n      if (this._isNestedWithSameOrientation()) {\n        if (this._scrollMetrics.contentLength === 0) {\n          return;\n        }\n        var _this$_convertParentS = this._convertParentScrollMetrics({\n          visibleLength,\n          offset\n        });\n        visibleLength = _this$_convertParentS.visibleLength;\n        contentLength = _this$_convertParentS.contentLength;\n        offset = _this$_convertParentS.offset;\n        dOffset = _this$_convertParentS.dOffset;\n      }\n      var dt = this._scrollMetrics.timestamp ? Math.max(1, timestamp - this._scrollMetrics.timestamp) : 1;\n      var velocity = dOffset / dt;\n      if (dt > 500 && this._scrollMetrics.dt > 500 && contentLength > 5 * visibleLength && !this._hasWarned.perf) {\n        infoLog('VirtualizedList: You have a large list that is slow to update - make sure your ' + 'renderItem function renders components that follow React performance best practices ' + 'like PureComponent, shouldComponentUpdate, etc.', {\n          dt,\n          prevDt: this._scrollMetrics.dt,\n          contentLength\n        });\n        this._hasWarned.perf = true;\n      }\n      var zoomScale = e.nativeEvent.zoomScale < 0 ? 1 : e.nativeEvent.zoomScale;\n      this._scrollMetrics = {\n        contentLength,\n        dt,\n        dOffset,\n        offset,\n        timestamp,\n        velocity,\n        visibleLength,\n        zoomScale\n      };\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      if (!this.props) {\n        return;\n      }\n      this._maybeCallOnEdgeReached();\n      if (velocity !== 0) {\n        this._fillRateHelper.activate();\n      }\n      this._computeBlankness();\n      this._scheduleCellsToRenderUpdate();\n    };\n    this._onScrollBeginDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollBeginDrag(e);\n      });\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.recordInteraction();\n      });\n      this._hasInteracted = true;\n      this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n    };\n    this._onScrollEndDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollEndDrag(e);\n      });\n      var velocity = e.nativeEvent.velocity;\n      if (velocity) {\n        this._scrollMetrics.velocity = this._selectOffset(velocity);\n      }\n      this._computeBlankness();\n      this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n    };\n    this._onMomentumScrollBegin = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollBegin(e);\n      });\n      this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n    };\n    this._onMomentumScrollEnd = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollEnd(e);\n      });\n      this._scrollMetrics.velocity = 0;\n      this._computeBlankness();\n      this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n    };\n    this._updateCellsToRender = () => {\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      this.setState((state, props) => {\n        var cellsAroundViewport = this._adjustCellsAroundViewport(props, state.cellsAroundViewport);\n        var renderMask = VirtualizedList._createRenderMask(props, cellsAroundViewport, this._getNonViewportRenderRegions(props));\n        if (cellsAroundViewport.first === state.cellsAroundViewport.first && cellsAroundViewport.last === state.cellsAroundViewport.last && renderMask.equals(state.renderMask)) {\n          return null;\n        }\n        return {\n          cellsAroundViewport,\n          renderMask\n        };\n      });\n    };\n    this._createViewToken = (index, isViewable, props) => {\n      var data = props.data,\n        getItem = props.getItem;\n      var item = getItem(data, index);\n      return {\n        index,\n        item,\n        key: this._keyExtractor(item, index, props),\n        isViewable\n      };\n    };\n    this._getOffsetApprox = (index, props) => {\n      if (Number.isInteger(index)) {\n        return this.__getFrameMetricsApprox(index, props).offset;\n      } else {\n        var frameMetrics = this.__getFrameMetricsApprox(Math.floor(index), props);\n        var remainder = index - Math.floor(index);\n        return frameMetrics.offset + remainder * frameMetrics.length;\n      }\n    };\n    this.__getFrameMetricsApprox = (index, props) => {\n      var frame = this._getFrameMetrics(index, props);\n      if (frame && frame.index === index) {\n        return frame;\n      } else {\n        var data = props.data,\n          getItemCount = props.getItemCount,\n          getItemLayout = props.getItemLayout;\n        invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n        invariant(!getItemLayout, 'Should not have to estimate frames when a measurement metrics function is provided');\n        return {\n          length: this._averageCellLength,\n          offset: this._averageCellLength * index\n        };\n      }\n    };\n    this._getFrameMetrics = (index, props) => {\n      var data = props.data,\n        getItem = props.getItem,\n        getItemCount = props.getItemCount,\n        getItemLayout = props.getItemLayout;\n      invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n      var item = getItem(data, index);\n      var frame = this._frames[this._keyExtractor(item, index, props)];\n      if (!frame || frame.index !== index) {\n        if (getItemLayout) {\n          return getItemLayout(data, index);\n        }\n      }\n      return frame;\n    };\n    this._getNonViewportRenderRegions = props => {\n      if (!(this._lastFocusedCellKey && this._cellRefs[this._lastFocusedCellKey])) {\n        return [];\n      }\n      var lastFocusedCellRenderer = this._cellRefs[this._lastFocusedCellKey];\n      var focusedCellIndex = lastFocusedCellRenderer.props.index;\n      var itemCount = props.getItemCount(props.data);\n      if (focusedCellIndex >= itemCount || this._keyExtractor(props.getItem(props.data, focusedCellIndex), focusedCellIndex, props) !== this._lastFocusedCellKey) {\n        return [];\n      }\n      var first = focusedCellIndex;\n      var heightOfCellsBeforeFocused = 0;\n      for (var i = first - 1; i >= 0 && heightOfCellsBeforeFocused < this._scrollMetrics.visibleLength; i--) {\n        first--;\n        heightOfCellsBeforeFocused += this.__getFrameMetricsApprox(i, props).length;\n      }\n      var last = focusedCellIndex;\n      var heightOfCellsAfterFocused = 0;\n      for (var _i = last + 1; _i < itemCount && heightOfCellsAfterFocused < this._scrollMetrics.visibleLength; _i++) {\n        last++;\n        heightOfCellsAfterFocused += this.__getFrameMetricsApprox(_i, props).length;\n      }\n      return [{\n        first,\n        last\n      }];\n    };\n    this._checkProps(_props);\n    this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n    this._updateCellsToRenderBatcher = new Batchinator(this._updateCellsToRender, (_this$props$updateCel = this.props.updateCellsBatchingPeriod) !== null && _this$props$updateCel !== void 0 ? _this$props$updateCel : 50);\n    if (this.props.viewabilityConfigCallbackPairs) {\n      this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n        viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n        onViewableItemsChanged: pair.onViewableItemsChanged\n      }));\n    } else {\n      var _this$props3 = this.props,\n        onViewableItemsChanged = _this$props3.onViewableItemsChanged,\n        viewabilityConfig = _this$props3.viewabilityConfig;\n      if (onViewableItemsChanged) {\n        this._viewabilityTuples.push({\n          viewabilityHelper: new ViewabilityHelper(viewabilityConfig),\n          onViewableItemsChanged: onViewableItemsChanged\n        });\n      }\n    }\n    var initialRenderRegion = VirtualizedList._initialRenderRegion(_props);\n    this.state = {\n      cellsAroundViewport: initialRenderRegion,\n      renderMask: VirtualizedList._createRenderMask(_props, initialRenderRegion)\n    };\n    this.invertedWheelEventHandler = ev => {\n      var scrollOffset = this.props.horizontal ? ev.target.scrollLeft : ev.target.scrollTop;\n      var scrollLength = this.props.horizontal ? ev.target.scrollWidth : ev.target.scrollHeight;\n      var clientLength = this.props.horizontal ? ev.target.clientWidth : ev.target.clientHeight;\n      var isEventTargetScrollable = scrollLength > clientLength;\n      var delta = this.props.horizontal ? ev.deltaX || ev.wheelDeltaX : ev.deltaY || ev.wheelDeltaY;\n      var leftoverDelta = delta;\n      if (isEventTargetScrollable) {\n        leftoverDelta = delta < 0 ? Math.min(delta + scrollOffset, 0) : Math.max(delta - (scrollLength - clientLength - scrollOffset), 0);\n      }\n      var targetDelta = delta - leftoverDelta;\n      if (this.props.inverted && this._scrollRef && this._scrollRef.getScrollableNode) {\n        var node = this._scrollRef.getScrollableNode();\n        if (this.props.horizontal) {\n          ev.target.scrollLeft += targetDelta;\n          var nextScrollLeft = node.scrollLeft - leftoverDelta;\n          node.scrollLeft = !this.props.getItemLayout ? Math.min(nextScrollLeft, this._totalCellLength) : nextScrollLeft;\n        } else {\n          ev.target.scrollTop += targetDelta;\n          var nextScrollTop = node.scrollTop - leftoverDelta;\n          node.scrollTop = !this.props.getItemLayout ? Math.min(nextScrollTop, this._totalCellLength) : nextScrollTop;\n        }\n        ev.preventDefault();\n      }\n    };\n  }\n  _checkProps(props) {\n    var onScroll = props.onScroll,\n      windowSize = props.windowSize,\n      getItemCount = props.getItemCount,\n      data = props.data,\n      initialScrollIndex = props.initialScrollIndex;\n    invariant(!onScroll || !onScroll.__isNative, 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + 'to support native onScroll events with useNativeDriver');\n    invariant(windowSizeOrDefault(windowSize) > 0, 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.');\n    invariant(getItemCount, 'VirtualizedList: The \"getItemCount\" prop must be provided');\n    var itemCount = getItemCount(data);\n    if (initialScrollIndex != null && !this._hasTriggeredInitialScrollToIndex && (initialScrollIndex < 0 || itemCount > 0 && initialScrollIndex >= itemCount) && !this._hasWarned.initialScrollIndex) {\n      console.warn(\"initialScrollIndex \\\"\" + initialScrollIndex + \"\\\" is not valid (list has \" + itemCount + \" items)\");\n      this._hasWarned.initialScrollIndex = true;\n    }\n    if (__DEV__ && !this._hasWarned.flexWrap) {\n      var flatStyles = StyleSheet.flatten(this.props.contentContainerStyle);\n      if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n        console.warn('`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' + 'Consider using `numColumns` with `FlatList` instead.');\n        this._hasWarned.flexWrap = true;\n      }\n    }\n  }\n  static _createRenderMask(props, cellsAroundViewport, additionalRegions) {\n    var itemCount = props.getItemCount(props.data);\n    invariant(cellsAroundViewport.first >= 0 && cellsAroundViewport.last >= cellsAroundViewport.first - 1 && cellsAroundViewport.last < itemCount, \"Invalid cells around viewport \\\"[\" + cellsAroundViewport.first + \", \" + cellsAroundViewport.last + \"]\\\" was passed to VirtualizedList._createRenderMask\");\n    var renderMask = new CellRenderMask(itemCount);\n    if (itemCount > 0) {\n      var allRegions = [cellsAroundViewport, ...(additionalRegions !== null && additionalRegions !== void 0 ? additionalRegions : [])];\n      for (var _i2 = 0, _allRegions = allRegions; _i2 < _allRegions.length; _i2++) {\n        var region = _allRegions[_i2];\n        renderMask.addCells(region);\n      }\n      if (props.initialScrollIndex == null || props.initialScrollIndex <= 0) {\n        var initialRegion = VirtualizedList._initialRenderRegion(props);\n        renderMask.addCells(initialRegion);\n      }\n      var stickyIndicesSet = new Set(props.stickyHeaderIndices);\n      VirtualizedList._ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellsAroundViewport.first);\n    }\n    return renderMask;\n  }\n  static _initialRenderRegion(props) {\n    var _props$initialScrollI;\n    var itemCount = props.getItemCount(props.data);\n    var firstCellIndex = Math.max(0, Math.min(itemCount - 1, Math.floor((_props$initialScrollI = props.initialScrollIndex) !== null && _props$initialScrollI !== void 0 ? _props$initialScrollI : 0)));\n    var lastCellIndex = Math.min(itemCount, firstCellIndex + initialNumToRenderOrDefault(props.initialNumToRender)) - 1;\n    return {\n      first: firstCellIndex,\n      last: lastCellIndex\n    };\n  }\n  static _ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellIdx) {\n    var stickyOffset = props.ListHeaderComponent ? 1 : 0;\n    for (var itemIdx = cellIdx - 1; itemIdx >= 0; itemIdx--) {\n      if (stickyIndicesSet.has(itemIdx + stickyOffset)) {\n        renderMask.addCells({\n          first: itemIdx,\n          last: itemIdx\n        });\n        break;\n      }\n    }\n  }\n  _adjustCellsAroundViewport(props, cellsAroundViewport) {\n    var data = props.data,\n      getItemCount = props.getItemCount;\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(props.onEndReachedThreshold);\n    var _this$_scrollMetrics = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics.contentLength,\n      offset = _this$_scrollMetrics.offset,\n      visibleLength = _this$_scrollMetrics.visibleLength;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n    if (visibleLength <= 0 || contentLength <= 0) {\n      return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n    }\n    var newCellsAroundViewport;\n    if (props.disableVirtualization) {\n      var renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch) : 0;\n      newCellsAroundViewport = {\n        first: 0,\n        last: Math.min(cellsAroundViewport.last + renderAhead, getItemCount(data) - 1)\n      };\n    } else {\n      if (props.initialScrollIndex && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON) {\n        return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n      }\n      newCellsAroundViewport = computeWindowedRenderLimits(props, maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch), windowSizeOrDefault(props.windowSize), cellsAroundViewport, this.__getFrameMetricsApprox, this._scrollMetrics);\n      invariant(newCellsAroundViewport.last < getItemCount(data), 'computeWindowedRenderLimits() should return range in-bounds');\n    }\n    if (this._nestedChildLists.size() > 0) {\n      var childIdx = this._findFirstChildWithMore(newCellsAroundViewport.first, newCellsAroundViewport.last);\n      newCellsAroundViewport.last = childIdx !== null && childIdx !== void 0 ? childIdx : newCellsAroundViewport.last;\n    }\n    return newCellsAroundViewport;\n  }\n  _findFirstChildWithMore(first, last) {\n    for (var ii = first; ii <= last; ii++) {\n      var cellKeyForIndex = this._indicesToKeys.get(ii);\n      if (cellKeyForIndex != null && this._nestedChildLists.anyInCell(cellKeyForIndex, childList => childList.hasMore())) {\n        return ii;\n      }\n    }\n    return null;\n  }\n  componentDidMount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.registerAsNestedChild({\n        ref: this,\n        cellKey: this.context.cellKey\n      });\n    }\n    this.setupWebWheelHandler();\n  }\n  componentWillUnmount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.unregisterAsNestedChild({\n        ref: this\n      });\n    }\n    this._updateCellsToRenderBatcher.dispose({\n      abort: true\n    });\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.dispose();\n    });\n    this._fillRateHelper.deactivateAndFlush();\n    this.teardownWebWheelHandler();\n  }\n  setupWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().addEventListener('wheel', this.invertedWheelEventHandler);\n    } else {\n      setTimeout(() => this.setupWebWheelHandler(), 50);\n      return;\n    }\n  }\n  teardownWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().removeEventListener('wheel', this.invertedWheelEventHandler);\n    }\n  }\n  static getDerivedStateFromProps(newProps, prevState) {\n    var itemCount = newProps.getItemCount(newProps.data);\n    if (itemCount === prevState.renderMask.numCells()) {\n      return prevState;\n    }\n    var constrainedCells = VirtualizedList._constrainToItemCount(prevState.cellsAroundViewport, newProps);\n    return {\n      cellsAroundViewport: constrainedCells,\n      renderMask: VirtualizedList._createRenderMask(newProps, constrainedCells)\n    };\n  }\n  _pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, first, last, inversionStyle) {\n    var _this = this;\n    var _this$props4 = this.props,\n      CellRendererComponent = _this$props4.CellRendererComponent,\n      ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n      ListHeaderComponent = _this$props4.ListHeaderComponent,\n      ListItemComponent = _this$props4.ListItemComponent,\n      data = _this$props4.data,\n      debug = _this$props4.debug,\n      getItem = _this$props4.getItem,\n      getItemCount = _this$props4.getItemCount,\n      getItemLayout = _this$props4.getItemLayout,\n      horizontal = _this$props4.horizontal,\n      renderItem = _this$props4.renderItem;\n    var stickyOffset = ListHeaderComponent ? 1 : 0;\n    var end = getItemCount(data) - 1;\n    var prevCellKey;\n    last = Math.min(end, last);\n    var _loop = function _loop() {\n      var item = getItem(data, ii);\n      var key = _this._keyExtractor(item, ii, _this.props);\n      _this._indicesToKeys.set(ii, key);\n      if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n        stickyHeaderIndices.push(cells.length);\n      }\n      var shouldListenForLayout = getItemLayout == null || debug || _this._fillRateHelper.enabled();\n      cells.push(React.createElement(CellRenderer, _extends({\n        CellRendererComponent: CellRendererComponent,\n        ItemSeparatorComponent: ii < end ? ItemSeparatorComponent : undefined,\n        ListItemComponent: ListItemComponent,\n        cellKey: key,\n        horizontal: horizontal,\n        index: ii,\n        inversionStyle: inversionStyle,\n        item: item,\n        key: key,\n        prevCellKey: prevCellKey,\n        onUpdateSeparators: _this._onUpdateSeparators,\n        onCellFocusCapture: e => _this._onCellFocusCapture(key),\n        onUnmount: _this._onCellUnmount,\n        ref: _ref => {\n          _this._cellRefs[key] = _ref;\n        },\n        renderItem: renderItem\n      }, shouldListenForLayout && {\n        onCellLayout: _this._onCellLayout\n      })));\n      prevCellKey = key;\n    };\n    for (var ii = first; ii <= last; ii++) {\n      _loop();\n    }\n  }\n  static _constrainToItemCount(cells, props) {\n    var itemCount = props.getItemCount(props.data);\n    var last = Math.min(itemCount - 1, cells.last);\n    var maxToRenderPerBatch = maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch);\n    return {\n      first: clamp(0, itemCount - 1 - maxToRenderPerBatch, cells.first),\n      last\n    };\n  }\n  _isNestedWithSameOrientation() {\n    var nestedContext = this.context;\n    return !!(nestedContext && !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal));\n  }\n  _keyExtractor(item, index, props) {\n    if (props.keyExtractor != null) {\n      return props.keyExtractor(item, index);\n    }\n    var key = defaultKeyExtractor(item, index);\n    if (key === String(index)) {\n      _usedIndexForKey = true;\n      if (item.type && item.type.displayName) {\n        _keylessItemComponentName = item.type.displayName;\n      }\n    }\n    return key;\n  }\n  render() {\n    this._checkProps(this.props);\n    var _this$props5 = this.props,\n      ListEmptyComponent = _this$props5.ListEmptyComponent,\n      ListFooterComponent = _this$props5.ListFooterComponent,\n      ListHeaderComponent = _this$props5.ListHeaderComponent;\n    var _this$props6 = this.props,\n      data = _this$props6.data,\n      horizontal = _this$props6.horizontal;\n    var inversionStyle = this.props.inverted ? horizontalOrDefault(this.props.horizontal) ? styles.horizontallyInverted : styles.verticallyInverted : null;\n    var cells = [];\n    var stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n    var stickyHeaderIndices = [];\n    if (ListHeaderComponent) {\n      if (stickyIndicesFromProps.has(0)) {\n        stickyHeaderIndices.push(0);\n      }\n      var _element = React.isValidElement(ListHeaderComponent) ? ListHeaderComponent : React.createElement(ListHeaderComponent, null);\n      cells.push(React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-header',\n        key: \"$header\"\n      }, React.createElement(View, {\n        onLayout: this._onLayoutHeader,\n        style: [inversionStyle, this.props.ListHeaderComponentStyle]\n      }, _element)));\n    }\n    var itemCount = this.props.getItemCount(data);\n    if (itemCount === 0 && ListEmptyComponent) {\n      var _element2 = React.isValidElement(ListEmptyComponent) ? ListEmptyComponent : React.createElement(ListEmptyComponent, null);\n      cells.push(React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-empty',\n        key: \"$empty\"\n      }, React.cloneElement(_element2, {\n        onLayout: event => {\n          this._onLayoutEmpty(event);\n          if (_element2.props.onLayout) {\n            _element2.props.onLayout(event);\n          }\n        },\n        style: [inversionStyle, _element2.props.style]\n      })));\n    }\n    if (itemCount > 0) {\n      _usedIndexForKey = false;\n      _keylessItemComponentName = '';\n      var spacerKey = this._getSpacerKey(!horizontal);\n      var renderRegions = this.state.renderMask.enumerateRegions();\n      var lastSpacer = findLastWhere(renderRegions, r => r.isSpacer);\n      for (var _iterator = _createForOfIteratorHelperLoose(renderRegions), _step; !(_step = _iterator()).done;) {\n        var section = _step.value;\n        if (section.isSpacer) {\n          if (this.props.disableVirtualization) {\n            continue;\n          }\n          var isLastSpacer = section === lastSpacer;\n          var constrainToMeasured = isLastSpacer && !this.props.getItemLayout;\n          var last = constrainToMeasured ? clamp(section.first - 1, section.last, this._highestMeasuredFrameIndex) : section.last;\n          var firstMetrics = this.__getFrameMetricsApprox(section.first, this.props);\n          var lastMetrics = this.__getFrameMetricsApprox(last, this.props);\n          var spacerSize = lastMetrics.offset + lastMetrics.length - firstMetrics.offset;\n          cells.push(React.createElement(View, {\n            key: \"$spacer-\" + section.first,\n            style: {\n              [spacerKey]: spacerSize\n            }\n          }));\n        } else {\n          this._pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, section.first, section.last, inversionStyle);\n        }\n      }\n      if (!this._hasWarned.keys && _usedIndexForKey) {\n        console.warn('VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' + 'item or provide a custom keyExtractor.', _keylessItemComponentName);\n        this._hasWarned.keys = true;\n      }\n    }\n    if (ListFooterComponent) {\n      var _element3 = React.isValidElement(ListFooterComponent) ? ListFooterComponent : React.createElement(ListFooterComponent, null);\n      cells.push(React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getFooterCellKey(),\n        key: \"$footer\"\n      }, React.createElement(View, {\n        onLayout: this._onLayoutFooter,\n        style: [inversionStyle, this.props.ListFooterComponentStyle]\n      }, _element3)));\n    }\n    var scrollProps = _objectSpread(_objectSpread({}, this.props), {}, {\n      onContentSizeChange: this._onContentSizeChange,\n      onLayout: this._onLayout,\n      onScroll: this._onScroll,\n      onScrollBeginDrag: this._onScrollBeginDrag,\n      onScrollEndDrag: this._onScrollEndDrag,\n      onMomentumScrollBegin: this._onMomentumScrollBegin,\n      onMomentumScrollEnd: this._onMomentumScrollEnd,\n      scrollEventThrottle: scrollEventThrottleOrDefault(this.props.scrollEventThrottle),\n      invertStickyHeaders: this.props.invertStickyHeaders !== undefined ? this.props.invertStickyHeaders : this.props.inverted,\n      stickyHeaderIndices,\n      style: inversionStyle ? [inversionStyle, this.props.style] : this.props.style\n    });\n    this._hasMore = this.state.cellsAroundViewport.last < itemCount - 1;\n    var innerRet = React.createElement(VirtualizedListContextProvider, {\n      value: {\n        cellKey: null,\n        getScrollMetrics: this._getScrollMetrics,\n        horizontal: horizontalOrDefault(this.props.horizontal),\n        getOutermostParentListRef: this._getOutermostParentListRef,\n        registerAsNestedChild: this._registerAsNestedChild,\n        unregisterAsNestedChild: this._unregisterAsNestedChild\n      }\n    }, React.cloneElement((this.props.renderScrollComponent || this._defaultRenderScrollComponent)(scrollProps), {\n      ref: this._captureScrollRef\n    }, cells));\n    var ret = innerRet;\n    if (this.props.debug) {\n      return React.createElement(View, {\n        style: styles.debug\n      }, ret, this._renderDebugOverlay());\n    } else {\n      return ret;\n    }\n  }\n  componentDidUpdate(prevProps) {\n    var _this$props7 = this.props,\n      data = _this$props7.data,\n      extraData = _this$props7.extraData;\n    if (data !== prevProps.data || extraData !== prevProps.extraData) {\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.resetViewableIndices();\n      });\n    }\n    var hiPriInProgress = this._hiPriInProgress;\n    this._scheduleCellsToRenderUpdate();\n    if (hiPriInProgress) {\n      this._hiPriInProgress = false;\n    }\n  }\n  _computeBlankness() {\n    this._fillRateHelper.computeBlankness(this.props, this.state.cellsAroundViewport, this._scrollMetrics);\n  }\n  _onCellFocusCapture(cellKey) {\n    this._lastFocusedCellKey = cellKey;\n    this._updateCellsToRender();\n  }\n  _triggerRemeasureForChildListsInCell(cellKey) {\n    this._nestedChildLists.forEachInCell(cellKey, childList => {\n      childList.measureLayoutRelativeToContainingList();\n    });\n  }\n  measureLayoutRelativeToContainingList() {\n    try {\n      if (!this._scrollRef) {\n        return;\n      }\n      this._scrollRef.measureLayout(this.context.getOutermostParentListRef().getScrollRef(), (x, y, width, height) => {\n        this._offsetFromParentVirtualizedList = this._selectOffset({\n          x,\n          y\n        });\n        this._scrollMetrics.contentLength = this._selectLength({\n          width,\n          height\n        });\n        var scrollMetrics = this._convertParentScrollMetrics(this.context.getScrollMetrics());\n        var metricsChanged = this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength || this._scrollMetrics.offset !== scrollMetrics.offset;\n        if (metricsChanged) {\n          this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n          this._scrollMetrics.offset = scrollMetrics.offset;\n          this._nestedChildLists.forEach(childList => {\n            childList.measureLayoutRelativeToContainingList();\n          });\n        }\n      }, error => {\n        console.warn(\"VirtualizedList: Encountered an error while measuring a list's\" + ' offset from its containing VirtualizedList.');\n      });\n    } catch (error) {\n      console.warn('measureLayoutRelativeToContainingList threw an error', error.stack);\n    }\n  }\n  _getFooterCellKey() {\n    return this._getCellKey() + '-footer';\n  }\n  _renderDebugOverlay() {\n    var normalize = this._scrollMetrics.visibleLength / (this._scrollMetrics.contentLength || 1);\n    var framesInLayout = [];\n    var itemCount = this.props.getItemCount(this.props.data);\n    for (var ii = 0; ii < itemCount; ii++) {\n      var frame = this.__getFrameMetricsApprox(ii, this.props);\n      if (frame.inLayout) {\n        framesInLayout.push(frame);\n      }\n    }\n    var windowTop = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.first, this.props).offset;\n    var frameLast = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.last, this.props);\n    var windowLen = frameLast.offset + frameLast.length - windowTop;\n    var visTop = this._scrollMetrics.offset;\n    var visLen = this._scrollMetrics.visibleLength;\n    return React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlay]\n    }, framesInLayout.map((f, ii) => React.createElement(View, {\n      key: 'f' + ii,\n      style: [styles.debugOverlayBase, styles.debugOverlayFrame, {\n        top: f.offset * normalize,\n        height: f.length * normalize\n      }]\n    })), React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameLast, {\n        top: windowTop * normalize,\n        height: windowLen * normalize\n      }]\n    }), React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameVis, {\n        top: visTop * normalize,\n        height: visLen * normalize\n      }]\n    }));\n  }\n  _selectLength(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.height : metrics.width;\n  }\n  _selectOffset(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n  }\n  _maybeCallOnEdgeReached() {\n    var _this$props8 = this.props,\n      data = _this$props8.data,\n      getItemCount = _this$props8.getItemCount,\n      onStartReached = _this$props8.onStartReached,\n      onStartReachedThreshold = _this$props8.onStartReachedThreshold,\n      onEndReached = _this$props8.onEndReached,\n      onEndReachedThreshold = _this$props8.onEndReachedThreshold,\n      initialScrollIndex = _this$props8.initialScrollIndex;\n    var _this$_scrollMetrics2 = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics2.contentLength,\n      visibleLength = _this$_scrollMetrics2.visibleLength,\n      offset = _this$_scrollMetrics2.offset;\n    var distanceFromStart = offset;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n    if (distanceFromStart < ON_EDGE_REACHED_EPSILON) {\n      distanceFromStart = 0;\n    }\n    if (distanceFromEnd < ON_EDGE_REACHED_EPSILON) {\n      distanceFromEnd = 0;\n    }\n    var DEFAULT_THRESHOLD_PX = 2;\n    var startThreshold = onStartReachedThreshold != null ? onStartReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var endThreshold = onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var isWithinStartThreshold = distanceFromStart <= startThreshold;\n    var isWithinEndThreshold = distanceFromEnd <= endThreshold;\n    if (onEndReached && this.state.cellsAroundViewport.last === getItemCount(data) - 1 && isWithinEndThreshold && this._scrollMetrics.contentLength !== this._sentEndForContentLength) {\n      this._sentEndForContentLength = this._scrollMetrics.contentLength;\n      onEndReached({\n        distanceFromEnd\n      });\n    } else if (onStartReached != null && this.state.cellsAroundViewport.first === 0 && isWithinStartThreshold && this._scrollMetrics.contentLength !== this._sentStartForContentLength) {\n      if (!initialScrollIndex || this._scrollMetrics.timestamp !== 0) {\n        this._sentStartForContentLength = this._scrollMetrics.contentLength;\n        onStartReached({\n          distanceFromStart\n        });\n      }\n    } else {\n      this._sentStartForContentLength = isWithinStartThreshold ? this._sentStartForContentLength : 0;\n      this._sentEndForContentLength = isWithinEndThreshold ? this._sentEndForContentLength : 0;\n    }\n  }\n  _scheduleCellsToRenderUpdate() {\n    var _this$state$cellsArou = this.state.cellsAroundViewport,\n      first = _this$state$cellsArou.first,\n      last = _this$state$cellsArou.last;\n    var _this$_scrollMetrics3 = this._scrollMetrics,\n      offset = _this$_scrollMetrics3.offset,\n      visibleLength = _this$_scrollMetrics3.visibleLength,\n      velocity = _this$_scrollMetrics3.velocity;\n    var itemCount = this.props.getItemCount(this.props.data);\n    var hiPri = false;\n    var onStartReachedThreshold = onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold);\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold);\n    if (first > 0) {\n      var distTop = offset - this.__getFrameMetricsApprox(first, this.props).offset;\n      hiPri = distTop < 0 || velocity < -2 && distTop < getScrollingThreshold(onStartReachedThreshold, visibleLength);\n    }\n    if (!hiPri && last >= 0 && last < itemCount - 1) {\n      var distBottom = this.__getFrameMetricsApprox(last, this.props).offset - (offset + visibleLength);\n      hiPri = distBottom < 0 || velocity > 2 && distBottom < getScrollingThreshold(onEndReachedThreshold, visibleLength);\n    }\n    if (hiPri && (this._averageCellLength || this.props.getItemLayout) && !this._hiPriInProgress) {\n      this._hiPriInProgress = true;\n      this._updateCellsToRenderBatcher.dispose({\n        abort: true\n      });\n      this._updateCellsToRender();\n      return;\n    } else {\n      this._updateCellsToRenderBatcher.schedule();\n    }\n  }\n  _updateViewableItems(props, cellsAroundViewport) {\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.onUpdate(props, this._scrollMetrics.offset, this._scrollMetrics.visibleLength, this._getFrameMetrics, this._createViewToken, tuple.onViewableItemsChanged, cellsAroundViewport);\n    });\n  }\n}\nVirtualizedList.contextType = VirtualizedListContext;\nvar styles = StyleSheet.create({\n  verticallyInverted: {\n    transform: 'scaleY(-1)'\n  },\n  horizontallyInverted: {\n    transform: 'scaleX(-1)'\n  },\n  debug: {\n    flex: 1\n  },\n  debugOverlayBase: {\n    position: 'absolute',\n    top: 0,\n    right: 0\n  },\n  debugOverlay: {\n    bottom: 0,\n    width: 20,\n    borderColor: 'blue',\n    borderWidth: 1\n  },\n  debugOverlayFrame: {\n    left: 0,\n    backgroundColor: 'orange'\n  },\n  debugOverlayFrameLast: {\n    left: 0,\n    borderColor: 'green',\n    borderWidth: 2\n  },\n  debugOverlayFrameVis: {\n    left: 0,\n    borderColor: 'red',\n    borderWidth: 2\n  }\n});\nexport default VirtualizedList;","map":{"version":3,"names":["_createForOfIteratorHelperLoose","_extends","_objectSpread","RefreshControl","ScrollView","View","StyleSheet","Batchinator","clamp","infoLog","CellRenderMask","ChildListCollection","FillRateHelper","StateSafePureComponent","ViewabilityHelper","CellRenderer","VirtualizedListCellContextProvider","VirtualizedListContext","VirtualizedListContextProvider","computeWindowedRenderLimits","keyExtractor","defaultKeyExtractor","invariant","nullthrows","React","__DEV__","process","env","NODE_ENV","ON_EDGE_REACHED_EPSILON","_usedIndexForKey","_keylessItemComponentName","horizontalOrDefault","horizontal","initialNumToRenderOrDefault","initialNumToRender","maxToRenderPerBatchOrDefault","maxToRenderPerBatch","onStartReachedThresholdOrDefault","onStartReachedThreshold","onEndReachedThresholdOrDefault","onEndReachedThreshold","getScrollingThreshold","threshold","visibleLength","scrollEventThrottleOrDefault","scrollEventThrottle","windowSizeOrDefault","windowSize","findLastWhere","arr","predicate","i","length","VirtualizedList","scrollToEnd","params","animated","veryLast","props","getItemCount","data","frame","__getFrameMetricsApprox","offset","Math","max","_footerLength","_scrollMetrics","_scrollRef","scrollTo","console","warn","x","y","scrollToIndex","_this$props","getItemLayout","onScrollToIndexFailed","index","viewOffset","viewPosition","_highestMeasuredFrameIndex","averageItemLength","_averageCellLength","highestMeasuredFrameIndex","floor","_getOffsetApprox","scrollToItem","item","_this$props2","getItem","itemCount","_index","scrollToOffset","recordInteraction","_nestedChildLists","forEach","childList","_viewabilityTuples","t","viewabilityHelper","_updateViewableItems","state","cellsAroundViewport","flashScrollIndicators","getScrollResponder","getScrollableNode","getScrollRef","_getCellKey","_this$context","context","cellKey","hasMore","_hasMore","constructor","_props","_this$props$updateCel","_getScrollMetrics","_getOutermostParentListRef","_isNestedWithSameOrientation","getOutermostParentListRef","_registerAsNestedChild","add","ref","_hasInteracted","_unregisterAsNestedChild","remove","_onUpdateSeparators","keys","newProps","key","_cellRefs","updateSeparatorProps","_getSpacerKey","isVertical","_frames","_hasTriggeredInitialScrollToIndex","_hasWarned","_headerLength","_hiPriInProgress","_indicesToKeys","Map","_lastFocusedCellKey","_offsetFromParentVirtualizedList","_prevParentOffset","contentLength","dOffset","dt","timestamp","velocity","zoomScale","_sentStartForContentLength","_sentEndForContentLength","_totalCellLength","_totalCellsMeasured","_captureScrollRef","_defaultRenderScrollComponent","onRefresh","createElement","_props$refreshing","refreshing","JSON","stringify","refreshControl","progressViewOffset","_onCellLayout","e","layout","nativeEvent","next","_selectOffset","_selectLength","inLayout","curr","_scheduleCellsToRenderUpdate","_triggerRemeasureForChildListsInCell","_computeBlankness","_onCellUnmount","_onLayout","measureLayoutRelativeToContainingList","onLayout","_maybeCallOnEdgeReached","_onLayoutEmpty","_onLayoutFooter","_getFooterCellKey","_onLayoutHeader","_onContentSizeChange","width","height","initialScrollIndex","contentOffset","onContentSizeChange","_convertParentScrollMetrics","metrics","_onScroll","onScroll","timeStamp","layoutMeasurement","contentSize","_this$_convertParentS","perf","prevDt","_fillRateHelper","activate","_onScrollBeginDrag","tuple","onScrollBeginDrag","_onScrollEndDrag","onScrollEndDrag","_onMomentumScrollBegin","onMomentumScrollBegin","_onMomentumScrollEnd","onMomentumScrollEnd","_updateCellsToRender","setState","_adjustCellsAroundViewport","renderMask","_createRenderMask","_getNonViewportRenderRegions","first","last","equals","_createViewToken","isViewable","_keyExtractor","Number","isInteger","frameMetrics","remainder","_getFrameMetrics","lastFocusedCellRenderer","focusedCellIndex","heightOfCellsBeforeFocused","heightOfCellsAfterFocused","_i","_checkProps","_updateCellsToRenderBatcher","updateCellsBatchingPeriod","viewabilityConfigCallbackPairs","map","pair","viewabilityConfig","onViewableItemsChanged","_this$props3","push","initialRenderRegion","_initialRenderRegion","invertedWheelEventHandler","ev","scrollOffset","target","scrollLeft","scrollTop","scrollLength","scrollWidth","scrollHeight","clientLength","clientWidth","clientHeight","isEventTargetScrollable","delta","deltaX","wheelDeltaX","deltaY","wheelDeltaY","leftoverDelta","min","targetDelta","inverted","node","nextScrollLeft","nextScrollTop","preventDefault","__isNative","flexWrap","flatStyles","flatten","contentContainerStyle","additionalRegions","allRegions","_i2","_allRegions","region","addCells","initialRegion","stickyIndicesSet","Set","stickyHeaderIndices","_ensureClosestStickyHeader","_props$initialScrollI","firstCellIndex","lastCellIndex","cellIdx","stickyOffset","ListHeaderComponent","itemIdx","has","_this$_scrollMetrics","distanceFromEnd","_constrainToItemCount","newCellsAroundViewport","disableVirtualization","renderAhead","abs","EPSILON","size","childIdx","_findFirstChildWithMore","ii","cellKeyForIndex","get","anyInCell","componentDidMount","registerAsNestedChild","setupWebWheelHandler","componentWillUnmount","unregisterAsNestedChild","dispose","abort","deactivateAndFlush","teardownWebWheelHandler","addEventListener","setTimeout","removeEventListener","getDerivedStateFromProps","prevState","numCells","constrainedCells","_pushCells","cells","stickyIndicesFromProps","inversionStyle","_this","_this$props4","CellRendererComponent","ItemSeparatorComponent","ListItemComponent","debug","renderItem","end","prevCellKey","_loop","set","shouldListenForLayout","enabled","undefined","onUpdateSeparators","onCellFocusCapture","_onCellFocusCapture","onUnmount","_ref","onCellLayout","nestedContext","String","type","displayName","render","_this$props5","ListEmptyComponent","ListFooterComponent","_this$props6","styles","horizontallyInverted","verticallyInverted","_element","isValidElement","style","ListHeaderComponentStyle","_element2","cloneElement","event","spacerKey","renderRegions","enumerateRegions","lastSpacer","r","isSpacer","_iterator","_step","done","section","value","isLastSpacer","constrainToMeasured","firstMetrics","lastMetrics","spacerSize","_element3","ListFooterComponentStyle","scrollProps","invertStickyHeaders","innerRet","getScrollMetrics","renderScrollComponent","ret","_renderDebugOverlay","componentDidUpdate","prevProps","_this$props7","extraData","resetViewableIndices","hiPriInProgress","computeBlankness","forEachInCell","measureLayout","scrollMetrics","metricsChanged","error","stack","normalize","framesInLayout","windowTop","frameLast","windowLen","visTop","visLen","debugOverlayBase","debugOverlay","f","debugOverlayFrame","top","debugOverlayFrameLast","debugOverlayFrameVis","_this$props8","onStartReached","onEndReached","_this$_scrollMetrics2","distanceFromStart","DEFAULT_THRESHOLD_PX","startThreshold","endThreshold","isWithinStartThreshold","isWithinEndThreshold","_this$state$cellsArou","_this$_scrollMetrics3","hiPri","distTop","distBottom","schedule","onUpdate","contextType","create","transform","flex","position","right","bottom","borderColor","borderWidth","left","backgroundColor"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/index.js"],"sourcesContent":["import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport RefreshControl from '../../../exports/RefreshControl';\nimport ScrollView from '../../../exports/ScrollView';\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport Batchinator from '../Batchinator';\nimport clamp from '../Utilities/clamp';\nimport infoLog from '../infoLog';\nimport { CellRenderMask } from './CellRenderMask';\nimport ChildListCollection from './ChildListCollection';\nimport FillRateHelper from '../FillRateHelper';\nimport StateSafePureComponent from './StateSafePureComponent';\nimport ViewabilityHelper from '../ViewabilityHelper';\nimport CellRenderer from './VirtualizedListCellRenderer';\nimport { VirtualizedListCellContextProvider, VirtualizedListContext, VirtualizedListContextProvider } from './VirtualizedListContext.js';\nimport { computeWindowedRenderLimits, keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport nullthrows from 'nullthrows';\nimport * as React from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar ON_EDGE_REACHED_EPSILON = 0.001;\nvar _usedIndexForKey = false;\nvar _keylessItemComponentName = '';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// horizontalOrDefault(this.props.horizontal)\nfunction horizontalOrDefault(horizontal) {\n  return horizontal !== null && horizontal !== void 0 ? horizontal : false;\n}\n\n// initialNumToRenderOrDefault(this.props.initialNumToRender)\nfunction initialNumToRenderOrDefault(initialNumToRender) {\n  return initialNumToRender !== null && initialNumToRender !== void 0 ? initialNumToRender : 10;\n}\n\n// maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch) {\n  return maxToRenderPerBatch !== null && maxToRenderPerBatch !== void 0 ? maxToRenderPerBatch : 10;\n}\n\n// onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold)\nfunction onStartReachedThresholdOrDefault(onStartReachedThreshold) {\n  return onStartReachedThreshold !== null && onStartReachedThreshold !== void 0 ? onStartReachedThreshold : 2;\n}\n\n// onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold)\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold) {\n  return onEndReachedThreshold !== null && onEndReachedThreshold !== void 0 ? onEndReachedThreshold : 2;\n}\n\n// getScrollingThreshold(visibleLength, onEndReachedThreshold)\nfunction getScrollingThreshold(threshold, visibleLength) {\n  return threshold * visibleLength / 2;\n}\n\n// scrollEventThrottleOrDefault(this.props.scrollEventThrottle)\nfunction scrollEventThrottleOrDefault(scrollEventThrottle) {\n  return scrollEventThrottle !== null && scrollEventThrottle !== void 0 ? scrollEventThrottle : 50;\n}\n\n// windowSizeOrDefault(this.props.windowSize)\nfunction windowSizeOrDefault(windowSize) {\n  return windowSize !== null && windowSize !== void 0 ? windowSize : 21;\n}\nfunction findLastWhere(arr, predicate) {\n  for (var i = arr.length - 1; i >= 0; i--) {\n    if (predicate(arr[i])) {\n      return arr[i];\n    }\n  }\n  return null;\n}\n\n/**\n * Base implementation for the more convenient [`<FlatList>`](https://reactnative.dev/docs/flatlist)\n * and [`<SectionList>`](https://reactnative.dev/docs/sectionlist) components, which are also better\n * documented. In general, this should only really be used if you need more flexibility than\n * `FlatList` provides, e.g. for use with immutable data instead of plain arrays.\n *\n * Virtualization massively improves memory consumption and performance of large lists by\n * maintaining a finite render window of active items and replacing all items outside of the render\n * window with appropriately sized blank space. The window adapts to scrolling behavior, and items\n * are rendered incrementally with low-pri (after any running interactions) if they are far from the\n * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space.\n *\n * Some caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` or `id` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n * - As an effort to remove defaultProps, use helper functions when referencing certain props\n *\n */\nclass VirtualizedList extends StateSafePureComponent {\n  // scrollToEnd may be janky without getItemLayout prop\n  scrollToEnd(params) {\n    var animated = params ? params.animated : true;\n    var veryLast = this.props.getItemCount(this.props.data) - 1;\n    if (veryLast < 0) {\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(veryLast, this.props);\n    var offset = Math.max(0, frame.offset + frame.length + this._footerLength - this._scrollMetrics.visibleLength);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n\n  // scrollToIndex may be janky without getItemLayout prop\n  scrollToIndex(params) {\n    var _this$props = this.props,\n      data = _this$props.data,\n      horizontal = _this$props.horizontal,\n      getItemCount = _this$props.getItemCount,\n      getItemLayout = _this$props.getItemLayout,\n      onScrollToIndexFailed = _this$props.onScrollToIndexFailed;\n    var animated = params.animated,\n      index = params.index,\n      viewOffset = params.viewOffset,\n      viewPosition = params.viewPosition;\n    invariant(index >= 0, \"scrollToIndex out of range: requested index \" + index + \" but minimum is 0\");\n    invariant(getItemCount(data) >= 1, \"scrollToIndex out of range: item length \" + getItemCount(data) + \" but minimum is 1\");\n    invariant(index < getItemCount(data), \"scrollToIndex out of range: requested index \" + index + \" is out of 0 to \" + (getItemCount(data) - 1));\n    if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n      invariant(!!onScrollToIndexFailed, 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' + 'otherwise there is no way to know the location of offscreen indices or handle failures.');\n      onScrollToIndexFailed({\n        averageItemLength: this._averageCellLength,\n        highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n        index\n      });\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(Math.floor(index), this.props);\n    var offset = Math.max(0, this._getOffsetApprox(index, this.props) - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length)) - (viewOffset || 0);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontal ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n\n  // scrollToItem may be janky without getItemLayout prop. Required linear scan through items -\n  // use scrollToIndex instead if possible.\n  scrollToItem(params) {\n    var item = params.item;\n    var _this$props2 = this.props,\n      data = _this$props2.data,\n      getItem = _this$props2.getItem,\n      getItemCount = _this$props2.getItemCount;\n    var itemCount = getItemCount(data);\n    for (var _index = 0; _index < itemCount; _index++) {\n      if (getItem(data, _index) === item) {\n        this.scrollToIndex(_objectSpread(_objectSpread({}, params), {}, {\n          index: _index\n        }));\n        break;\n      }\n    }\n  }\n\n  /**\n   * Scroll to a specific content pixel offset in the list.\n   *\n   * Param `offset` expects the offset to scroll to.\n   * In case of `horizontal` is true, the offset is the x-value,\n   * in any other case the offset is the y-value.\n   *\n   * Param `animated` (`true` by default) defines whether the list\n   * should do an animation while scrolling.\n   */\n  scrollToOffset(params) {\n    var animated = params.animated,\n      offset = params.offset;\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n  recordInteraction() {\n    this._nestedChildLists.forEach(childList => {\n      childList.recordInteraction();\n    });\n    this._viewabilityTuples.forEach(t => {\n      t.viewabilityHelper.recordInteraction();\n    });\n    this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n  }\n  flashScrollIndicators() {\n    if (this._scrollRef == null) {\n      return;\n    }\n    this._scrollRef.flashScrollIndicators();\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   * Note that `this._scrollRef` might not be a `ScrollView`, so we\n   * need to check that it responds to `getScrollResponder` before calling it.\n   */\n  getScrollResponder() {\n    if (this._scrollRef && this._scrollRef.getScrollResponder) {\n      return this._scrollRef.getScrollResponder();\n    }\n  }\n  getScrollableNode() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      return this._scrollRef.getScrollableNode();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  getScrollRef() {\n    if (this._scrollRef && this._scrollRef.getScrollRef) {\n      return this._scrollRef.getScrollRef();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  _getCellKey() {\n    var _this$context;\n    return ((_this$context = this.context) == null ? void 0 : _this$context.cellKey) || 'rootList';\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  hasMore() {\n    return this._hasMore;\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n\n  constructor(_props) {\n    var _this$props$updateCel;\n    super(_props);\n    this._getScrollMetrics = () => {\n      return this._scrollMetrics;\n    };\n    this._getOutermostParentListRef = () => {\n      if (this._isNestedWithSameOrientation()) {\n        return this.context.getOutermostParentListRef();\n      } else {\n        return this;\n      }\n    };\n    this._registerAsNestedChild = childList => {\n      this._nestedChildLists.add(childList.ref, childList.cellKey);\n      if (this._hasInteracted) {\n        childList.ref.recordInteraction();\n      }\n    };\n    this._unregisterAsNestedChild = childList => {\n      this._nestedChildLists.remove(childList.ref);\n    };\n    this._onUpdateSeparators = (keys, newProps) => {\n      keys.forEach(key => {\n        var ref = key != null && this._cellRefs[key];\n        ref && ref.updateSeparatorProps(newProps);\n      });\n    };\n    this._getSpacerKey = isVertical => isVertical ? 'height' : 'width';\n    this._averageCellLength = 0;\n    this._cellRefs = {};\n    this._frames = {};\n    this._footerLength = 0;\n    this._hasTriggeredInitialScrollToIndex = false;\n    this._hasInteracted = false;\n    this._hasMore = false;\n    this._hasWarned = {};\n    this._headerLength = 0;\n    this._hiPriInProgress = false;\n    this._highestMeasuredFrameIndex = 0;\n    this._indicesToKeys = new Map();\n    this._lastFocusedCellKey = null;\n    this._nestedChildLists = new ChildListCollection();\n    this._offsetFromParentVirtualizedList = 0;\n    this._prevParentOffset = 0;\n    this._scrollMetrics = {\n      contentLength: 0,\n      dOffset: 0,\n      dt: 10,\n      offset: 0,\n      timestamp: 0,\n      velocity: 0,\n      visibleLength: 0,\n      zoomScale: 1\n    };\n    this._scrollRef = null;\n    this._sentStartForContentLength = 0;\n    this._sentEndForContentLength = 0;\n    this._totalCellLength = 0;\n    this._totalCellsMeasured = 0;\n    this._viewabilityTuples = [];\n    this._captureScrollRef = ref => {\n      this._scrollRef = ref;\n    };\n    this._defaultRenderScrollComponent = props => {\n      var onRefresh = props.onRefresh;\n      if (this._isNestedWithSameOrientation()) {\n        // $FlowFixMe[prop-missing] - Typing ReactNativeComponent revealed errors\n        return /*#__PURE__*/React.createElement(View, props);\n      } else if (onRefresh) {\n        var _props$refreshing;\n        invariant(typeof props.refreshing === 'boolean', '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + JSON.stringify((_props$refreshing = props.refreshing) !== null && _props$refreshing !== void 0 ? _props$refreshing : 'undefined') + '`');\n        return (\n          /*#__PURE__*/\n          // $FlowFixMe[prop-missing] Invalid prop usage\n          // $FlowFixMe[incompatible-use]\n          React.createElement(ScrollView, _extends({}, props, {\n            refreshControl: props.refreshControl == null ? /*#__PURE__*/React.createElement(RefreshControl\n            // $FlowFixMe[incompatible-type]\n            , {\n              refreshing: props.refreshing,\n              onRefresh: onRefresh,\n              progressViewOffset: props.progressViewOffset\n            }) : props.refreshControl\n          }))\n        );\n      } else {\n        // $FlowFixMe[prop-missing] Invalid prop usage\n        // $FlowFixMe[incompatible-use]\n        return /*#__PURE__*/React.createElement(ScrollView, props);\n      }\n    };\n    this._onCellLayout = (e, cellKey, index) => {\n      var layout = e.nativeEvent.layout;\n      var next = {\n        offset: this._selectOffset(layout),\n        length: this._selectLength(layout),\n        index,\n        inLayout: true\n      };\n      var curr = this._frames[cellKey];\n      if (!curr || next.offset !== curr.offset || next.length !== curr.length || index !== curr.index) {\n        this._totalCellLength += next.length - (curr ? curr.length : 0);\n        this._totalCellsMeasured += curr ? 0 : 1;\n        this._averageCellLength = this._totalCellLength / this._totalCellsMeasured;\n        this._frames[cellKey] = next;\n        this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index);\n        this._scheduleCellsToRenderUpdate();\n      } else {\n        this._frames[cellKey].inLayout = true;\n      }\n      this._triggerRemeasureForChildListsInCell(cellKey);\n      this._computeBlankness();\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n    };\n    this._onCellUnmount = cellKey => {\n      delete this._cellRefs[cellKey];\n      var curr = this._frames[cellKey];\n      if (curr) {\n        this._frames[cellKey] = _objectSpread(_objectSpread({}, curr), {}, {\n          inLayout: false\n        });\n      }\n    };\n    this._onLayout = e => {\n      if (this._isNestedWithSameOrientation()) {\n        // Need to adjust our scroll metrics to be relative to our containing\n        // VirtualizedList before we can make claims about list item viewability\n        this.measureLayoutRelativeToContainingList();\n      } else {\n        this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout);\n      }\n      this.props.onLayout && this.props.onLayout(e);\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._onLayoutEmpty = e => {\n      this.props.onLayout && this.props.onLayout(e);\n    };\n    this._onLayoutFooter = e => {\n      this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n      this._footerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onLayoutHeader = e => {\n      this._headerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onContentSizeChange = (width, height) => {\n      if (width > 0 && height > 0 && this.props.initialScrollIndex != null && this.props.initialScrollIndex > 0 && !this._hasTriggeredInitialScrollToIndex) {\n        if (this.props.contentOffset == null) {\n          if (this.props.initialScrollIndex < this.props.getItemCount(this.props.data)) {\n            this.scrollToIndex({\n              animated: false,\n              index: nullthrows(this.props.initialScrollIndex)\n            });\n          } else {\n            this.scrollToEnd({\n              animated: false\n            });\n          }\n        }\n        this._hasTriggeredInitialScrollToIndex = true;\n      }\n      if (this.props.onContentSizeChange) {\n        this.props.onContentSizeChange(width, height);\n      }\n      this._scrollMetrics.contentLength = this._selectLength({\n        height,\n        width\n      });\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._convertParentScrollMetrics = metrics => {\n      // Offset of the top of the nested list relative to the top of its parent's viewport\n      var offset = metrics.offset - this._offsetFromParentVirtualizedList;\n      // Child's visible length is the same as its parent's\n      var visibleLength = metrics.visibleLength;\n      var dOffset = offset - this._scrollMetrics.offset;\n      var contentLength = this._scrollMetrics.contentLength;\n      return {\n        visibleLength,\n        contentLength,\n        offset,\n        dOffset\n      };\n    };\n    this._onScroll = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScroll(e);\n      });\n      if (this.props.onScroll) {\n        this.props.onScroll(e);\n      }\n      var timestamp = e.timeStamp;\n      var visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n      var contentLength = this._selectLength(e.nativeEvent.contentSize);\n      var offset = this._selectOffset(e.nativeEvent.contentOffset);\n      var dOffset = offset - this._scrollMetrics.offset;\n      if (this._isNestedWithSameOrientation()) {\n        if (this._scrollMetrics.contentLength === 0) {\n          // Ignore scroll events until onLayout has been called and we\n          // know our offset from our offset from our parent\n          return;\n        }\n        var _this$_convertParentS = this._convertParentScrollMetrics({\n          visibleLength,\n          offset\n        });\n        visibleLength = _this$_convertParentS.visibleLength;\n        contentLength = _this$_convertParentS.contentLength;\n        offset = _this$_convertParentS.offset;\n        dOffset = _this$_convertParentS.dOffset;\n      }\n      var dt = this._scrollMetrics.timestamp ? Math.max(1, timestamp - this._scrollMetrics.timestamp) : 1;\n      var velocity = dOffset / dt;\n      if (dt > 500 && this._scrollMetrics.dt > 500 && contentLength > 5 * visibleLength && !this._hasWarned.perf) {\n        infoLog('VirtualizedList: You have a large list that is slow to update - make sure your ' + 'renderItem function renders components that follow React performance best practices ' + 'like PureComponent, shouldComponentUpdate, etc.', {\n          dt,\n          prevDt: this._scrollMetrics.dt,\n          contentLength\n        });\n        this._hasWarned.perf = true;\n      }\n\n      // For invalid negative values (w/ RTL), set this to 1.\n      var zoomScale = e.nativeEvent.zoomScale < 0 ? 1 : e.nativeEvent.zoomScale;\n      this._scrollMetrics = {\n        contentLength,\n        dt,\n        dOffset,\n        offset,\n        timestamp,\n        velocity,\n        visibleLength,\n        zoomScale\n      };\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      if (!this.props) {\n        return;\n      }\n      this._maybeCallOnEdgeReached();\n      if (velocity !== 0) {\n        this._fillRateHelper.activate();\n      }\n      this._computeBlankness();\n      this._scheduleCellsToRenderUpdate();\n    };\n    this._onScrollBeginDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollBeginDrag(e);\n      });\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.recordInteraction();\n      });\n      this._hasInteracted = true;\n      this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n    };\n    this._onScrollEndDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollEndDrag(e);\n      });\n      var velocity = e.nativeEvent.velocity;\n      if (velocity) {\n        this._scrollMetrics.velocity = this._selectOffset(velocity);\n      }\n      this._computeBlankness();\n      this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n    };\n    this._onMomentumScrollBegin = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollBegin(e);\n      });\n      this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n    };\n    this._onMomentumScrollEnd = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollEnd(e);\n      });\n      this._scrollMetrics.velocity = 0;\n      this._computeBlankness();\n      this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n    };\n    this._updateCellsToRender = () => {\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      this.setState((state, props) => {\n        var cellsAroundViewport = this._adjustCellsAroundViewport(props, state.cellsAroundViewport);\n        var renderMask = VirtualizedList._createRenderMask(props, cellsAroundViewport, this._getNonViewportRenderRegions(props));\n        if (cellsAroundViewport.first === state.cellsAroundViewport.first && cellsAroundViewport.last === state.cellsAroundViewport.last && renderMask.equals(state.renderMask)) {\n          return null;\n        }\n        return {\n          cellsAroundViewport,\n          renderMask\n        };\n      });\n    };\n    this._createViewToken = (index, isViewable, props\n    // $FlowFixMe[missing-local-annot]\n    ) => {\n      var data = props.data,\n        getItem = props.getItem;\n      var item = getItem(data, index);\n      return {\n        index,\n        item,\n        key: this._keyExtractor(item, index, props),\n        isViewable\n      };\n    };\n    this._getOffsetApprox = (index, props) => {\n      if (Number.isInteger(index)) {\n        return this.__getFrameMetricsApprox(index, props).offset;\n      } else {\n        var frameMetrics = this.__getFrameMetricsApprox(Math.floor(index), props);\n        var remainder = index - Math.floor(index);\n        return frameMetrics.offset + remainder * frameMetrics.length;\n      }\n    };\n    this.__getFrameMetricsApprox = (index, props) => {\n      var frame = this._getFrameMetrics(index, props);\n      if (frame && frame.index === index) {\n        // check for invalid frames due to row re-ordering\n        return frame;\n      } else {\n        var data = props.data,\n          getItemCount = props.getItemCount,\n          getItemLayout = props.getItemLayout;\n        invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n        invariant(!getItemLayout, 'Should not have to estimate frames when a measurement metrics function is provided');\n        return {\n          length: this._averageCellLength,\n          offset: this._averageCellLength * index\n        };\n      }\n    };\n    this._getFrameMetrics = (index, props) => {\n      var data = props.data,\n        getItem = props.getItem,\n        getItemCount = props.getItemCount,\n        getItemLayout = props.getItemLayout;\n      invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n      var item = getItem(data, index);\n      var frame = this._frames[this._keyExtractor(item, index, props)];\n      if (!frame || frame.index !== index) {\n        if (getItemLayout) {\n          /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment\n           * suppresses an error found when Flow v0.63 was deployed. To see the error\n           * delete this comment and run Flow. */\n          return getItemLayout(data, index);\n        }\n      }\n      return frame;\n    };\n    this._getNonViewportRenderRegions = props => {\n      // Keep a viewport's worth of content around the last focused cell to allow\n      // random navigation around it without any blanking. E.g. tabbing from one\n      // focused item out of viewport to another.\n      if (!(this._lastFocusedCellKey && this._cellRefs[this._lastFocusedCellKey])) {\n        return [];\n      }\n      var lastFocusedCellRenderer = this._cellRefs[this._lastFocusedCellKey];\n      var focusedCellIndex = lastFocusedCellRenderer.props.index;\n      var itemCount = props.getItemCount(props.data);\n\n      // The last cell we rendered may be at a new index. Bail if we don't know\n      // where it is.\n      if (focusedCellIndex >= itemCount || this._keyExtractor(props.getItem(props.data, focusedCellIndex), focusedCellIndex, props) !== this._lastFocusedCellKey) {\n        return [];\n      }\n      var first = focusedCellIndex;\n      var heightOfCellsBeforeFocused = 0;\n      for (var i = first - 1; i >= 0 && heightOfCellsBeforeFocused < this._scrollMetrics.visibleLength; i--) {\n        first--;\n        heightOfCellsBeforeFocused += this.__getFrameMetricsApprox(i, props).length;\n      }\n      var last = focusedCellIndex;\n      var heightOfCellsAfterFocused = 0;\n      for (var _i = last + 1; _i < itemCount && heightOfCellsAfterFocused < this._scrollMetrics.visibleLength; _i++) {\n        last++;\n        heightOfCellsAfterFocused += this.__getFrameMetricsApprox(_i, props).length;\n      }\n      return [{\n        first,\n        last\n      }];\n    };\n    this._checkProps(_props);\n    this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n    this._updateCellsToRenderBatcher = new Batchinator(this._updateCellsToRender, (_this$props$updateCel = this.props.updateCellsBatchingPeriod) !== null && _this$props$updateCel !== void 0 ? _this$props$updateCel : 50);\n    if (this.props.viewabilityConfigCallbackPairs) {\n      this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n        viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n        onViewableItemsChanged: pair.onViewableItemsChanged\n      }));\n    } else {\n      var _this$props3 = this.props,\n        onViewableItemsChanged = _this$props3.onViewableItemsChanged,\n        viewabilityConfig = _this$props3.viewabilityConfig;\n      if (onViewableItemsChanged) {\n        this._viewabilityTuples.push({\n          viewabilityHelper: new ViewabilityHelper(viewabilityConfig),\n          onViewableItemsChanged: onViewableItemsChanged\n        });\n      }\n    }\n    var initialRenderRegion = VirtualizedList._initialRenderRegion(_props);\n    this.state = {\n      cellsAroundViewport: initialRenderRegion,\n      renderMask: VirtualizedList._createRenderMask(_props, initialRenderRegion)\n    };\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    // For issue https://github.com/necolas/react-native-web/issues/995\n    this.invertedWheelEventHandler = ev => {\n      var scrollOffset = this.props.horizontal ? ev.target.scrollLeft : ev.target.scrollTop;\n      var scrollLength = this.props.horizontal ? ev.target.scrollWidth : ev.target.scrollHeight;\n      var clientLength = this.props.horizontal ? ev.target.clientWidth : ev.target.clientHeight;\n      var isEventTargetScrollable = scrollLength > clientLength;\n      var delta = this.props.horizontal ? ev.deltaX || ev.wheelDeltaX : ev.deltaY || ev.wheelDeltaY;\n      var leftoverDelta = delta;\n      if (isEventTargetScrollable) {\n        leftoverDelta = delta < 0 ? Math.min(delta + scrollOffset, 0) : Math.max(delta - (scrollLength - clientLength - scrollOffset), 0);\n      }\n      var targetDelta = delta - leftoverDelta;\n      if (this.props.inverted && this._scrollRef && this._scrollRef.getScrollableNode) {\n        var node = this._scrollRef.getScrollableNode();\n        if (this.props.horizontal) {\n          ev.target.scrollLeft += targetDelta;\n          var nextScrollLeft = node.scrollLeft - leftoverDelta;\n          node.scrollLeft = !this.props.getItemLayout ? Math.min(nextScrollLeft, this._totalCellLength) : nextScrollLeft;\n        } else {\n          ev.target.scrollTop += targetDelta;\n          var nextScrollTop = node.scrollTop - leftoverDelta;\n          node.scrollTop = !this.props.getItemLayout ? Math.min(nextScrollTop, this._totalCellLength) : nextScrollTop;\n        }\n        ev.preventDefault();\n      }\n    };\n  }\n  _checkProps(props) {\n    var onScroll = props.onScroll,\n      windowSize = props.windowSize,\n      getItemCount = props.getItemCount,\n      data = props.data,\n      initialScrollIndex = props.initialScrollIndex;\n    invariant(\n    // $FlowFixMe[prop-missing]\n    !onScroll || !onScroll.__isNative, 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + 'to support native onScroll events with useNativeDriver');\n    invariant(windowSizeOrDefault(windowSize) > 0, 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.');\n    invariant(getItemCount, 'VirtualizedList: The \"getItemCount\" prop must be provided');\n    var itemCount = getItemCount(data);\n    if (initialScrollIndex != null && !this._hasTriggeredInitialScrollToIndex && (initialScrollIndex < 0 || itemCount > 0 && initialScrollIndex >= itemCount) && !this._hasWarned.initialScrollIndex) {\n      console.warn(\"initialScrollIndex \\\"\" + initialScrollIndex + \"\\\" is not valid (list has \" + itemCount + \" items)\");\n      this._hasWarned.initialScrollIndex = true;\n    }\n    if (__DEV__ && !this._hasWarned.flexWrap) {\n      // $FlowFixMe[underconstrained-implicit-instantiation]\n      var flatStyles = StyleSheet.flatten(this.props.contentContainerStyle);\n      if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n        console.warn('`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' + 'Consider using `numColumns` with `FlatList` instead.');\n        this._hasWarned.flexWrap = true;\n      }\n    }\n  }\n  static _createRenderMask(props, cellsAroundViewport, additionalRegions) {\n    var itemCount = props.getItemCount(props.data);\n    invariant(cellsAroundViewport.first >= 0 && cellsAroundViewport.last >= cellsAroundViewport.first - 1 && cellsAroundViewport.last < itemCount, \"Invalid cells around viewport \\\"[\" + cellsAroundViewport.first + \", \" + cellsAroundViewport.last + \"]\\\" was passed to VirtualizedList._createRenderMask\");\n    var renderMask = new CellRenderMask(itemCount);\n    if (itemCount > 0) {\n      var allRegions = [cellsAroundViewport, ...(additionalRegions !== null && additionalRegions !== void 0 ? additionalRegions : [])];\n      for (var _i2 = 0, _allRegions = allRegions; _i2 < _allRegions.length; _i2++) {\n        var region = _allRegions[_i2];\n        renderMask.addCells(region);\n      }\n\n      // The initially rendered cells are retained as part of the\n      // \"scroll-to-top\" optimization\n      if (props.initialScrollIndex == null || props.initialScrollIndex <= 0) {\n        var initialRegion = VirtualizedList._initialRenderRegion(props);\n        renderMask.addCells(initialRegion);\n      }\n\n      // The layout coordinates of sticker headers may be off-screen while the\n      // actual header is on-screen. Keep the most recent before the viewport\n      // rendered, even if its layout coordinates are not in viewport.\n      var stickyIndicesSet = new Set(props.stickyHeaderIndices);\n      VirtualizedList._ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellsAroundViewport.first);\n    }\n    return renderMask;\n  }\n  static _initialRenderRegion(props) {\n    var _props$initialScrollI;\n    var itemCount = props.getItemCount(props.data);\n    var firstCellIndex = Math.max(0, Math.min(itemCount - 1, Math.floor((_props$initialScrollI = props.initialScrollIndex) !== null && _props$initialScrollI !== void 0 ? _props$initialScrollI : 0)));\n    var lastCellIndex = Math.min(itemCount, firstCellIndex + initialNumToRenderOrDefault(props.initialNumToRender)) - 1;\n    return {\n      first: firstCellIndex,\n      last: lastCellIndex\n    };\n  }\n  static _ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellIdx) {\n    var stickyOffset = props.ListHeaderComponent ? 1 : 0;\n    for (var itemIdx = cellIdx - 1; itemIdx >= 0; itemIdx--) {\n      if (stickyIndicesSet.has(itemIdx + stickyOffset)) {\n        renderMask.addCells({\n          first: itemIdx,\n          last: itemIdx\n        });\n        break;\n      }\n    }\n  }\n  _adjustCellsAroundViewport(props, cellsAroundViewport) {\n    var data = props.data,\n      getItemCount = props.getItemCount;\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(props.onEndReachedThreshold);\n    var _this$_scrollMetrics = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics.contentLength,\n      offset = _this$_scrollMetrics.offset,\n      visibleLength = _this$_scrollMetrics.visibleLength;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n\n    // Wait until the scroll view metrics have been set up. And until then,\n    // we will trust the initialNumToRender suggestion\n    if (visibleLength <= 0 || contentLength <= 0) {\n      return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n    }\n    var newCellsAroundViewport;\n    if (props.disableVirtualization) {\n      var renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch) : 0;\n      newCellsAroundViewport = {\n        first: 0,\n        last: Math.min(cellsAroundViewport.last + renderAhead, getItemCount(data) - 1)\n      };\n    } else {\n      // If we have a non-zero initialScrollIndex and run this before we've scrolled,\n      // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex.\n      // So let's wait until we've scrolled the view to the right place. And until then,\n      // we will trust the initialScrollIndex suggestion.\n\n      // Thus, we want to recalculate the windowed render limits if any of the following hold:\n      // - initialScrollIndex is undefined or is 0\n      // - initialScrollIndex > 0 AND scrolling is complete\n      // - initialScrollIndex > 0 AND the end of the list is visible (this handles the case\n      //   where the list is shorter than the visible area)\n      if (props.initialScrollIndex && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON) {\n        return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n      }\n      newCellsAroundViewport = computeWindowedRenderLimits(props, maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch), windowSizeOrDefault(props.windowSize), cellsAroundViewport, this.__getFrameMetricsApprox, this._scrollMetrics);\n      invariant(newCellsAroundViewport.last < getItemCount(data), 'computeWindowedRenderLimits() should return range in-bounds');\n    }\n    if (this._nestedChildLists.size() > 0) {\n      // If some cell in the new state has a child list in it, we should only render\n      // up through that item, so that we give that list a chance to render.\n      // Otherwise there's churn from multiple child lists mounting and un-mounting\n      // their items.\n\n      // Will this prevent rendering if the nested list doesn't realize the end?\n      var childIdx = this._findFirstChildWithMore(newCellsAroundViewport.first, newCellsAroundViewport.last);\n      newCellsAroundViewport.last = childIdx !== null && childIdx !== void 0 ? childIdx : newCellsAroundViewport.last;\n    }\n    return newCellsAroundViewport;\n  }\n  _findFirstChildWithMore(first, last) {\n    for (var ii = first; ii <= last; ii++) {\n      var cellKeyForIndex = this._indicesToKeys.get(ii);\n      if (cellKeyForIndex != null && this._nestedChildLists.anyInCell(cellKeyForIndex, childList => childList.hasMore())) {\n        return ii;\n      }\n    }\n    return null;\n  }\n  componentDidMount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.registerAsNestedChild({\n        ref: this,\n        cellKey: this.context.cellKey\n      });\n    }\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    this.setupWebWheelHandler();\n  }\n  componentWillUnmount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.unregisterAsNestedChild({\n        ref: this\n      });\n    }\n    this._updateCellsToRenderBatcher.dispose({\n      abort: true\n    });\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.dispose();\n    });\n    this._fillRateHelper.deactivateAndFlush();\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    this.teardownWebWheelHandler();\n  }\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n  setupWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().addEventListener('wheel', this.invertedWheelEventHandler);\n    } else {\n      setTimeout(() => this.setupWebWheelHandler(), 50);\n      return;\n    }\n  }\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n  teardownWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().removeEventListener('wheel', this.invertedWheelEventHandler);\n    }\n  }\n  static getDerivedStateFromProps(newProps, prevState) {\n    // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make\n    // sure we're rendering a reasonable range here.\n    var itemCount = newProps.getItemCount(newProps.data);\n    if (itemCount === prevState.renderMask.numCells()) {\n      return prevState;\n    }\n    var constrainedCells = VirtualizedList._constrainToItemCount(prevState.cellsAroundViewport, newProps);\n    return {\n      cellsAroundViewport: constrainedCells,\n      renderMask: VirtualizedList._createRenderMask(newProps, constrainedCells)\n    };\n  }\n  _pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, first, last, inversionStyle) {\n    var _this = this;\n    var _this$props4 = this.props,\n      CellRendererComponent = _this$props4.CellRendererComponent,\n      ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n      ListHeaderComponent = _this$props4.ListHeaderComponent,\n      ListItemComponent = _this$props4.ListItemComponent,\n      data = _this$props4.data,\n      debug = _this$props4.debug,\n      getItem = _this$props4.getItem,\n      getItemCount = _this$props4.getItemCount,\n      getItemLayout = _this$props4.getItemLayout,\n      horizontal = _this$props4.horizontal,\n      renderItem = _this$props4.renderItem;\n    var stickyOffset = ListHeaderComponent ? 1 : 0;\n    var end = getItemCount(data) - 1;\n    var prevCellKey;\n    last = Math.min(end, last);\n    var _loop = function _loop() {\n      var item = getItem(data, ii);\n      var key = _this._keyExtractor(item, ii, _this.props);\n      _this._indicesToKeys.set(ii, key);\n      if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n        stickyHeaderIndices.push(cells.length);\n      }\n      var shouldListenForLayout = getItemLayout == null || debug || _this._fillRateHelper.enabled();\n      cells.push(/*#__PURE__*/React.createElement(CellRenderer, _extends({\n        CellRendererComponent: CellRendererComponent,\n        ItemSeparatorComponent: ii < end ? ItemSeparatorComponent : undefined,\n        ListItemComponent: ListItemComponent,\n        cellKey: key,\n        horizontal: horizontal,\n        index: ii,\n        inversionStyle: inversionStyle,\n        item: item,\n        key: key,\n        prevCellKey: prevCellKey,\n        onUpdateSeparators: _this._onUpdateSeparators,\n        onCellFocusCapture: e => _this._onCellFocusCapture(key),\n        onUnmount: _this._onCellUnmount,\n        ref: _ref => {\n          _this._cellRefs[key] = _ref;\n        },\n        renderItem: renderItem\n      }, shouldListenForLayout && {\n        onCellLayout: _this._onCellLayout\n      })));\n      prevCellKey = key;\n    };\n    for (var ii = first; ii <= last; ii++) {\n      _loop();\n    }\n  }\n  static _constrainToItemCount(cells, props) {\n    var itemCount = props.getItemCount(props.data);\n    var last = Math.min(itemCount - 1, cells.last);\n    var maxToRenderPerBatch = maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch);\n    return {\n      first: clamp(0, itemCount - 1 - maxToRenderPerBatch, cells.first),\n      last\n    };\n  }\n  _isNestedWithSameOrientation() {\n    var nestedContext = this.context;\n    return !!(nestedContext && !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal));\n  }\n  _keyExtractor(item, index, props\n  // $FlowFixMe[missing-local-annot]\n  ) {\n    if (props.keyExtractor != null) {\n      return props.keyExtractor(item, index);\n    }\n    var key = defaultKeyExtractor(item, index);\n    if (key === String(index)) {\n      _usedIndexForKey = true;\n      if (item.type && item.type.displayName) {\n        _keylessItemComponentName = item.type.displayName;\n      }\n    }\n    return key;\n  }\n  render() {\n    this._checkProps(this.props);\n    var _this$props5 = this.props,\n      ListEmptyComponent = _this$props5.ListEmptyComponent,\n      ListFooterComponent = _this$props5.ListFooterComponent,\n      ListHeaderComponent = _this$props5.ListHeaderComponent;\n    var _this$props6 = this.props,\n      data = _this$props6.data,\n      horizontal = _this$props6.horizontal;\n    var inversionStyle = this.props.inverted ? horizontalOrDefault(this.props.horizontal) ? styles.horizontallyInverted : styles.verticallyInverted : null;\n    var cells = [];\n    var stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n    var stickyHeaderIndices = [];\n\n    // 1. Add cell for ListHeaderComponent\n    if (ListHeaderComponent) {\n      if (stickyIndicesFromProps.has(0)) {\n        stickyHeaderIndices.push(0);\n      }\n      var _element = /*#__PURE__*/React.isValidElement(ListHeaderComponent) ? ListHeaderComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListHeaderComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-header',\n        key: \"$header\"\n      }, /*#__PURE__*/React.createElement(View, {\n        onLayout: this._onLayoutHeader,\n        style: [inversionStyle, this.props.ListHeaderComponentStyle]\n      },\n      // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n      _element)));\n    }\n\n    // 2a. Add a cell for ListEmptyComponent if applicable\n    var itemCount = this.props.getItemCount(data);\n    if (itemCount === 0 && ListEmptyComponent) {\n      var _element2 = /*#__PURE__*/React.isValidElement(ListEmptyComponent) ? ListEmptyComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListEmptyComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-empty',\n        key: \"$empty\"\n      }, /*#__PURE__*/React.cloneElement(_element2, {\n        onLayout: event => {\n          this._onLayoutEmpty(event);\n          if (_element2.props.onLayout) {\n            _element2.props.onLayout(event);\n          }\n        },\n        style: [inversionStyle, _element2.props.style]\n      })));\n    }\n\n    // 2b. Add cells and spacers for each item\n    if (itemCount > 0) {\n      _usedIndexForKey = false;\n      _keylessItemComponentName = '';\n      var spacerKey = this._getSpacerKey(!horizontal);\n      var renderRegions = this.state.renderMask.enumerateRegions();\n      var lastSpacer = findLastWhere(renderRegions, r => r.isSpacer);\n      for (var _iterator = _createForOfIteratorHelperLoose(renderRegions), _step; !(_step = _iterator()).done;) {\n        var section = _step.value;\n        if (section.isSpacer) {\n          // Legacy behavior is to avoid spacers when virtualization is\n          // disabled (including head spacers on initial render).\n          if (this.props.disableVirtualization) {\n            continue;\n          }\n\n          // Without getItemLayout, we limit our tail spacer to the _highestMeasuredFrameIndex to\n          // prevent the user for hyperscrolling into un-measured area because otherwise content will\n          // likely jump around as it renders in above the viewport.\n          var isLastSpacer = section === lastSpacer;\n          var constrainToMeasured = isLastSpacer && !this.props.getItemLayout;\n          var last = constrainToMeasured ? clamp(section.first - 1, section.last, this._highestMeasuredFrameIndex) : section.last;\n          var firstMetrics = this.__getFrameMetricsApprox(section.first, this.props);\n          var lastMetrics = this.__getFrameMetricsApprox(last, this.props);\n          var spacerSize = lastMetrics.offset + lastMetrics.length - firstMetrics.offset;\n          cells.push(/*#__PURE__*/React.createElement(View, {\n            key: \"$spacer-\" + section.first,\n            style: {\n              [spacerKey]: spacerSize\n            }\n          }));\n        } else {\n          this._pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, section.first, section.last, inversionStyle);\n        }\n      }\n      if (!this._hasWarned.keys && _usedIndexForKey) {\n        console.warn('VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' + 'item or provide a custom keyExtractor.', _keylessItemComponentName);\n        this._hasWarned.keys = true;\n      }\n    }\n\n    // 3. Add cell for ListFooterComponent\n    if (ListFooterComponent) {\n      var _element3 = /*#__PURE__*/React.isValidElement(ListFooterComponent) ? ListFooterComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListFooterComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getFooterCellKey(),\n        key: \"$footer\"\n      }, /*#__PURE__*/React.createElement(View, {\n        onLayout: this._onLayoutFooter,\n        style: [inversionStyle, this.props.ListFooterComponentStyle]\n      },\n      // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n      _element3)));\n    }\n\n    // 4. Render the ScrollView\n    var scrollProps = _objectSpread(_objectSpread({}, this.props), {}, {\n      onContentSizeChange: this._onContentSizeChange,\n      onLayout: this._onLayout,\n      onScroll: this._onScroll,\n      onScrollBeginDrag: this._onScrollBeginDrag,\n      onScrollEndDrag: this._onScrollEndDrag,\n      onMomentumScrollBegin: this._onMomentumScrollBegin,\n      onMomentumScrollEnd: this._onMomentumScrollEnd,\n      scrollEventThrottle: scrollEventThrottleOrDefault(this.props.scrollEventThrottle),\n      // TODO: Android support\n      invertStickyHeaders: this.props.invertStickyHeaders !== undefined ? this.props.invertStickyHeaders : this.props.inverted,\n      stickyHeaderIndices,\n      style: inversionStyle ? [inversionStyle, this.props.style] : this.props.style\n    });\n    this._hasMore = this.state.cellsAroundViewport.last < itemCount - 1;\n    var innerRet = /*#__PURE__*/React.createElement(VirtualizedListContextProvider, {\n      value: {\n        cellKey: null,\n        getScrollMetrics: this._getScrollMetrics,\n        horizontal: horizontalOrDefault(this.props.horizontal),\n        getOutermostParentListRef: this._getOutermostParentListRef,\n        registerAsNestedChild: this._registerAsNestedChild,\n        unregisterAsNestedChild: this._unregisterAsNestedChild\n      }\n    }, /*#__PURE__*/React.cloneElement((this.props.renderScrollComponent || this._defaultRenderScrollComponent)(scrollProps), {\n      ref: this._captureScrollRef\n    }, cells));\n    var ret = innerRet;\n    /* https://github.com/necolas/react-native-web/issues/2239: Re-enable when ScrollView.Context.Consumer is available.\n    if (__DEV__) {\n      ret = (\n        <ScrollView.Context.Consumer>\n          {scrollContext => {\n            if (\n              scrollContext != null &&\n              !scrollContext.horizontal ===\n                !horizontalOrDefault(this.props.horizontal) &&\n              !this._hasWarned.nesting &&\n              this.context == null &&\n              this.props.scrollEnabled !== false\n            ) {\n              // TODO (T46547044): use React.warn once 16.9 is sync'd: https://github.com/facebook/react/pull/15170\n              console.error(\n                'VirtualizedLists should never be nested inside plain ScrollViews with the same ' +\n                  'orientation because it can break windowing and other functionality - use another ' +\n                  'VirtualizedList-backed container instead.',\n              );\n              this._hasWarned.nesting = true;\n            }\n            return innerRet;\n          }}\n        </ScrollView.Context.Consumer>\n      );\n    }*/\n    if (this.props.debug) {\n      return /*#__PURE__*/React.createElement(View, {\n        style: styles.debug\n      }, ret, this._renderDebugOverlay());\n    } else {\n      return ret;\n    }\n  }\n  componentDidUpdate(prevProps) {\n    var _this$props7 = this.props,\n      data = _this$props7.data,\n      extraData = _this$props7.extraData;\n    if (data !== prevProps.data || extraData !== prevProps.extraData) {\n      // clear the viewableIndices cache to also trigger\n      // the onViewableItemsChanged callback with the new data\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.resetViewableIndices();\n      });\n    }\n    // The `this._hiPriInProgress` is guaranteeing a hiPri cell update will only happen\n    // once per fiber update. The `_scheduleCellsToRenderUpdate` will set it to true\n    // if a hiPri update needs to perform. If `componentDidUpdate` is triggered with\n    // `this._hiPriInProgress=true`, means it's triggered by the hiPri update. The\n    // `_scheduleCellsToRenderUpdate` will check this condition and not perform\n    // another hiPri update.\n    var hiPriInProgress = this._hiPriInProgress;\n    this._scheduleCellsToRenderUpdate();\n    // Make sure setting `this._hiPriInProgress` back to false after `componentDidUpdate`\n    // is triggered with `this._hiPriInProgress = true`\n    if (hiPriInProgress) {\n      this._hiPriInProgress = false;\n    }\n  }\n\n  // Used for preventing scrollToIndex from being called multiple times for initialScrollIndex\n\n  // flag to prevent infinite hiPri cell limit update\n\n  // $FlowFixMe[missing-local-annot]\n\n  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n   * LTI update could not be added via codemod */\n\n  _computeBlankness() {\n    this._fillRateHelper.computeBlankness(this.props, this.state.cellsAroundViewport, this._scrollMetrics);\n  }\n\n  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n   * LTI update could not be added via codemod */\n\n  _onCellFocusCapture(cellKey) {\n    this._lastFocusedCellKey = cellKey;\n    this._updateCellsToRender();\n  }\n  _triggerRemeasureForChildListsInCell(cellKey) {\n    this._nestedChildLists.forEachInCell(cellKey, childList => {\n      childList.measureLayoutRelativeToContainingList();\n    });\n  }\n  measureLayoutRelativeToContainingList() {\n    // TODO (T35574538): findNodeHandle sometimes crashes with \"Unable to find\n    // node on an unmounted component\" during scrolling\n    try {\n      if (!this._scrollRef) {\n        return;\n      }\n      // We are assuming that getOutermostParentListRef().getScrollRef()\n      // is a non-null reference to a ScrollView\n      this._scrollRef.measureLayout(this.context.getOutermostParentListRef().getScrollRef(), (x, y, width, height) => {\n        this._offsetFromParentVirtualizedList = this._selectOffset({\n          x,\n          y\n        });\n        this._scrollMetrics.contentLength = this._selectLength({\n          width,\n          height\n        });\n        var scrollMetrics = this._convertParentScrollMetrics(this.context.getScrollMetrics());\n        var metricsChanged = this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength || this._scrollMetrics.offset !== scrollMetrics.offset;\n        if (metricsChanged) {\n          this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n          this._scrollMetrics.offset = scrollMetrics.offset;\n\n          // If metrics of the scrollView changed, then we triggered remeasure for child list\n          // to ensure VirtualizedList has the right information.\n          this._nestedChildLists.forEach(childList => {\n            childList.measureLayoutRelativeToContainingList();\n          });\n        }\n      }, error => {\n        console.warn(\"VirtualizedList: Encountered an error while measuring a list's\" + ' offset from its containing VirtualizedList.');\n      });\n    } catch (error) {\n      console.warn('measureLayoutRelativeToContainingList threw an error', error.stack);\n    }\n  }\n  _getFooterCellKey() {\n    return this._getCellKey() + '-footer';\n  }\n  // $FlowFixMe[missing-local-annot]\n  _renderDebugOverlay() {\n    var normalize = this._scrollMetrics.visibleLength / (this._scrollMetrics.contentLength || 1);\n    var framesInLayout = [];\n    var itemCount = this.props.getItemCount(this.props.data);\n    for (var ii = 0; ii < itemCount; ii++) {\n      var frame = this.__getFrameMetricsApprox(ii, this.props);\n      /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n       * suppresses an error found when Flow v0.68 was deployed. To see the\n       * error delete this comment and run Flow. */\n      if (frame.inLayout) {\n        framesInLayout.push(frame);\n      }\n    }\n    var windowTop = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.first, this.props).offset;\n    var frameLast = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.last, this.props);\n    var windowLen = frameLast.offset + frameLast.length - windowTop;\n    var visTop = this._scrollMetrics.offset;\n    var visLen = this._scrollMetrics.visibleLength;\n    return /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlay]\n    }, framesInLayout.map((f, ii) => /*#__PURE__*/React.createElement(View, {\n      key: 'f' + ii,\n      style: [styles.debugOverlayBase, styles.debugOverlayFrame, {\n        top: f.offset * normalize,\n        height: f.length * normalize\n      }]\n    })), /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameLast, {\n        top: windowTop * normalize,\n        height: windowLen * normalize\n      }]\n    }), /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameVis, {\n        top: visTop * normalize,\n        height: visLen * normalize\n      }]\n    }));\n  }\n  _selectLength(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.height : metrics.width;\n  }\n  _selectOffset(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n  }\n  _maybeCallOnEdgeReached() {\n    var _this$props8 = this.props,\n      data = _this$props8.data,\n      getItemCount = _this$props8.getItemCount,\n      onStartReached = _this$props8.onStartReached,\n      onStartReachedThreshold = _this$props8.onStartReachedThreshold,\n      onEndReached = _this$props8.onEndReached,\n      onEndReachedThreshold = _this$props8.onEndReachedThreshold,\n      initialScrollIndex = _this$props8.initialScrollIndex;\n    var _this$_scrollMetrics2 = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics2.contentLength,\n      visibleLength = _this$_scrollMetrics2.visibleLength,\n      offset = _this$_scrollMetrics2.offset;\n    var distanceFromStart = offset;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n\n    // Especially when oERT is zero it's necessary to 'floor' very small distance values to be 0\n    // since debouncing causes us to not fire this event for every single \"pixel\" we scroll and can thus\n    // be at the edge of the list with a distance approximating 0 but not quite there.\n    if (distanceFromStart < ON_EDGE_REACHED_EPSILON) {\n      distanceFromStart = 0;\n    }\n    if (distanceFromEnd < ON_EDGE_REACHED_EPSILON) {\n      distanceFromEnd = 0;\n    }\n\n    // TODO: T121172172 Look into why we're \"defaulting\" to a threshold of 2px\n    // when oERT is not present (different from 2 viewports used elsewhere)\n    var DEFAULT_THRESHOLD_PX = 2;\n    var startThreshold = onStartReachedThreshold != null ? onStartReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var endThreshold = onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var isWithinStartThreshold = distanceFromStart <= startThreshold;\n    var isWithinEndThreshold = distanceFromEnd <= endThreshold;\n\n    // First check if the user just scrolled within the end threshold\n    // and call onEndReached only once for a given content length,\n    // and only if onStartReached is not being executed\n    if (onEndReached && this.state.cellsAroundViewport.last === getItemCount(data) - 1 && isWithinEndThreshold && this._scrollMetrics.contentLength !== this._sentEndForContentLength) {\n      this._sentEndForContentLength = this._scrollMetrics.contentLength;\n      onEndReached({\n        distanceFromEnd\n      });\n    }\n\n    // Next check if the user just scrolled within the start threshold\n    // and call onStartReached only once for a given content length,\n    // and only if onEndReached is not being executed\n    else if (onStartReached != null && this.state.cellsAroundViewport.first === 0 && isWithinStartThreshold && this._scrollMetrics.contentLength !== this._sentStartForContentLength) {\n      // On initial mount when using initialScrollIndex the offset will be 0 initially\n      // and will trigger an unexpected onStartReached. To avoid this we can use\n      // timestamp to differentiate between the initial scroll metrics and when we actually\n      // received the first scroll event.\n      if (!initialScrollIndex || this._scrollMetrics.timestamp !== 0) {\n        this._sentStartForContentLength = this._scrollMetrics.contentLength;\n        onStartReached({\n          distanceFromStart\n        });\n      }\n    }\n\n    // If the user scrolls away from the start or end and back again,\n    // cause onStartReached or onEndReached to be triggered again\n    else {\n      this._sentStartForContentLength = isWithinStartThreshold ? this._sentStartForContentLength : 0;\n      this._sentEndForContentLength = isWithinEndThreshold ? this._sentEndForContentLength : 0;\n    }\n  }\n\n  /* Translates metrics from a scroll event in a parent VirtualizedList into\n   * coordinates relative to the child list.\n   */\n\n  _scheduleCellsToRenderUpdate() {\n    var _this$state$cellsArou = this.state.cellsAroundViewport,\n      first = _this$state$cellsArou.first,\n      last = _this$state$cellsArou.last;\n    var _this$_scrollMetrics3 = this._scrollMetrics,\n      offset = _this$_scrollMetrics3.offset,\n      visibleLength = _this$_scrollMetrics3.visibleLength,\n      velocity = _this$_scrollMetrics3.velocity;\n    var itemCount = this.props.getItemCount(this.props.data);\n    var hiPri = false;\n    var onStartReachedThreshold = onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold);\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold);\n    // Mark as high priority if we're close to the start of the first item\n    // But only if there are items before the first rendered item\n    if (first > 0) {\n      var distTop = offset - this.__getFrameMetricsApprox(first, this.props).offset;\n      hiPri = distTop < 0 || velocity < -2 && distTop < getScrollingThreshold(onStartReachedThreshold, visibleLength);\n    }\n    // Mark as high priority if we're close to the end of the last item\n    // But only if there are items after the last rendered item\n    if (!hiPri && last >= 0 && last < itemCount - 1) {\n      var distBottom = this.__getFrameMetricsApprox(last, this.props).offset - (offset + visibleLength);\n      hiPri = distBottom < 0 || velocity > 2 && distBottom < getScrollingThreshold(onEndReachedThreshold, visibleLength);\n    }\n    // Only trigger high-priority updates if we've actually rendered cells,\n    // and with that size estimate, accurately compute how many cells we should render.\n    // Otherwise, it would just render as many cells as it can (of zero dimension),\n    // each time through attempting to render more (limited by maxToRenderPerBatch),\n    // starving the renderer from actually laying out the objects and computing _averageCellLength.\n    // If this is triggered in an `componentDidUpdate` followed by a hiPri cellToRenderUpdate\n    // We shouldn't do another hipri cellToRenderUpdate\n    if (hiPri && (this._averageCellLength || this.props.getItemLayout) && !this._hiPriInProgress) {\n      this._hiPriInProgress = true;\n      // Don't worry about interactions when scrolling quickly; focus on filling content as fast\n      // as possible.\n      this._updateCellsToRenderBatcher.dispose({\n        abort: true\n      });\n      this._updateCellsToRender();\n      return;\n    } else {\n      this._updateCellsToRenderBatcher.schedule();\n    }\n  }\n\n  /**\n   * Gets an approximate offset to an item at a given index. Supports\n   * fractional indices.\n   */\n\n  _updateViewableItems(props, cellsAroundViewport) {\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.onUpdate(props, this._scrollMetrics.offset, this._scrollMetrics.visibleLength, this._getFrameMetrics, this._createViewToken, tuple.onViewableItemsChanged, cellsAroundViewport);\n    });\n  }\n}\nVirtualizedList.contextType = VirtualizedListContext;\nvar styles = StyleSheet.create({\n  verticallyInverted: {\n    transform: 'scaleY(-1)'\n  },\n  horizontallyInverted: {\n    transform: 'scaleX(-1)'\n  },\n  debug: {\n    flex: 1\n  },\n  debugOverlayBase: {\n    position: 'absolute',\n    top: 0,\n    right: 0\n  },\n  debugOverlay: {\n    bottom: 0,\n    width: 20,\n    borderColor: 'blue',\n    borderWidth: 1\n  },\n  debugOverlayFrame: {\n    left: 0,\n    backgroundColor: 'orange'\n  },\n  debugOverlayFrameLast: {\n    left: 0,\n    borderColor: 'green',\n    borderWidth: 2\n  },\n  debugOverlayFrameVis: {\n    left: 0,\n    borderColor: 'red',\n    borderWidth: 2\n  }\n});\nexport default VirtualizedList;"],"mappings":"AAAA,OAAOA,+BAA+B,MAAM,uDAAuD;AACnG,OAAOC,QAAQ,MAAM,gCAAgC;AACrD,OAAOC,aAAa,MAAM,sCAAsC;AAWhE,OAAOC,cAAc;AACrB,OAAOC,UAAU;AACjB,OAAOC,IAAI;AACX,OAAOC,UAAU;AACjB,OAAOC,WAAW;AAClB,OAAOC,KAAK;AACZ,OAAOC,OAAO;AACd,SAASC,cAAc;AACvB,OAAOC,mBAAmB;AAC1B,OAAOC,cAAc;AACrB,OAAOC,sBAAsB;AAC7B,OAAOC,iBAAiB;AACxB,OAAOC,YAAY;AACnB,SAASC,kCAAkC,EAAEC,sBAAsB,EAAEC,8BAA8B;AACnG,SAASC,2BAA2B,EAAEC,YAAY,IAAIC,mBAAmB;AACzE,OAAOC,SAAS,MAAM,oBAAoB;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,IAAIC,OAAO,GAAGC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY;AACnD,IAAIC,uBAAuB,GAAG,KAAK;AACnC,IAAIC,gBAAgB,GAAG,KAAK;AAC5B,IAAIC,yBAAyB,GAAG,EAAE;AAOlC,SAASC,mBAAmBA,CAACC,UAAU,EAAE;EACvC,OAAOA,UAAU,KAAK,IAAI,IAAIA,UAAU,KAAK,KAAK,CAAC,GAAGA,UAAU,GAAG,KAAK;AAC1E;AAGA,SAASC,2BAA2BA,CAACC,kBAAkB,EAAE;EACvD,OAAOA,kBAAkB,KAAK,IAAI,IAAIA,kBAAkB,KAAK,KAAK,CAAC,GAAGA,kBAAkB,GAAG,EAAE;AAC/F;AAGA,SAASC,4BAA4BA,CAACC,mBAAmB,EAAE;EACzD,OAAOA,mBAAmB,KAAK,IAAI,IAAIA,mBAAmB,KAAK,KAAK,CAAC,GAAGA,mBAAmB,GAAG,EAAE;AAClG;AAGA,SAASC,gCAAgCA,CAACC,uBAAuB,EAAE;EACjE,OAAOA,uBAAuB,KAAK,IAAI,IAAIA,uBAAuB,KAAK,KAAK,CAAC,GAAGA,uBAAuB,GAAG,CAAC;AAC7G;AAGA,SAASC,8BAA8BA,CAACC,qBAAqB,EAAE;EAC7D,OAAOA,qBAAqB,KAAK,IAAI,IAAIA,qBAAqB,KAAK,KAAK,CAAC,GAAGA,qBAAqB,GAAG,CAAC;AACvG;AAGA,SAASC,qBAAqBA,CAACC,SAAS,EAAEC,aAAa,EAAE;EACvD,OAAOD,SAAS,GAAGC,aAAa,GAAG,CAAC;AACtC;AAGA,SAASC,4BAA4BA,CAACC,mBAAmB,EAAE;EACzD,OAAOA,mBAAmB,KAAK,IAAI,IAAIA,mBAAmB,KAAK,KAAK,CAAC,GAAGA,mBAAmB,GAAG,EAAE;AAClG;AAGA,SAASC,mBAAmBA,CAACC,UAAU,EAAE;EACvC,OAAOA,UAAU,KAAK,IAAI,IAAIA,UAAU,KAAK,KAAK,CAAC,GAAGA,UAAU,GAAG,EAAE;AACvE;AACA,SAASC,aAAaA,CAACC,GAAG,EAAEC,SAAS,EAAE;EACrC,KAAK,IAAIC,CAAC,GAAGF,GAAG,CAACG,MAAM,GAAG,CAAC,EAAED,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;IACxC,IAAID,SAAS,CAACD,GAAG,CAACE,CAAC,CAAC,CAAC,EAAE;MACrB,OAAOF,GAAG,CAACE,CAAC,CAAC;IACf;EACF;EACA,OAAO,IAAI;AACb;AA+BA,MAAME,eAAe,SAASzC,sBAAsB,CAAC;EAEnD0C,WAAWA,CAACC,MAAM,EAAE;IAClB,IAAIC,QAAQ,GAAGD,MAAM,GAAGA,MAAM,CAACC,QAAQ,GAAG,IAAI;IAC9C,IAAIC,QAAQ,GAAG,IAAI,CAACC,KAAK,CAACC,YAAY,CAAC,IAAI,CAACD,KAAK,CAACE,IAAI,CAAC,GAAG,CAAC;IAC3D,IAAIH,QAAQ,GAAG,CAAC,EAAE;MAChB;IACF;IACA,IAAII,KAAK,GAAG,IAAI,CAACC,uBAAuB,CAACL,QAAQ,EAAE,IAAI,CAACC,KAAK,CAAC;IAC9D,IAAIK,MAAM,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,KAAK,CAACE,MAAM,GAAGF,KAAK,CAACT,MAAM,GAAG,IAAI,CAACc,aAAa,GAAG,IAAI,CAACC,cAAc,CAACxB,aAAa,CAAC;IAC9G,IAAI,IAAI,CAACyB,UAAU,IAAI,IAAI,EAAE;MAC3B;IACF;IACA,IAAI,IAAI,CAACA,UAAU,CAACC,QAAQ,IAAI,IAAI,EAAE;MACpCC,OAAO,CAACC,IAAI,CAAC,uEAAuE,GAAG,iEAAiE,GAAG,4DAA4D,CAAC;MACxN;IACF;IACA,IAAI,CAACH,UAAU,CAACC,QAAQ,CAACtC,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC,GAAG;MACpEwC,CAAC,EAAET,MAAM;MACTP;IACF,CAAC,GAAG;MACFiB,CAAC,EAAEV,MAAM;MACTP;IACF,CAAC,CAAC;EACJ;EAGAkB,aAAaA,CAACnB,MAAM,EAAE;IACpB,IAAIoB,WAAW,GAAG,IAAI,CAACjB,KAAK;MAC1BE,IAAI,GAAGe,WAAW,CAACf,IAAI;MACvB5B,UAAU,GAAG2C,WAAW,CAAC3C,UAAU;MACnC2B,YAAY,GAAGgB,WAAW,CAAChB,YAAY;MACvCiB,aAAa,GAAGD,WAAW,CAACC,aAAa;MACzCC,qBAAqB,GAAGF,WAAW,CAACE,qBAAqB;IAC3D,IAAIrB,QAAQ,GAAGD,MAAM,CAACC,QAAQ;MAC5BsB,KAAK,GAAGvB,MAAM,CAACuB,KAAK;MACpBC,UAAU,GAAGxB,MAAM,CAACwB,UAAU;MAC9BC,YAAY,GAAGzB,MAAM,CAACyB,YAAY;IACpC3D,SAAS,CAACyD,KAAK,IAAI,CAAC,EAAE,8CAA8C,GAAGA,KAAK,GAAG,mBAAmB,CAAC;IACnGzD,SAAS,CAACsC,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,0CAA0C,GAAGD,YAAY,CAACC,IAAI,CAAC,GAAG,mBAAmB,CAAC;IACzHvC,SAAS,CAACyD,KAAK,GAAGnB,YAAY,CAACC,IAAI,CAAC,EAAE,8CAA8C,GAAGkB,KAAK,GAAG,kBAAkB,IAAInB,YAAY,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7I,IAAI,CAACgB,aAAa,IAAIE,KAAK,GAAG,IAAI,CAACG,0BAA0B,EAAE;MAC7D5D,SAAS,CAAC,CAAC,CAACwD,qBAAqB,EAAE,2FAA2F,GAAG,yFAAyF,CAAC;MAC3NA,qBAAqB,CAAC;QACpBK,iBAAiB,EAAE,IAAI,CAACC,kBAAkB;QAC1CC,yBAAyB,EAAE,IAAI,CAACH,0BAA0B;QAC1DH;MACF,CAAC,CAAC;MACF;IACF;IACA,IAAIjB,KAAK,GAAG,IAAI,CAACC,uBAAuB,CAACE,IAAI,CAACqB,KAAK,CAACP,KAAK,CAAC,EAAE,IAAI,CAACpB,KAAK,CAAC;IACvE,IAAIK,MAAM,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,IAAI,CAACqB,gBAAgB,CAACR,KAAK,EAAE,IAAI,CAACpB,KAAK,CAAC,GAAG,CAACsB,YAAY,IAAI,CAAC,KAAK,IAAI,CAACb,cAAc,CAACxB,aAAa,GAAGkB,KAAK,CAACT,MAAM,CAAC,CAAC,IAAI2B,UAAU,IAAI,CAAC,CAAC;IACjK,IAAI,IAAI,CAACX,UAAU,IAAI,IAAI,EAAE;MAC3B;IACF;IACA,IAAI,IAAI,CAACA,UAAU,CAACC,QAAQ,IAAI,IAAI,EAAE;MACpCC,OAAO,CAACC,IAAI,CAAC,uEAAuE,GAAG,iEAAiE,GAAG,4DAA4D,CAAC;MACxN;IACF;IACA,IAAI,CAACH,UAAU,CAACC,QAAQ,CAACrC,UAAU,GAAG;MACpCwC,CAAC,EAAET,MAAM;MACTP;IACF,CAAC,GAAG;MACFiB,CAAC,EAAEV,MAAM;MACTP;IACF,CAAC,CAAC;EACJ;EAIA+B,YAAYA,CAAChC,MAAM,EAAE;IACnB,IAAIiC,IAAI,GAAGjC,MAAM,CAACiC,IAAI;IACtB,IAAIC,YAAY,GAAG,IAAI,CAAC/B,KAAK;MAC3BE,IAAI,GAAG6B,YAAY,CAAC7B,IAAI;MACxB8B,OAAO,GAAGD,YAAY,CAACC,OAAO;MAC9B/B,YAAY,GAAG8B,YAAY,CAAC9B,YAAY;IAC1C,IAAIgC,SAAS,GAAGhC,YAAY,CAACC,IAAI,CAAC;IAClC,KAAK,IAAIgC,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGD,SAAS,EAAEC,MAAM,EAAE,EAAE;MACjD,IAAIF,OAAO,CAAC9B,IAAI,EAAEgC,MAAM,CAAC,KAAKJ,IAAI,EAAE;QAClC,IAAI,CAACd,aAAa,CAACzE,aAAa,CAACA,aAAa,CAAC,CAAC,CAAC,EAAEsD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;UAC9DuB,KAAK,EAAEc;QACT,CAAC,CAAC,CAAC;QACH;MACF;IACF;EACF;EAYAC,cAAcA,CAACtC,MAAM,EAAE;IACrB,IAAIC,QAAQ,GAAGD,MAAM,CAACC,QAAQ;MAC5BO,MAAM,GAAGR,MAAM,CAACQ,MAAM;IACxB,IAAI,IAAI,CAACK,UAAU,IAAI,IAAI,EAAE;MAC3B;IACF;IACA,IAAI,IAAI,CAACA,UAAU,CAACC,QAAQ,IAAI,IAAI,EAAE;MACpCC,OAAO,CAACC,IAAI,CAAC,uEAAuE,GAAG,iEAAiE,GAAG,4DAA4D,CAAC;MACxN;IACF;IACA,IAAI,CAACH,UAAU,CAACC,QAAQ,CAACtC,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC,GAAG;MACpEwC,CAAC,EAAET,MAAM;MACTP;IACF,CAAC,GAAG;MACFiB,CAAC,EAAEV,MAAM;MACTP;IACF,CAAC,CAAC;EACJ;EACAsC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACC,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;MAC1CA,SAAS,CAACH,iBAAiB,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,IAAI,CAACI,kBAAkB,CAACF,OAAO,CAACG,CAAC,IAAI;MACnCA,CAAC,CAACC,iBAAiB,CAACN,iBAAiB,CAAC,CAAC;IACzC,CAAC,CAAC;IACF,IAAI,CAACO,oBAAoB,CAAC,IAAI,CAAC3C,KAAK,EAAE,IAAI,CAAC4C,KAAK,CAACC,mBAAmB,CAAC;EACvE;EACAC,qBAAqBA,CAAA,EAAG;IACtB,IAAI,IAAI,CAACpC,UAAU,IAAI,IAAI,EAAE;MAC3B;IACF;IACA,IAAI,CAACA,UAAU,CAACoC,qBAAqB,CAAC,CAAC;EACzC;EAOAC,kBAAkBA,CAAA,EAAG;IACnB,IAAI,IAAI,CAACrC,UAAU,IAAI,IAAI,CAACA,UAAU,CAACqC,kBAAkB,EAAE;MACzD,OAAO,IAAI,CAACrC,UAAU,CAACqC,kBAAkB,CAAC,CAAC;IAC7C;EACF;EACAC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,IAAI,CAACtC,UAAU,IAAI,IAAI,CAACA,UAAU,CAACsC,iBAAiB,EAAE;MACxD,OAAO,IAAI,CAACtC,UAAU,CAACsC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,MAAM;MACL,OAAO,IAAI,CAACtC,UAAU;IACxB;EACF;EACAuC,YAAYA,CAAA,EAAG;IACb,IAAI,IAAI,CAACvC,UAAU,IAAI,IAAI,CAACA,UAAU,CAACuC,YAAY,EAAE;MACnD,OAAO,IAAI,CAACvC,UAAU,CAACuC,YAAY,CAAC,CAAC;IACvC,CAAC,MAAM;MACL,OAAO,IAAI,CAACvC,UAAU;IACxB;EACF;EACAwC,WAAWA,CAAA,EAAG;IACZ,IAAIC,aAAa;IACjB,OAAO,CAAC,CAACA,aAAa,GAAG,IAAI,CAACC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAGD,aAAa,CAACE,OAAO,KAAK,UAAU;EAChG;EAIAC,OAAOA,CAAA,EAAG;IACR,OAAO,IAAI,CAACC,QAAQ;EACtB;EAMAC,WAAWA,CAACC,MAAM,EAAE;IAClB,IAAIC,qBAAqB;IACzB,KAAK,CAACD,MAAM,CAAC;IACb,IAAI,CAACE,iBAAiB,GAAG,MAAM;MAC7B,OAAO,IAAI,CAAClD,cAAc;IAC5B,CAAC;IACD,IAAI,CAACmD,0BAA0B,GAAG,MAAM;MACtC,IAAI,IAAI,CAACC,4BAA4B,CAAC,CAAC,EAAE;QACvC,OAAO,IAAI,CAACT,OAAO,CAACU,yBAAyB,CAAC,CAAC;MACjD,CAAC,MAAM;QACL,OAAO,IAAI;MACb;IACF,CAAC;IACD,IAAI,CAACC,sBAAsB,GAAGxB,SAAS,IAAI;MACzC,IAAI,CAACF,iBAAiB,CAAC2B,GAAG,CAACzB,SAAS,CAAC0B,GAAG,EAAE1B,SAAS,CAACc,OAAO,CAAC;MAC5D,IAAI,IAAI,CAACa,cAAc,EAAE;QACvB3B,SAAS,CAAC0B,GAAG,CAAC7B,iBAAiB,CAAC,CAAC;MACnC;IACF,CAAC;IACD,IAAI,CAAC+B,wBAAwB,GAAG5B,SAAS,IAAI;MAC3C,IAAI,CAACF,iBAAiB,CAAC+B,MAAM,CAAC7B,SAAS,CAAC0B,GAAG,CAAC;IAC9C,CAAC;IACD,IAAI,CAACI,mBAAmB,GAAG,CAACC,IAAI,EAAEC,QAAQ,KAAK;MAC7CD,IAAI,CAAChC,OAAO,CAACkC,GAAG,IAAI;QAClB,IAAIP,GAAG,GAAGO,GAAG,IAAI,IAAI,IAAI,IAAI,CAACC,SAAS,CAACD,GAAG,CAAC;QAC5CP,GAAG,IAAIA,GAAG,CAACS,oBAAoB,CAACH,QAAQ,CAAC;MAC3C,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,CAACI,aAAa,GAAGC,UAAU,IAAIA,UAAU,GAAG,QAAQ,GAAG,OAAO;IAClE,IAAI,CAACnD,kBAAkB,GAAG,CAAC;IAC3B,IAAI,CAACgD,SAAS,GAAG,CAAC,CAAC;IACnB,IAAI,CAACI,OAAO,GAAG,CAAC,CAAC;IACjB,IAAI,CAACrE,aAAa,GAAG,CAAC;IACtB,IAAI,CAACsE,iCAAiC,GAAG,KAAK;IAC9C,IAAI,CAACZ,cAAc,GAAG,KAAK;IAC3B,IAAI,CAACX,QAAQ,GAAG,KAAK;IACrB,IAAI,CAACwB,UAAU,GAAG,CAAC,CAAC;IACpB,IAAI,CAACC,aAAa,GAAG,CAAC;IACtB,IAAI,CAACC,gBAAgB,GAAG,KAAK;IAC7B,IAAI,CAAC1D,0BAA0B,GAAG,CAAC;IACnC,IAAI,CAAC2D,cAAc,GAAG,IAAIC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAACC,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAAC/C,iBAAiB,GAAG,IAAIrF,mBAAmB,CAAC,CAAC;IAClD,IAAI,CAACqI,gCAAgC,GAAG,CAAC;IACzC,IAAI,CAACC,iBAAiB,GAAG,CAAC;IAC1B,IAAI,CAAC7E,cAAc,GAAG;MACpB8E,aAAa,EAAE,CAAC;MAChBC,OAAO,EAAE,CAAC;MACVC,EAAE,EAAE,EAAE;MACNpF,MAAM,EAAE,CAAC;MACTqF,SAAS,EAAE,CAAC;MACZC,QAAQ,EAAE,CAAC;MACX1G,aAAa,EAAE,CAAC;MAChB2G,SAAS,EAAE;IACb,CAAC;IACD,IAAI,CAAClF,UAAU,GAAG,IAAI;IACtB,IAAI,CAACmF,0BAA0B,GAAG,CAAC;IACnC,IAAI,CAACC,wBAAwB,GAAG,CAAC;IACjC,IAAI,CAACC,gBAAgB,GAAG,CAAC;IACzB,IAAI,CAACC,mBAAmB,GAAG,CAAC;IAC5B,IAAI,CAACxD,kBAAkB,GAAG,EAAE;IAC5B,IAAI,CAACyD,iBAAiB,GAAGhC,GAAG,IAAI;MAC9B,IAAI,CAACvD,UAAU,GAAGuD,GAAG;IACvB,CAAC;IACD,IAAI,CAACiC,6BAA6B,GAAGlG,KAAK,IAAI;MAC5C,IAAImG,SAAS,GAAGnG,KAAK,CAACmG,SAAS;MAC/B,IAAI,IAAI,CAACtC,4BAA4B,CAAC,CAAC,EAAE;QAEvC,OAAoBhG,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAEsD,KAAK,CAAC;MACtD,CAAC,MAAM,IAAImG,SAAS,EAAE;QACpB,IAAIE,iBAAiB;QACrB1I,SAAS,CAAC,OAAOqC,KAAK,CAACsG,UAAU,KAAK,SAAS,EAAE,mFAAmF,GAAGC,IAAI,CAACC,SAAS,CAAC,CAACH,iBAAiB,GAAGrG,KAAK,CAACsG,UAAU,MAAM,IAAI,IAAID,iBAAiB,KAAK,KAAK,CAAC,GAAGA,iBAAiB,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;QAC/Q,QAIExI,KAAK,CAACuI,aAAa,CAAC3J,UAAU,EAAEH,QAAQ,CAAC,CAAC,CAAC,EAAE0D,KAAK,EAAE;YAClDyG,cAAc,EAAEzG,KAAK,CAACyG,cAAc,IAAI,IAAI,GAAgB5I,KAAK,CAACuI,aAAa,CAAC5J,cAAc,EAE5F;cACA8J,UAAU,EAAEtG,KAAK,CAACsG,UAAU;cAC5BH,SAAS,EAAEA,SAAS;cACpBO,kBAAkB,EAAE1G,KAAK,CAAC0G;YAC5B,CAAC,CAAC,GAAG1G,KAAK,CAACyG;UACb,CAAC,CAAC;QAAC;MAEP,CAAC,MAAM;QAGL,OAAoB5I,KAAK,CAACuI,aAAa,CAAC3J,UAAU,EAAEuD,KAAK,CAAC;MAC5D;IACF,CAAC;IACD,IAAI,CAAC2G,aAAa,GAAG,CAACC,CAAC,EAAEvD,OAAO,EAAEjC,KAAK,KAAK;MAC1C,IAAIyF,MAAM,GAAGD,CAAC,CAACE,WAAW,CAACD,MAAM;MACjC,IAAIE,IAAI,GAAG;QACT1G,MAAM,EAAE,IAAI,CAAC2G,aAAa,CAACH,MAAM,CAAC;QAClCnH,MAAM,EAAE,IAAI,CAACuH,aAAa,CAACJ,MAAM,CAAC;QAClCzF,KAAK;QACL8F,QAAQ,EAAE;MACZ,CAAC;MACD,IAAIC,IAAI,GAAG,IAAI,CAACtC,OAAO,CAACxB,OAAO,CAAC;MAChC,IAAI,CAAC8D,IAAI,IAAIJ,IAAI,CAAC1G,MAAM,KAAK8G,IAAI,CAAC9G,MAAM,IAAI0G,IAAI,CAACrH,MAAM,KAAKyH,IAAI,CAACzH,MAAM,IAAI0B,KAAK,KAAK+F,IAAI,CAAC/F,KAAK,EAAE;QAC/F,IAAI,CAAC2E,gBAAgB,IAAIgB,IAAI,CAACrH,MAAM,IAAIyH,IAAI,GAAGA,IAAI,CAACzH,MAAM,GAAG,CAAC,CAAC;QAC/D,IAAI,CAACsG,mBAAmB,IAAImB,IAAI,GAAG,CAAC,GAAG,CAAC;QACxC,IAAI,CAAC1F,kBAAkB,GAAG,IAAI,CAACsE,gBAAgB,GAAG,IAAI,CAACC,mBAAmB;QAC1E,IAAI,CAACnB,OAAO,CAACxB,OAAO,CAAC,GAAG0D,IAAI;QAC5B,IAAI,CAACxF,0BAA0B,GAAGjB,IAAI,CAACC,GAAG,CAAC,IAAI,CAACgB,0BAA0B,EAAEH,KAAK,CAAC;QAClF,IAAI,CAACgG,4BAA4B,CAAC,CAAC;MACrC,CAAC,MAAM;QACL,IAAI,CAACvC,OAAO,CAACxB,OAAO,CAAC,CAAC6D,QAAQ,GAAG,IAAI;MACvC;MACA,IAAI,CAACG,oCAAoC,CAAChE,OAAO,CAAC;MAClD,IAAI,CAACiE,iBAAiB,CAAC,CAAC;MACxB,IAAI,CAAC3E,oBAAoB,CAAC,IAAI,CAAC3C,KAAK,EAAE,IAAI,CAAC4C,KAAK,CAACC,mBAAmB,CAAC;IACvE,CAAC;IACD,IAAI,CAAC0E,cAAc,GAAGlE,OAAO,IAAI;MAC/B,OAAO,IAAI,CAACoB,SAAS,CAACpB,OAAO,CAAC;MAC9B,IAAI8D,IAAI,GAAG,IAAI,CAACtC,OAAO,CAACxB,OAAO,CAAC;MAChC,IAAI8D,IAAI,EAAE;QACR,IAAI,CAACtC,OAAO,CAACxB,OAAO,CAAC,GAAG9G,aAAa,CAACA,aAAa,CAAC,CAAC,CAAC,EAAE4K,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;UACjED,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;IACF,CAAC;IACD,IAAI,CAACM,SAAS,GAAGZ,CAAC,IAAI;MACpB,IAAI,IAAI,CAAC/C,4BAA4B,CAAC,CAAC,EAAE;QAGvC,IAAI,CAAC4D,qCAAqC,CAAC,CAAC;MAC9C,CAAC,MAAM;QACL,IAAI,CAAChH,cAAc,CAACxB,aAAa,GAAG,IAAI,CAACgI,aAAa,CAACL,CAAC,CAACE,WAAW,CAACD,MAAM,CAAC;MAC9E;MACA,IAAI,CAAC7G,KAAK,CAAC0H,QAAQ,IAAI,IAAI,CAAC1H,KAAK,CAAC0H,QAAQ,CAACd,CAAC,CAAC;MAC7C,IAAI,CAACQ,4BAA4B,CAAC,CAAC;MACnC,IAAI,CAACO,uBAAuB,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAACC,cAAc,GAAGhB,CAAC,IAAI;MACzB,IAAI,CAAC5G,KAAK,CAAC0H,QAAQ,IAAI,IAAI,CAAC1H,KAAK,CAAC0H,QAAQ,CAACd,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,CAACiB,eAAe,GAAGjB,CAAC,IAAI;MAC1B,IAAI,CAACS,oCAAoC,CAAC,IAAI,CAACS,iBAAiB,CAAC,CAAC,CAAC;MACnE,IAAI,CAACtH,aAAa,GAAG,IAAI,CAACyG,aAAa,CAACL,CAAC,CAACE,WAAW,CAACD,MAAM,CAAC;IAC/D,CAAC;IACD,IAAI,CAACkB,eAAe,GAAGnB,CAAC,IAAI;MAC1B,IAAI,CAAC5B,aAAa,GAAG,IAAI,CAACiC,aAAa,CAACL,CAAC,CAACE,WAAW,CAACD,MAAM,CAAC;IAC/D,CAAC;IACD,IAAI,CAACmB,oBAAoB,GAAG,CAACC,KAAK,EAAEC,MAAM,KAAK;MAC7C,IAAID,KAAK,GAAG,CAAC,IAAIC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAClI,KAAK,CAACmI,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAACnI,KAAK,CAACmI,kBAAkB,GAAG,CAAC,IAAI,CAAC,IAAI,CAACrD,iCAAiC,EAAE;QACpJ,IAAI,IAAI,CAAC9E,KAAK,CAACoI,aAAa,IAAI,IAAI,EAAE;UACpC,IAAI,IAAI,CAACpI,KAAK,CAACmI,kBAAkB,GAAG,IAAI,CAACnI,KAAK,CAACC,YAAY,CAAC,IAAI,CAACD,KAAK,CAACE,IAAI,CAAC,EAAE;YAC5E,IAAI,CAACc,aAAa,CAAC;cACjBlB,QAAQ,EAAE,KAAK;cACfsB,KAAK,EAAExD,UAAU,CAAC,IAAI,CAACoC,KAAK,CAACmI,kBAAkB;YACjD,CAAC,CAAC;UACJ,CAAC,MAAM;YACL,IAAI,CAACvI,WAAW,CAAC;cACfE,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ;QACF;QACA,IAAI,CAACgF,iCAAiC,GAAG,IAAI;MAC/C;MACA,IAAI,IAAI,CAAC9E,KAAK,CAACqI,mBAAmB,EAAE;QAClC,IAAI,CAACrI,KAAK,CAACqI,mBAAmB,CAACJ,KAAK,EAAEC,MAAM,CAAC;MAC/C;MACA,IAAI,CAACzH,cAAc,CAAC8E,aAAa,GAAG,IAAI,CAAC0B,aAAa,CAAC;QACrDiB,MAAM;QACND;MACF,CAAC,CAAC;MACF,IAAI,CAACb,4BAA4B,CAAC,CAAC;MACnC,IAAI,CAACO,uBAAuB,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAACW,2BAA2B,GAAGC,OAAO,IAAI;MAE5C,IAAIlI,MAAM,GAAGkI,OAAO,CAAClI,MAAM,GAAG,IAAI,CAACgF,gCAAgC;MAEnE,IAAIpG,aAAa,GAAGsJ,OAAO,CAACtJ,aAAa;MACzC,IAAIuG,OAAO,GAAGnF,MAAM,GAAG,IAAI,CAACI,cAAc,CAACJ,MAAM;MACjD,IAAIkF,aAAa,GAAG,IAAI,CAAC9E,cAAc,CAAC8E,aAAa;MACrD,OAAO;QACLtG,aAAa;QACbsG,aAAa;QACblF,MAAM;QACNmF;MACF,CAAC;IACH,CAAC;IACD,IAAI,CAACgD,SAAS,GAAG5B,CAAC,IAAI;MACpB,IAAI,CAACvE,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;QAC1CA,SAAS,CAACiG,SAAS,CAAC5B,CAAC,CAAC;MACxB,CAAC,CAAC;MACF,IAAI,IAAI,CAAC5G,KAAK,CAACyI,QAAQ,EAAE;QACvB,IAAI,CAACzI,KAAK,CAACyI,QAAQ,CAAC7B,CAAC,CAAC;MACxB;MACA,IAAIlB,SAAS,GAAGkB,CAAC,CAAC8B,SAAS;MAC3B,IAAIzJ,aAAa,GAAG,IAAI,CAACgI,aAAa,CAACL,CAAC,CAACE,WAAW,CAAC6B,iBAAiB,CAAC;MACvE,IAAIpD,aAAa,GAAG,IAAI,CAAC0B,aAAa,CAACL,CAAC,CAACE,WAAW,CAAC8B,WAAW,CAAC;MACjE,IAAIvI,MAAM,GAAG,IAAI,CAAC2G,aAAa,CAACJ,CAAC,CAACE,WAAW,CAACsB,aAAa,CAAC;MAC5D,IAAI5C,OAAO,GAAGnF,MAAM,GAAG,IAAI,CAACI,cAAc,CAACJ,MAAM;MACjD,IAAI,IAAI,CAACwD,4BAA4B,CAAC,CAAC,EAAE;QACvC,IAAI,IAAI,CAACpD,cAAc,CAAC8E,aAAa,KAAK,CAAC,EAAE;UAG3C;QACF;QACA,IAAIsD,qBAAqB,GAAG,IAAI,CAACP,2BAA2B,CAAC;UAC3DrJ,aAAa;UACboB;QACF,CAAC,CAAC;QACFpB,aAAa,GAAG4J,qBAAqB,CAAC5J,aAAa;QACnDsG,aAAa,GAAGsD,qBAAqB,CAACtD,aAAa;QACnDlF,MAAM,GAAGwI,qBAAqB,CAACxI,MAAM;QACrCmF,OAAO,GAAGqD,qBAAqB,CAACrD,OAAO;MACzC;MACA,IAAIC,EAAE,GAAG,IAAI,CAAChF,cAAc,CAACiF,SAAS,GAAGpF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEmF,SAAS,GAAG,IAAI,CAACjF,cAAc,CAACiF,SAAS,CAAC,GAAG,CAAC;MACnG,IAAIC,QAAQ,GAAGH,OAAO,GAAGC,EAAE;MAC3B,IAAIA,EAAE,GAAG,GAAG,IAAI,IAAI,CAAChF,cAAc,CAACgF,EAAE,GAAG,GAAG,IAAIF,aAAa,GAAG,CAAC,GAAGtG,aAAa,IAAI,CAAC,IAAI,CAAC8F,UAAU,CAAC+D,IAAI,EAAE;QAC1GhM,OAAO,CAAC,iFAAiF,GAAG,sFAAsF,GAAG,iDAAiD,EAAE;UACtO2I,EAAE;UACFsD,MAAM,EAAE,IAAI,CAACtI,cAAc,CAACgF,EAAE;UAC9BF;QACF,CAAC,CAAC;QACF,IAAI,CAACR,UAAU,CAAC+D,IAAI,GAAG,IAAI;MAC7B;MAGA,IAAIlD,SAAS,GAAGgB,CAAC,CAACE,WAAW,CAAClB,SAAS,GAAG,CAAC,GAAG,CAAC,GAAGgB,CAAC,CAACE,WAAW,CAAClB,SAAS;MACzE,IAAI,CAACnF,cAAc,GAAG;QACpB8E,aAAa;QACbE,EAAE;QACFD,OAAO;QACPnF,MAAM;QACNqF,SAAS;QACTC,QAAQ;QACR1G,aAAa;QACb2G;MACF,CAAC;MACD,IAAI,CAACjD,oBAAoB,CAAC,IAAI,CAAC3C,KAAK,EAAE,IAAI,CAAC4C,KAAK,CAACC,mBAAmB,CAAC;MACrE,IAAI,CAAC,IAAI,CAAC7C,KAAK,EAAE;QACf;MACF;MACA,IAAI,CAAC2H,uBAAuB,CAAC,CAAC;MAC9B,IAAIhC,QAAQ,KAAK,CAAC,EAAE;QAClB,IAAI,CAACqD,eAAe,CAACC,QAAQ,CAAC,CAAC;MACjC;MACA,IAAI,CAAC3B,iBAAiB,CAAC,CAAC;MACxB,IAAI,CAACF,4BAA4B,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC8B,kBAAkB,GAAGtC,CAAC,IAAI;MAC7B,IAAI,CAACvE,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;QAC1CA,SAAS,CAAC2G,kBAAkB,CAACtC,CAAC,CAAC;MACjC,CAAC,CAAC;MACF,IAAI,CAACpE,kBAAkB,CAACF,OAAO,CAAC6G,KAAK,IAAI;QACvCA,KAAK,CAACzG,iBAAiB,CAACN,iBAAiB,CAAC,CAAC;MAC7C,CAAC,CAAC;MACF,IAAI,CAAC8B,cAAc,GAAG,IAAI;MAC1B,IAAI,CAAClE,KAAK,CAACoJ,iBAAiB,IAAI,IAAI,CAACpJ,KAAK,CAACoJ,iBAAiB,CAACxC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAACyC,gBAAgB,GAAGzC,CAAC,IAAI;MAC3B,IAAI,CAACvE,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;QAC1CA,SAAS,CAAC8G,gBAAgB,CAACzC,CAAC,CAAC;MAC/B,CAAC,CAAC;MACF,IAAIjB,QAAQ,GAAGiB,CAAC,CAACE,WAAW,CAACnB,QAAQ;MACrC,IAAIA,QAAQ,EAAE;QACZ,IAAI,CAAClF,cAAc,CAACkF,QAAQ,GAAG,IAAI,CAACqB,aAAa,CAACrB,QAAQ,CAAC;MAC7D;MACA,IAAI,CAAC2B,iBAAiB,CAAC,CAAC;MACxB,IAAI,CAACtH,KAAK,CAACsJ,eAAe,IAAI,IAAI,CAACtJ,KAAK,CAACsJ,eAAe,CAAC1C,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC2C,sBAAsB,GAAG3C,CAAC,IAAI;MACjC,IAAI,CAACvE,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;QAC1CA,SAAS,CAACgH,sBAAsB,CAAC3C,CAAC,CAAC;MACrC,CAAC,CAAC;MACF,IAAI,CAAC5G,KAAK,CAACwJ,qBAAqB,IAAI,IAAI,CAACxJ,KAAK,CAACwJ,qBAAqB,CAAC5C,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC6C,oBAAoB,GAAG7C,CAAC,IAAI;MAC/B,IAAI,CAACvE,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;QAC1CA,SAAS,CAACkH,oBAAoB,CAAC7C,CAAC,CAAC;MACnC,CAAC,CAAC;MACF,IAAI,CAACnG,cAAc,CAACkF,QAAQ,GAAG,CAAC;MAChC,IAAI,CAAC2B,iBAAiB,CAAC,CAAC;MACxB,IAAI,CAACtH,KAAK,CAAC0J,mBAAmB,IAAI,IAAI,CAAC1J,KAAK,CAAC0J,mBAAmB,CAAC9C,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,CAAC+C,oBAAoB,GAAG,MAAM;MAChC,IAAI,CAAChH,oBAAoB,CAAC,IAAI,CAAC3C,KAAK,EAAE,IAAI,CAAC4C,KAAK,CAACC,mBAAmB,CAAC;MACrE,IAAI,CAAC+G,QAAQ,CAAC,CAAChH,KAAK,EAAE5C,KAAK,KAAK;QAC9B,IAAI6C,mBAAmB,GAAG,IAAI,CAACgH,0BAA0B,CAAC7J,KAAK,EAAE4C,KAAK,CAACC,mBAAmB,CAAC;QAC3F,IAAIiH,UAAU,GAAGnK,eAAe,CAACoK,iBAAiB,CAAC/J,KAAK,EAAE6C,mBAAmB,EAAE,IAAI,CAACmH,4BAA4B,CAAChK,KAAK,CAAC,CAAC;QACxH,IAAI6C,mBAAmB,CAACoH,KAAK,KAAKrH,KAAK,CAACC,mBAAmB,CAACoH,KAAK,IAAIpH,mBAAmB,CAACqH,IAAI,KAAKtH,KAAK,CAACC,mBAAmB,CAACqH,IAAI,IAAIJ,UAAU,CAACK,MAAM,CAACvH,KAAK,CAACkH,UAAU,CAAC,EAAE;UACvK,OAAO,IAAI;QACb;QACA,OAAO;UACLjH,mBAAmB;UACnBiH;QACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,CAACM,gBAAgB,GAAG,CAAChJ,KAAK,EAAEiJ,UAAU,EAAErK,KAAK,KAE5C;MACH,IAAIE,IAAI,GAAGF,KAAK,CAACE,IAAI;QACnB8B,OAAO,GAAGhC,KAAK,CAACgC,OAAO;MACzB,IAAIF,IAAI,GAAGE,OAAO,CAAC9B,IAAI,EAAEkB,KAAK,CAAC;MAC/B,OAAO;QACLA,KAAK;QACLU,IAAI;QACJ0C,GAAG,EAAE,IAAI,CAAC8F,aAAa,CAACxI,IAAI,EAAEV,KAAK,EAAEpB,KAAK,CAAC;QAC3CqK;MACF,CAAC;IACH,CAAC;IACD,IAAI,CAACzI,gBAAgB,GAAG,CAACR,KAAK,EAAEpB,KAAK,KAAK;MACxC,IAAIuK,MAAM,CAACC,SAAS,CAACpJ,KAAK,CAAC,EAAE;QAC3B,OAAO,IAAI,CAAChB,uBAAuB,CAACgB,KAAK,EAAEpB,KAAK,CAAC,CAACK,MAAM;MAC1D,CAAC,MAAM;QACL,IAAIoK,YAAY,GAAG,IAAI,CAACrK,uBAAuB,CAACE,IAAI,CAACqB,KAAK,CAACP,KAAK,CAAC,EAAEpB,KAAK,CAAC;QACzE,IAAI0K,SAAS,GAAGtJ,KAAK,GAAGd,IAAI,CAACqB,KAAK,CAACP,KAAK,CAAC;QACzC,OAAOqJ,YAAY,CAACpK,MAAM,GAAGqK,SAAS,GAAGD,YAAY,CAAC/K,MAAM;MAC9D;IACF,CAAC;IACD,IAAI,CAACU,uBAAuB,GAAG,CAACgB,KAAK,EAAEpB,KAAK,KAAK;MAC/C,IAAIG,KAAK,GAAG,IAAI,CAACwK,gBAAgB,CAACvJ,KAAK,EAAEpB,KAAK,CAAC;MAC/C,IAAIG,KAAK,IAAIA,KAAK,CAACiB,KAAK,KAAKA,KAAK,EAAE;QAElC,OAAOjB,KAAK;MACd,CAAC,MAAM;QACL,IAAID,IAAI,GAAGF,KAAK,CAACE,IAAI;UACnBD,YAAY,GAAGD,KAAK,CAACC,YAAY;UACjCiB,aAAa,GAAGlB,KAAK,CAACkB,aAAa;QACrCvD,SAAS,CAACyD,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGnB,YAAY,CAACC,IAAI,CAAC,EAAE,4CAA4C,GAAGkB,KAAK,CAAC;QACzGzD,SAAS,CAAC,CAACuD,aAAa,EAAE,oFAAoF,CAAC;QAC/G,OAAO;UACLxB,MAAM,EAAE,IAAI,CAAC+B,kBAAkB;UAC/BpB,MAAM,EAAE,IAAI,CAACoB,kBAAkB,GAAGL;QACpC,CAAC;MACH;IACF,CAAC;IACD,IAAI,CAACuJ,gBAAgB,GAAG,CAACvJ,KAAK,EAAEpB,KAAK,KAAK;MACxC,IAAIE,IAAI,GAAGF,KAAK,CAACE,IAAI;QACnB8B,OAAO,GAAGhC,KAAK,CAACgC,OAAO;QACvB/B,YAAY,GAAGD,KAAK,CAACC,YAAY;QACjCiB,aAAa,GAAGlB,KAAK,CAACkB,aAAa;MACrCvD,SAAS,CAACyD,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAGnB,YAAY,CAACC,IAAI,CAAC,EAAE,4CAA4C,GAAGkB,KAAK,CAAC;MACzG,IAAIU,IAAI,GAAGE,OAAO,CAAC9B,IAAI,EAAEkB,KAAK,CAAC;MAC/B,IAAIjB,KAAK,GAAG,IAAI,CAAC0E,OAAO,CAAC,IAAI,CAACyF,aAAa,CAACxI,IAAI,EAAEV,KAAK,EAAEpB,KAAK,CAAC,CAAC;MAChE,IAAI,CAACG,KAAK,IAAIA,KAAK,CAACiB,KAAK,KAAKA,KAAK,EAAE;QACnC,IAAIF,aAAa,EAAE;UAIjB,OAAOA,aAAa,CAAChB,IAAI,EAAEkB,KAAK,CAAC;QACnC;MACF;MACA,OAAOjB,KAAK;IACd,CAAC;IACD,IAAI,CAAC6J,4BAA4B,GAAGhK,KAAK,IAAI;MAI3C,IAAI,EAAE,IAAI,CAACoF,mBAAmB,IAAI,IAAI,CAACX,SAAS,CAAC,IAAI,CAACW,mBAAmB,CAAC,CAAC,EAAE;QAC3E,OAAO,EAAE;MACX;MACA,IAAIwF,uBAAuB,GAAG,IAAI,CAACnG,SAAS,CAAC,IAAI,CAACW,mBAAmB,CAAC;MACtE,IAAIyF,gBAAgB,GAAGD,uBAAuB,CAAC5K,KAAK,CAACoB,KAAK;MAC1D,IAAIa,SAAS,GAAGjC,KAAK,CAACC,YAAY,CAACD,KAAK,CAACE,IAAI,CAAC;MAI9C,IAAI2K,gBAAgB,IAAI5I,SAAS,IAAI,IAAI,CAACqI,aAAa,CAACtK,KAAK,CAACgC,OAAO,CAAChC,KAAK,CAACE,IAAI,EAAE2K,gBAAgB,CAAC,EAAEA,gBAAgB,EAAE7K,KAAK,CAAC,KAAK,IAAI,CAACoF,mBAAmB,EAAE;QAC1J,OAAO,EAAE;MACX;MACA,IAAI6E,KAAK,GAAGY,gBAAgB;MAC5B,IAAIC,0BAA0B,GAAG,CAAC;MAClC,KAAK,IAAIrL,CAAC,GAAGwK,KAAK,GAAG,CAAC,EAAExK,CAAC,IAAI,CAAC,IAAIqL,0BAA0B,GAAG,IAAI,CAACrK,cAAc,CAACxB,aAAa,EAAEQ,CAAC,EAAE,EAAE;QACrGwK,KAAK,EAAE;QACPa,0BAA0B,IAAI,IAAI,CAAC1K,uBAAuB,CAACX,CAAC,EAAEO,KAAK,CAAC,CAACN,MAAM;MAC7E;MACA,IAAIwK,IAAI,GAAGW,gBAAgB;MAC3B,IAAIE,yBAAyB,GAAG,CAAC;MACjC,KAAK,IAAIC,EAAE,GAAGd,IAAI,GAAG,CAAC,EAAEc,EAAE,GAAG/I,SAAS,IAAI8I,yBAAyB,GAAG,IAAI,CAACtK,cAAc,CAACxB,aAAa,EAAE+L,EAAE,EAAE,EAAE;QAC7Gd,IAAI,EAAE;QACNa,yBAAyB,IAAI,IAAI,CAAC3K,uBAAuB,CAAC4K,EAAE,EAAEhL,KAAK,CAAC,CAACN,MAAM;MAC7E;MACA,OAAO,CAAC;QACNuK,KAAK;QACLC;MACF,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,CAACe,WAAW,CAACxH,MAAM,CAAC;IACxB,IAAI,CAACuF,eAAe,GAAG,IAAI/L,cAAc,CAAC,IAAI,CAAC0N,gBAAgB,CAAC;IAChE,IAAI,CAACO,2BAA2B,GAAG,IAAItO,WAAW,CAAC,IAAI,CAAC+M,oBAAoB,EAAE,CAACjG,qBAAqB,GAAG,IAAI,CAAC1D,KAAK,CAACmL,yBAAyB,MAAM,IAAI,IAAIzH,qBAAqB,KAAK,KAAK,CAAC,GAAGA,qBAAqB,GAAG,EAAE,CAAC;IACvN,IAAI,IAAI,CAAC1D,KAAK,CAACoL,8BAA8B,EAAE;MAC7C,IAAI,CAAC5I,kBAAkB,GAAG,IAAI,CAACxC,KAAK,CAACoL,8BAA8B,CAACC,GAAG,CAACC,IAAI,KAAK;QAC/E5I,iBAAiB,EAAE,IAAIvF,iBAAiB,CAACmO,IAAI,CAACC,iBAAiB,CAAC;QAChEC,sBAAsB,EAAEF,IAAI,CAACE;MAC/B,CAAC,CAAC,CAAC;IACL,CAAC,MAAM;MACL,IAAIC,YAAY,GAAG,IAAI,CAACzL,KAAK;QAC3BwL,sBAAsB,GAAGC,YAAY,CAACD,sBAAsB;QAC5DD,iBAAiB,GAAGE,YAAY,CAACF,iBAAiB;MACpD,IAAIC,sBAAsB,EAAE;QAC1B,IAAI,CAAChJ,kBAAkB,CAACkJ,IAAI,CAAC;UAC3BhJ,iBAAiB,EAAE,IAAIvF,iBAAiB,CAACoO,iBAAiB,CAAC;UAC3DC,sBAAsB,EAAEA;QAC1B,CAAC,CAAC;MACJ;IACF;IACA,IAAIG,mBAAmB,GAAGhM,eAAe,CAACiM,oBAAoB,CAACnI,MAAM,CAAC;IACtE,IAAI,CAACb,KAAK,GAAG;MACXC,mBAAmB,EAAE8I,mBAAmB;MACxC7B,UAAU,EAAEnK,eAAe,CAACoK,iBAAiB,CAACtG,MAAM,EAAEkI,mBAAmB;IAC3E,CAAC;IAID,IAAI,CAACE,yBAAyB,GAAGC,EAAE,IAAI;MACrC,IAAIC,YAAY,GAAG,IAAI,CAAC/L,KAAK,CAAC1B,UAAU,GAAGwN,EAAE,CAACE,MAAM,CAACC,UAAU,GAAGH,EAAE,CAACE,MAAM,CAACE,SAAS;MACrF,IAAIC,YAAY,GAAG,IAAI,CAACnM,KAAK,CAAC1B,UAAU,GAAGwN,EAAE,CAACE,MAAM,CAACI,WAAW,GAAGN,EAAE,CAACE,MAAM,CAACK,YAAY;MACzF,IAAIC,YAAY,GAAG,IAAI,CAACtM,KAAK,CAAC1B,UAAU,GAAGwN,EAAE,CAACE,MAAM,CAACO,WAAW,GAAGT,EAAE,CAACE,MAAM,CAACQ,YAAY;MACzF,IAAIC,uBAAuB,GAAGN,YAAY,GAAGG,YAAY;MACzD,IAAII,KAAK,GAAG,IAAI,CAAC1M,KAAK,CAAC1B,UAAU,GAAGwN,EAAE,CAACa,MAAM,IAAIb,EAAE,CAACc,WAAW,GAAGd,EAAE,CAACe,MAAM,IAAIf,EAAE,CAACgB,WAAW;MAC7F,IAAIC,aAAa,GAAGL,KAAK;MACzB,IAAID,uBAAuB,EAAE;QAC3BM,aAAa,GAAGL,KAAK,GAAG,CAAC,GAAGpM,IAAI,CAAC0M,GAAG,CAACN,KAAK,GAAGX,YAAY,EAAE,CAAC,CAAC,GAAGzL,IAAI,CAACC,GAAG,CAACmM,KAAK,IAAIP,YAAY,GAAGG,YAAY,GAAGP,YAAY,CAAC,EAAE,CAAC,CAAC;MACnI;MACA,IAAIkB,WAAW,GAAGP,KAAK,GAAGK,aAAa;MACvC,IAAI,IAAI,CAAC/M,KAAK,CAACkN,QAAQ,IAAI,IAAI,CAACxM,UAAU,IAAI,IAAI,CAACA,UAAU,CAACsC,iBAAiB,EAAE;QAC/E,IAAImK,IAAI,GAAG,IAAI,CAACzM,UAAU,CAACsC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAChD,KAAK,CAAC1B,UAAU,EAAE;UACzBwN,EAAE,CAACE,MAAM,CAACC,UAAU,IAAIgB,WAAW;UACnC,IAAIG,cAAc,GAAGD,IAAI,CAAClB,UAAU,GAAGc,aAAa;UACpDI,IAAI,CAAClB,UAAU,GAAG,CAAC,IAAI,CAACjM,KAAK,CAACkB,aAAa,GAAGZ,IAAI,CAAC0M,GAAG,CAACI,cAAc,EAAE,IAAI,CAACrH,gBAAgB,CAAC,GAAGqH,cAAc;QAChH,CAAC,MAAM;UACLtB,EAAE,CAACE,MAAM,CAACE,SAAS,IAAIe,WAAW;UAClC,IAAII,aAAa,GAAGF,IAAI,CAACjB,SAAS,GAAGa,aAAa;UAClDI,IAAI,CAACjB,SAAS,GAAG,CAAC,IAAI,CAAClM,KAAK,CAACkB,aAAa,GAAGZ,IAAI,CAAC0M,GAAG,CAACK,aAAa,EAAE,IAAI,CAACtH,gBAAgB,CAAC,GAAGsH,aAAa;QAC7G;QACAvB,EAAE,CAACwB,cAAc,CAAC,CAAC;MACrB;IACF,CAAC;EACH;EACArC,WAAWA,CAACjL,KAAK,EAAE;IACjB,IAAIyI,QAAQ,GAAGzI,KAAK,CAACyI,QAAQ;MAC3BpJ,UAAU,GAAGW,KAAK,CAACX,UAAU;MAC7BY,YAAY,GAAGD,KAAK,CAACC,YAAY;MACjCC,IAAI,GAAGF,KAAK,CAACE,IAAI;MACjBiI,kBAAkB,GAAGnI,KAAK,CAACmI,kBAAkB;IAC/CxK,SAAS,CAET,CAAC8K,QAAQ,IAAI,CAACA,QAAQ,CAAC8E,UAAU,EAAE,4FAA4F,GAAG,wDAAwD,CAAC;IAC3L5P,SAAS,CAACyB,mBAAmB,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE,yFAAyF,CAAC;IACzI1B,SAAS,CAACsC,YAAY,EAAE,2DAA2D,CAAC;IACpF,IAAIgC,SAAS,GAAGhC,YAAY,CAACC,IAAI,CAAC;IAClC,IAAIiI,kBAAkB,IAAI,IAAI,IAAI,CAAC,IAAI,CAACrD,iCAAiC,KAAKqD,kBAAkB,GAAG,CAAC,IAAIlG,SAAS,GAAG,CAAC,IAAIkG,kBAAkB,IAAIlG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC8C,UAAU,CAACoD,kBAAkB,EAAE;MAChMvH,OAAO,CAACC,IAAI,CAAC,uBAAuB,GAAGsH,kBAAkB,GAAG,4BAA4B,GAAGlG,SAAS,GAAG,SAAS,CAAC;MACjH,IAAI,CAAC8C,UAAU,CAACoD,kBAAkB,GAAG,IAAI;IAC3C;IACA,IAAIrK,OAAO,IAAI,CAAC,IAAI,CAACiH,UAAU,CAACyI,QAAQ,EAAE;MAExC,IAAIC,UAAU,GAAG9Q,UAAU,CAAC+Q,OAAO,CAAC,IAAI,CAAC1N,KAAK,CAAC2N,qBAAqB,CAAC;MACrE,IAAIF,UAAU,IAAI,IAAI,IAAIA,UAAU,CAACD,QAAQ,KAAK,MAAM,EAAE;QACxD5M,OAAO,CAACC,IAAI,CAAC,4EAA4E,GAAG,sDAAsD,CAAC;QACnJ,IAAI,CAACkE,UAAU,CAACyI,QAAQ,GAAG,IAAI;MACjC;IACF;EACF;EACA,OAAOzD,iBAAiBA,CAAC/J,KAAK,EAAE6C,mBAAmB,EAAE+K,iBAAiB,EAAE;IACtE,IAAI3L,SAAS,GAAGjC,KAAK,CAACC,YAAY,CAACD,KAAK,CAACE,IAAI,CAAC;IAC9CvC,SAAS,CAACkF,mBAAmB,CAACoH,KAAK,IAAI,CAAC,IAAIpH,mBAAmB,CAACqH,IAAI,IAAIrH,mBAAmB,CAACoH,KAAK,GAAG,CAAC,IAAIpH,mBAAmB,CAACqH,IAAI,GAAGjI,SAAS,EAAE,mCAAmC,GAAGY,mBAAmB,CAACoH,KAAK,GAAG,IAAI,GAAGpH,mBAAmB,CAACqH,IAAI,GAAG,qDAAqD,CAAC;IACzS,IAAIJ,UAAU,GAAG,IAAI/M,cAAc,CAACkF,SAAS,CAAC;IAC9C,IAAIA,SAAS,GAAG,CAAC,EAAE;MACjB,IAAI4L,UAAU,GAAG,CAAChL,mBAAmB,EAAE,IAAI+K,iBAAiB,KAAK,IAAI,IAAIA,iBAAiB,KAAK,KAAK,CAAC,GAAGA,iBAAiB,GAAG,EAAE,CAAC,CAAC;MAChI,KAAK,IAAIE,GAAG,GAAG,CAAC,EAAEC,WAAW,GAAGF,UAAU,EAAEC,GAAG,GAAGC,WAAW,CAACrO,MAAM,EAAEoO,GAAG,EAAE,EAAE;QAC3E,IAAIE,MAAM,GAAGD,WAAW,CAACD,GAAG,CAAC;QAC7BhE,UAAU,CAACmE,QAAQ,CAACD,MAAM,CAAC;MAC7B;MAIA,IAAIhO,KAAK,CAACmI,kBAAkB,IAAI,IAAI,IAAInI,KAAK,CAACmI,kBAAkB,IAAI,CAAC,EAAE;QACrE,IAAI+F,aAAa,GAAGvO,eAAe,CAACiM,oBAAoB,CAAC5L,KAAK,CAAC;QAC/D8J,UAAU,CAACmE,QAAQ,CAACC,aAAa,CAAC;MACpC;MAKA,IAAIC,gBAAgB,GAAG,IAAIC,GAAG,CAACpO,KAAK,CAACqO,mBAAmB,CAAC;MACzD1O,eAAe,CAAC2O,0BAA0B,CAACtO,KAAK,EAAEmO,gBAAgB,EAAErE,UAAU,EAAEjH,mBAAmB,CAACoH,KAAK,CAAC;IAC5G;IACA,OAAOH,UAAU;EACnB;EACA,OAAO8B,oBAAoBA,CAAC5L,KAAK,EAAE;IACjC,IAAIuO,qBAAqB;IACzB,IAAItM,SAAS,GAAGjC,KAAK,CAACC,YAAY,CAACD,KAAK,CAACE,IAAI,CAAC;IAC9C,IAAIsO,cAAc,GAAGlO,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAAC0M,GAAG,CAAC/K,SAAS,GAAG,CAAC,EAAE3B,IAAI,CAACqB,KAAK,CAAC,CAAC4M,qBAAqB,GAAGvO,KAAK,CAACmI,kBAAkB,MAAM,IAAI,IAAIoG,qBAAqB,KAAK,KAAK,CAAC,GAAGA,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC;IAClM,IAAIE,aAAa,GAAGnO,IAAI,CAAC0M,GAAG,CAAC/K,SAAS,EAAEuM,cAAc,GAAGjQ,2BAA2B,CAACyB,KAAK,CAACxB,kBAAkB,CAAC,CAAC,GAAG,CAAC;IACnH,OAAO;MACLyL,KAAK,EAAEuE,cAAc;MACrBtE,IAAI,EAAEuE;IACR,CAAC;EACH;EACA,OAAOH,0BAA0BA,CAACtO,KAAK,EAAEmO,gBAAgB,EAAErE,UAAU,EAAE4E,OAAO,EAAE;IAC9E,IAAIC,YAAY,GAAG3O,KAAK,CAAC4O,mBAAmB,GAAG,CAAC,GAAG,CAAC;IACpD,KAAK,IAAIC,OAAO,GAAGH,OAAO,GAAG,CAAC,EAAEG,OAAO,IAAI,CAAC,EAAEA,OAAO,EAAE,EAAE;MACvD,IAAIV,gBAAgB,CAACW,GAAG,CAACD,OAAO,GAAGF,YAAY,CAAC,EAAE;QAChD7E,UAAU,CAACmE,QAAQ,CAAC;UAClBhE,KAAK,EAAE4E,OAAO;UACd3E,IAAI,EAAE2E;QACR,CAAC,CAAC;QACF;MACF;IACF;EACF;EACAhF,0BAA0BA,CAAC7J,KAAK,EAAE6C,mBAAmB,EAAE;IACrD,IAAI3C,IAAI,GAAGF,KAAK,CAACE,IAAI;MACnBD,YAAY,GAAGD,KAAK,CAACC,YAAY;IACnC,IAAInB,qBAAqB,GAAGD,8BAA8B,CAACmB,KAAK,CAAClB,qBAAqB,CAAC;IACvF,IAAIiQ,oBAAoB,GAAG,IAAI,CAACtO,cAAc;MAC5C8E,aAAa,GAAGwJ,oBAAoB,CAACxJ,aAAa;MAClDlF,MAAM,GAAG0O,oBAAoB,CAAC1O,MAAM;MACpCpB,aAAa,GAAG8P,oBAAoB,CAAC9P,aAAa;IACpD,IAAI+P,eAAe,GAAGzJ,aAAa,GAAGtG,aAAa,GAAGoB,MAAM;IAI5D,IAAIpB,aAAa,IAAI,CAAC,IAAIsG,aAAa,IAAI,CAAC,EAAE;MAC5C,OAAO1C,mBAAmB,CAACqH,IAAI,IAAIjK,YAAY,CAACC,IAAI,CAAC,GAAGP,eAAe,CAACsP,qBAAqB,CAACpM,mBAAmB,EAAE7C,KAAK,CAAC,GAAG6C,mBAAmB;IACjJ;IACA,IAAIqM,sBAAsB;IAC1B,IAAIlP,KAAK,CAACmP,qBAAqB,EAAE;MAC/B,IAAIC,WAAW,GAAGJ,eAAe,GAAGlQ,qBAAqB,GAAGG,aAAa,GAAGR,4BAA4B,CAACuB,KAAK,CAACtB,mBAAmB,CAAC,GAAG,CAAC;MACvIwQ,sBAAsB,GAAG;QACvBjF,KAAK,EAAE,CAAC;QACRC,IAAI,EAAE5J,IAAI,CAAC0M,GAAG,CAACnK,mBAAmB,CAACqH,IAAI,GAAGkF,WAAW,EAAEnP,YAAY,CAACC,IAAI,CAAC,GAAG,CAAC;MAC/E,CAAC;IACH,CAAC,MAAM;MAWL,IAAIF,KAAK,CAACmI,kBAAkB,IAAI,CAAC,IAAI,CAAC1H,cAAc,CAACJ,MAAM,IAAIC,IAAI,CAAC+O,GAAG,CAACL,eAAe,CAAC,IAAIzE,MAAM,CAAC+E,OAAO,EAAE;QAC1G,OAAOzM,mBAAmB,CAACqH,IAAI,IAAIjK,YAAY,CAACC,IAAI,CAAC,GAAGP,eAAe,CAACsP,qBAAqB,CAACpM,mBAAmB,EAAE7C,KAAK,CAAC,GAAG6C,mBAAmB;MACjJ;MACAqM,sBAAsB,GAAG1R,2BAA2B,CAACwC,KAAK,EAAEvB,4BAA4B,CAACuB,KAAK,CAACtB,mBAAmB,CAAC,EAAEU,mBAAmB,CAACY,KAAK,CAACX,UAAU,CAAC,EAAEwD,mBAAmB,EAAE,IAAI,CAACzC,uBAAuB,EAAE,IAAI,CAACK,cAAc,CAAC;MACnO9C,SAAS,CAACuR,sBAAsB,CAAChF,IAAI,GAAGjK,YAAY,CAACC,IAAI,CAAC,EAAE,6DAA6D,CAAC;IAC5H;IACA,IAAI,IAAI,CAACmC,iBAAiB,CAACkN,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;MAOrC,IAAIC,QAAQ,GAAG,IAAI,CAACC,uBAAuB,CAACP,sBAAsB,CAACjF,KAAK,EAAEiF,sBAAsB,CAAChF,IAAI,CAAC;MACtGgF,sBAAsB,CAAChF,IAAI,GAAGsF,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,KAAK,CAAC,GAAGA,QAAQ,GAAGN,sBAAsB,CAAChF,IAAI;IACjH;IACA,OAAOgF,sBAAsB;EAC/B;EACAO,uBAAuBA,CAACxF,KAAK,EAAEC,IAAI,EAAE;IACnC,KAAK,IAAIwF,EAAE,GAAGzF,KAAK,EAAEyF,EAAE,IAAIxF,IAAI,EAAEwF,EAAE,EAAE,EAAE;MACrC,IAAIC,eAAe,GAAG,IAAI,CAACzK,cAAc,CAAC0K,GAAG,CAACF,EAAE,CAAC;MACjD,IAAIC,eAAe,IAAI,IAAI,IAAI,IAAI,CAACtN,iBAAiB,CAACwN,SAAS,CAACF,eAAe,EAAEpN,SAAS,IAAIA,SAAS,CAACe,OAAO,CAAC,CAAC,CAAC,EAAE;QAClH,OAAOoM,EAAE;MACX;IACF;IACA,OAAO,IAAI;EACb;EACAI,iBAAiBA,CAAA,EAAG;IAClB,IAAI,IAAI,CAACjM,4BAA4B,CAAC,CAAC,EAAE;MACvC,IAAI,CAACT,OAAO,CAAC2M,qBAAqB,CAAC;QACjC9L,GAAG,EAAE,IAAI;QACTZ,OAAO,EAAE,IAAI,CAACD,OAAO,CAACC;MACxB,CAAC,CAAC;IACJ;IAGA,IAAI,CAAC2M,oBAAoB,CAAC,CAAC;EAC7B;EACAC,oBAAoBA,CAAA,EAAG;IACrB,IAAI,IAAI,CAACpM,4BAA4B,CAAC,CAAC,EAAE;MACvC,IAAI,CAACT,OAAO,CAAC8M,uBAAuB,CAAC;QACnCjM,GAAG,EAAE;MACP,CAAC,CAAC;IACJ;IACA,IAAI,CAACiH,2BAA2B,CAACiF,OAAO,CAAC;MACvCC,KAAK,EAAE;IACT,CAAC,CAAC;IACF,IAAI,CAAC5N,kBAAkB,CAACF,OAAO,CAAC6G,KAAK,IAAI;MACvCA,KAAK,CAACzG,iBAAiB,CAACyN,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IACF,IAAI,CAACnH,eAAe,CAACqH,kBAAkB,CAAC,CAAC;IAGzC,IAAI,CAACC,uBAAuB,CAAC,CAAC;EAChC;EAGAN,oBAAoBA,CAAA,EAAG;IACrB,IAAI,IAAI,CAACtP,UAAU,IAAI,IAAI,CAACA,UAAU,CAACsC,iBAAiB,EAAE;MACxD,IAAI,CAACtC,UAAU,CAACsC,iBAAiB,CAAC,CAAC,CAACuN,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC1E,yBAAyB,CAAC;IAC/F,CAAC,MAAM;MACL2E,UAAU,CAAC,MAAM,IAAI,CAACR,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC;MACjD;IACF;EACF;EAGAM,uBAAuBA,CAAA,EAAG;IACxB,IAAI,IAAI,CAAC5P,UAAU,IAAI,IAAI,CAACA,UAAU,CAACsC,iBAAiB,EAAE;MACxD,IAAI,CAACtC,UAAU,CAACsC,iBAAiB,CAAC,CAAC,CAACyN,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC5E,yBAAyB,CAAC;IAClG;EACF;EACA,OAAO6E,wBAAwBA,CAACnM,QAAQ,EAAEoM,SAAS,EAAE;IAGnD,IAAI1O,SAAS,GAAGsC,QAAQ,CAACtE,YAAY,CAACsE,QAAQ,CAACrE,IAAI,CAAC;IACpD,IAAI+B,SAAS,KAAK0O,SAAS,CAAC7G,UAAU,CAAC8G,QAAQ,CAAC,CAAC,EAAE;MACjD,OAAOD,SAAS;IAClB;IACA,IAAIE,gBAAgB,GAAGlR,eAAe,CAACsP,qBAAqB,CAAC0B,SAAS,CAAC9N,mBAAmB,EAAE0B,QAAQ,CAAC;IACrG,OAAO;MACL1B,mBAAmB,EAAEgO,gBAAgB;MACrC/G,UAAU,EAAEnK,eAAe,CAACoK,iBAAiB,CAACxF,QAAQ,EAAEsM,gBAAgB;IAC1E,CAAC;EACH;EACAC,UAAUA,CAACC,KAAK,EAAE1C,mBAAmB,EAAE2C,sBAAsB,EAAE/G,KAAK,EAAEC,IAAI,EAAE+G,cAAc,EAAE;IAC1F,IAAIC,KAAK,GAAG,IAAI;IAChB,IAAIC,YAAY,GAAG,IAAI,CAACnR,KAAK;MAC3BoR,qBAAqB,GAAGD,YAAY,CAACC,qBAAqB;MAC1DC,sBAAsB,GAAGF,YAAY,CAACE,sBAAsB;MAC5DzC,mBAAmB,GAAGuC,YAAY,CAACvC,mBAAmB;MACtD0C,iBAAiB,GAAGH,YAAY,CAACG,iBAAiB;MAClDpR,IAAI,GAAGiR,YAAY,CAACjR,IAAI;MACxBqR,KAAK,GAAGJ,YAAY,CAACI,KAAK;MAC1BvP,OAAO,GAAGmP,YAAY,CAACnP,OAAO;MAC9B/B,YAAY,GAAGkR,YAAY,CAAClR,YAAY;MACxCiB,aAAa,GAAGiQ,YAAY,CAACjQ,aAAa;MAC1C5C,UAAU,GAAG6S,YAAY,CAAC7S,UAAU;MACpCkT,UAAU,GAAGL,YAAY,CAACK,UAAU;IACtC,IAAI7C,YAAY,GAAGC,mBAAmB,GAAG,CAAC,GAAG,CAAC;IAC9C,IAAI6C,GAAG,GAAGxR,YAAY,CAACC,IAAI,CAAC,GAAG,CAAC;IAChC,IAAIwR,WAAW;IACfxH,IAAI,GAAG5J,IAAI,CAAC0M,GAAG,CAACyE,GAAG,EAAEvH,IAAI,CAAC;IAC1B,IAAIyH,KAAK,GAAG,SAASA,KAAKA,CAAA,EAAG;MAC3B,IAAI7P,IAAI,GAAGE,OAAO,CAAC9B,IAAI,EAAEwP,EAAE,CAAC;MAC5B,IAAIlL,GAAG,GAAG0M,KAAK,CAAC5G,aAAa,CAACxI,IAAI,EAAE4N,EAAE,EAAEwB,KAAK,CAAClR,KAAK,CAAC;MACpDkR,KAAK,CAAChM,cAAc,CAAC0M,GAAG,CAAClC,EAAE,EAAElL,GAAG,CAAC;MACjC,IAAIwM,sBAAsB,CAAClC,GAAG,CAACY,EAAE,GAAGf,YAAY,CAAC,EAAE;QACjDN,mBAAmB,CAAC3C,IAAI,CAACqF,KAAK,CAACrR,MAAM,CAAC;MACxC;MACA,IAAImS,qBAAqB,GAAG3Q,aAAa,IAAI,IAAI,IAAIqQ,KAAK,IAAIL,KAAK,CAAClI,eAAe,CAAC8I,OAAO,CAAC,CAAC;MAC7Ff,KAAK,CAACrF,IAAI,CAAc7N,KAAK,CAACuI,aAAa,CAAChJ,YAAY,EAAEd,QAAQ,CAAC;QACjE8U,qBAAqB,EAAEA,qBAAqB;QAC5CC,sBAAsB,EAAE3B,EAAE,GAAG+B,GAAG,GAAGJ,sBAAsB,GAAGU,SAAS;QACrET,iBAAiB,EAAEA,iBAAiB;QACpCjO,OAAO,EAAEmB,GAAG;QACZlG,UAAU,EAAEA,UAAU;QACtB8C,KAAK,EAAEsO,EAAE;QACTuB,cAAc,EAAEA,cAAc;QAC9BnP,IAAI,EAAEA,IAAI;QACV0C,GAAG,EAAEA,GAAG;QACRkN,WAAW,EAAEA,WAAW;QACxBM,kBAAkB,EAAEd,KAAK,CAAC7M,mBAAmB;QAC7C4N,kBAAkB,EAAErL,CAAC,IAAIsK,KAAK,CAACgB,mBAAmB,CAAC1N,GAAG,CAAC;QACvD2N,SAAS,EAAEjB,KAAK,CAAC3J,cAAc;QAC/BtD,GAAG,EAAEmO,IAAI,IAAI;UACXlB,KAAK,CAACzM,SAAS,CAACD,GAAG,CAAC,GAAG4N,IAAI;QAC7B,CAAC;QACDZ,UAAU,EAAEA;MACd,CAAC,EAAEK,qBAAqB,IAAI;QAC1BQ,YAAY,EAAEnB,KAAK,CAACvK;MACtB,CAAC,CAAC,CAAC,CAAC;MACJ+K,WAAW,GAAGlN,GAAG;IACnB,CAAC;IACD,KAAK,IAAIkL,EAAE,GAAGzF,KAAK,EAAEyF,EAAE,IAAIxF,IAAI,EAAEwF,EAAE,EAAE,EAAE;MACrCiC,KAAK,CAAC,CAAC;IACT;EACF;EACA,OAAO1C,qBAAqBA,CAAC8B,KAAK,EAAE/Q,KAAK,EAAE;IACzC,IAAIiC,SAAS,GAAGjC,KAAK,CAACC,YAAY,CAACD,KAAK,CAACE,IAAI,CAAC;IAC9C,IAAIgK,IAAI,GAAG5J,IAAI,CAAC0M,GAAG,CAAC/K,SAAS,GAAG,CAAC,EAAE8O,KAAK,CAAC7G,IAAI,CAAC;IAC9C,IAAIxL,mBAAmB,GAAGD,4BAA4B,CAACuB,KAAK,CAACtB,mBAAmB,CAAC;IACjF,OAAO;MACLuL,KAAK,EAAEpN,KAAK,CAAC,CAAC,EAAEoF,SAAS,GAAG,CAAC,GAAGvD,mBAAmB,EAAEqS,KAAK,CAAC9G,KAAK,CAAC;MACjEC;IACF,CAAC;EACH;EACArG,4BAA4BA,CAAA,EAAG;IAC7B,IAAIyO,aAAa,GAAG,IAAI,CAAClP,OAAO;IAChC,OAAO,CAAC,EAAEkP,aAAa,IAAI,CAAC,CAACA,aAAa,CAAChU,UAAU,KAAKD,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC,CAAC;EACvG;EACAgM,aAAaA,CAACxI,IAAI,EAAEV,KAAK,EAAEpB,KAAK,EAE9B;IACA,IAAIA,KAAK,CAACvC,YAAY,IAAI,IAAI,EAAE;MAC9B,OAAOuC,KAAK,CAACvC,YAAY,CAACqE,IAAI,EAAEV,KAAK,CAAC;IACxC;IACA,IAAIoD,GAAG,GAAG9G,mBAAmB,CAACoE,IAAI,EAAEV,KAAK,CAAC;IAC1C,IAAIoD,GAAG,KAAK+N,MAAM,CAACnR,KAAK,CAAC,EAAE;MACzBjD,gBAAgB,GAAG,IAAI;MACvB,IAAI2D,IAAI,CAAC0Q,IAAI,IAAI1Q,IAAI,CAAC0Q,IAAI,CAACC,WAAW,EAAE;QACtCrU,yBAAyB,GAAG0D,IAAI,CAAC0Q,IAAI,CAACC,WAAW;MACnD;IACF;IACA,OAAOjO,GAAG;EACZ;EACAkO,MAAMA,CAAA,EAAG;IACP,IAAI,CAACzH,WAAW,CAAC,IAAI,CAACjL,KAAK,CAAC;IAC5B,IAAI2S,YAAY,GAAG,IAAI,CAAC3S,KAAK;MAC3B4S,kBAAkB,GAAGD,YAAY,CAACC,kBAAkB;MACpDC,mBAAmB,GAAGF,YAAY,CAACE,mBAAmB;MACtDjE,mBAAmB,GAAG+D,YAAY,CAAC/D,mBAAmB;IACxD,IAAIkE,YAAY,GAAG,IAAI,CAAC9S,KAAK;MAC3BE,IAAI,GAAG4S,YAAY,CAAC5S,IAAI;MACxB5B,UAAU,GAAGwU,YAAY,CAACxU,UAAU;IACtC,IAAI2S,cAAc,GAAG,IAAI,CAACjR,KAAK,CAACkN,QAAQ,GAAG7O,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC,GAAGyU,MAAM,CAACC,oBAAoB,GAAGD,MAAM,CAACE,kBAAkB,GAAG,IAAI;IACtJ,IAAIlC,KAAK,GAAG,EAAE;IACd,IAAIC,sBAAsB,GAAG,IAAI5C,GAAG,CAAC,IAAI,CAACpO,KAAK,CAACqO,mBAAmB,CAAC;IACpE,IAAIA,mBAAmB,GAAG,EAAE;IAG5B,IAAIO,mBAAmB,EAAE;MACvB,IAAIoC,sBAAsB,CAAClC,GAAG,CAAC,CAAC,CAAC,EAAE;QACjCT,mBAAmB,CAAC3C,IAAI,CAAC,CAAC,CAAC;MAC7B;MACA,IAAIwH,QAAQ,GAAgBrV,KAAK,CAACsV,cAAc,CAACvE,mBAAmB,CAAC,GAAGA,mBAAmB,GAI3F/Q,KAAK,CAACuI,aAAa,CAACwI,mBAAmB,EAAE,IAAI,CAAC;MAC9CmC,KAAK,CAACrF,IAAI,CAAc7N,KAAK,CAACuI,aAAa,CAAC/I,kCAAkC,EAAE;QAC9EgG,OAAO,EAAE,IAAI,CAACH,WAAW,CAAC,CAAC,GAAG,SAAS;QACvCsB,GAAG,EAAE;MACP,CAAC,EAAe3G,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;QACxCgL,QAAQ,EAAE,IAAI,CAACK,eAAe;QAC9BqL,KAAK,EAAE,CAACnC,cAAc,EAAE,IAAI,CAACjR,KAAK,CAACqT,wBAAwB;MAC7D,CAAC,EAEDH,QAAQ,CAAC,CAAC,CAAC;IACb;IAGA,IAAIjR,SAAS,GAAG,IAAI,CAACjC,KAAK,CAACC,YAAY,CAACC,IAAI,CAAC;IAC7C,IAAI+B,SAAS,KAAK,CAAC,IAAI2Q,kBAAkB,EAAE;MACzC,IAAIU,SAAS,GAAgBzV,KAAK,CAACsV,cAAc,CAACP,kBAAkB,CAAC,GAAGA,kBAAkB,GAI1F/U,KAAK,CAACuI,aAAa,CAACwM,kBAAkB,EAAE,IAAI,CAAC;MAC7C7B,KAAK,CAACrF,IAAI,CAAc7N,KAAK,CAACuI,aAAa,CAAC/I,kCAAkC,EAAE;QAC9EgG,OAAO,EAAE,IAAI,CAACH,WAAW,CAAC,CAAC,GAAG,QAAQ;QACtCsB,GAAG,EAAE;MACP,CAAC,EAAe3G,KAAK,CAAC0V,YAAY,CAACD,SAAS,EAAE;QAC5C5L,QAAQ,EAAE8L,KAAK,IAAI;UACjB,IAAI,CAAC5L,cAAc,CAAC4L,KAAK,CAAC;UAC1B,IAAIF,SAAS,CAACtT,KAAK,CAAC0H,QAAQ,EAAE;YAC5B4L,SAAS,CAACtT,KAAK,CAAC0H,QAAQ,CAAC8L,KAAK,CAAC;UACjC;QACF,CAAC;QACDJ,KAAK,EAAE,CAACnC,cAAc,EAAEqC,SAAS,CAACtT,KAAK,CAACoT,KAAK;MAC/C,CAAC,CAAC,CAAC,CAAC;IACN;IAGA,IAAInR,SAAS,GAAG,CAAC,EAAE;MACjB9D,gBAAgB,GAAG,KAAK;MACxBC,yBAAyB,GAAG,EAAE;MAC9B,IAAIqV,SAAS,GAAG,IAAI,CAAC9O,aAAa,CAAC,CAACrG,UAAU,CAAC;MAC/C,IAAIoV,aAAa,GAAG,IAAI,CAAC9Q,KAAK,CAACkH,UAAU,CAAC6J,gBAAgB,CAAC,CAAC;MAC5D,IAAIC,UAAU,GAAGtU,aAAa,CAACoU,aAAa,EAAEG,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC;MAC9D,KAAK,IAAIC,SAAS,GAAG1X,+BAA+B,CAACqX,aAAa,CAAC,EAAEM,KAAK,EAAE,CAAC,CAACA,KAAK,GAAGD,SAAS,CAAC,CAAC,EAAEE,IAAI,GAAG;QACxG,IAAIC,OAAO,GAAGF,KAAK,CAACG,KAAK;QACzB,IAAID,OAAO,CAACJ,QAAQ,EAAE;UAGpB,IAAI,IAAI,CAAC9T,KAAK,CAACmP,qBAAqB,EAAE;YACpC;UACF;UAKA,IAAIiF,YAAY,GAAGF,OAAO,KAAKN,UAAU;UACzC,IAAIS,mBAAmB,GAAGD,YAAY,IAAI,CAAC,IAAI,CAACpU,KAAK,CAACkB,aAAa;UACnE,IAAIgJ,IAAI,GAAGmK,mBAAmB,GAAGxX,KAAK,CAACqX,OAAO,CAACjK,KAAK,GAAG,CAAC,EAAEiK,OAAO,CAAChK,IAAI,EAAE,IAAI,CAAC3I,0BAA0B,CAAC,GAAG2S,OAAO,CAAChK,IAAI;UACvH,IAAIoK,YAAY,GAAG,IAAI,CAAClU,uBAAuB,CAAC8T,OAAO,CAACjK,KAAK,EAAE,IAAI,CAACjK,KAAK,CAAC;UAC1E,IAAIuU,WAAW,GAAG,IAAI,CAACnU,uBAAuB,CAAC8J,IAAI,EAAE,IAAI,CAAClK,KAAK,CAAC;UAChE,IAAIwU,UAAU,GAAGD,WAAW,CAAClU,MAAM,GAAGkU,WAAW,CAAC7U,MAAM,GAAG4U,YAAY,CAACjU,MAAM;UAC9E0Q,KAAK,CAACrF,IAAI,CAAc7N,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;YAChD8H,GAAG,EAAE,UAAU,GAAG0P,OAAO,CAACjK,KAAK;YAC/BmJ,KAAK,EAAE;cACL,CAACK,SAAS,GAAGe;YACf;UACF,CAAC,CAAC,CAAC;QACL,CAAC,MAAM;UACL,IAAI,CAAC1D,UAAU,CAACC,KAAK,EAAE1C,mBAAmB,EAAE2C,sBAAsB,EAAEkD,OAAO,CAACjK,KAAK,EAAEiK,OAAO,CAAChK,IAAI,EAAE+G,cAAc,CAAC;QAClH;MACF;MACA,IAAI,CAAC,IAAI,CAAClM,UAAU,CAACT,IAAI,IAAInG,gBAAgB,EAAE;QAC7CyC,OAAO,CAACC,IAAI,CAAC,6FAA6F,GAAG,wCAAwC,EAAEzC,yBAAyB,CAAC;QACjL,IAAI,CAAC2G,UAAU,CAACT,IAAI,GAAG,IAAI;MAC7B;IACF;IAGA,IAAIuO,mBAAmB,EAAE;MACvB,IAAI4B,SAAS,GAAgB5W,KAAK,CAACsV,cAAc,CAACN,mBAAmB,CAAC,GAAGA,mBAAmB,GAI5FhV,KAAK,CAACuI,aAAa,CAACyM,mBAAmB,EAAE,IAAI,CAAC;MAC9C9B,KAAK,CAACrF,IAAI,CAAc7N,KAAK,CAACuI,aAAa,CAAC/I,kCAAkC,EAAE;QAC9EgG,OAAO,EAAE,IAAI,CAACyE,iBAAiB,CAAC,CAAC;QACjCtD,GAAG,EAAE;MACP,CAAC,EAAe3G,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;QACxCgL,QAAQ,EAAE,IAAI,CAACG,eAAe;QAC9BuL,KAAK,EAAE,CAACnC,cAAc,EAAE,IAAI,CAACjR,KAAK,CAAC0U,wBAAwB;MAC7D,CAAC,EAEDD,SAAS,CAAC,CAAC,CAAC;IACd;IAGA,IAAIE,WAAW,GAAGpY,aAAa,CAACA,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,CAACyD,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;MACjEqI,mBAAmB,EAAE,IAAI,CAACL,oBAAoB;MAC9CN,QAAQ,EAAE,IAAI,CAACF,SAAS;MACxBiB,QAAQ,EAAE,IAAI,CAACD,SAAS;MACxBY,iBAAiB,EAAE,IAAI,CAACF,kBAAkB;MAC1CI,eAAe,EAAE,IAAI,CAACD,gBAAgB;MACtCG,qBAAqB,EAAE,IAAI,CAACD,sBAAsB;MAClDG,mBAAmB,EAAE,IAAI,CAACD,oBAAoB;MAC9CtK,mBAAmB,EAAED,4BAA4B,CAAC,IAAI,CAACc,KAAK,CAACb,mBAAmB,CAAC;MAEjFyV,mBAAmB,EAAE,IAAI,CAAC5U,KAAK,CAAC4U,mBAAmB,KAAK7C,SAAS,GAAG,IAAI,CAAC/R,KAAK,CAAC4U,mBAAmB,GAAG,IAAI,CAAC5U,KAAK,CAACkN,QAAQ;MACxHmB,mBAAmB;MACnB+E,KAAK,EAAEnC,cAAc,GAAG,CAACA,cAAc,EAAE,IAAI,CAACjR,KAAK,CAACoT,KAAK,CAAC,GAAG,IAAI,CAACpT,KAAK,CAACoT;IAC1E,CAAC,CAAC;IACF,IAAI,CAAC7P,QAAQ,GAAG,IAAI,CAACX,KAAK,CAACC,mBAAmB,CAACqH,IAAI,GAAGjI,SAAS,GAAG,CAAC;IACnE,IAAI4S,QAAQ,GAAgBhX,KAAK,CAACuI,aAAa,CAAC7I,8BAA8B,EAAE;MAC9E4W,KAAK,EAAE;QACL9Q,OAAO,EAAE,IAAI;QACbyR,gBAAgB,EAAE,IAAI,CAACnR,iBAAiB;QACxCrF,UAAU,EAAED,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC;QACtDwF,yBAAyB,EAAE,IAAI,CAACF,0BAA0B;QAC1DmM,qBAAqB,EAAE,IAAI,CAAChM,sBAAsB;QAClDmM,uBAAuB,EAAE,IAAI,CAAC/L;MAChC;IACF,CAAC,EAAetG,KAAK,CAAC0V,YAAY,CAAC,CAAC,IAAI,CAACvT,KAAK,CAAC+U,qBAAqB,IAAI,IAAI,CAAC7O,6BAA6B,EAAEyO,WAAW,CAAC,EAAE;MACxH1Q,GAAG,EAAE,IAAI,CAACgC;IACZ,CAAC,EAAE8K,KAAK,CAAC,CAAC;IACV,IAAIiE,GAAG,GAAGH,QAAQ;IA2BlB,IAAI,IAAI,CAAC7U,KAAK,CAACuR,KAAK,EAAE;MACpB,OAAoB1T,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;QAC5C0W,KAAK,EAAEL,MAAM,CAACxB;MAChB,CAAC,EAAEyD,GAAG,EAAE,IAAI,CAACC,mBAAmB,CAAC,CAAC,CAAC;IACrC,CAAC,MAAM;MACL,OAAOD,GAAG;IACZ;EACF;EACAE,kBAAkBA,CAACC,SAAS,EAAE;IAC5B,IAAIC,YAAY,GAAG,IAAI,CAACpV,KAAK;MAC3BE,IAAI,GAAGkV,YAAY,CAAClV,IAAI;MACxBmV,SAAS,GAAGD,YAAY,CAACC,SAAS;IACpC,IAAInV,IAAI,KAAKiV,SAAS,CAACjV,IAAI,IAAImV,SAAS,KAAKF,SAAS,CAACE,SAAS,EAAE;MAGhE,IAAI,CAAC7S,kBAAkB,CAACF,OAAO,CAAC6G,KAAK,IAAI;QACvCA,KAAK,CAACzG,iBAAiB,CAAC4S,oBAAoB,CAAC,CAAC;MAChD,CAAC,CAAC;IACJ;IAOA,IAAIC,eAAe,GAAG,IAAI,CAACtQ,gBAAgB;IAC3C,IAAI,CAACmC,4BAA4B,CAAC,CAAC;IAGnC,IAAImO,eAAe,EAAE;MACnB,IAAI,CAACtQ,gBAAgB,GAAG,KAAK;IAC/B;EACF;EAWAqC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAAC0B,eAAe,CAACwM,gBAAgB,CAAC,IAAI,CAACxV,KAAK,EAAE,IAAI,CAAC4C,KAAK,CAACC,mBAAmB,EAAE,IAAI,CAACpC,cAAc,CAAC;EACxG;EAKAyR,mBAAmBA,CAAC7O,OAAO,EAAE;IAC3B,IAAI,CAAC+B,mBAAmB,GAAG/B,OAAO;IAClC,IAAI,CAACsG,oBAAoB,CAAC,CAAC;EAC7B;EACAtC,oCAAoCA,CAAChE,OAAO,EAAE;IAC5C,IAAI,CAAChB,iBAAiB,CAACoT,aAAa,CAACpS,OAAO,EAAEd,SAAS,IAAI;MACzDA,SAAS,CAACkF,qCAAqC,CAAC,CAAC;IACnD,CAAC,CAAC;EACJ;EACAA,qCAAqCA,CAAA,EAAG;IAGtC,IAAI;MACF,IAAI,CAAC,IAAI,CAAC/G,UAAU,EAAE;QACpB;MACF;MAGA,IAAI,CAACA,UAAU,CAACgV,aAAa,CAAC,IAAI,CAACtS,OAAO,CAACU,yBAAyB,CAAC,CAAC,CAACb,YAAY,CAAC,CAAC,EAAE,CAACnC,CAAC,EAAEC,CAAC,EAAEkH,KAAK,EAAEC,MAAM,KAAK;QAC9G,IAAI,CAAC7C,gCAAgC,GAAG,IAAI,CAAC2B,aAAa,CAAC;UACzDlG,CAAC;UACDC;QACF,CAAC,CAAC;QACF,IAAI,CAACN,cAAc,CAAC8E,aAAa,GAAG,IAAI,CAAC0B,aAAa,CAAC;UACrDgB,KAAK;UACLC;QACF,CAAC,CAAC;QACF,IAAIyN,aAAa,GAAG,IAAI,CAACrN,2BAA2B,CAAC,IAAI,CAAClF,OAAO,CAAC0R,gBAAgB,CAAC,CAAC,CAAC;QACrF,IAAIc,cAAc,GAAG,IAAI,CAACnV,cAAc,CAACxB,aAAa,KAAK0W,aAAa,CAAC1W,aAAa,IAAI,IAAI,CAACwB,cAAc,CAACJ,MAAM,KAAKsV,aAAa,CAACtV,MAAM;QAC7I,IAAIuV,cAAc,EAAE;UAClB,IAAI,CAACnV,cAAc,CAACxB,aAAa,GAAG0W,aAAa,CAAC1W,aAAa;UAC/D,IAAI,CAACwB,cAAc,CAACJ,MAAM,GAAGsV,aAAa,CAACtV,MAAM;UAIjD,IAAI,CAACgC,iBAAiB,CAACC,OAAO,CAACC,SAAS,IAAI;YAC1CA,SAAS,CAACkF,qCAAqC,CAAC,CAAC;UACnD,CAAC,CAAC;QACJ;MACF,CAAC,EAAEoO,KAAK,IAAI;QACVjV,OAAO,CAACC,IAAI,CAAC,gEAAgE,GAAG,8CAA8C,CAAC;MACjI,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOgV,KAAK,EAAE;MACdjV,OAAO,CAACC,IAAI,CAAC,sDAAsD,EAAEgV,KAAK,CAACC,KAAK,CAAC;IACnF;EACF;EACAhO,iBAAiBA,CAAA,EAAG;IAClB,OAAO,IAAI,CAAC5E,WAAW,CAAC,CAAC,GAAG,SAAS;EACvC;EAEA+R,mBAAmBA,CAAA,EAAG;IACpB,IAAIc,SAAS,GAAG,IAAI,CAACtV,cAAc,CAACxB,aAAa,IAAI,IAAI,CAACwB,cAAc,CAAC8E,aAAa,IAAI,CAAC,CAAC;IAC5F,IAAIyQ,cAAc,GAAG,EAAE;IACvB,IAAI/T,SAAS,GAAG,IAAI,CAACjC,KAAK,CAACC,YAAY,CAAC,IAAI,CAACD,KAAK,CAACE,IAAI,CAAC;IACxD,KAAK,IAAIwP,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGzN,SAAS,EAAEyN,EAAE,EAAE,EAAE;MACrC,IAAIvP,KAAK,GAAG,IAAI,CAACC,uBAAuB,CAACsP,EAAE,EAAE,IAAI,CAAC1P,KAAK,CAAC;MAIxD,IAAIG,KAAK,CAAC+G,QAAQ,EAAE;QAClB8O,cAAc,CAACtK,IAAI,CAACvL,KAAK,CAAC;MAC5B;IACF;IACA,IAAI8V,SAAS,GAAG,IAAI,CAAC7V,uBAAuB,CAAC,IAAI,CAACwC,KAAK,CAACC,mBAAmB,CAACoH,KAAK,EAAE,IAAI,CAACjK,KAAK,CAAC,CAACK,MAAM;IACrG,IAAI6V,SAAS,GAAG,IAAI,CAAC9V,uBAAuB,CAAC,IAAI,CAACwC,KAAK,CAACC,mBAAmB,CAACqH,IAAI,EAAE,IAAI,CAAClK,KAAK,CAAC;IAC7F,IAAImW,SAAS,GAAGD,SAAS,CAAC7V,MAAM,GAAG6V,SAAS,CAACxW,MAAM,GAAGuW,SAAS;IAC/D,IAAIG,MAAM,GAAG,IAAI,CAAC3V,cAAc,CAACJ,MAAM;IACvC,IAAIgW,MAAM,GAAG,IAAI,CAAC5V,cAAc,CAACxB,aAAa;IAC9C,OAAoBpB,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;MAC5C0W,KAAK,EAAE,CAACL,MAAM,CAACuD,gBAAgB,EAAEvD,MAAM,CAACwD,YAAY;IACtD,CAAC,EAAEP,cAAc,CAAC3K,GAAG,CAAC,CAACmL,CAAC,EAAE9G,EAAE,KAAkB7R,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;MACtE8H,GAAG,EAAE,GAAG,GAAGkL,EAAE;MACb0D,KAAK,EAAE,CAACL,MAAM,CAACuD,gBAAgB,EAAEvD,MAAM,CAAC0D,iBAAiB,EAAE;QACzDC,GAAG,EAAEF,CAAC,CAACnW,MAAM,GAAG0V,SAAS;QACzB7N,MAAM,EAAEsO,CAAC,CAAC9W,MAAM,GAAGqW;MACrB,CAAC;IACH,CAAC,CAAC,CAAC,EAAelY,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;MAC1C0W,KAAK,EAAE,CAACL,MAAM,CAACuD,gBAAgB,EAAEvD,MAAM,CAAC4D,qBAAqB,EAAE;QAC7DD,GAAG,EAAET,SAAS,GAAGF,SAAS;QAC1B7N,MAAM,EAAEiO,SAAS,GAAGJ;MACtB,CAAC;IACH,CAAC,CAAC,EAAelY,KAAK,CAACuI,aAAa,CAAC1J,IAAI,EAAE;MACzC0W,KAAK,EAAE,CAACL,MAAM,CAACuD,gBAAgB,EAAEvD,MAAM,CAAC6D,oBAAoB,EAAE;QAC5DF,GAAG,EAAEN,MAAM,GAAGL,SAAS;QACvB7N,MAAM,EAAEmO,MAAM,GAAGN;MACnB,CAAC;IACH,CAAC,CAAC,CAAC;EACL;EACA9O,aAAaA,CAACsB,OAAO,EAAE;IACrB,OAAO,CAAClK,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC,GAAGiK,OAAO,CAACL,MAAM,GAAGK,OAAO,CAACN,KAAK;EACrF;EACAjB,aAAaA,CAACuB,OAAO,EAAE;IACrB,OAAO,CAAClK,mBAAmB,CAAC,IAAI,CAAC2B,KAAK,CAAC1B,UAAU,CAAC,GAAGiK,OAAO,CAACxH,CAAC,GAAGwH,OAAO,CAACzH,CAAC;EAC5E;EACA6G,uBAAuBA,CAAA,EAAG;IACxB,IAAIkP,YAAY,GAAG,IAAI,CAAC7W,KAAK;MAC3BE,IAAI,GAAG2W,YAAY,CAAC3W,IAAI;MACxBD,YAAY,GAAG4W,YAAY,CAAC5W,YAAY;MACxC6W,cAAc,GAAGD,YAAY,CAACC,cAAc;MAC5ClY,uBAAuB,GAAGiY,YAAY,CAACjY,uBAAuB;MAC9DmY,YAAY,GAAGF,YAAY,CAACE,YAAY;MACxCjY,qBAAqB,GAAG+X,YAAY,CAAC/X,qBAAqB;MAC1DqJ,kBAAkB,GAAG0O,YAAY,CAAC1O,kBAAkB;IACtD,IAAI6O,qBAAqB,GAAG,IAAI,CAACvW,cAAc;MAC7C8E,aAAa,GAAGyR,qBAAqB,CAACzR,aAAa;MACnDtG,aAAa,GAAG+X,qBAAqB,CAAC/X,aAAa;MACnDoB,MAAM,GAAG2W,qBAAqB,CAAC3W,MAAM;IACvC,IAAI4W,iBAAiB,GAAG5W,MAAM;IAC9B,IAAI2O,eAAe,GAAGzJ,aAAa,GAAGtG,aAAa,GAAGoB,MAAM;IAK5D,IAAI4W,iBAAiB,GAAG/Y,uBAAuB,EAAE;MAC/C+Y,iBAAiB,GAAG,CAAC;IACvB;IACA,IAAIjI,eAAe,GAAG9Q,uBAAuB,EAAE;MAC7C8Q,eAAe,GAAG,CAAC;IACrB;IAIA,IAAIkI,oBAAoB,GAAG,CAAC;IAC5B,IAAIC,cAAc,GAAGvY,uBAAuB,IAAI,IAAI,GAAGA,uBAAuB,GAAGK,aAAa,GAAGiY,oBAAoB;IACrH,IAAIE,YAAY,GAAGtY,qBAAqB,IAAI,IAAI,GAAGA,qBAAqB,GAAGG,aAAa,GAAGiY,oBAAoB;IAC/G,IAAIG,sBAAsB,GAAGJ,iBAAiB,IAAIE,cAAc;IAChE,IAAIG,oBAAoB,GAAGtI,eAAe,IAAIoI,YAAY;IAK1D,IAAIL,YAAY,IAAI,IAAI,CAACnU,KAAK,CAACC,mBAAmB,CAACqH,IAAI,KAAKjK,YAAY,CAACC,IAAI,CAAC,GAAG,CAAC,IAAIoX,oBAAoB,IAAI,IAAI,CAAC7W,cAAc,CAAC8E,aAAa,KAAK,IAAI,CAACO,wBAAwB,EAAE;MACjL,IAAI,CAACA,wBAAwB,GAAG,IAAI,CAACrF,cAAc,CAAC8E,aAAa;MACjEwR,YAAY,CAAC;QACX/H;MACF,CAAC,CAAC;IACJ,CAAC,MAKI,IAAI8H,cAAc,IAAI,IAAI,IAAI,IAAI,CAAClU,KAAK,CAACC,mBAAmB,CAACoH,KAAK,KAAK,CAAC,IAAIoN,sBAAsB,IAAI,IAAI,CAAC5W,cAAc,CAAC8E,aAAa,KAAK,IAAI,CAACM,0BAA0B,EAAE;MAKhL,IAAI,CAACsC,kBAAkB,IAAI,IAAI,CAAC1H,cAAc,CAACiF,SAAS,KAAK,CAAC,EAAE;QAC9D,IAAI,CAACG,0BAA0B,GAAG,IAAI,CAACpF,cAAc,CAAC8E,aAAa;QACnEuR,cAAc,CAAC;UACbG;QACF,CAAC,CAAC;MACJ;IACF,CAAC,MAII;MACH,IAAI,CAACpR,0BAA0B,GAAGwR,sBAAsB,GAAG,IAAI,CAACxR,0BAA0B,GAAG,CAAC;MAC9F,IAAI,CAACC,wBAAwB,GAAGwR,oBAAoB,GAAG,IAAI,CAACxR,wBAAwB,GAAG,CAAC;IAC1F;EACF;EAMAsB,4BAA4BA,CAAA,EAAG;IAC7B,IAAImQ,qBAAqB,GAAG,IAAI,CAAC3U,KAAK,CAACC,mBAAmB;MACxDoH,KAAK,GAAGsN,qBAAqB,CAACtN,KAAK;MACnCC,IAAI,GAAGqN,qBAAqB,CAACrN,IAAI;IACnC,IAAIsN,qBAAqB,GAAG,IAAI,CAAC/W,cAAc;MAC7CJ,MAAM,GAAGmX,qBAAqB,CAACnX,MAAM;MACrCpB,aAAa,GAAGuY,qBAAqB,CAACvY,aAAa;MACnD0G,QAAQ,GAAG6R,qBAAqB,CAAC7R,QAAQ;IAC3C,IAAI1D,SAAS,GAAG,IAAI,CAACjC,KAAK,CAACC,YAAY,CAAC,IAAI,CAACD,KAAK,CAACE,IAAI,CAAC;IACxD,IAAIuX,KAAK,GAAG,KAAK;IACjB,IAAI7Y,uBAAuB,GAAGD,gCAAgC,CAAC,IAAI,CAACqB,KAAK,CAACpB,uBAAuB,CAAC;IAClG,IAAIE,qBAAqB,GAAGD,8BAA8B,CAAC,IAAI,CAACmB,KAAK,CAAClB,qBAAqB,CAAC;IAG5F,IAAImL,KAAK,GAAG,CAAC,EAAE;MACb,IAAIyN,OAAO,GAAGrX,MAAM,GAAG,IAAI,CAACD,uBAAuB,CAAC6J,KAAK,EAAE,IAAI,CAACjK,KAAK,CAAC,CAACK,MAAM;MAC7EoX,KAAK,GAAGC,OAAO,GAAG,CAAC,IAAI/R,QAAQ,GAAG,CAAC,CAAC,IAAI+R,OAAO,GAAG3Y,qBAAqB,CAACH,uBAAuB,EAAEK,aAAa,CAAC;IACjH;IAGA,IAAI,CAACwY,KAAK,IAAIvN,IAAI,IAAI,CAAC,IAAIA,IAAI,GAAGjI,SAAS,GAAG,CAAC,EAAE;MAC/C,IAAI0V,UAAU,GAAG,IAAI,CAACvX,uBAAuB,CAAC8J,IAAI,EAAE,IAAI,CAAClK,KAAK,CAAC,CAACK,MAAM,IAAIA,MAAM,GAAGpB,aAAa,CAAC;MACjGwY,KAAK,GAAGE,UAAU,GAAG,CAAC,IAAIhS,QAAQ,GAAG,CAAC,IAAIgS,UAAU,GAAG5Y,qBAAqB,CAACD,qBAAqB,EAAEG,aAAa,CAAC;IACpH;IAQA,IAAIwY,KAAK,KAAK,IAAI,CAAChW,kBAAkB,IAAI,IAAI,CAACzB,KAAK,CAACkB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC+D,gBAAgB,EAAE;MAC5F,IAAI,CAACA,gBAAgB,GAAG,IAAI;MAG5B,IAAI,CAACiG,2BAA2B,CAACiF,OAAO,CAAC;QACvCC,KAAK,EAAE;MACT,CAAC,CAAC;MACF,IAAI,CAACzG,oBAAoB,CAAC,CAAC;MAC3B;IACF,CAAC,MAAM;MACL,IAAI,CAACuB,2BAA2B,CAAC0M,QAAQ,CAAC,CAAC;IAC7C;EACF;EAOAjV,oBAAoBA,CAAC3C,KAAK,EAAE6C,mBAAmB,EAAE;IAC/C,IAAI,CAACL,kBAAkB,CAACF,OAAO,CAAC6G,KAAK,IAAI;MACvCA,KAAK,CAACzG,iBAAiB,CAACmV,QAAQ,CAAC7X,KAAK,EAAE,IAAI,CAACS,cAAc,CAACJ,MAAM,EAAE,IAAI,CAACI,cAAc,CAACxB,aAAa,EAAE,IAAI,CAAC0L,gBAAgB,EAAE,IAAI,CAACP,gBAAgB,EAAEjB,KAAK,CAACqC,sBAAsB,EAAE3I,mBAAmB,CAAC;IACzM,CAAC,CAAC;EACJ;AACF;AACAlD,eAAe,CAACmY,WAAW,GAAGxa,sBAAsB;AACpD,IAAIyV,MAAM,GAAGpW,UAAU,CAACob,MAAM,CAAC;EAC7B9E,kBAAkB,EAAE;IAClB+E,SAAS,EAAE;EACb,CAAC;EACDhF,oBAAoB,EAAE;IACpBgF,SAAS,EAAE;EACb,CAAC;EACDzG,KAAK,EAAE;IACL0G,IAAI,EAAE;EACR,CAAC;EACD3B,gBAAgB,EAAE;IAChB4B,QAAQ,EAAE,UAAU;IACpBxB,GAAG,EAAE,CAAC;IACNyB,KAAK,EAAE;EACT,CAAC;EACD5B,YAAY,EAAE;IACZ6B,MAAM,EAAE,CAAC;IACTnQ,KAAK,EAAE,EAAE;IACToQ,WAAW,EAAE,MAAM;IACnBC,WAAW,EAAE;EACf,CAAC;EACD7B,iBAAiB,EAAE;IACjB8B,IAAI,EAAE,CAAC;IACPC,eAAe,EAAE;EACnB,CAAC;EACD7B,qBAAqB,EAAE;IACrB4B,IAAI,EAAE,CAAC;IACPF,WAAW,EAAE,OAAO;IACpBC,WAAW,EAAE;EACf,CAAC;EACD1B,oBAAoB,EAAE;IACpB2B,IAAI,EAAE,CAAC;IACPF,WAAW,EAAE,KAAK;IAClBC,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AACF,eAAe3Y,eAAe","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}