@opentripplanner/core-utils 13.0.0-alpha.1 → 13.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/esm/graphql.d.js.map +1 -1
- package/esm/index.js.map +1 -1
- package/esm/itinerary.js +78 -115
- package/esm/itinerary.js.map +1 -1
- package/esm/map.js +3 -3
- package/esm/map.js.map +1 -1
- package/esm/profile.js +17 -18
- package/esm/profile.js.map +1 -1
- package/esm/query-gen.js +35 -45
- package/esm/query-gen.js.map +1 -1
- package/esm/query.js +135 -191
- package/esm/query.js.map +1 -1
- package/esm/route.js +74 -97
- package/esm/route.js.map +1 -1
- package/esm/storage.js +4 -5
- package/esm/storage.js.map +1 -1
- package/esm/suspense.js +1 -3
- package/esm/suspense.js.map +1 -1
- package/esm/time.js +13 -17
- package/esm/time.js.map +1 -1
- package/esm/ui.js +0 -5
- package/esm/ui.js.map +1 -1
- package/lib/graphql.d.js.map +1 -1
- package/lib/index.js +3 -19
- package/lib/index.js.map +1 -1
- package/lib/itinerary.js +114 -199
- package/lib/itinerary.js.map +1 -1
- package/lib/map.d.ts +1 -1
- package/lib/map.d.ts.map +1 -1
- package/lib/map.js +9 -20
- package/lib/map.js.map +1 -1
- package/lib/profile.js +17 -19
- package/lib/profile.js.map +1 -1
- package/lib/query-gen.d.ts +4 -4
- package/lib/query-gen.d.ts.map +1 -1
- package/lib/query-gen.js +34 -45
- package/lib/query-gen.js.map +1 -1
- package/lib/query-params.jsx +893 -0
- package/lib/query.js +66 -118
- package/lib/query.js.map +1 -1
- package/lib/route.js +73 -101
- package/lib/route.js.map +1 -1
- package/lib/storage.js +6 -11
- package/lib/storage.js.map +1 -1
- package/lib/suspense.d.ts +1 -1
- package/lib/suspense.d.ts.map +1 -1
- package/lib/suspense.js +3 -9
- package/lib/suspense.js.map +1 -1
- package/lib/time.js +19 -38
- package/lib/time.js.map +1 -1
- package/lib/ui.js +1 -8
- package/lib/ui.js.map +1 -1
- package/package.json +7 -8
- package/src/query-params.jsx +893 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/esm/query-params.js +0 -786
- package/esm/query-params.js.map +0 -1
- package/lib/query-params.js +0 -756
- package/lib/query-params.js.map +0 -1
- /package/{src/query-params.js → esm/query-params.jsx} +0 -0
package/esm/query-gen.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
3
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
4
|
-
|
|
5
|
-
function ownKeys(
|
|
6
|
-
|
|
7
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
8
|
-
|
|
4
|
+
var _excluded = ["from", "modeSettings", "to"];
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
7
|
import { print } from "graphql";
|
|
10
8
|
var DefaultPlanQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "Plan" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "arriveBy" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "banned" } }, type: { kind: "NamedType", name: { kind: "Name", value: "InputBanned" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "bikeReluctance" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "carReluctance" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "date" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "fromPlace" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "modes" } }, type: { kind: "ListType", type: { kind: "NamedType", name: { kind: "Name", value: "TransportMode" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "numItineraries" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Int" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "preferred" } }, type: { kind: "NamedType", name: { kind: "Name", value: "InputPreferred" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "time" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "toPlace" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "unpreferred" } }, type: { kind: "NamedType", name: { kind: "Name", value: "InputUnpreferred" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "walkReluctance" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "walkSpeed" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Float" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "wheelchair" } }, type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "plan" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "arriveBy" }, value: { kind: "Variable", name: { kind: "Name", value: "arriveBy" } } }, { kind: "Argument", name: { kind: "Name", value: "banned" }, value: { kind: "Variable", name: { kind: "Name", value: "banned" } } }, { kind: "Argument", name: { kind: "Name", value: "bikeReluctance" }, value: { kind: "Variable", name: { kind: "Name", value: "bikeReluctance" } } }, { kind: "Argument", name: { kind: "Name", value: "carReluctance" }, value: { kind: "Variable", name: { kind: "Name", value: "carReluctance" } } }, { kind: "Argument", name: { kind: "Name", value: "date" }, value: { kind: "Variable", name: { kind: "Name", value: "date" } } }, { kind: "Argument", name: { kind: "Name", value: "fromPlace" }, value: { kind: "Variable", name: { kind: "Name", value: "fromPlace" } } }, { kind: "Argument", name: { kind: "Name", value: "locale" }, value: { kind: "StringValue", value: "en", block: false } }, { kind: "Argument", name: { kind: "Name", value: "numItineraries" }, value: { kind: "Variable", name: { kind: "Name", value: "numItineraries" } } }, { kind: "Argument", name: { kind: "Name", value: "preferred" }, value: { kind: "Variable", name: { kind: "Name", value: "preferred" } } }, { kind: "Argument", name: { kind: "Name", value: "time" }, value: { kind: "Variable", name: { kind: "Name", value: "time" } } }, { kind: "Argument", name: { kind: "Name", value: "toPlace" }, value: { kind: "Variable", name: { kind: "Name", value: "toPlace" } } }, { kind: "Argument", name: { kind: "Name", value: "transportModes" }, value: { kind: "Variable", name: { kind: "Name", value: "modes" } } }, { kind: "Argument", name: { kind: "Name", value: "unpreferred" }, value: { kind: "Variable", name: { kind: "Name", value: "unpreferred" } } }, { kind: "Argument", name: { kind: "Name", value: "walkReluctance" }, value: { kind: "Variable", name: { kind: "Name", value: "walkReluctance" } } }, { kind: "Argument", name: { kind: "Name", value: "walkSpeed" }, value: { kind: "Variable", name: { kind: "Name", value: "walkSpeed" } } }, { kind: "Argument", name: { kind: "Name", value: "wheelchair" }, value: { kind: "Variable", name: { kind: "Name", value: "wheelchair" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "itineraries" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "accessibilityScore" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "duration" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "endTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "legs" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "accessibilityScore" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "agency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "id" }, name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "timezone" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "url" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "arrivalDelay" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "departureDelay" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "distance" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "dropOffBookingInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "contactInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "bookingUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "infoUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "phoneNumber" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "earliestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "latestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "message" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "dropoffType" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "duration" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "endTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "fareProducts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "product" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "__typename" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "medium" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "riderCategory" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }] } }, { kind: "InlineFragment", typeCondition: { kind: "NamedType", name: { kind: "Name", value: "DefaultFareProduct" } }, directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "price" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "digits" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", name: { kind: "Name", value: "from" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rentalVehicle" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "network" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "vertexType" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "headsign" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "interlineWithPreviousLeg" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "intermediateStops" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "locationType" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "stopCode" }, name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "stopId" }, name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "legGeometry" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "length" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "points" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "mode" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "pickupBookingInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "contactInfo" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "bookingUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "infoUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "phoneNumber" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "earliestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "latestBookingTime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "daysPrior" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "time" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "message" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "pickupType" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "realTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "realtimeState" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rentedBike" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rideHailingEstimate" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "arrival" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "maxPrice" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "minPrice" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "amount" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "currency" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "provider" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "route" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "color" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "id" }, name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "longName" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "shortName" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "textColor" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "type" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "startTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "steps" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "absoluteDirection" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "area" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "distance" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "elevationProfile" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "distance" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "elevation" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "relativeDirection" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "stayOn" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "streetName" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "to" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "name" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "rentalVehicle" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "network" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alerts" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "alertDescriptionText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertHeaderText" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "alertUrl" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "effectiveStartDate" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lat" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "lon" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "vertexType" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "transitLeg" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "trip" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "arrivalStoptime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stopPosition" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "departureStoptime" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "stop" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "stopPosition" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "gtfsId" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }, { kind: "Field", name: { kind: "Name", value: "startTime" }, arguments: [], directives: [] }, { kind: "Field", alias: { kind: "Name", value: "transfers" }, name: { kind: "Name", value: "numberOfTransfers" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "waitingTime" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "walkTime" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "routingErrors" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "code" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "description" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "inputField" }, arguments: [], directives: [] }] } }] } }] } }], loc: { start: 0, end: 5493, source: { body: "query Plan(\n $arriveBy: Boolean\n $banned: InputBanned\n $bikeReluctance: Float\n $carReluctance: Float\n $date: String\n $fromPlace: String!\n $modes: [TransportMode]\n $numItineraries: Int\n $preferred: InputPreferred\n $time: String\n $toPlace: String!\n $unpreferred: InputUnpreferred\n $walkReluctance: Float\n $walkSpeed: Float\n $wheelchair: Boolean\n) {\n plan(\n arriveBy: $arriveBy\n banned: $banned\n bikeReluctance: $bikeReluctance\n carReluctance: $carReluctance\n date: $date\n fromPlace: $fromPlace\n # Currently only supporting EN locale, used for times and text\n locale: \"en\"\n numItineraries: $numItineraries\n preferred: $preferred\n time: $time\n toPlace: $toPlace\n transportModes: $modes\n unpreferred: $unpreferred\n walkReluctance: $walkReluctance\n walkSpeed: $walkSpeed\n wheelchair: $wheelchair\n ) {\n itineraries {\n accessibilityScore\n duration\n endTime\n legs {\n accessibilityScore\n agency {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n gtfsId\n id: gtfsId\n name\n timezone\n url\n }\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n arrivalDelay\n departureDelay\n distance\n dropOffBookingInfo {\n contactInfo {\n bookingUrl\n infoUrl\n phoneNumber\n }\n earliestBookingTime {\n daysPrior\n time\n }\n latestBookingTime {\n daysPrior\n time\n }\n message\n }\n dropoffType\n duration\n endTime\n fareProducts {\n id\n product {\n __typename\n id\n medium {\n id\n name\n }\n name\n riderCategory {\n id\n name\n }\n ... on DefaultFareProduct {\n price {\n amount\n currency {\n code\n digits\n }\n }\n }\n }\n }\n from {\n lat\n lon\n name\n rentalVehicle {\n id\n network\n }\n stop {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n code\n gtfsId\n id\n lat\n lon\n }\n vertexType\n }\n headsign\n interlineWithPreviousLeg\n intermediateStops {\n lat\n locationType\n lon\n name\n stopCode: code\n stopId: id\n }\n legGeometry {\n length\n points\n }\n mode\n pickupBookingInfo {\n contactInfo {\n bookingUrl\n infoUrl\n phoneNumber\n }\n earliestBookingTime {\n daysPrior\n time\n }\n latestBookingTime {\n daysPrior\n time\n }\n message\n }\n pickupType\n realTime\n realtimeState\n rentedBike\n rideHailingEstimate {\n arrival\n maxPrice {\n amount\n currency {\n code\n }\n }\n minPrice {\n amount\n currency {\n code\n }\n }\n provider {\n id\n }\n }\n route {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n color\n gtfsId\n id: gtfsId\n longName\n shortName\n textColor\n type\n }\n startTime\n steps {\n absoluteDirection\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n area\n distance\n elevationProfile {\n distance\n elevation\n }\n lat\n lon\n relativeDirection\n stayOn\n streetName\n }\n to {\n lat\n lon\n name\n rentalVehicle {\n id\n network\n }\n stop {\n alerts {\n alertDescriptionText\n alertHeaderText\n alertUrl\n effectiveStartDate\n id\n }\n code\n gtfsId\n id\n lat\n lon\n }\n vertexType\n }\n transitLeg\n trip {\n arrivalStoptime {\n stop {\n gtfsId\n id\n }\n stopPosition\n }\n departureStoptime {\n stop {\n gtfsId\n id\n }\n stopPosition\n }\n gtfsId\n id\n }\n }\n startTime\n transfers: numberOfTransfers\n waitingTime\n walkTime\n }\n routingErrors {\n code\n description\n inputField\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* Mode Settings can contain additional modes to add to the query,
|
|
14
11
|
* this function extracts those additional modes from the settings
|
|
@@ -23,29 +20,26 @@ export function extractAdditionalModes(modeSettings, enabledModes) {
|
|
|
23
20
|
return m.mode;
|
|
24
21
|
}).includes(cur.applicableMode)) {
|
|
25
22
|
return prev;
|
|
26
|
-
}
|
|
27
|
-
|
|
23
|
+
}
|
|
28
24
|
|
|
25
|
+
// In checkboxes (or submode checkboxes), mode must be enabled and have a transport mode in it
|
|
29
26
|
if ((cur.type === "CHECKBOX" || cur.type === "SUBMODE") && cur.addTransportMode && cur.value) {
|
|
30
27
|
var newTransportModes = Array.isArray(cur.addTransportMode) ? cur.addTransportMode : [cur.addTransportMode];
|
|
31
28
|
return [].concat(_toConsumableArray(prev), _toConsumableArray(newTransportModes));
|
|
32
29
|
}
|
|
33
|
-
|
|
34
30
|
if (cur.type === "DROPDOWN") {
|
|
35
31
|
var _cur$options$find;
|
|
36
|
-
|
|
37
32
|
var transportMode = (_cur$options$find = cur.options.find(function (o) {
|
|
38
33
|
return o.value === cur.value;
|
|
39
34
|
})) === null || _cur$options$find === void 0 ? void 0 : _cur$options$find.addTransportMode;
|
|
40
|
-
|
|
41
35
|
if (transportMode) {
|
|
42
36
|
return [].concat(_toConsumableArray(prev), [transportMode]);
|
|
43
37
|
}
|
|
44
38
|
}
|
|
45
|
-
|
|
46
39
|
return prev;
|
|
47
40
|
}, []);
|
|
48
41
|
}
|
|
42
|
+
|
|
49
43
|
/**
|
|
50
44
|
* Generates every possible mathematical subset of the input TransportModes.
|
|
51
45
|
* Uses code from:
|
|
@@ -53,11 +47,12 @@ export function extractAdditionalModes(modeSettings, enabledModes) {
|
|
|
53
47
|
* @param array Array of input transport modes
|
|
54
48
|
* @returns 2D array representing every possible subset of transport modes from input
|
|
55
49
|
*/
|
|
56
|
-
|
|
57
50
|
function combinations(array) {
|
|
58
51
|
if (!array) return [];
|
|
59
|
-
return (
|
|
60
|
-
|
|
52
|
+
return (
|
|
53
|
+
// eslint-disable-next-line no-bitwise
|
|
54
|
+
new Array(1 << array.length).fill(null)
|
|
55
|
+
// eslint-disable-next-line no-bitwise
|
|
61
56
|
.map(function (e1, i) {
|
|
62
57
|
return array.filter(function (e2, j) {
|
|
63
58
|
return i & 1 << j;
|
|
@@ -65,12 +60,11 @@ function combinations(array) {
|
|
|
65
60
|
})
|
|
66
61
|
);
|
|
67
62
|
}
|
|
63
|
+
|
|
68
64
|
/**
|
|
69
65
|
* This constant maps all the transport mode to a broader mode type,
|
|
70
66
|
* which is used to determine the valid combinations of modes used in query generation.
|
|
71
67
|
*/
|
|
72
|
-
|
|
73
|
-
|
|
74
68
|
export var SIMPLIFICATIONS = {
|
|
75
69
|
AIRPLANE: "TRANSIT",
|
|
76
70
|
BICYCLE: "PERSONAL",
|
|
@@ -90,8 +84,9 @@ export var SIMPLIFICATIONS = {
|
|
|
90
84
|
TRAM: "TRANSIT",
|
|
91
85
|
TRANSIT: "TRANSIT",
|
|
92
86
|
WALK: "WALK"
|
|
93
|
-
};
|
|
87
|
+
};
|
|
94
88
|
|
|
89
|
+
// Inclusion of "TRANSIT" alone automatically implies "WALK" in OTP
|
|
95
90
|
var VALID_COMBOS = [["WALK"], ["PERSONAL"], ["TRANSIT", "SHARED"], ["WALK", "SHARED"], ["TRANSIT"], ["TRANSIT", "PERSONAL"], ["TRANSIT", "CAR"]];
|
|
96
91
|
var BANNED_TOGETHER = ["SCOOTER", "BICYCLE", "CAR"];
|
|
97
92
|
export var TRANSIT_SUBMODES = Object.keys(SIMPLIFICATIONS).filter(function (mode) {
|
|
@@ -100,14 +95,15 @@ export var TRANSIT_SUBMODES = Object.keys(SIMPLIFICATIONS).filter(function (mode
|
|
|
100
95
|
export var TRANSIT_SUBMODES_AND_TRANSIT = Object.keys(SIMPLIFICATIONS).filter(function (mode) {
|
|
101
96
|
return SIMPLIFICATIONS[mode] === "TRANSIT";
|
|
102
97
|
});
|
|
103
|
-
|
|
104
98
|
function isCombinationValid(combo, queryTransitSubmodes) {
|
|
105
|
-
if (combo.length === 0) return false;
|
|
99
|
+
if (combo.length === 0) return false;
|
|
106
100
|
|
|
101
|
+
// All current qualifiers currently simplify to "SHARED"
|
|
107
102
|
var simplifiedModes = Array.from(new Set(combo.map(function (c) {
|
|
108
103
|
return c.qualifier ? "SHARED" : SIMPLIFICATIONS[c.mode];
|
|
109
|
-
})));
|
|
104
|
+
})));
|
|
110
105
|
|
|
106
|
+
// Ensure that if we have one transit mode, then we include ALL transit modes
|
|
111
107
|
if (simplifiedModes.includes("TRANSIT")) {
|
|
112
108
|
// Don't allow TRANSIT along with any other submodes
|
|
113
109
|
if (queryTransitSubmodes.length && combo.find(function (c) {
|
|
@@ -115,20 +111,18 @@ function isCombinationValid(combo, queryTransitSubmodes) {
|
|
|
115
111
|
})) {
|
|
116
112
|
return false;
|
|
117
113
|
}
|
|
118
|
-
|
|
119
114
|
if (combo.reduce(function (prev, cur) {
|
|
120
115
|
if (queryTransitSubmodes.includes(cur.mode)) {
|
|
121
116
|
return prev - 1;
|
|
122
117
|
}
|
|
123
|
-
|
|
124
118
|
return prev;
|
|
125
119
|
}, queryTransitSubmodes.length) !== 0) {
|
|
126
120
|
return false;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
121
|
+
}
|
|
122
|
+
// Continue to the other checks
|
|
123
|
+
}
|
|
131
124
|
|
|
125
|
+
// OTP doesn't support multiple non-walk modes
|
|
132
126
|
if (BANNED_TOGETHER.filter(function (m) {
|
|
133
127
|
return combo.find(function (c) {
|
|
134
128
|
return c.mode === m;
|
|
@@ -136,7 +130,6 @@ function isCombinationValid(combo, queryTransitSubmodes) {
|
|
|
136
130
|
}).length > 1) {
|
|
137
131
|
return false;
|
|
138
132
|
}
|
|
139
|
-
|
|
140
133
|
return !!VALID_COMBOS.find(function (vc) {
|
|
141
134
|
return simplifiedModes.every(function (m) {
|
|
142
135
|
return vc.includes(m);
|
|
@@ -145,17 +138,17 @@ function isCombinationValid(combo, queryTransitSubmodes) {
|
|
|
145
138
|
});
|
|
146
139
|
});
|
|
147
140
|
}
|
|
141
|
+
|
|
148
142
|
/**
|
|
149
143
|
* Generates a list of queries for OTP to get a comprehensive
|
|
150
144
|
* set of results based on the modes input.
|
|
151
145
|
* @param params OTP Query Params
|
|
152
146
|
* @returns Set of parameters to generate queries
|
|
153
147
|
*/
|
|
154
|
-
|
|
155
|
-
|
|
156
148
|
export function generateCombinations(params) {
|
|
157
|
-
var completeModeList = [].concat(_toConsumableArray(extractAdditionalModes(params.modeSettings, params.modes)), _toConsumableArray(params.modes));
|
|
149
|
+
var completeModeList = [].concat(_toConsumableArray(extractAdditionalModes(params.modeSettings, params.modes)), _toConsumableArray(params.modes));
|
|
158
150
|
|
|
151
|
+
// List of the transit *submodes* that are included in the input params
|
|
159
152
|
var queryTransitSubmodes = completeModeList.filter(function (mode) {
|
|
160
153
|
return TRANSIT_SUBMODES.includes(mode.mode);
|
|
161
154
|
}).map(function (mode) {
|
|
@@ -169,42 +162,39 @@ export function generateCombinations(params) {
|
|
|
169
162
|
});
|
|
170
163
|
});
|
|
171
164
|
}
|
|
165
|
+
|
|
172
166
|
/**
|
|
173
167
|
* Generates a query for OTP GraphQL API based on parameters.
|
|
174
168
|
* @param param0 OTP2 Parameters for the query
|
|
175
169
|
* @param planQuery Override the default query for OTP
|
|
176
170
|
* @returns A fully formed query+variables ready to be sent to GraphQL backend
|
|
177
171
|
*/
|
|
178
|
-
|
|
179
172
|
export function generateOtp2Query(otpQueryParams) {
|
|
180
173
|
var planQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DefaultPlanQuery;
|
|
181
|
-
|
|
182
174
|
var from = otpQueryParams.from,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
175
|
+
modeSettings = otpQueryParams.modeSettings,
|
|
176
|
+
to = otpQueryParams.to,
|
|
177
|
+
otherOtpQueryParams = _objectWithoutProperties(otpQueryParams, _excluded);
|
|
187
178
|
|
|
179
|
+
// This extracts the values from the mode settings to key value pairs
|
|
188
180
|
var modeSettingValues = modeSettings.reduce(function (prev, cur) {
|
|
189
181
|
if (cur.type === "SLIDER" && cur.inverseKey) {
|
|
190
182
|
prev[cur.inverseKey] = cur.high - cur.value + cur.low;
|
|
191
183
|
}
|
|
184
|
+
prev[cur.key] = cur.value;
|
|
192
185
|
|
|
193
|
-
|
|
194
|
-
|
|
186
|
+
// If we assign a value on true, return the value (or null) instead of a boolean.
|
|
195
187
|
if (cur.type === "CHECKBOX" && cur.truthValue) {
|
|
196
188
|
var _cur$falseValue;
|
|
197
|
-
|
|
198
189
|
prev[cur.key] = cur.value === true ? cur.truthValue : (_cur$falseValue = cur.falseValue) !== null && _cur$falseValue !== void 0 ? _cur$falseValue : null;
|
|
199
190
|
}
|
|
200
|
-
|
|
201
191
|
return prev;
|
|
202
192
|
}, {});
|
|
203
193
|
var bikeReluctance = modeSettingValues.bikeReluctance,
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
194
|
+
carReluctance = modeSettingValues.carReluctance,
|
|
195
|
+
walkReluctance = modeSettingValues.walkReluctance,
|
|
196
|
+
walkSpeed = modeSettingValues.walkSpeed,
|
|
197
|
+
wheelchair = modeSettingValues.wheelchair;
|
|
208
198
|
return {
|
|
209
199
|
query: print(planQuery),
|
|
210
200
|
variables: _objectSpread(_objectSpread({}, otherOtpQueryParams), {}, {
|
package/esm/query-gen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/query-gen.ts"],"names":["print","extractAdditionalModes","modeSettings","enabledModes","reduce","prev","cur","map","m","mode","includes","applicableMode","type","addTransportMode","value","newTransportModes","Array","isArray","transportMode","options","find","o","combinations","array","length","fill","e1","i","filter","e2","j","SIMPLIFICATIONS","AIRPLANE","BICYCLE","BUS","CABLE_CAR","CAR","FERRY","FLEX","FUNICULAR","GONDOLA","RAIL","MONORAIL","SCOOTER","SUBWAY","TROLLEYBUS","TRAM","TRANSIT","WALK","VALID_COMBOS","BANNED_TOGETHER","TRANSIT_SUBMODES","Object","keys","TRANSIT_SUBMODES_AND_TRANSIT","isCombinationValid","combo","queryTransitSubmodes","simplifiedModes","from","Set","c","qualifier","vc","every","generateCombinations","params","completeModeList","modes","generateOtp2Query","otpQueryParams","planQuery","DefaultPlanQuery","to","otherOtpQueryParams","modeSettingValues","inverseKey","high","low","key","truthValue","falseValue","bikeReluctance","carReluctance","walkReluctance","walkSpeed","wheelchair","query","variables","fromPlace","name","lat","lon","toPlace"],"mappings":"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","sourcesContent":["import { LonLatOutput } from \"@conveyal/lonlat\";\nimport { print } from \"graphql\";\nimport {\n ModeSetting,\n ModeSettingValues,\n TransportMode\n} from \"@opentripplanner/types\";\n\nimport DefaultPlanQuery from \"./planQuery.graphql\";\n\ntype InputBanned = {\n routes?: string;\n agencies?: string;\n trips?: string;\n stops?: string;\n stopsHard?: string;\n};\n\ntype InputPreferred = {\n routes?: string;\n agencies?: string;\n unpreferredCost?: string;\n};\n\ntype OTPQueryParams = {\n arriveBy: boolean;\n date?: string;\n from: LonLatOutput & { name?: string };\n modes: TransportMode[];\n modeSettings: ModeSetting[];\n time?: string;\n numItineraries?: number;\n to: LonLatOutput & { name?: string };\n banned?: InputBanned;\n preferred?: InputPreferred;\n unpreferred?: InputPreferred;\n};\n\ntype GraphQLQuery = {\n query: string;\n variables: Record<string, unknown>;\n};\n\n/**\n * Mode Settings can contain additional modes to add to the query,\n * this function extracts those additional modes from the settings\n * and returns them in an array.\n * @param modeSettings List of mode settings with values populated\n * @returns Additional transport modes to add to query\n */\nexport function extractAdditionalModes(\n modeSettings: ModeSetting[],\n enabledModes: TransportMode[]\n): TransportMode[] {\n return modeSettings.reduce<TransportMode[]>((prev, cur) => {\n // First, ensure that the mode associated with this setting is even enabled\n if (!enabledModes.map(m => m.mode).includes(cur.applicableMode)) {\n return prev;\n }\n\n // In checkboxes (or submode checkboxes), mode must be enabled and have a transport mode in it\n if (\n (cur.type === \"CHECKBOX\" || cur.type === \"SUBMODE\") &&\n cur.addTransportMode &&\n cur.value\n ) {\n const newTransportModes = Array.isArray(cur.addTransportMode)\n ? cur.addTransportMode\n : [cur.addTransportMode];\n return [...prev, ...newTransportModes];\n }\n if (cur.type === \"DROPDOWN\") {\n const transportMode = cur.options.find(o => o.value === cur.value)\n ?.addTransportMode;\n if (transportMode) {\n return [...prev, transportMode];\n }\n }\n return prev;\n }, []);\n}\n\n/**\n * Generates every possible mathematical subset of the input TransportModes.\n * Uses code from:\n * https://stackoverflow.com/questions/5752002/find-all-possible-subset-combos-in-an-array\n * @param array Array of input transport modes\n * @returns 2D array representing every possible subset of transport modes from input\n */\nfunction combinations(array: TransportMode[]): TransportMode[][] {\n if (!array) return [];\n return (\n // eslint-disable-next-line no-bitwise\n new Array(1 << array.length)\n .fill(null)\n // eslint-disable-next-line no-bitwise\n .map((e1, i) => array.filter((e2, j) => i & (1 << j)))\n );\n}\n\n/**\n * This constant maps all the transport mode to a broader mode type,\n * which is used to determine the valid combinations of modes used in query generation.\n */\nexport const SIMPLIFICATIONS = {\n AIRPLANE: \"TRANSIT\",\n BICYCLE: \"PERSONAL\",\n BUS: \"TRANSIT\",\n CABLE_CAR: \"TRANSIT\",\n CAR: \"CAR\",\n FERRY: \"TRANSIT\",\n FLEX: \"SHARED\", // TODO: this allows FLEX+WALK. Is this reasonable?\n FUNICULAR: \"TRANSIT\",\n GONDOLA: \"TRANSIT\",\n RAIL: \"TRANSIT\",\n MONORAIL: \"TRANSIT\",\n SCOOTER: \"PERSONAL\",\n SUBWAY: \"TRANSIT\",\n TROLLEYBUS: \"TRANSIT\",\n TRAM: \"TRANSIT\",\n TRANSIT: \"TRANSIT\",\n WALK: \"WALK\"\n};\n\n// Inclusion of \"TRANSIT\" alone automatically implies \"WALK\" in OTP\nconst VALID_COMBOS = [\n [\"WALK\"],\n [\"PERSONAL\"],\n [\"TRANSIT\", \"SHARED\"],\n [\"WALK\", \"SHARED\"],\n [\"TRANSIT\"],\n [\"TRANSIT\", \"PERSONAL\"],\n [\"TRANSIT\", \"CAR\"]\n];\n\nconst BANNED_TOGETHER = [\"SCOOTER\", \"BICYCLE\", \"CAR\"];\n\nexport const TRANSIT_SUBMODES = Object.keys(SIMPLIFICATIONS).filter(\n mode => SIMPLIFICATIONS[mode] === \"TRANSIT\" && mode !== \"TRANSIT\"\n);\nexport const TRANSIT_SUBMODES_AND_TRANSIT = Object.keys(SIMPLIFICATIONS).filter(\n mode => SIMPLIFICATIONS[mode] === \"TRANSIT\"\n);\n\nfunction isCombinationValid(\n combo: TransportMode[],\n queryTransitSubmodes: string[]\n): boolean {\n if (combo.length === 0) return false;\n\n // All current qualifiers currently simplify to \"SHARED\"\n const simplifiedModes = Array.from(\n new Set(combo.map(c => (c.qualifier ? \"SHARED\" : SIMPLIFICATIONS[c.mode])))\n );\n\n // Ensure that if we have one transit mode, then we include ALL transit modes\n if (simplifiedModes.includes(\"TRANSIT\")) {\n // Don't allow TRANSIT along with any other submodes\n if (queryTransitSubmodes.length && combo.find(c => c.mode === \"TRANSIT\")) {\n return false;\n }\n\n if (\n combo.reduce((prev, cur) => {\n if (queryTransitSubmodes.includes(cur.mode)) {\n return prev - 1;\n }\n return prev;\n }, queryTransitSubmodes.length) !== 0\n ) {\n return false;\n }\n // Continue to the other checks\n }\n\n // OTP doesn't support multiple non-walk modes\n if (BANNED_TOGETHER.filter(m => combo.find(c => c.mode === m)).length > 1) {\n return false;\n }\n\n return !!VALID_COMBOS.find(\n vc =>\n simplifiedModes.every(m => vc.includes(m)) &&\n vc.every(m => simplifiedModes.includes(m))\n );\n}\n\n/**\n * Generates a list of queries for OTP to get a comprehensive\n * set of results based on the modes input.\n * @param params OTP Query Params\n * @returns Set of parameters to generate queries\n */\nexport function generateCombinations(params: OTPQueryParams): OTPQueryParams[] {\n const completeModeList = [\n ...extractAdditionalModes(params.modeSettings, params.modes),\n ...params.modes\n ];\n\n // List of the transit *submodes* that are included in the input params\n const queryTransitSubmodes = completeModeList\n .filter(mode => TRANSIT_SUBMODES.includes(mode.mode))\n .map(mode => mode.mode);\n\n return combinations(completeModeList)\n .filter(combo => isCombinationValid(combo, queryTransitSubmodes))\n .map(combo => ({ ...params, modes: combo }));\n}\n\n/**\n * Generates a query for OTP GraphQL API based on parameters.\n * @param param0 OTP2 Parameters for the query\n * @param planQuery Override the default query for OTP\n * @returns A fully formed query+variables ready to be sent to GraphQL backend\n */\nexport function generateOtp2Query(\n otpQueryParams: OTPQueryParams,\n planQuery = DefaultPlanQuery\n): GraphQLQuery {\n const { from, modeSettings, to, ...otherOtpQueryParams } = otpQueryParams;\n\n // This extracts the values from the mode settings to key value pairs\n const modeSettingValues = modeSettings.reduce((prev, cur) => {\n if (cur.type === \"SLIDER\" && cur.inverseKey) {\n prev[cur.inverseKey] = cur.high - cur.value + cur.low;\n }\n prev[cur.key] = cur.value;\n\n // If we assign a value on true, return the value (or null) instead of a boolean.\n if (cur.type === \"CHECKBOX\" && cur.truthValue) {\n prev[cur.key] =\n cur.value === true ? cur.truthValue : cur.falseValue ?? null;\n }\n return prev;\n }, {}) as ModeSettingValues;\n\n const {\n bikeReluctance,\n carReluctance,\n walkReluctance,\n walkSpeed,\n wheelchair\n } = modeSettingValues;\n\n return {\n query: print(planQuery),\n variables: {\n ...otherOtpQueryParams,\n bikeReluctance,\n carReluctance,\n fromPlace: `${from.name}::${from.lat},${from.lon}`,\n toPlace: `${to.name}::${to.lat},${to.lon}`,\n walkReluctance,\n walkSpeed,\n wheelchair\n }\n };\n}\n"],"file":"query-gen.js"}
|
|
1
|
+
{"version":3,"file":"query-gen.js","names":["print","DefaultPlanQuery","kind","definitions","operation","name","value","variableDefinitions","variable","type","directives","selectionSet","selections","arguments","block","alias","typeCondition","loc","start","end","source","body","locationOffset","line","column","extractAdditionalModes","modeSettings","enabledModes","reduce","prev","cur","map","m","mode","includes","applicableMode","addTransportMode","newTransportModes","Array","isArray","concat","_toConsumableArray","_cur$options$find","transportMode","options","find","o","combinations","array","length","fill","e1","i","filter","e2","j","SIMPLIFICATIONS","AIRPLANE","BICYCLE","BUS","CABLE_CAR","CAR","FERRY","FLEX","FUNICULAR","GONDOLA","RAIL","MONORAIL","SCOOTER","SUBWAY","TROLLEYBUS","TRAM","TRANSIT","WALK","VALID_COMBOS","BANNED_TOGETHER","TRANSIT_SUBMODES","Object","keys","TRANSIT_SUBMODES_AND_TRANSIT","isCombinationValid","combo","queryTransitSubmodes","simplifiedModes","from","Set","c","qualifier","vc","every","generateCombinations","params","completeModeList","modes","_objectSpread","generateOtp2Query","otpQueryParams","planQuery","undefined","to","otherOtpQueryParams","_objectWithoutProperties","_excluded","modeSettingValues","inverseKey","high","low","key","truthValue","_cur$falseValue","falseValue","bikeReluctance","carReluctance","walkReluctance","walkSpeed","wheelchair","query","variables","fromPlace","lat","lon","toPlace"],"sources":["../src/query-gen.ts"],"sourcesContent":["import { LonLatOutput } from \"@conveyal/lonlat\";\nimport { print } from \"graphql\";\nimport {\n ModeSetting,\n ModeSettingValues,\n TransportMode\n} from \"@opentripplanner/types\";\n\nimport DefaultPlanQuery from \"./planQuery.graphql\";\n\ntype InputBanned = {\n routes?: string;\n agencies?: string;\n trips?: string;\n stops?: string;\n stopsHard?: string;\n};\n\ntype InputPreferred = {\n routes?: string;\n agencies?: string;\n unpreferredCost?: string;\n};\n\ntype OTPQueryParams = {\n arriveBy: boolean;\n date?: string;\n from: LonLatOutput & { name?: string };\n modes: TransportMode[];\n modeSettings: ModeSetting[];\n time?: string;\n numItineraries?: number;\n to: LonLatOutput & { name?: string };\n banned?: InputBanned;\n preferred?: InputPreferred;\n unpreferred?: InputPreferred;\n};\n\ntype GraphQLQuery = {\n query: string;\n variables: Record<string, unknown>;\n};\n\n/**\n * Mode Settings can contain additional modes to add to the query,\n * this function extracts those additional modes from the settings\n * and returns them in an array.\n * @param modeSettings List of mode settings with values populated\n * @returns Additional transport modes to add to query\n */\nexport function extractAdditionalModes(\n modeSettings: ModeSetting[],\n enabledModes: TransportMode[]\n): TransportMode[] {\n return modeSettings.reduce<TransportMode[]>((prev, cur) => {\n // First, ensure that the mode associated with this setting is even enabled\n if (!enabledModes.map(m => m.mode).includes(cur.applicableMode)) {\n return prev;\n }\n\n // In checkboxes (or submode checkboxes), mode must be enabled and have a transport mode in it\n if (\n (cur.type === \"CHECKBOX\" || cur.type === \"SUBMODE\") &&\n cur.addTransportMode &&\n cur.value\n ) {\n const newTransportModes = Array.isArray(cur.addTransportMode)\n ? cur.addTransportMode\n : [cur.addTransportMode];\n return [...prev, ...newTransportModes];\n }\n if (cur.type === \"DROPDOWN\") {\n const transportMode = cur.options.find(o => o.value === cur.value)\n ?.addTransportMode;\n if (transportMode) {\n return [...prev, transportMode];\n }\n }\n return prev;\n }, []);\n}\n\n/**\n * Generates every possible mathematical subset of the input TransportModes.\n * Uses code from:\n * https://stackoverflow.com/questions/5752002/find-all-possible-subset-combos-in-an-array\n * @param array Array of input transport modes\n * @returns 2D array representing every possible subset of transport modes from input\n */\nfunction combinations(array: TransportMode[]): TransportMode[][] {\n if (!array) return [];\n return (\n // eslint-disable-next-line no-bitwise\n new Array(1 << array.length)\n .fill(null)\n // eslint-disable-next-line no-bitwise\n .map((e1, i) => array.filter((e2, j) => i & (1 << j)))\n );\n}\n\n/**\n * This constant maps all the transport mode to a broader mode type,\n * which is used to determine the valid combinations of modes used in query generation.\n */\nexport const SIMPLIFICATIONS = {\n AIRPLANE: \"TRANSIT\",\n BICYCLE: \"PERSONAL\",\n BUS: \"TRANSIT\",\n CABLE_CAR: \"TRANSIT\",\n CAR: \"CAR\",\n FERRY: \"TRANSIT\",\n FLEX: \"SHARED\", // TODO: this allows FLEX+WALK. Is this reasonable?\n FUNICULAR: \"TRANSIT\",\n GONDOLA: \"TRANSIT\",\n RAIL: \"TRANSIT\",\n MONORAIL: \"TRANSIT\",\n SCOOTER: \"PERSONAL\",\n SUBWAY: \"TRANSIT\",\n TROLLEYBUS: \"TRANSIT\",\n TRAM: \"TRANSIT\",\n TRANSIT: \"TRANSIT\",\n WALK: \"WALK\"\n};\n\n// Inclusion of \"TRANSIT\" alone automatically implies \"WALK\" in OTP\nconst VALID_COMBOS = [\n [\"WALK\"],\n [\"PERSONAL\"],\n [\"TRANSIT\", \"SHARED\"],\n [\"WALK\", \"SHARED\"],\n [\"TRANSIT\"],\n [\"TRANSIT\", \"PERSONAL\"],\n [\"TRANSIT\", \"CAR\"]\n];\n\nconst BANNED_TOGETHER = [\"SCOOTER\", \"BICYCLE\", \"CAR\"];\n\nexport const TRANSIT_SUBMODES = Object.keys(SIMPLIFICATIONS).filter(\n mode => SIMPLIFICATIONS[mode] === \"TRANSIT\" && mode !== \"TRANSIT\"\n);\nexport const TRANSIT_SUBMODES_AND_TRANSIT = Object.keys(SIMPLIFICATIONS).filter(\n mode => SIMPLIFICATIONS[mode] === \"TRANSIT\"\n);\n\nfunction isCombinationValid(\n combo: TransportMode[],\n queryTransitSubmodes: string[]\n): boolean {\n if (combo.length === 0) return false;\n\n // All current qualifiers currently simplify to \"SHARED\"\n const simplifiedModes = Array.from(\n new Set(combo.map(c => (c.qualifier ? \"SHARED\" : SIMPLIFICATIONS[c.mode])))\n );\n\n // Ensure that if we have one transit mode, then we include ALL transit modes\n if (simplifiedModes.includes(\"TRANSIT\")) {\n // Don't allow TRANSIT along with any other submodes\n if (queryTransitSubmodes.length && combo.find(c => c.mode === \"TRANSIT\")) {\n return false;\n }\n\n if (\n combo.reduce((prev, cur) => {\n if (queryTransitSubmodes.includes(cur.mode)) {\n return prev - 1;\n }\n return prev;\n }, queryTransitSubmodes.length) !== 0\n ) {\n return false;\n }\n // Continue to the other checks\n }\n\n // OTP doesn't support multiple non-walk modes\n if (BANNED_TOGETHER.filter(m => combo.find(c => c.mode === m)).length > 1) {\n return false;\n }\n\n return !!VALID_COMBOS.find(\n vc =>\n simplifiedModes.every(m => vc.includes(m)) &&\n vc.every(m => simplifiedModes.includes(m))\n );\n}\n\n/**\n * Generates a list of queries for OTP to get a comprehensive\n * set of results based on the modes input.\n * @param params OTP Query Params\n * @returns Set of parameters to generate queries\n */\nexport function generateCombinations(params: OTPQueryParams): OTPQueryParams[] {\n const completeModeList = [\n ...extractAdditionalModes(params.modeSettings, params.modes),\n ...params.modes\n ];\n\n // List of the transit *submodes* that are included in the input params\n const queryTransitSubmodes = completeModeList\n .filter(mode => TRANSIT_SUBMODES.includes(mode.mode))\n .map(mode => mode.mode);\n\n return combinations(completeModeList)\n .filter(combo => isCombinationValid(combo, queryTransitSubmodes))\n .map(combo => ({ ...params, modes: combo }));\n}\n\n/**\n * Generates a query for OTP GraphQL API based on parameters.\n * @param param0 OTP2 Parameters for the query\n * @param planQuery Override the default query for OTP\n * @returns A fully formed query+variables ready to be sent to GraphQL backend\n */\nexport function generateOtp2Query(\n otpQueryParams: OTPQueryParams,\n planQuery = DefaultPlanQuery\n): GraphQLQuery {\n const { from, modeSettings, to, ...otherOtpQueryParams } = otpQueryParams;\n\n // This extracts the values from the mode settings to key value pairs\n const modeSettingValues = modeSettings.reduce((prev, cur) => {\n if (cur.type === \"SLIDER\" && cur.inverseKey) {\n prev[cur.inverseKey] = cur.high - cur.value + cur.low;\n }\n prev[cur.key] = cur.value;\n\n // If we assign a value on true, return the value (or null) instead of a boolean.\n if (cur.type === \"CHECKBOX\" && cur.truthValue) {\n prev[cur.key] =\n cur.value === true ? cur.truthValue : cur.falseValue ?? null;\n }\n return prev;\n }, {}) as ModeSettingValues;\n\n const {\n bikeReluctance,\n carReluctance,\n walkReluctance,\n walkSpeed,\n wheelchair\n } = modeSettingValues;\n\n return {\n query: print(planQuery),\n variables: {\n ...otherOtpQueryParams,\n bikeReluctance,\n carReluctance,\n fromPlace: `${from.name}::${from.lat},${from.lon}`,\n toPlace: `${to.name}::${to.lat},${to.lon}`,\n walkReluctance,\n walkSpeed,\n wheelchair\n }\n };\n}\n"],"mappings":";;;;;;AACA,SAASA,KAAK,QAAQ,SAAS;AAAC,IAAAC,gBAAA,KAAAC,IAAA,cAAAC,WAAA,KAAAD,IAAA,yBAAAE,SAAA,WAAAC,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAC,mBAAA,KAAAL,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,wBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAG,IAAA,IAAAP,IAAA,iBAAAO,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAG,IAAA,IAAAP,IAAA,cAAAO,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,wBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,aAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,wBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAG,IAAA,IAAAP,IAAA,iBAAAO,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,wBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAI,UAAA,UAAAR,IAAA,wBAAAM,QAAA,IAAAN,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAG,IAAA,IAAAP,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAI,UAAA,SAAAA,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,KAAAX,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,sBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,sBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,2BAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAA,KAAA,IAAAJ,IAAA,iBAAAI,KAAA,QAAAQ,KAAA,eAAAZ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,sBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,sBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,sBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAA,KAAA,IAAAJ,IAAA,cAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAI,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAa,KAAA,IAAAb,IAAA,UAAAI,KAAA,UAAAD,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,sBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,2BAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,oBAAAc,aAAA,IAAAd,IAAA,eAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAI,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,aAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,mCAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gCAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAa,KAAA,IAAAb,IAAA,UAAAI,KAAA,gBAAAD,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAa,KAAA,IAAAb,IAAA,UAAAI,KAAA,cAAAD,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,2BAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,2BAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,oBAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,oBAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,oBAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,aAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,aAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAa,KAAA,IAAAb,IAAA,UAAAI,KAAA,UAAAD,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,aAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,wBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,eAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,4BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,0BAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,WAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,uBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,oBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,cAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,UAAAO,SAAA,MAAAH,UAAA,oBAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,iBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAa,KAAA,IAAAb,IAAA,UAAAI,KAAA,iBAAAD,IAAA,IAAAH,IAAA,UAAAI,KAAA,yBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,gBAAAO,SAAA,MAAAH,UAAA,eAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,qBAAAO,SAAA,MAAAH,UAAA,MAAAC,YAAA,IAAAT,IAAA,kBAAAU,UAAA,KAAAV,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,YAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,mBAAAO,SAAA,MAAAH,UAAA,UAAAR,IAAA,WAAAG,IAAA,IAAAH,IAAA,UAAAI,KAAA,kBAAAO,SAAA,MAAAH,UAAA,wBAAAO,GAAA,IAAAC,KAAA,KAAAC,GAAA,QAAAC,MAAA,IAAAC,IAAA,spLAAAhB,IAAA,qBAAAiB,cAAA,IAAAC,IAAA,KAAAC,MAAA;AA0ChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,YAA2B,EAC3BC,YAA6B,EACZ;EACjB,OAAOD,YAAY,CAACE,MAAM,CAAkB,UAACC,IAAI,EAAEC,GAAG,EAAK;IACzD;IACA,IAAI,CAACH,YAAY,CAACI,GAAG,CAAC,UAAAC,CAAC;MAAA,OAAIA,CAAC,CAACC,IAAI;IAAA,EAAC,CAACC,QAAQ,CAACJ,GAAG,CAACK,cAAc,CAAC,EAAE;MAC/D,OAAON,IAAI;IACb;;IAEA;IACA,IACE,CAACC,GAAG,CAACrB,IAAI,KAAK,UAAU,IAAIqB,GAAG,CAACrB,IAAI,KAAK,SAAS,KAClDqB,GAAG,CAACM,gBAAgB,IACpBN,GAAG,CAACxB,KAAK,EACT;MACA,IAAM+B,iBAAiB,GAAGC,KAAK,CAACC,OAAO,CAACT,GAAG,CAACM,gBAAgB,CAAC,GACzDN,GAAG,CAACM,gBAAgB,GACpB,CAACN,GAAG,CAACM,gBAAgB,CAAC;MAC1B,UAAAI,MAAA,CAAAC,kBAAA,CAAWZ,IAAI,GAAAY,kBAAA,CAAKJ,iBAAiB;IACvC;IACA,IAAIP,GAAG,CAACrB,IAAI,KAAK,UAAU,EAAE;MAAA,IAAAiC,iBAAA;MAC3B,IAAMC,aAAa,IAAAD,iBAAA,GAAGZ,GAAG,CAACc,OAAO,CAACC,IAAI,CAAC,UAAAC,CAAC;QAAA,OAAIA,CAAC,CAACxC,KAAK,KAAKwB,GAAG,CAACxB,KAAK;MAAA,EAAC,cAAAoC,iBAAA,uBAA5CA,iBAAA,CAClBN,gBAAgB;MACpB,IAAIO,aAAa,EAAE;QACjB,UAAAH,MAAA,CAAAC,kBAAA,CAAWZ,IAAI,IAAEc,aAAa;MAChC;IACF;IACA,OAAOd,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkB,YAAYA,CAACC,KAAsB,EAAqB;EAC/D,IAAI,CAACA,KAAK,EAAE,OAAO,EAAE;EACrB;IACE;IACA,IAAIV,KAAK,CAAC,CAAC,IAAIU,KAAK,CAACC,MAAM,CAAC,CACzBC,IAAI,CAAC,IAAI;IACV;IAAA,CACCnB,GAAG,CAAC,UAACoB,EAAE,EAAEC,CAAC;MAAA,OAAKJ,KAAK,CAACK,MAAM,CAAC,UAACC,EAAE,EAAEC,CAAC;QAAA,OAAKH,CAAC,GAAI,CAAC,IAAIG,CAAE;MAAA,EAAC;IAAA;EAAC;AAE5D;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAMC,eAAe,GAAG;EAC7BC,QAAQ,EAAE,SAAS;EACnBC,OAAO,EAAE,UAAU;EACnBC,GAAG,EAAE,SAAS;EACdC,SAAS,EAAE,SAAS;EACpBC,GAAG,EAAE,KAAK;EACVC,KAAK,EAAE,SAAS;EAChBC,IAAI,EAAE,QAAQ;EAAE;EAChBC,SAAS,EAAE,SAAS;EACpBC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE,SAAS;EACfC,QAAQ,EAAE,SAAS;EACnBC,OAAO,EAAE,UAAU;EACnBC,MAAM,EAAE,SAAS;EACjBC,UAAU,EAAE,SAAS;EACrBC,IAAI,EAAE,SAAS;EACfC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE;AACR,CAAC;;AAED;AACA,IAAMC,YAAY,GAAG,CACnB,CAAC,MAAM,CAAC,EACR,CAAC,UAAU,CAAC,EACZ,CAAC,SAAS,EAAE,QAAQ,CAAC,EACrB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAClB,CAAC,SAAS,CAAC,EACX,CAAC,SAAS,EAAE,UAAU,CAAC,EACvB,CAAC,SAAS,EAAE,KAAK,CAAC,CACnB;AAED,IAAMC,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;AAErD,OAAO,IAAMC,gBAAgB,GAAGC,MAAM,CAACC,IAAI,CAACtB,eAAe,CAAC,CAACH,MAAM,CACjE,UAAApB,IAAI;EAAA,OAAIuB,eAAe,CAACvB,IAAI,CAAC,KAAK,SAAS,IAAIA,IAAI,KAAK,SAAS;AAAA,CACnE,CAAC;AACD,OAAO,IAAM8C,4BAA4B,GAAGF,MAAM,CAACC,IAAI,CAACtB,eAAe,CAAC,CAACH,MAAM,CAC7E,UAAApB,IAAI;EAAA,OAAIuB,eAAe,CAACvB,IAAI,CAAC,KAAK,SAAS;AAAA,CAC7C,CAAC;AAED,SAAS+C,kBAAkBA,CACzBC,KAAsB,EACtBC,oBAA8B,EACrB;EACT,IAAID,KAAK,CAAChC,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;;EAEpC;EACA,IAAMkC,eAAe,GAAG7C,KAAK,CAAC8C,IAAI,CAChC,IAAIC,GAAG,CAACJ,KAAK,CAAClD,GAAG,CAAC,UAAAuD,CAAC;IAAA,OAAKA,CAAC,CAACC,SAAS,GAAG,QAAQ,GAAG/B,eAAe,CAAC8B,CAAC,CAACrD,IAAI,CAAC;EAAA,CAAC,CAAC,CAC5E,CAAC;;EAED;EACA,IAAIkD,eAAe,CAACjD,QAAQ,CAAC,SAAS,CAAC,EAAE;IACvC;IACA,IAAIgD,oBAAoB,CAACjC,MAAM,IAAIgC,KAAK,CAACpC,IAAI,CAAC,UAAAyC,CAAC;MAAA,OAAIA,CAAC,CAACrD,IAAI,KAAK,SAAS;IAAA,EAAC,EAAE;MACxE,OAAO,KAAK;IACd;IAEA,IACEgD,KAAK,CAACrD,MAAM,CAAC,UAACC,IAAI,EAAEC,GAAG,EAAK;MAC1B,IAAIoD,oBAAoB,CAAChD,QAAQ,CAACJ,GAAG,CAACG,IAAI,CAAC,EAAE;QAC3C,OAAOJ,IAAI,GAAG,CAAC;MACjB;MACA,OAAOA,IAAI;IACb,CAAC,EAAEqD,oBAAoB,CAACjC,MAAM,CAAC,KAAK,CAAC,EACrC;MACA,OAAO,KAAK;IACd;IACA;EACF;;EAEA;EACA,IAAI0B,eAAe,CAACtB,MAAM,CAAC,UAAArB,CAAC;IAAA,OAAIiD,KAAK,CAACpC,IAAI,CAAC,UAAAyC,CAAC;MAAA,OAAIA,CAAC,CAACrD,IAAI,KAAKD,CAAC;IAAA,EAAC;EAAA,EAAC,CAACiB,MAAM,GAAG,CAAC,EAAE;IACzE,OAAO,KAAK;EACd;EAEA,OAAO,CAAC,CAACyB,YAAY,CAAC7B,IAAI,CACxB,UAAA2C,EAAE;IAAA,OACAL,eAAe,CAACM,KAAK,CAAC,UAAAzD,CAAC;MAAA,OAAIwD,EAAE,CAACtD,QAAQ,CAACF,CAAC,CAAC;IAAA,EAAC,IAC1CwD,EAAE,CAACC,KAAK,CAAC,UAAAzD,CAAC;MAAA,OAAImD,eAAe,CAACjD,QAAQ,CAACF,CAAC,CAAC;IAAA,EAAC;EAAA,CAC9C,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS0D,oBAAoBA,CAACC,MAAsB,EAAoB;EAC7E,IAAMC,gBAAgB,MAAApD,MAAA,CAAAC,kBAAA,CACjBhB,sBAAsB,CAACkE,MAAM,CAACjE,YAAY,EAAEiE,MAAM,CAACE,KAAK,CAAC,GAAApD,kBAAA,CACzDkD,MAAM,CAACE,KAAK,EAChB;;EAED;EACA,IAAMX,oBAAoB,GAAGU,gBAAgB,CAC1CvC,MAAM,CAAC,UAAApB,IAAI;IAAA,OAAI2C,gBAAgB,CAAC1C,QAAQ,CAACD,IAAI,CAACA,IAAI,CAAC;EAAA,EAAC,CACpDF,GAAG,CAAC,UAAAE,IAAI;IAAA,OAAIA,IAAI,CAACA,IAAI;EAAA,EAAC;EAEzB,OAAOc,YAAY,CAAC6C,gBAAgB,CAAC,CAClCvC,MAAM,CAAC,UAAA4B,KAAK;IAAA,OAAID,kBAAkB,CAACC,KAAK,EAAEC,oBAAoB,CAAC;EAAA,EAAC,CAChEnD,GAAG,CAAC,UAAAkD,KAAK;IAAA,OAAAa,aAAA,CAAAA,aAAA,KAAUH,MAAM;MAAEE,KAAK,EAAEZ;IAAK;EAAA,CAAG,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASc,iBAAiBA,CAC/BC,cAA8B,EAEhB;EAAA,IADdC,SAAS,GAAApF,SAAA,CAAAoC,MAAA,QAAApC,SAAA,QAAAqF,SAAA,GAAArF,SAAA,MAAGZ,gBAAgB;EAE5B,IAAQmF,IAAI,GAA+CY,cAAc,CAAjEZ,IAAI;IAAE1D,YAAY,GAAiCsE,cAAc,CAA3DtE,YAAY;IAAEyE,EAAE,GAA6BH,cAAc,CAA7CG,EAAE;IAAKC,mBAAmB,GAAAC,wBAAA,CAAKL,cAAc,EAAAM,SAAA;;EAEzE;EACA,IAAMC,iBAAiB,GAAG7E,YAAY,CAACE,MAAM,CAAC,UAACC,IAAI,EAAEC,GAAG,EAAK;IAC3D,IAAIA,GAAG,CAACrB,IAAI,KAAK,QAAQ,IAAIqB,GAAG,CAAC0E,UAAU,EAAE;MAC3C3E,IAAI,CAACC,GAAG,CAAC0E,UAAU,CAAC,GAAG1E,GAAG,CAAC2E,IAAI,GAAG3E,GAAG,CAACxB,KAAK,GAAGwB,GAAG,CAAC4E,GAAG;IACvD;IACA7E,IAAI,CAACC,GAAG,CAAC6E,GAAG,CAAC,GAAG7E,GAAG,CAACxB,KAAK;;IAEzB;IACA,IAAIwB,GAAG,CAACrB,IAAI,KAAK,UAAU,IAAIqB,GAAG,CAAC8E,UAAU,EAAE;MAAA,IAAAC,eAAA;MAC7ChF,IAAI,CAACC,GAAG,CAAC6E,GAAG,CAAC,GACX7E,GAAG,CAACxB,KAAK,KAAK,IAAI,GAAGwB,GAAG,CAAC8E,UAAU,IAAAC,eAAA,GAAG/E,GAAG,CAACgF,UAAU,cAAAD,eAAA,cAAAA,eAAA,GAAI,IAAI;IAChE;IACA,OAAOhF,IAAI;EACb,CAAC,EAAE,CAAC,CAAC,CAAsB;EAE3B,IACEkF,cAAc,GAKZR,iBAAiB,CALnBQ,cAAc;IACdC,aAAa,GAIXT,iBAAiB,CAJnBS,aAAa;IACbC,cAAc,GAGZV,iBAAiB,CAHnBU,cAAc;IACdC,SAAS,GAEPX,iBAAiB,CAFnBW,SAAS;IACTC,UAAU,GACRZ,iBAAiB,CADnBY,UAAU;EAGZ,OAAO;IACLC,KAAK,EAAEpH,KAAK,CAACiG,SAAS,CAAC;IACvBoB,SAAS,EAAAvB,aAAA,CAAAA,aAAA,KACJM,mBAAmB;MACtBW,cAAc,EAAdA,cAAc;MACdC,aAAa,EAAbA,aAAa;MACbM,SAAS,KAAA9E,MAAA,CAAK4C,IAAI,CAAC/E,IAAI,QAAAmC,MAAA,CAAK4C,IAAI,CAACmC,GAAG,OAAA/E,MAAA,CAAI4C,IAAI,CAACoC,GAAG,CAAE;MAClDC,OAAO,KAAAjF,MAAA,CAAK2D,EAAE,CAAC9F,IAAI,QAAAmC,MAAA,CAAK2D,EAAE,CAACoB,GAAG,OAAA/E,MAAA,CAAI2D,EAAE,CAACqB,GAAG,CAAE;MAC1CP,cAAc,EAAdA,cAAc;MACdC,SAAS,EAATA,SAAS;MACTC,UAAU,EAAVA;IAAU;EAEd,CAAC;AACH","ignoreList":[]}
|